net-physical revision 6ba597c56d749c61b4f783157f63196d7b2445f0
280a8a0544b4aeb52414d20e8c6e6c5b1108562eTinderbox User#!/sbin/sh
59602f2a7c4e4809941583bed3e94cd26e628f1aTinderbox User#
6fe48fb46e53ffc37542853a1edb74cb481b7d94Automatic Updater# CDDL HEADER START
5affecff6e148a8e124d03f5dbac0da11e30dcc5Tinderbox User#
19558a04decde0e7261d489d92d04ad88104217bTinderbox User# The contents of this file are subject to the terms of the
827f8cccb5280f4da66c46186e792d1cb9d73503Mark Andrews# Common Development and Distribution License (the "License").
827f8cccb5280f4da66c46186e792d1cb9d73503Mark Andrews# You may not use this file except in compliance with the License.
c57668a2fbbe558c1bd21652813616f2f517c469Tinderbox User#
03ebc228ee3725738b067b6bd7082a9a731822a1Tinderbox User# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
f4ee48be3994797a8332b86c101db4d7b54799ceTinderbox User# or http://www.opensolaris.org/os/licensing.
a2c370ca12bb0360ff7e969474ead3f788c65fffTinderbox User# See the License for the specific language governing permissions
8de3f14f1c300c3e1ed99084cc03485b42c92bf1Tinderbox User# and limitations under the License.
e5a6871cd0635ecdb2bf792316a2d8c53206f4b2Tinderbox User#
950d203b64f512b85fcc093ee1e9e3e531a1aea3Tinderbox User# When distributing Covered Code, include this CDDL HEADER in each
b886b04d8d2b085cbf3e1bf4442dee87f43ba5e4Tinderbox User# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
03ebc228ee3725738b067b6bd7082a9a731822a1Tinderbox User# If applicable, add the following below this CDDL HEADER, with the
3759f10fc543747668b1ca4b4671f35b0dea8445Francis Dupont# fields enclosed by brackets "[]" replaced with your own identifying
e676a596869d8a80a644c99a848afb53d1c5975eMark Andrews# information: Portions Copyright [yyyy] [name of copyright owner]
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews#
3759f10fc543747668b1ca4b4671f35b0dea8445Francis Dupont# CDDL HEADER END
d5637bdbb931ff79fced3d4858d83212ea58ed15Tinderbox User#
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews#
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews# Copyright 2010 Sun Microsystems, Inc. All rights reserved.
3759f10fc543747668b1ca4b4671f35b0dea8445Francis Dupont# Use is subject to license terms.
d5637bdbb931ff79fced3d4858d83212ea58ed15Tinderbox User#
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews# Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T.
9ecb5d33470ebfb3719a1b8d56bcefdf4b27f7b2Tinderbox User# All rights reserved.
0eb371ca0dab50ae3462e98794a6126198c52f4bMark Andrews#
9ecb5d33470ebfb3719a1b8d56bcefdf4b27f7b2Tinderbox User
e813f036c8251b6d9d2a72fa84f80c2c9d2795afMark Andrews. /lib/svc/share/smf_include.sh
30370d905e9be3be7d9b947fd432bacecbb13bb9Evan Hunt. /lib/svc/share/net_include.sh
0eb371ca0dab50ae3462e98794a6126198c52f4bMark Andrews
9ecb5d33470ebfb3719a1b8d56bcefdf4b27f7b2Tinderbox User#
efb0e886f18894a1d2489f1ad74ad14b579e11c7Mark Andrews# In a shared-IP zone we need this service to be up, but all of the work
e813f036c8251b6d9d2a72fa84f80c2c9d2795afMark Andrews# it tries to do is irrelevant (and will actually lead to the service
30370d905e9be3be7d9b947fd432bacecbb13bb9Evan Hunt# failing if we try to do it), so just bail out.
0eb371ca0dab50ae3462e98794a6126198c52f4bMark Andrews# In the global zone and exclusive-IP zones we proceed.
9ecb5d33470ebfb3719a1b8d56bcefdf4b27f7b2Tinderbox User#
0eb371ca0dab50ae3462e98794a6126198c52f4bMark Andrewssmf_configure_ip || exit $SMF_EXIT_OK
9ecb5d33470ebfb3719a1b8d56bcefdf4b27f7b2Tinderbox User
e813f036c8251b6d9d2a72fa84f80c2c9d2795afMark Andrews# Make sure that the libraries essential to this stage of booting can be found.
30370d905e9be3be7d9b947fd432bacecbb13bb9Evan HuntLD_LIBRARY_PATH=/lib; export LD_LIBRARY_PATH
0eb371ca0dab50ae3462e98794a6126198c52f4bMark Andrews
015055b6e23f5c08f6a5b34726f90b62597e9e45Tinderbox Usersmf_netstrategy
03ebc228ee3725738b067b6bd7082a9a731822a1Tinderbox User
aa9c561961e9d877946ebaa8795fa2be054ab7bfEvan Huntif smf_is_globalzone; then
dc238a06bffa79de141ee7655765e2df91498a8aTinderbox User net_reconfigure || exit $SMF_EXIT_ERR_CONFIG
827f8cccb5280f4da66c46186e792d1cb9d73503Mark Andrews
aa9c561961e9d877946ebaa8795fa2be054ab7bfEvan Hunt # Update PVID on interfaces configured with VLAN 1
9513a2a6670951f5cf5477fcfec9f933fcaff628Automatic Updater update_pvid
3759f10fc543747668b1ca4b4671f35b0dea8445Francis Dupont
9513a2a6670951f5cf5477fcfec9f933fcaff628Automatic Updater #
aa9c561961e9d877946ebaa8795fa2be054ab7bfEvan Hunt # Upgrade handling. The upgrade file consists of a series of dladm(1M)
dc238a06bffa79de141ee7655765e2df91498a8aTinderbox User # commands. Note that after we are done, we cannot rename the upgrade
827f8cccb5280f4da66c46186e792d1cb9d73503Mark Andrews # script file as the file system is still read-only at this point.
aa9c561961e9d877946ebaa8795fa2be054ab7bfEvan Hunt # Defer this to the manifest-import service.
710bce1a85c96e85ca1a90471382055acd29d51fTinderbox User #
9513a2a6670951f5cf5477fcfec9f933fcaff628Automatic Updater upgrade_script=/var/svc/profile/upgrade_datalink
3759f10fc543747668b1ca4b4671f35b0dea8445Francis Dupont if [ -f "${upgrade_script}" ]; then
9513a2a6670951f5cf5477fcfec9f933fcaff628Automatic Updater . "${upgrade_script}"
0eb371ca0dab50ae3462e98794a6126198c52f4bMark Andrews fi
cdfc81e048bd34c1d628380247bda6b80a89e20eAutomatic Updater
e813f036c8251b6d9d2a72fa84f80c2c9d2795afMark Andrews #
30370d905e9be3be7d9b947fd432bacecbb13bb9Evan Hunt # Bring up simnets, link aggregations and initialize security objects.
0eb371ca0dab50ae3462e98794a6126198c52f4bMark Andrews # Note that link property initialization is deferred until after
0eb371ca0dab50ae3462e98794a6126198c52f4bMark Andrews # IP interfaces are plumbed to ensure that the links will not
9513a2a6670951f5cf5477fcfec9f933fcaff628Automatic Updater # be unloaded (and the property settings lost). We should bring
0eb371ca0dab50ae3462e98794a6126198c52f4bMark Andrews # up simnets prior to VLANs/Aggrs to enable creation of VLANs/Aggrs
e813f036c8251b6d9d2a72fa84f80c2c9d2795afMark Andrews # over simnets.
30370d905e9be3be7d9b947fd432bacecbb13bb9Evan Hunt #
0eb371ca0dab50ae3462e98794a6126198c52f4bMark Andrews /sbin/dladm up-simnet
9513a2a6670951f5cf5477fcfec9f933fcaff628Automatic Updater /sbin/dladm up-aggr
0eb371ca0dab50ae3462e98794a6126198c52f4bMark Andrews /sbin/dladm up-vlan
eabc9c3c07cd956d3c436bd7614cb162dabdda76Mark Andrews /sbin/dladm init-secobj
0eb371ca0dab50ae3462e98794a6126198c52f4bMark Andrews #
e813f036c8251b6d9d2a72fa84f80c2c9d2795afMark Andrews # Bring up VNICs
30370d905e9be3be7d9b947fd432bacecbb13bb9Evan Hunt #
0eb371ca0dab50ae3462e98794a6126198c52f4bMark Andrews /sbin/dladm up-vnic
015055b6e23f5c08f6a5b34726f90b62597e9e45Tinderbox User #
03ebc228ee3725738b067b6bd7082a9a731822a1Tinderbox User # Create flows via flowadm.
294e9d4c34462d29a3e766c88f452b46aeb3702fTinderbox User #
e40c4e4c17d4df338e2a7db0f84d8dbb3858964cTinderbox User /sbin/flowadm init-flow
4c6bae917bec70e1fc4d1b761a9765075af78441Tinderbox Userfi
294e9d4c34462d29a3e766c88f452b46aeb3702fTinderbox User
2ae159b376dac23870d8005563c585acf85a4b5aEvan Hunt#
2ae159b376dac23870d8005563c585acf85a4b5aEvan Hunt# If the system was net booted by DHCP, hand DHCP management off to the
2ae159b376dac23870d8005563c585acf85a4b5aEvan Hunt# DHCP agent (ifconfig communicates to the DHCP agent through the
e813f036c8251b6d9d2a72fa84f80c2c9d2795afMark Andrews# loopback interface).
30370d905e9be3be7d9b947fd432bacecbb13bb9Evan Hunt#
2ae159b376dac23870d8005563c585acf85a4b5aEvan Huntif [ -n "$_INIT_NET_IF" -a "$_INIT_NET_STRATEGY" = "dhcp" ]; then
7cc0a5d21ef046bfd630c4769943d896a7d7472cTinderbox User /sbin/dhcpagent -a
03ebc228ee3725738b067b6bd7082a9a731822a1Tinderbox Userfi
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews
549c517e2ecad52bb1d32f08920e29d4e8cda71eTinderbox User#
549c517e2ecad52bb1d32f08920e29d4e8cda71eTinderbox User# The network initialization is done early to support diskless and
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews# dataless configurations. For IPv4 interfaces that were configured by
549c517e2ecad52bb1d32f08920e29d4e8cda71eTinderbox User# the kernel (e.g. those on diskless machines) and not configured by
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews# DHCP, reset the netmask using the local "/etc/netmasks" file if one
e40c4e4c17d4df338e2a7db0f84d8dbb3858964cTinderbox User# exists, and then reset the broadcast address based on the netmask.
827f8cccb5280f4da66c46186e792d1cb9d73503Mark Andrews#
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews/sbin/ifconfig -auD4 netmask + broadcast +
e40c4e4c17d4df338e2a7db0f84d8dbb3858964cTinderbox User
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrewsis_iptun ()
e40c4e4c17d4df338e2a7db0f84d8dbb3858964cTinderbox User{
aef6cf0f147a5014d4891c9689b9f463399e16e7Tinderbox User intf=$1
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews # Is this a persistent IP tunnel link?
9ecb5d33470ebfb3719a1b8d56bcefdf4b27f7b2Tinderbox User /sbin/dladm show-iptun -P $intf > /dev/null 2>&1
91216cff91b34c9ff6e846dc23f248219cafe660Andreas Gustafsson if [ $? -eq 0 ]; then
9ecb5d33470ebfb3719a1b8d56bcefdf4b27f7b2Tinderbox User return 0
e813f036c8251b6d9d2a72fa84f80c2c9d2795afMark Andrews fi
30370d905e9be3be7d9b947fd432bacecbb13bb9Evan Hunt # Is this an implicit IP tunnel (i.e., ip.tun0)
0eb371ca0dab50ae3462e98794a6126198c52f4bMark Andrews ORIGIFS="$IFS"
9ecb5d33470ebfb3719a1b8d56bcefdf4b27f7b2Tinderbox User IFS="$IFS."
efb0e886f18894a1d2489f1ad74ad14b579e11c7Mark Andrews set -- $intf
e813f036c8251b6d9d2a72fa84f80c2c9d2795afMark Andrews IFS="$ORIGIFS"
30370d905e9be3be7d9b947fd432bacecbb13bb9Evan Hunt if [ $# -eq 2 -a \( "$1" = "ip" -o "$1" = "ip6" \) ]; then
0eb371ca0dab50ae3462e98794a6126198c52f4bMark Andrews #
9ecb5d33470ebfb3719a1b8d56bcefdf4b27f7b2Tinderbox User # It looks like one, but another type of link might be
91216cff91b34c9ff6e846dc23f248219cafe660Andreas Gustafsson # using a name that looks like an implicit IP tunnel.
9ecb5d33470ebfb3719a1b8d56bcefdf4b27f7b2Tinderbox User # If dladm show-link -P finds it, then it's not an IP
e813f036c8251b6d9d2a72fa84f80c2c9d2795afMark Andrews # tunnel.
30370d905e9be3be7d9b947fd432bacecbb13bb9Evan Hunt #
0eb371ca0dab50ae3462e98794a6126198c52f4bMark Andrews /sbin/dladm show-link -Pp $intf > /dev/null 2>&1
9ecb5d33470ebfb3719a1b8d56bcefdf4b27f7b2Tinderbox User if [ $? -eq 0 ]; then
91216cff91b34c9ff6e846dc23f248219cafe660Andreas Gustafsson return 1
9ecb5d33470ebfb3719a1b8d56bcefdf4b27f7b2Tinderbox User else
e813f036c8251b6d9d2a72fa84f80c2c9d2795afMark Andrews return 0
30370d905e9be3be7d9b947fd432bacecbb13bb9Evan Hunt fi
0eb371ca0dab50ae3462e98794a6126198c52f4bMark Andrews fi
28a5dd720187fddb16055a0f64b63a7b66f29f64Mark Andrews return 1
03ebc228ee3725738b067b6bd7082a9a731822a1Tinderbox User}
78f3ed4bc2fcd3d270bfd599804f3b27a1db4d91Mark Andrews
e40c4e4c17d4df338e2a7db0f84d8dbb3858964cTinderbox User#
a450977e98155f6e828fe6f8d52cf24674231831Mark Andrews# All the IPv4 and IPv6 interfaces are plumbed before doing any
78f3ed4bc2fcd3d270bfd599804f3b27a1db4d91Mark Andrews# interface configuration. This prevents errors from plumb failures
827f8cccb5280f4da66c46186e792d1cb9d73503Mark Andrews# getting mixed in with the configured interface lists that the script
e40c4e4c17d4df338e2a7db0f84d8dbb3858964cTinderbox User# outputs.
827f8cccb5280f4da66c46186e792d1cb9d73503Mark Andrews#
827f8cccb5280f4da66c46186e792d1cb9d73503Mark Andrews
2a31bd531072824ef252c18303859d6af7451b00Francis Dupont#
e40c4e4c17d4df338e2a7db0f84d8dbb3858964cTinderbox User# Get the list of IPv4 interfaces to configure by breaking
827f8cccb5280f4da66c46186e792d1cb9d73503Mark Andrews# /etc/hostname.* into separate args by using "." as a shell separator
2a31bd531072824ef252c18303859d6af7451b00Francis Dupont# character.
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews#
e40c4e4c17d4df338e2a7db0f84d8dbb3858964cTinderbox Userinterface_names="`echo /etc/hostname.*[0-9] 2>/dev/null`"
5747235bf35e7398984fd6b4632743396895ea7aTinderbox Userif [ "$interface_names" != "/etc/hostname.*[0-9]" ]; then
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews ORIGIFS="$IFS"
78f3ed4bc2fcd3d270bfd599804f3b27a1db4d91Mark Andrews IFS="$IFS."
a03cb08d0c4f1ca5fbc121d2f02bdffa7eb52286Mark Andrews set -- $interface_names
827f8cccb5280f4da66c46186e792d1cb9d73503Mark Andrews IFS="$ORIGIFS"
78f3ed4bc2fcd3d270bfd599804f3b27a1db4d91Mark Andrews while [ $# -ge 2 ]; do
78f3ed4bc2fcd3d270bfd599804f3b27a1db4d91Mark Andrews shift
7f9e2fff07b9c17e0d7a0ea7abc9304ce9d01b61Tinderbox User intf_name=$1
5747235bf35e7398984fd6b4632743396895ea7aTinderbox User while [ $# -gt 1 -a "$2" != "/etc/hostname" ]; do
78f3ed4bc2fcd3d270bfd599804f3b27a1db4d91Mark Andrews intf_name="$intf_name.$2"
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews shift
549c517e2ecad52bb1d32f08920e29d4e8cda71eTinderbox User done
827f8cccb5280f4da66c46186e792d1cb9d73503Mark Andrews shift
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews
827f8cccb5280f4da66c46186e792d1cb9d73503Mark Andrews # skip IP tunnel interfaces plumbed by net-iptun.
e40c4e4c17d4df338e2a7db0f84d8dbb3858964cTinderbox User if is_iptun $intf_name; then
827f8cccb5280f4da66c46186e792d1cb9d73503Mark Andrews continue
01a5c5503482fb3ba52088bf0178a7213273bf96Mark Andrews fi
e40c4e4c17d4df338e2a7db0f84d8dbb3858964cTinderbox User
e40c4e4c17d4df338e2a7db0f84d8dbb3858964cTinderbox User read one rest < /etc/hostname.$intf_name
9ecb5d33470ebfb3719a1b8d56bcefdf4b27f7b2Tinderbox User if [ "$one" = ipmp ]; then
cdfc81e048bd34c1d628380247bda6b80a89e20eAutomatic Updater ipmp_list="$ipmp_list $intf_name"
e813f036c8251b6d9d2a72fa84f80c2c9d2795afMark Andrews else
30370d905e9be3be7d9b947fd432bacecbb13bb9Evan Hunt inet_list="$inet_list $intf_name"
0eb371ca0dab50ae3462e98794a6126198c52f4bMark Andrews fi
9ecb5d33470ebfb3719a1b8d56bcefdf4b27f7b2Tinderbox User done
fe80a4909bf62b602feaf246866e9d29f7654194Automatic Updaterfi
9ecb5d33470ebfb3719a1b8d56bcefdf4b27f7b2Tinderbox User
e813f036c8251b6d9d2a72fa84f80c2c9d2795afMark Andrews#
30370d905e9be3be7d9b947fd432bacecbb13bb9Evan Hunt# Get the list of IPv6 interfaces to configure by breaking
0eb371ca0dab50ae3462e98794a6126198c52f4bMark Andrews# /etc/hostname6.* into separate args by using "." as a shell separator
9ecb5d33470ebfb3719a1b8d56bcefdf4b27f7b2Tinderbox User# character.
fa0326cc2cf428f67575b6ba3b97b528a31b0010Tinderbox User#
9ecb5d33470ebfb3719a1b8d56bcefdf4b27f7b2Tinderbox Userinterface_names="`echo /etc/hostname6.*[0-9] 2>/dev/null`"
e813f036c8251b6d9d2a72fa84f80c2c9d2795afMark Andrewsif [ "$interface_names" != "/etc/hostname6.*[0-9]" ]; then
30370d905e9be3be7d9b947fd432bacecbb13bb9Evan Hunt ORIGIFS="$IFS"
0eb371ca0dab50ae3462e98794a6126198c52f4bMark Andrews IFS="$IFS."
9ecb5d33470ebfb3719a1b8d56bcefdf4b27f7b2Tinderbox User set -- $interface_names
fe80a4909bf62b602feaf246866e9d29f7654194Automatic Updater IFS="$ORIGIFS"
9ecb5d33470ebfb3719a1b8d56bcefdf4b27f7b2Tinderbox User while [ $# -ge 2 ]; do
e813f036c8251b6d9d2a72fa84f80c2c9d2795afMark Andrews shift
30370d905e9be3be7d9b947fd432bacecbb13bb9Evan Hunt intf_name=$1
0eb371ca0dab50ae3462e98794a6126198c52f4bMark Andrews while [ $# -gt 1 -a "$2" != "/etc/hostname6" ]; do
9ecb5d33470ebfb3719a1b8d56bcefdf4b27f7b2Tinderbox User intf_name="$intf_name.$2"
91216cff91b34c9ff6e846dc23f248219cafe660Andreas Gustafsson shift
9ecb5d33470ebfb3719a1b8d56bcefdf4b27f7b2Tinderbox User done
e813f036c8251b6d9d2a72fa84f80c2c9d2795afMark Andrews shift
30370d905e9be3be7d9b947fd432bacecbb13bb9Evan Hunt
0eb371ca0dab50ae3462e98794a6126198c52f4bMark Andrews # skip IP tunnel interfaces plumbed by net-iptun.
9ecb5d33470ebfb3719a1b8d56bcefdf4b27f7b2Tinderbox User if is_iptun $intf_name; then
dd65eb1efb40b1c47d57963192bfc54873b219beAutomatic Updater continue
9ecb5d33470ebfb3719a1b8d56bcefdf4b27f7b2Tinderbox User fi
e813f036c8251b6d9d2a72fa84f80c2c9d2795afMark Andrews
30370d905e9be3be7d9b947fd432bacecbb13bb9Evan Hunt read one rest < /etc/hostname6.$intf_name
0eb371ca0dab50ae3462e98794a6126198c52f4bMark Andrews if [ "$one" = ipmp ]; then
9ecb5d33470ebfb3719a1b8d56bcefdf4b27f7b2Tinderbox User ipmp6_list="$ipmp6_list $intf_name"
133e6d43fa82e80d3798be4de00f4540f485ec6cAutomatic Updater else
9ecb5d33470ebfb3719a1b8d56bcefdf4b27f7b2Tinderbox User inet6_list="$inet6_list $intf_name"
e813f036c8251b6d9d2a72fa84f80c2c9d2795afMark Andrews fi
30370d905e9be3be7d9b947fd432bacecbb13bb9Evan Hunt done
0eb371ca0dab50ae3462e98794a6126198c52f4bMark Andrewsfi
9ecb5d33470ebfb3719a1b8d56bcefdf4b27f7b2Tinderbox User
91216cff91b34c9ff6e846dc23f248219cafe660Andreas Gustafsson#
9ecb5d33470ebfb3719a1b8d56bcefdf4b27f7b2Tinderbox User# Create all of the IPv4 IPMP interfaces.
e813f036c8251b6d9d2a72fa84f80c2c9d2795afMark Andrews#
30370d905e9be3be7d9b947fd432bacecbb13bb9Evan Huntif [ -n "$ipmp_list" ]; then
0eb371ca0dab50ae3462e98794a6126198c52f4bMark Andrews set -- $ipmp_list
9ecb5d33470ebfb3719a1b8d56bcefdf4b27f7b2Tinderbox User while [ $# -gt 0 ]; do
5f7586ddbd3edd11272cdd30ed613d936129328bTinderbox User if /sbin/ifconfig $1 ipmp; then
9ecb5d33470ebfb3719a1b8d56bcefdf4b27f7b2Tinderbox User ipmp_created="$ipmp_created $1"
e813f036c8251b6d9d2a72fa84f80c2c9d2795afMark Andrews else
30370d905e9be3be7d9b947fd432bacecbb13bb9Evan Hunt ipmp_failed="$ipmp_failed $1"
0eb371ca0dab50ae3462e98794a6126198c52f4bMark Andrews fi
015055b6e23f5c08f6a5b34726f90b62597e9e45Tinderbox User shift
ac2e2800b4ac9cbe4cb756d967f4583c611eb75eMark Andrews done
5affecff6e148a8e124d03f5dbac0da11e30dcc5Tinderbox User [ -n "$ipmp_failed" ] && warn_failed_ifs "create IPv4 IPMP" \
5affecff6e148a8e124d03f5dbac0da11e30dcc5Tinderbox User "$ipmp_failed"
e813f036c8251b6d9d2a72fa84f80c2c9d2795afMark Andrewsfi
5affecff6e148a8e124d03f5dbac0da11e30dcc5Tinderbox User
bac4435d473c9a0281507524f084480c34aa942aTinderbox User#
1fce11b1d3f2d461d261156b8cdc64ab864f06a9Tinderbox User# Step through the IPv4 interface list and try to plumb every interface.
f0c5e918974bf778af6cd1e25309ad13e30a79a6Tinderbox User# Generate list of plumbed and failed IPv4 interfaces.
a7c412f37cc73d0332887a746e81220cbf09dd00Mark Andrews#
7ca715ad1587a68a531ea1cdea07515d7232567eTinderbox Userif [ -n "$inet_list" ]; then
015055b6e23f5c08f6a5b34726f90b62597e9e45Tinderbox User set -- $inet_list
8711e5c73ca872d59810760af0332194cbdd619bAutomatic Updater while [ $# -gt 0 ]; do
ce9cad6bb04869c5e94d9dc721032b25117f9210Automatic Updater /sbin/ifconfig $1 plumb
bac4435d473c9a0281507524f084480c34aa942aTinderbox User if /sbin/ifconfig $1 inet >/dev/null 2>&1; then
91d187ce035f39073f0732ff2a401a45c3c955fbMark Andrews inet_plumbed="$inet_plumbed $1"
933799f3641f4f78445d015008bad0038900a82aTinderbox User else
8e5fce1f9ceba17dd7e3ff0eb287e1e999c14249Mark Andrews inet_failed="$inet_failed $1"
933799f3641f4f78445d015008bad0038900a82aTinderbox User fi
4151211e6649332f7b5a55870cbe37128bcc7b29Tinderbox User shift
91d187ce035f39073f0732ff2a401a45c3c955fbMark Andrews done
ac2e2800b4ac9cbe4cb756d967f4583c611eb75eMark Andrews [ -n "$inet_failed" ] && warn_failed_ifs "plumb IPv4" "$inet_failed"
ce9cad6bb04869c5e94d9dc721032b25117f9210Automatic Updaterfi
ce9cad6bb04869c5e94d9dc721032b25117f9210Automatic Updater
f525041ae26958385b697cf82a30f108577024b6Tinderbox User# Run autoconf to connect to a WLAN if the interface is a wireless one
b02be031b9ff37b042adc8e68e36b8bbc1f672b7Tinderbox Userif [ -x /sbin/wificonfig -a -n "$inet_plumbed" ]; then
ce9cad6bb04869c5e94d9dc721032b25117f9210Automatic Updater set -- $inet_plumbed
ba8b771c371967dd1254c7fa82ebe4158ee04b24Tinderbox User while [ $# -gt 0 ]; do
59528addd704f8d5757b54e540520f74e588a7c7Automatic Updater if [ -r /dev/wifi/$1 ]; then
3ec8f7777ea2b04fc1ebb63077f0916f63b1011aTinderbox User /sbin/wificonfig -i $1 startconf >/dev/null
c218e22e3e6cbd409b61a14f1480b5ce5c70bfc1Tinderbox User fi
b02be031b9ff37b042adc8e68e36b8bbc1f672b7Tinderbox User shift
933799f3641f4f78445d015008bad0038900a82aTinderbox User done
ce9cad6bb04869c5e94d9dc721032b25117f9210Automatic Updaterfi
19b3dc94bce93fa76bd7e066f9298630dbc9dcb4Automatic Updater
ce9cad6bb04869c5e94d9dc721032b25117f9210Automatic Updater#
9513a2a6670951f5cf5477fcfec9f933fcaff628Automatic Updater# Step through the IPv6 interface list and plumb every interface.
ecbc7ebb243a1f8a5dc6f28185ffe9e61d3b2102Mark Andrews# Generate list of plumbed and failed IPv6 interfaces. Each plumbed
ce9cad6bb04869c5e94d9dc721032b25117f9210Automatic Updater# interface will be brought up later, after processing any contents of
ce9cad6bb04869c5e94d9dc721032b25117f9210Automatic Updater# the /etc/hostname6.* file.
bac4435d473c9a0281507524f084480c34aa942aTinderbox User#
39ae0eafed076ef769fef5c18b22a8051df5c93aTinderbox Userif [ -n "$inet6_list" ]; then
91d187ce035f39073f0732ff2a401a45c3c955fbMark Andrews set -- $inet6_list
c2abd6efeb9affa70aabb63da2acb23e135cf7f2Mark Andrews while [ $# -gt 0 ]; do
3759f10fc543747668b1ca4b4671f35b0dea8445Francis Dupont /sbin/ifconfig $1 inet6 plumb
dc238a06bffa79de141ee7655765e2df91498a8aTinderbox User if /sbin/ifconfig $1 inet6 >/dev/null 2>&1; then
f525041ae26958385b697cf82a30f108577024b6Tinderbox User inet6_plumbed="$inet6_plumbed $1"
ce9cad6bb04869c5e94d9dc721032b25117f9210Automatic Updater else
9cd5eb6fe0f26d65724b99216cb31dcdd12e4afdAutomatic Updater inet6_failed="$inet6_failed $1"
dc238a06bffa79de141ee7655765e2df91498a8aTinderbox User fi
5e82fe9a56d17bfbd120817d00d28c5952ab4ddcTinderbox User shift
4cda4fd158d6ded5586bacea8c388445d99611eaAutomatic Updater done
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews [ -n "$inet6_failed" ] && warn_failed_ifs "plumb IPv6" "$inet6_failed"
f2f7a53ba0ba69cfe8c505eea16f71bad9d8d449Tinderbox Userfi
c26604a73c4ce907ef6392f38b3fac838b1873a9Tinderbox User
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews#
ce9cad6bb04869c5e94d9dc721032b25117f9210Automatic Updater# Create all of the IPv6 IPMP interfaces.
a2c370ca12bb0360ff7e969474ead3f788c65fffTinderbox User#
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrewsif [ -n "$ipmp6_list" ]; then
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews set -- $ipmp6_list
bac4435d473c9a0281507524f084480c34aa942aTinderbox User while [ $# -gt 0 ]; do
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews if /sbin/ifconfig $1 inet6 ipmp; then
ba8b771c371967dd1254c7fa82ebe4158ee04b24Tinderbox User ipmp6_created="$ipmp6_created $1"
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews else
ce9cad6bb04869c5e94d9dc721032b25117f9210Automatic Updater ipmp6_failed="$ipmp6_failed $1"
76408aae412cda298c5e43da0eebb23c875a4426Tinderbox User fi
7f9e2fff07b9c17e0d7a0ea7abc9304ce9d01b61Tinderbox User shift
ce9cad6bb04869c5e94d9dc721032b25117f9210Automatic Updater done
5affecff6e148a8e124d03f5dbac0da11e30dcc5Tinderbox User [ -n "$ipmp6_failed" ] && warn_failed_ifs "create IPv6 IPMP" \
dedefc0bdbb4e6e39eeb98aa2fc6883efec2ddb0Mark Andrews "$ipmp6_failed"
da59e63e7af147a8bcef985b98b04443e04c3a0eTinderbox Userfi
710bce1a85c96e85ca1a90471382055acd29d51fTinderbox User
757ff043760e4743dda1a10e7d58349275934902Tinderbox User#
a2c370ca12bb0360ff7e969474ead3f788c65fffTinderbox User# Process the /etc/hostname[6].* files for IPMP interfaces. Processing these
a2c370ca12bb0360ff7e969474ead3f788c65fffTinderbox User# before non-IPMP interfaces avoids accidental implicit IPMP group creation.
a03cb08d0c4f1ca5fbc121d2f02bdffa7eb52286Mark Andrews#
757ff043760e4743dda1a10e7d58349275934902Tinderbox User[ -n "$ipmp_created" ] && if_configure inet "IPMP" $ipmp_created
ce9cad6bb04869c5e94d9dc721032b25117f9210Automatic Updater[ -n "$ipmp6_created" ] && if_configure inet6 "IPMP" $ipmp6_created
a2c370ca12bb0360ff7e969474ead3f788c65fffTinderbox User
5affecff6e148a8e124d03f5dbac0da11e30dcc5Tinderbox User#
91216cff91b34c9ff6e846dc23f248219cafe660Andreas Gustafsson# Process the /etc/hostname[6].* files for non-IPMP interfaces.
a2c370ca12bb0360ff7e969474ead3f788c65fffTinderbox User#
5affecff6e148a8e124d03f5dbac0da11e30dcc5Tinderbox User[ -n "$inet_plumbed" ] && if_configure inet "" $inet_plumbed
5affecff6e148a8e124d03f5dbac0da11e30dcc5Tinderbox User[ -n "$inet6_plumbed" ] && if_configure inet6 "" $inet6_plumbed
0eb371ca0dab50ae3462e98794a6126198c52f4bMark Andrews
ba8b771c371967dd1254c7fa82ebe4158ee04b24Tinderbox User#
a2c370ca12bb0360ff7e969474ead3f788c65fffTinderbox User# For the IPv4 and IPv6 interfaces that failed to plumb, find (or create)
f520803b46dc189fdaf84adc87ef327d3587b435Mark Andrews# IPMP meta-interfaces to host their data addresses.
e40c4e4c17d4df338e2a7db0f84d8dbb3858964cTinderbox User#
b886b04d8d2b085cbf3e1bf4442dee87f43ba5e4Tinderbox User[ -n "$inet_failed" ] && move_addresses inet
03ebc228ee3725738b067b6bd7082a9a731822a1Tinderbox User[ -n "$inet6_failed" ] && move_addresses inet6
3857cb6fcabeb79d85de4b3e3e4ab99912b701f8Mark Andrews
e40c4e4c17d4df338e2a7db0f84d8dbb3858964cTinderbox User# Run DHCP if requested. Skip boot-configured interface.
e64202536ea72d8f371dd0df9fc763f8d70bf886Tinderbox Userinterface_names="`echo /etc/dhcp.*[0-9] 2>/dev/null`"
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrewsif [ "$interface_names" != '/etc/dhcp.*[0-9]' ]; then
9ecb5d33470ebfb3719a1b8d56bcefdf4b27f7b2Tinderbox User #
91216cff91b34c9ff6e846dc23f248219cafe660Andreas Gustafsson # First find the primary interface. Default to the first
9ecb5d33470ebfb3719a1b8d56bcefdf4b27f7b2Tinderbox User # interface if not specified. First primary interface found
e813f036c8251b6d9d2a72fa84f80c2c9d2795afMark Andrews # "wins". Use care not to "reconfigure" a net-booted interface
30370d905e9be3be7d9b947fd432bacecbb13bb9Evan Hunt # configured using DHCP. Run through the list of interfaces
0eb371ca0dab50ae3462e98794a6126198c52f4bMark Andrews # again, this time trying DHCP.
015055b6e23f5c08f6a5b34726f90b62597e9e45Tinderbox User #
ebdf202f2198158ab4d30f22c370a9c63760d071Tinderbox User i4d_fail=
8292deab031e7599cd7622aa7675fbe139ca6095Mark Andrews firstif=
c1e2310a3725eeed45e5e7c86750c64c5a02e993Francis Dupont primary=
c1e2310a3725eeed45e5e7c86750c64c5a02e993Francis Dupont ORIGIFS="$IFS"
c1e2310a3725eeed45e5e7c86750c64c5a02e993Francis Dupont IFS="${IFS}."
549c517e2ecad52bb1d32f08920e29d4e8cda71eTinderbox User set -- $interface_names
78f3ed4bc2fcd3d270bfd599804f3b27a1db4d91Mark Andrews
3759f10fc543747668b1ca4b4671f35b0dea8445Francis Dupont while [ $# -ge 2 ]; do
827f8cccb5280f4da66c46186e792d1cb9d73503Mark Andrews shift
78f3ed4bc2fcd3d270bfd599804f3b27a1db4d91Mark Andrews [ -z "$firstif" ] && firstif=$1
78f3ed4bc2fcd3d270bfd599804f3b27a1db4d91Mark Andrews
3759f10fc543747668b1ca4b4671f35b0dea8445Francis Dupont for i in `shcat /etc/dhcp\.$1`; do
827f8cccb5280f4da66c46186e792d1cb9d73503Mark Andrews if [ "$i" = primary ]; then
78f3ed4bc2fcd3d270bfd599804f3b27a1db4d91Mark Andrews primary=$1
78f3ed4bc2fcd3d270bfd599804f3b27a1db4d91Mark Andrews break
3759f10fc543747668b1ca4b4671f35b0dea8445Francis Dupont fi
827f8cccb5280f4da66c46186e792d1cb9d73503Mark Andrews done
78f3ed4bc2fcd3d270bfd599804f3b27a1db4d91Mark Andrews
dedefc0bdbb4e6e39eeb98aa2fc6883efec2ddb0Mark Andrews [ -n "$primary" ] && break
3759f10fc543747668b1ca4b4671f35b0dea8445Francis Dupont shift
827f8cccb5280f4da66c46186e792d1cb9d73503Mark Andrews done
dedefc0bdbb4e6e39eeb98aa2fc6883efec2ddb0Mark Andrews
dedefc0bdbb4e6e39eeb98aa2fc6883efec2ddb0Mark Andrews [ -z "$primary" ] && primary="$firstif"
e8fc8c884b44371784805e1e0d3100da403dd3f1Automatic Updater cmdline=`shcat /etc/dhcp\.${primary}`
dedefc0bdbb4e6e39eeb98aa2fc6883efec2ddb0Mark Andrews
e813f036c8251b6d9d2a72fa84f80c2c9d2795afMark Andrews if [ "$_INIT_NET_IF" != "$primary" ]; then
30370d905e9be3be7d9b947fd432bacecbb13bb9Evan Hunt echo "starting DHCP on primary interface $primary"
0eb371ca0dab50ae3462e98794a6126198c52f4bMark Andrews /sbin/ifconfig $primary auto-dhcp primary $cmdline
dedefc0bdbb4e6e39eeb98aa2fc6883efec2ddb0Mark Andrews # Exit code 4 means ifconfig timed out waiting for dhcpagent
e8fc8c884b44371784805e1e0d3100da403dd3f1Automatic Updater [ $? != 0 ] && [ $? != 4 ] && i4d_fail="$i4d_fail $primary"
dedefc0bdbb4e6e39eeb98aa2fc6883efec2ddb0Mark Andrews fi
e813f036c8251b6d9d2a72fa84f80c2c9d2795afMark Andrews
30370d905e9be3be7d9b947fd432bacecbb13bb9Evan Hunt set -- $interface_names
0eb371ca0dab50ae3462e98794a6126198c52f4bMark Andrews
dedefc0bdbb4e6e39eeb98aa2fc6883efec2ddb0Mark Andrews while [ $# -ge 2 ]; do
e8fc8c884b44371784805e1e0d3100da403dd3f1Automatic Updater shift
dedefc0bdbb4e6e39eeb98aa2fc6883efec2ddb0Mark Andrews cmdline=`shcat /etc/dhcp\.$1`
e813f036c8251b6d9d2a72fa84f80c2c9d2795afMark Andrews if [ "$1" != "$primary" -a \
30370d905e9be3be7d9b947fd432bacecbb13bb9Evan Hunt "$1" != "$_INIT_NET_IF" ]; then
0eb371ca0dab50ae3462e98794a6126198c52f4bMark Andrews echo "starting DHCP on interface $1"
dedefc0bdbb4e6e39eeb98aa2fc6883efec2ddb0Mark Andrews /sbin/ifconfig $1 dhcp start wait 0 $cmdline
dedefc0bdbb4e6e39eeb98aa2fc6883efec2ddb0Mark Andrews # Exit code can't be timeout when wait is 0
dedefc0bdbb4e6e39eeb98aa2fc6883efec2ddb0Mark Andrews [ $? != 0 ] && i4d_fail="$i4d_fail $1"
e813f036c8251b6d9d2a72fa84f80c2c9d2795afMark Andrews fi
30370d905e9be3be7d9b947fd432bacecbb13bb9Evan Hunt shift
dedefc0bdbb4e6e39eeb98aa2fc6883efec2ddb0Mark Andrews done
b30ec46fec40a1b246f7965fbcd341fc6cfd1cc1Mark Andrews IFS="$ORIGIFS"
39cad8fb7d7ff3436bb24ce761354afcb80d295aMark Andrews unset ORIGIFS
827f8cccb5280f4da66c46186e792d1cb9d73503Mark Andrews [ -n "$i4d_fail" ] && warn_failed_ifs "configure IPv4 DHCP" "$i4d_fail"
827f8cccb5280f4da66c46186e792d1cb9d73503Mark Andrewsfi
01a5c5503482fb3ba52088bf0178a7213273bf96Mark Andrews
03ebc228ee3725738b067b6bd7082a9a731822a1Tinderbox User# In order to avoid bringing up the interfaces that have
827f8cccb5280f4da66c46186e792d1cb9d73503Mark Andrews# intentionally been left down, perform RARP only if the system
827f8cccb5280f4da66c46186e792d1cb9d73503Mark Andrews# has no configured hostname in /etc/nodename
827f8cccb5280f4da66c46186e792d1cb9d73503Mark Andrewshostname="`shcat /etc/nodename 2>/dev/null`"
e64202536ea72d8f371dd0df9fc763f8d70bf886Tinderbox Userif [ "$_INIT_NET_STRATEGY" = "rarp" -o -z "$hostname" ]; then
015055b6e23f5c08f6a5b34726f90b62597e9e45Tinderbox User /sbin/ifconfig -adD4 auto-revarp netmask + broadcast + up
03ebc228ee3725738b067b6bd7082a9a731822a1Tinderbox Userfi
59528addd704f8d5757b54e540520f74e588a7c7Automatic Updater
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews#
e40c4e4c17d4df338e2a7db0f84d8dbb3858964cTinderbox User# If the /etc/defaultrouter file exists, process it now so that the next
757ff043760e4743dda1a10e7d58349275934902Tinderbox User# stage of booting will have access to NFS.
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews#
827f8cccb5280f4da66c46186e792d1cb9d73503Mark Andrewsif [ -f /etc/defaultrouter ]; then
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews while read router rubbish; do
933799f3641f4f78445d015008bad0038900a82aTinderbox User case "$router" in
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews '#'* | '') ;; # Ignore comments, empty lines
3759f10fc543747668b1ca4b4671f35b0dea8445Francis Dupont *) /sbin/route -n add default -gateway $router ;;
7f79131f9a8e804b93c57f3c679065cce878b726Automatic Updater esac
0eb371ca0dab50ae3462e98794a6126198c52f4bMark Andrews done </etc/defaultrouter
91216cff91b34c9ff6e846dc23f248219cafe660Andreas Gustafssonfi
0eb371ca0dab50ae3462e98794a6126198c52f4bMark Andrews
e813f036c8251b6d9d2a72fa84f80c2c9d2795afMark Andrews#
30370d905e9be3be7d9b947fd432bacecbb13bb9Evan Hunt# If we get here and were not asked to plumb any IPv4 interfaces, look
0eb371ca0dab50ae3462e98794a6126198c52f4bMark Andrews# for boot properties that direct us.
0eb371ca0dab50ae3462e98794a6126198c52f4bMark Andrews#
efb0e886f18894a1d2489f1ad74ad14b579e11c7Mark Andrews# - The "network-interface" property is required and indicates the
e813f036c8251b6d9d2a72fa84f80c2c9d2795afMark Andrews# interface name.
30370d905e9be3be7d9b947fd432bacecbb13bb9Evan Hunt# - The "xpv-hcp" property, if present, is used by the hypervisor
0eb371ca0dab50ae3462e98794a6126198c52f4bMark Andrews# tools to indicate how the specified interface should be configured.
3a988722ad9e209ba4064604d482dc4efe0e19ebTinderbox User# Permitted values are "dhcp" and "off", where "off" indicates static
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington# IP configuration.
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington#
a3ffa9ab0644ae2b52f2e13a00b5e85b879f612fTinderbox User# In the case where "xpv-hcp" is set to "dhcp", no further properties
3759f10fc543747668b1ca4b4671f35b0dea8445Francis Dupont# are required or examined.
dedefc0bdbb4e6e39eeb98aa2fc6883efec2ddb0Mark Andrews#
1bf507ca635310b340aea42d6c3e567819974a99Tinderbox User# In the case where "xpv-hcp" is not present or set to "off", the
0eb371ca0dab50ae3462e98794a6126198c52f4bMark Andrews# "host-ip" and "subnet-mask" properties are used to configure
0eb371ca0dab50ae3462e98794a6126198c52f4bMark Andrews# the specified interface. The "router-ip" property, if present,
0eb371ca0dab50ae3462e98794a6126198c52f4bMark Andrews# is used to add a default route.
e813f036c8251b6d9d2a72fa84f80c2c9d2795afMark Andrews#
30370d905e9be3be7d9b947fd432bacecbb13bb9Evan Huntnic="`/sbin/devprop network-interface`"
0eb371ca0dab50ae3462e98794a6126198c52f4bMark Andrewsif smf_is_globalzone && [ -z "$inet_list" ] && [ -n "$nic" ]; then
710bce1a85c96e85ca1a90471382055acd29d51fTinderbox User hcp="`/sbin/devprop xpv-hcp`"
710bce1a85c96e85ca1a90471382055acd29d51fTinderbox User case "$hcp" in
3759f10fc543747668b1ca4b4671f35b0dea8445Francis Dupont "dhcp")
a5636b773fa05a272b6876afd99309c0b3090e2fMark Andrews /sbin/ifconfig $nic plumb 2>/dev/null
a5636b773fa05a272b6876afd99309c0b3090e2fMark Andrews [ -n "`/sbin/ifconfig $nic 2>/dev/null`" ] && (
a5636b773fa05a272b6876afd99309c0b3090e2fMark Andrews # The interface is successfully plumbed, so
a5636b773fa05a272b6876afd99309c0b3090e2fMark Andrews # modify "inet_list" to force the exit code
a5636b773fa05a272b6876afd99309c0b3090e2fMark Andrews # checks to work.
3759f10fc543747668b1ca4b4671f35b0dea8445Francis Dupont inet_list=$nic;
3759f10fc543747668b1ca4b4671f35b0dea8445Francis Dupont # Given that this is the only IPv4 interface,
3759f10fc543747668b1ca4b4671f35b0dea8445Francis Dupont # we assert that it is primary.
dedefc0bdbb4e6e39eeb98aa2fc6883efec2ddb0Mark Andrews echo "starting DHCP on primary interface $primary";
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington /sbin/ifconfig $nic auto-dhcp primary;
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington # Exit code 4 means ifconfig timed out waiting
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington # for dhcpagent
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington [ $? != 0 ] && [ $? != 4 ] && \
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington i4d_fail="$i4d_fail $nic";
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington )
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington ;;
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington "off"|"")
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington /sbin/devprop host-ip subnet-mask router-ip | (
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington read ip;
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington read mask;
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington read router;
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington [ -n "$ip" ] && [ -n "$mask" ] && \
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington /sbin/ifconfig $nic plumb 2>/dev/null
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington [ -n "`/sbin/ifconfig $nic 2>/dev/null`" ] && (
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington # The interface is successfully
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington # plumbed, so modify "inet_list" to
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington # force the exit code checks to work.
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington inet_list=$nic;
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington /sbin/ifconfig $nic inet $ip \
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington netmask $mask broadcast + up 2>/dev/null;
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington [ -n "$router" ] && route add \
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington default $router 2>/dev/null;
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington )
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington )
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington ;;
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington esac
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellingtonfi
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington#
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington# We tell smf this service is online if any of the following is true:
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington# - no interfaces were configured for plumbing and no DHCP failures
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington# - any non-loopback IPv4 interfaces are up and have a non-zero address
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington# - there are any DHCP interfaces started
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington# - any non-loopback IPv6 interfaces are up
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington#
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington# If we weren't asked to configure any interfaces, exit
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellingtonif [ -z "$inet_list" ] && [ -z "$inet6_list" ]; then
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington # Config error if DHCP was attempted without plumbed interfaces
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington [ -n "$i4d_fail" ] && exit $SMF_EXIT_ERR_CONFIG
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington exit $SMF_EXIT_OK
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellingtonfi
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington# Any non-loopback IPv4 interfaces with usable addresses up?
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellingtonif [ -n "`/sbin/ifconfig -a4u`" ]; then
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington /sbin/ifconfig -a4u | while read intf addr rest; do
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington [ $intf = inet ] && [ $addr != 127.0.0.1 ] &&
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington [ $addr != 0.0.0.0 ] && exit $SMF_EXIT_OK
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington done && exit $SMF_EXIT_OK
f520803b46dc189fdaf84adc87ef327d3587b435Mark Andrewsfi
0eb371ca0dab50ae3462e98794a6126198c52f4bMark Andrews
0eb371ca0dab50ae3462e98794a6126198c52f4bMark Andrews# Any DHCP interfaces started?
0eb371ca0dab50ae3462e98794a6126198c52f4bMark Andrews[ -n "`/sbin/ifconfig -a4 dhcp status 2>/dev/null`" ] && exit $SMF_EXIT_OK
e813f036c8251b6d9d2a72fa84f80c2c9d2795afMark Andrews
30370d905e9be3be7d9b947fd432bacecbb13bb9Evan Hunt# Any non-loopback IPv6 interfaces up?
0eb371ca0dab50ae3462e98794a6126198c52f4bMark Andrewsif [ -n "`/sbin/ifconfig -au6`" ]; then
646fed0d28be4387e3e32fb0f5732a1f58b572baTinderbox User /sbin/ifconfig -au6 | while read intf addr rest; do
ae7e54b14c946e0984c191554db9abb4893f9349Automatic Updater [ $intf = inet6 ] && [ $addr != ::1/128 ] && exit $SMF_EXIT_OK
ae7e54b14c946e0984c191554db9abb4893f9349Automatic Updater done && exit $SMF_EXIT_OK
ae7e54b14c946e0984c191554db9abb4893f9349Automatic Updaterfi
ae7e54b14c946e0984c191554db9abb4893f9349Automatic Updater
ae7e54b14c946e0984c191554db9abb4893f9349Automatic Updater# This service was supposed to configure something yet didn't. Exit
ae7e54b14c946e0984c191554db9abb4893f9349Automatic Updater# with config error.
710bce1a85c96e85ca1a90471382055acd29d51fTinderbox Userexit $SMF_EXIT_ERR_CONFIG
ae7e54b14c946e0984c191554db9abb4893f9349Automatic Updater