6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre#!/sbin/sh
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre#
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre# CDDL HEADER START
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre#
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre# The contents of this file are subject to the terms of the
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre# Common Development and Distribution License (the "License").
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre# You may not use this file except in compliance with the License.
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre#
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre# or http://www.opensolaris.org/os/licensing.
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre# See the License for the specific language governing permissions
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre# and limitations under the License.
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre#
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre# When distributing Covered Code, include this CDDL HEADER in each
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre# If applicable, add the following below this CDDL HEADER, with the
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre# fields enclosed by brackets "[]" replaced with your own identifying
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre# information: Portions Copyright [yyyy] [name of copyright owner]
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre#
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre# CDDL HEADER END
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre#
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre# Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre#
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre# Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T.
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre# All rights reserved.
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre#
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre# THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF AT&T
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre# The copyright notice above does not evidence any
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre# actual or intended publication of such source code.
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre#
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre. /lib/svc/share/smf_include.sh
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre. /lib/svc/share/net_include.sh
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre#
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre# This file replaces the Solaris 10 net-physical script in S10C at
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre# boot time. Any S10C specific changes to net-physical script needs
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre# to be made in this file.
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre#
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre#
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre# In a shared-IP zone we need this service to be up, but all of the work
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre# it tries to do is irrelevant (and will actually lead to the service
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre# failing if we try to do it), so just bail out.
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre# In exclusive-IP zones we proceed.
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre#
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkreif [ `/sbin/zonename -t` = shared ]; then
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre exit 0
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkrefi
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre# Print warnings to console
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkrewarn_failed_ifs() {
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre echo "Failed to $1 interface(s): $2" >/dev/msglog
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre}
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre#
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre# Cause ifconfig to not automatically start in.mpathd when IPMP groups are
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre# configured. This is not strictly necessary but makes it so that in.mpathd
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre# will always be started explicitly from /etc/init.d/inetinit, when we're
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre# sure that /usr is mounted.
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre#
6f773e29841ff1573612158ae130301164c2a24aBaban KenkreSUNW_NO_MPATHD=; export SUNW_NO_MPATHD
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkresmf_netstrategy
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre#
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre# If the system was net booted by DHCP, hand DHCP management off to the
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre# DHCP agent (ifconfig communicates to the DHCP agent through the
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre# loopback interface).
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre#
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkreif [ -n "$_INIT_NET_IF" -a "$_INIT_NET_STRATEGY" = "dhcp" ]; then
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre /sbin/dhcpagent -a
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkrefi
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre#
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre# For IPv4 interfaces that were configured by the kernel and not
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre# configured by DHCP, reset the netmask using the local "/etc/netmasks"
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre# file if one exists, and then reset the broadcast address based on
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre# the netmask.
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre#
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre/sbin/ifconfig -auD4 netmask + broadcast +
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre#
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre# All the IPv4 and IPv6 interfaces are plumbed before doing any
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre# interface configuration. This prevents errors from plumb failures
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre# getting mixed in with the configured interface lists that the script
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre# outputs.
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre#
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre# Moreover in S10C, we process IPMP interfaces before non-IPMP
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre# interfaces to avoid accidental implicit IPMP group creation.
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre# Therefore we keep track of IPMP and non-IPMP interfaces in two
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre# different lists i.e. ipmp[6]_list vs inet[6]_list.
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre#
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre# Get the list of IPv4 interfaces to configure by breaking
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre# /etc/hostname.* into separate args by using "." as a shell separator
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre# character.
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre#
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkreinterface_names="`echo /etc/hostname.*[0-9] 2>/dev/null`"
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkreif [ "$interface_names" != "/etc/hostname.*[0-9]" ]; then
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre ORIGIFS="$IFS"
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre IFS="$IFS."
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre set -- $interface_names
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre IFS="$ORIGIFS"
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre while [ $# -ge 2 ]; do
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre shift
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre if [ "$1" = "xx0" ]; then
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre #
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre # For some unknown historical reason the xx0
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre # ifname is ignored.
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre #
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre shift
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre continue
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre fi
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre if [ $# -gt 1 -a "$2" != "/etc/hostname" ]; then
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre while [ $# -gt 1 -a "$1" != "/etc/hostname" ]; do
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre shift
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre done
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre else
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre read one rest < /etc/hostname.$1
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre if [ "$one" = ipmp ]; then
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre ipmp_list="$ipmp_list $1"
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre else
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre inet_list="$inet_list $1"
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre fi
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre shift
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre fi
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre done
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkrefi
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre#
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre# Get the list of IPv6 interfaces to configure by breaking
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre# /etc/hostname6.* into separate args by using "." as a shell separator
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre# character.
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre#
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkreinterface_names="`echo /etc/hostname6.*[0-9] 2>/dev/null`"
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkreif [ "$interface_names" != "/etc/hostname6.*[0-9]" ]; then
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre ORIGIFS="$IFS"
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre IFS="$IFS."
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre set -- $interface_names
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre IFS="$ORIGIFS"
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre while [ $# -ge 2 ]; do
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre shift
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre if [ $# -gt 1 -a "$2" != "/etc/hostname6" ]; then
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre while [ $# -gt 1 -a "$1" != "/etc/hostname6" ]; do
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre shift
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre done
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre else
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre read one rest < /etc/hostname6.$1
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre if [ "$one" = ipmp ]; then
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre ipmp6_list="$ipmp6_list $1"
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre else
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre inet6_list="$inet6_list $1"
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre fi
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre shift
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre fi
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre done
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkrefi
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre#
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre# Create all of the IPv4 IPMP interfaces.
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre#
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkreif [ -n "$ipmp_list" ]; then
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre set -- $ipmp_list
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre while [ $# -gt 0 ]; do
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre if /sbin/ifconfig $1 ipmp; then
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre ipmp_created="$ipmp_created $1"
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre else
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre ipmp_failed="$ipmp_failed $1"
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre fi
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre shift
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre done
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre [ -n "$ipmp_failed" ] && warn_failed_ifs "create IPv4 IPMP" \
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre "$ipmp_failed"
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkrefi
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre#
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre# Step through the IPv4 interface list and try to plumb every interface.
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre# Generate list of plumbed and failed IPv4 interfaces.
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre#
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkreif [ -n "$inet_list" ]; then
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre set -- $inet_list
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre while [ $# -gt 0 ]; do
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre /sbin/ifconfig $1 plumb
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre if /sbin/ifconfig $1 inet >/dev/null 2>&1; then
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre inet_plumbed="$inet_plumbed $1"
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre else
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre inet_failed="$inet_failed $1"
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre fi
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre shift
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre done
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre [ -n "$inet_failed" ] && warn_failed_ifs "plumb IPv4" $inet_failed
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkrefi
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre#
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre# Step through the IPv6 interface list and plumb every interface.
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre# Generate list of plumbed and failed IPv6 interfaces. Each plumbed
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre# interface will be brought up later, after processing any contents of
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre# the /etc/hostname6.* file.
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre#
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkreif [ -n "$inet6_list" ]; then
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre set -- $inet6_list
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre while [ $# -gt 0 ]; do
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre /sbin/ifconfig $1 inet6 plumb
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre if /sbin/ifconfig $1 inet6 >/dev/null 2>&1; then
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre inet6_plumbed="$inet6_plumbed $1"
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre else
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre inet6_failed="$inet6_failed $1"
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre fi
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre shift
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre done
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre [ -n "$inet6_failed" ] && warn_failed_ifs "plumb IPv6" $inet6_failed
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkrefi
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre#
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre# Create all of the IPv6 IPMP interfaces.
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre#
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkreif [ -n "$ipmp6_list" ]; then
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre set -- $ipmp6_list
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre while [ $# -gt 0 ]; do
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre if /sbin/ifconfig $1 inet6 ipmp; then
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre ipmp6_created="$ipmp6_created $1"
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre else
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre ipmp6_failed="$ipmp6_failed $1"
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre fi
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre shift
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre done
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre [ -n "$ipmp6_failed" ] && warn_failed_ifs "create IPv6 IPMP" \
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre "$ipmp6_failed"
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkrefi
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre#
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre# Process IPMP interfaces before non-IPMP interfaces
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre# to avoid accidental implicit IPMP group creation.
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre#
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkreif [ -n "$ipmp_created" ]; then
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre i4s_fail=
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre echo "configuring IPv4 IPMP interfaces:\c"
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre set -- $ipmp_created
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre while [ $# -gt 0 ]; do
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre inet_process_hostname /sbin/ifconfig $1 inet \
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre </etc/hostname.$1 >/dev/null
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre [ $? != 0 ] && i4s_fail="$i4s_fail $1"
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre echo " $1\c"
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre shift
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre done
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre echo "."
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre [ -n "$i4s_fail" ] && warn_failed_ifs "configure IPv4 IPMP" \
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre $i4s_fail
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkrefi
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkreif [ -n "$ipmp6_created" ]; then
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre i6_fail=
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre echo "configuring IPv6 IPMP interfaces:\c"
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre set -- $ipmp6_created
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre while [ $# -gt 0 ]; do
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre inet6_process_hostname /sbin/ifconfig $1 inet6 \
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre </etc/hostname6.$1 >/dev/null &&
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre /sbin/ifconfig $1 inet6 up
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre [ $? != 0 ] && i6_fail="$i6_fail $1"
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre echo " $1\c"
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre shift
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre done
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre echo "."
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre [ -n "$i6_fail" ] && warn_failed_ifs "configure IPv6 IPMP" \
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre $i6_fail
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkrefi
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre#
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre# Process the /etc/hostname.* files of plumbed IPv4 interfaces. If an
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre# /etc/hostname file is not present or is empty, the ifconfig auto-dhcp
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre# / auto-revarp command will attempt to set the address, later.
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre#
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre# If /etc/hostname.lo0 exists the loop below will do additional
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre# configuration of lo0.
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre#
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkreif [ -n "$inet_plumbed" ]; then
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre i4s_fail=
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre echo "configuring IPv4 interfaces:\c"
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre set -- $inet_plumbed
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre while [ $# -gt 0 ]; do
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre l3protect=`/sbin/ifconfig $1|grep -c L3PROTECT`
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre if [ $l3protect != 0 ]; then
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre echo "Ignoring /etc/hostname.$1" > /dev/msglog
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre else
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre inet_process_hostname /sbin/ifconfig $1 inet \
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre </etc/hostname.$1 >/dev/null
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre [ $? != 0 ] && i4s_fail="$i4s_fail $1"
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre echo " $1\c"
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre fi
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre shift
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre done
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre echo "."
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre [ -n "$i4s_fail" ] && warn_failed_ifs "configure IPv4" $i4s_fail
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkrefi
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre#
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre# Process the /etc/hostname6.* files of plumbed IPv6 interfaces. After
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre# processing the hostname6 file, bring the interface up. If
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre# /etc/hostname6.lo0 exists the loop below will do additional
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre# configuration of lo0.
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre#
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkreif [ -n "$inet6_plumbed" ]; then
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre i6_fail=
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre echo "configuring IPv6 interfaces:\c"
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre set -- $inet6_plumbed
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre while [ $# -gt 0 ]; do
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre l3protect=`/sbin/ifconfig $1|grep -c L3PROTECT`
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre if [ $l3protect != 0 ]; then
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre echo "Ignoring /etc/hostname6.$1" > /dev/msglog
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre else
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre inet6_process_hostname /sbin/ifconfig $1 inet6 \
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre </etc/hostname6.$1 >/dev/null &&
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre /sbin/ifconfig $1 inet6 up
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre [ $? != 0 ] && i6_fail="$i6_fail $1"
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre echo " $1\c"
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre fi
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre shift
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre done
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre echo "."
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre [ -n "$i6_fail" ] && warn_failed_ifs "configure IPv6" $i6_fail
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkrefi
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre# Run DHCP if requested. Skip boot-configured interface.
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkreinterface_names="`echo /etc/dhcp.*[0-9] 2>/dev/null`"
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkreif [ "$interface_names" != '/etc/dhcp.*[0-9]' ]; then
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre #
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre # First find the primary interface. Default to the first
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre # interface if not specified. First primary interface found
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre # "wins". Use care not to "reconfigure" a net-booted interface
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre # configured using DHCP. Run through the list of interfaces
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre # again, this time trying DHCP.
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre #
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre i4d_fail=
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre firstif=
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre primary=
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre ORIGIFS="$IFS"
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre IFS="${IFS}."
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre set -- $interface_names
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre while [ $# -ge 2 ]; do
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre shift
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre [ -z "$firstif" ] && firstif=$1
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre for i in `shcat /etc/dhcp\.$1`; do
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre if [ "$i" = primary ]; then
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre primary=$1
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre break
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre fi
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre done
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre [ -n "$primary" ] && break
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre shift
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre done
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre [ -z "$primary" ] && primary="$firstif"
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre cmdline=`shcat /etc/dhcp\.${primary}`
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre if [ "$_INIT_NET_IF" != "$primary" ]; then
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre echo "starting DHCP on primary interface $primary"
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre /sbin/ifconfig $primary auto-dhcp primary $cmdline
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre # Exit code 4 means ifconfig timed out waiting for dhcpagent
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre [ $? != 0 ] && [ $? != 4 ] && i4d_fail="$i4d_fail $primary"
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre fi
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre set -- $interface_names
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre while [ $# -ge 2 ]; do
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre shift
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre cmdline=`shcat /etc/dhcp\.$1`
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre if [ "$1" != "$primary" -a \
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre "$1" != "$_INIT_NET_IF" ]; then
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre echo "starting DHCP on interface $1"
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre /sbin/ifconfig $1 dhcp start wait 0 $cmdline
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre # Exit code can't be timeout when wait is 0
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre [ $? != 0 ] && i4d_fail="$i4d_fail $1"
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre fi
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre shift
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre done
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre IFS="$ORIGIFS"
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre unset ORIGIFS
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre [ -n "$i4d_fail" ] && warn_failed_ifs "configure IPv4 DHCP" $i4d_fail
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkrefi
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre# In order to avoid bringing up the interfaces that have
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre# intentionally been left down, perform RARP only if the system
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre# has no configured hostname in /etc/nodename
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkrehostname="`shcat /etc/nodename 2>/dev/null`"
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkreif [ "$_INIT_NET_STRATEGY" = "rarp" -o -z "$hostname" ]; then
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre /sbin/ifconfig -adD4 auto-revarp netmask + broadcast + up
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkrefi
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre#
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre# Process IPv4 and IPv6 interfaces that failed to plumb. Find an
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre# alternative interface to host the addresses.
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre#
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre[ -n "$inet_failed" ] && move_addresses inet
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre[ -n "$inet6_failed" ] && move_addresses inet6
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre#
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre# If the /etc/defaultrouter file exists, process it now so that the next
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre# stage of booting will have access to NFS.
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre#
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkreif [ -f /etc/defaultrouter ]; then
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre while read router rubbish; do
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre case "$router" in
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre '#'* | '') ;; # Ignore comments, empty lines
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre *) /sbin/route -n add default -gateway $router ;;
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre esac
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre done </etc/defaultrouter
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkrefi
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre#
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre# We tell smf this service is online if any of the following is true:
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre# - no interfaces were configured for plumbing and no DHCP failures
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre# - there are any DHCP interfaces started
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre# - any non-loopback, non-DHCP IPv4 interfaces are up and have a non-zero
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre# address
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre# - any non-loopback IPv6 interfaces are up
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre#
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre# If we weren't asked to configure any interfaces, exit
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkreif [ -z "$inet_list" ] && [ -z "$inet6_list" ]; then
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre # Config error if DHCP was attempted without plumbed interfaces
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre [ -n "$i4d_fail" ] && exit $SMF_EXIT_ERR_CONFIG
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre exit $SMF_EXIT_OK
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkrefi
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre# Any DHCP interfaces?
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre[ -n "`/sbin/ifconfig -a4 dhcp status 2>/dev/null`" ] && exit $SMF_EXIT_OK
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre# Any non-loopback, non-DHCP IPv4 interfaces with usable addresses up?
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkreif [ -n "`/sbin/ifconfig -a4uD`" ]; then
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre /sbin/ifconfig -a4uD | while read intf addr rest; do
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre [ $intf = inet ] && [ $addr != 127.0.0.1 ] &&
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre [ $addr != 0.0.0.0 ] && exit 0
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre done && exit $SMF_EXIT_OK
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkrefi
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre# Any non-loopback IPv6 interfaces up?
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkreif [ -n "`/sbin/ifconfig -au6`" ]; then
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre /sbin/ifconfig -au6 | while read intf addr rest; do
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre [ $intf = inet6 ] && [ $addr != ::1/128 ] && exit 0
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre done && exit $SMF_EXIT_OK
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkrefi
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre# This service was supposed to configure something yet didn't. Exit
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkre# with config error.
6f773e29841ff1573612158ae130301164c2a24aBaban Kenkreexit $SMF_EXIT_ERR_CONFIG