net-physical revision 1cfa752f4e24c34133009b0f6c139127a5c461de
# In a shared-IP zone we need this service to be up, but all of the work # it tries to do is irrelevant (and will actually lead to the service # failing if we try to do it), so just bail out. # In the global zone and exclusive-IP zones we proceed. # Make sure that the libraries essential to this stage of booting can be found. # Update PVID on interfaces configured with VLAN 1 # Upgrade handling. The upgrade file consists of a series of dladm(1M) # commands. Note that after we are done, we cannot rename the upgrade # script file as the file system is still read-only at this point. # Defer this to the manifest-import service. if [ -f
"${upgrade_script}" ];
then # Upgrade handling for ibd: # After we are done with the upgrade handling, we can not set the # read-only at this point. It will be done later by ibd-post-upgrade # Bring up simnets, link aggregations and initialize security objects. # Note that link property initialization is deferred until after # IP interfaces are plumbed to ensure that the links will not # be unloaded (and the property settings lost). We should bring # Create flows via flowadm. # If the system was net booted by DHCP, hand DHCP management off to the # DHCP agent (ifconfig communicates to the DHCP agent through the # The network initialization is done early to support diskless and # dataless configurations. For IPv4 interfaces that were configured by # the kernel (e.g. those on diskless machines) and not configured by # DHCP, reset the netmask using the local "/etc/netmasks" file if one # exists, and then reset the broadcast address based on the netmask. # Is this a persistent IP tunnel link? # Is this an implicit IP tunnel (i.e., ip.tun0) if [ $# -eq 2 -a \( "$1" = "ip" -o "$1" = "ip6" \) ]; then # It looks like one, but another type of link might be # using a name that looks like an implicit IP tunnel. # If dladm show-link -P finds it, then it's not an IP # All the IPv4 and IPv6 interfaces are plumbed before doing any # interface configuration. This prevents errors from plumb failures # getting mixed in with the configured interface lists that the script # Get the list of IPv4 interfaces to configure by breaking # /etc/hostname.* into separate args by using "." as a shell separator # skip IP tunnel interfaces plumbed by net-iptun. # Get the list of IPv6 interfaces to configure by breaking # /etc/hostname6.* into separate args by using "." as a shell separator # skip IP tunnel interfaces plumbed by net-iptun. # Create all of the IPv4 IPMP interfaces. # Step through the IPv4 interface list and try to plumb every interface. # Generate list of plumbed and failed IPv4 interfaces. # Run autoconf to connect to a WLAN if the interface is a wireless one # Step through the IPv6 interface list and plumb every interface. # Generate list of plumbed and failed IPv6 interfaces. Each plumbed # interface will be brought up later, after processing any contents of # Create all of the IPv6 IPMP interfaces. # Finally configure interfaces set up with ipadm. if [
"$state" !=
"disabled" ];
then # skip if not a persistent interface # skip IP tunnel interfaces plumbed by net-iptun # Enable the interface managed by ipadm # Process the /etc/hostname[6].* files for IPMP interfaces. Processing these # before non-IPMP interfaces avoids accidental implicit IPMP group creation. # Process the /etc/hostname[6].* files for non-IPMP interfaces. # For the IPv4 and IPv6 interfaces that failed to plumb, find (or create) # IPMP meta-interfaces to host their data addresses. # Run DHCP if requested. Skip boot-configured interface. # First find the primary interface. Default to the first # interface if not specified. First primary interface found # "wins". Use care not to "reconfigure" a net-booted interface # configured using DHCP. Run through the list of interfaces # again, this time trying DHCP. echo "starting DHCP on primary interface $primary" # Exit code 4 means ifconfig timed out waiting for dhcpagent echo "starting DHCP on interface $1" # Exit code can't be timeout when wait is 0 # In order to avoid bringing up the interfaces that have # intentionally been left down, perform RARP only if the system # stage of booting will have access to NFS. '#'* |
'') ;;
# Ignore comments, empty lines # If we get here and were not asked to plumb any IPv4 interfaces, look # for boot properties that direct us. # - The "network-interface" property is required and indicates the # - The "xpv-hcp" property, if present, is used by the hypervisor # tools to indicate how the specified interface should be configured. # Permitted values are "dhcp" and "off", where "off" indicates static # In the case where "xpv-hcp" is set to "dhcp", no further properties # are required or examined. # In the case where "xpv-hcp" is not present or set to "off", the # "host-ip" and "subnet-mask" properties are used to configure # the specified interface. The "router-ip" property, if present, # is used to add a default route. # The interface is successfully plumbed, so # modify "inet_list" to force the exit code # Given that this is the only IPv4 interface, # we assert that it is primary. echo "starting DHCP on primary interface $primary"; # Exit code 4 means ifconfig timed out waiting [ $? != 0 ] && [ $? != 4 ] && \ # The interface is successfully # plumbed, so modify "inet_list" to # force the exit code checks to work. # We tell smf this service is online if any of the following is true: # - no interfaces were configured for plumbing and no DHCP failures # - any non-loopback IPv4 interfaces are up and have a non-zero address # - there are any DHCP interfaces started # - any non-loopback IPv6 interfaces are up # If we weren't asked to configure any interfaces, exit # Config error if DHCP was attempted without plumbed interfaces # Any non-loopback IPv4 interfaces with usable addresses up? # Any DHCP interfaces started? # Any non-loopback IPv6 interfaces up? # This service was supposed to configure something yet didn't. Exit