1*6f773e29SBaban Kenkre#!/sbin/sh 2*6f773e29SBaban Kenkre# 3*6f773e29SBaban Kenkre# CDDL HEADER START 4*6f773e29SBaban Kenkre# 5*6f773e29SBaban Kenkre# The contents of this file are subject to the terms of the 6*6f773e29SBaban Kenkre# Common Development and Distribution License (the "License"). 7*6f773e29SBaban Kenkre# You may not use this file except in compliance with the License. 8*6f773e29SBaban Kenkre# 9*6f773e29SBaban Kenkre# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 10*6f773e29SBaban Kenkre# or http://www.opensolaris.org/os/licensing. 11*6f773e29SBaban Kenkre# See the License for the specific language governing permissions 12*6f773e29SBaban Kenkre# and limitations under the License. 13*6f773e29SBaban Kenkre# 14*6f773e29SBaban Kenkre# When distributing Covered Code, include this CDDL HEADER in each 15*6f773e29SBaban Kenkre# file and include the License file at usr/src/OPENSOLARIS.LICENSE. 16*6f773e29SBaban Kenkre# If applicable, add the following below this CDDL HEADER, with the 17*6f773e29SBaban Kenkre# fields enclosed by brackets "[]" replaced with your own identifying 18*6f773e29SBaban Kenkre# information: Portions Copyright [yyyy] [name of copyright owner] 19*6f773e29SBaban Kenkre# 20*6f773e29SBaban Kenkre# CDDL HEADER END 21*6f773e29SBaban Kenkre# 22*6f773e29SBaban Kenkre 23*6f773e29SBaban Kenkre# Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. 24*6f773e29SBaban Kenkre# 25*6f773e29SBaban Kenkre# Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T. 26*6f773e29SBaban Kenkre# All rights reserved. 27*6f773e29SBaban Kenkre# 28*6f773e29SBaban Kenkre# THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF AT&T 29*6f773e29SBaban Kenkre# The copyright notice above does not evidence any 30*6f773e29SBaban Kenkre# actual or intended publication of such source code. 31*6f773e29SBaban Kenkre# 32*6f773e29SBaban Kenkre 33*6f773e29SBaban Kenkre. /lib/svc/share/smf_include.sh 34*6f773e29SBaban Kenkre. /lib/svc/share/net_include.sh 35*6f773e29SBaban Kenkre 36*6f773e29SBaban Kenkre# 37*6f773e29SBaban Kenkre# This file replaces the Solaris 10 net-physical script in S10C at 38*6f773e29SBaban Kenkre# boot time. Any S10C specific changes to net-physical script needs 39*6f773e29SBaban Kenkre# to be made in this file. 40*6f773e29SBaban Kenkre# 41*6f773e29SBaban Kenkre 42*6f773e29SBaban Kenkre# 43*6f773e29SBaban Kenkre# In a shared-IP zone we need this service to be up, but all of the work 44*6f773e29SBaban Kenkre# it tries to do is irrelevant (and will actually lead to the service 45*6f773e29SBaban Kenkre# failing if we try to do it), so just bail out. 46*6f773e29SBaban Kenkre# In exclusive-IP zones we proceed. 47*6f773e29SBaban Kenkre# 48*6f773e29SBaban Kenkreif [ `/sbin/zonename -t` = shared ]; then 49*6f773e29SBaban Kenkre exit 0 50*6f773e29SBaban Kenkrefi 51*6f773e29SBaban Kenkre 52*6f773e29SBaban Kenkre# Print warnings to console 53*6f773e29SBaban Kenkrewarn_failed_ifs() { 54*6f773e29SBaban Kenkre echo "Failed to $1 interface(s): $2" >/dev/msglog 55*6f773e29SBaban Kenkre} 56*6f773e29SBaban Kenkre 57*6f773e29SBaban Kenkre# 58*6f773e29SBaban Kenkre# Cause ifconfig to not automatically start in.mpathd when IPMP groups are 59*6f773e29SBaban Kenkre# configured. This is not strictly necessary but makes it so that in.mpathd 60*6f773e29SBaban Kenkre# will always be started explicitly from /etc/init.d/inetinit, when we're 61*6f773e29SBaban Kenkre# sure that /usr is mounted. 62*6f773e29SBaban Kenkre# 63*6f773e29SBaban KenkreSUNW_NO_MPATHD=; export SUNW_NO_MPATHD 64*6f773e29SBaban Kenkre 65*6f773e29SBaban Kenkresmf_netstrategy 66*6f773e29SBaban Kenkre 67*6f773e29SBaban Kenkre# 68*6f773e29SBaban Kenkre# If the system was net booted by DHCP, hand DHCP management off to the 69*6f773e29SBaban Kenkre# DHCP agent (ifconfig communicates to the DHCP agent through the 70*6f773e29SBaban Kenkre# loopback interface). 71*6f773e29SBaban Kenkre# 72*6f773e29SBaban Kenkreif [ -n "$_INIT_NET_IF" -a "$_INIT_NET_STRATEGY" = "dhcp" ]; then 73*6f773e29SBaban Kenkre /sbin/dhcpagent -a 74*6f773e29SBaban Kenkrefi 75*6f773e29SBaban Kenkre 76*6f773e29SBaban Kenkre# 77*6f773e29SBaban Kenkre# For IPv4 interfaces that were configured by the kernel and not 78*6f773e29SBaban Kenkre# configured by DHCP, reset the netmask using the local "/etc/netmasks" 79*6f773e29SBaban Kenkre# file if one exists, and then reset the broadcast address based on 80*6f773e29SBaban Kenkre# the netmask. 81*6f773e29SBaban Kenkre# 82*6f773e29SBaban Kenkre/sbin/ifconfig -auD4 netmask + broadcast + 83*6f773e29SBaban Kenkre 84*6f773e29SBaban Kenkre# 85*6f773e29SBaban Kenkre# All the IPv4 and IPv6 interfaces are plumbed before doing any 86*6f773e29SBaban Kenkre# interface configuration. This prevents errors from plumb failures 87*6f773e29SBaban Kenkre# getting mixed in with the configured interface lists that the script 88*6f773e29SBaban Kenkre# outputs. 89*6f773e29SBaban Kenkre# 90*6f773e29SBaban Kenkre# Moreover in S10C, we process IPMP interfaces before non-IPMP 91*6f773e29SBaban Kenkre# interfaces to avoid accidental implicit IPMP group creation. 92*6f773e29SBaban Kenkre# Therefore we keep track of IPMP and non-IPMP interfaces in two 93*6f773e29SBaban Kenkre# different lists i.e. ipmp[6]_list vs inet[6]_list. 94*6f773e29SBaban Kenkre 95*6f773e29SBaban Kenkre# 96*6f773e29SBaban Kenkre# Get the list of IPv4 interfaces to configure by breaking 97*6f773e29SBaban Kenkre# /etc/hostname.* into separate args by using "." as a shell separator 98*6f773e29SBaban Kenkre# character. 99*6f773e29SBaban Kenkre# 100*6f773e29SBaban Kenkreinterface_names="`echo /etc/hostname.*[0-9] 2>/dev/null`" 101*6f773e29SBaban Kenkreif [ "$interface_names" != "/etc/hostname.*[0-9]" ]; then 102*6f773e29SBaban Kenkre ORIGIFS="$IFS" 103*6f773e29SBaban Kenkre IFS="$IFS." 104*6f773e29SBaban Kenkre set -- $interface_names 105*6f773e29SBaban Kenkre IFS="$ORIGIFS" 106*6f773e29SBaban Kenkre while [ $# -ge 2 ]; do 107*6f773e29SBaban Kenkre shift 108*6f773e29SBaban Kenkre if [ "$1" = "xx0" ]; then 109*6f773e29SBaban Kenkre # 110*6f773e29SBaban Kenkre # For some unknown historical reason the xx0 111*6f773e29SBaban Kenkre # ifname is ignored. 112*6f773e29SBaban Kenkre # 113*6f773e29SBaban Kenkre shift 114*6f773e29SBaban Kenkre continue 115*6f773e29SBaban Kenkre fi 116*6f773e29SBaban Kenkre if [ $# -gt 1 -a "$2" != "/etc/hostname" ]; then 117*6f773e29SBaban Kenkre while [ $# -gt 1 -a "$1" != "/etc/hostname" ]; do 118*6f773e29SBaban Kenkre shift 119*6f773e29SBaban Kenkre done 120*6f773e29SBaban Kenkre else 121*6f773e29SBaban Kenkre read one rest < /etc/hostname.$1 122*6f773e29SBaban Kenkre if [ "$one" = ipmp ]; then 123*6f773e29SBaban Kenkre ipmp_list="$ipmp_list $1" 124*6f773e29SBaban Kenkre else 125*6f773e29SBaban Kenkre inet_list="$inet_list $1" 126*6f773e29SBaban Kenkre fi 127*6f773e29SBaban Kenkre shift 128*6f773e29SBaban Kenkre fi 129*6f773e29SBaban Kenkre done 130*6f773e29SBaban Kenkrefi 131*6f773e29SBaban Kenkre 132*6f773e29SBaban Kenkre# 133*6f773e29SBaban Kenkre# Get the list of IPv6 interfaces to configure by breaking 134*6f773e29SBaban Kenkre# /etc/hostname6.* into separate args by using "." as a shell separator 135*6f773e29SBaban Kenkre# character. 136*6f773e29SBaban Kenkre# 137*6f773e29SBaban Kenkreinterface_names="`echo /etc/hostname6.*[0-9] 2>/dev/null`" 138*6f773e29SBaban Kenkreif [ "$interface_names" != "/etc/hostname6.*[0-9]" ]; then 139*6f773e29SBaban Kenkre ORIGIFS="$IFS" 140*6f773e29SBaban Kenkre IFS="$IFS." 141*6f773e29SBaban Kenkre set -- $interface_names 142*6f773e29SBaban Kenkre IFS="$ORIGIFS" 143*6f773e29SBaban Kenkre while [ $# -ge 2 ]; do 144*6f773e29SBaban Kenkre shift 145*6f773e29SBaban Kenkre if [ $# -gt 1 -a "$2" != "/etc/hostname6" ]; then 146*6f773e29SBaban Kenkre while [ $# -gt 1 -a "$1" != "/etc/hostname6" ]; do 147*6f773e29SBaban Kenkre shift 148*6f773e29SBaban Kenkre done 149*6f773e29SBaban Kenkre else 150*6f773e29SBaban Kenkre read one rest < /etc/hostname6.$1 151*6f773e29SBaban Kenkre if [ "$one" = ipmp ]; then 152*6f773e29SBaban Kenkre ipmp6_list="$ipmp6_list $1" 153*6f773e29SBaban Kenkre else 154*6f773e29SBaban Kenkre inet6_list="$inet6_list $1" 155*6f773e29SBaban Kenkre fi 156*6f773e29SBaban Kenkre shift 157*6f773e29SBaban Kenkre fi 158*6f773e29SBaban Kenkre done 159*6f773e29SBaban Kenkrefi 160*6f773e29SBaban Kenkre 161*6f773e29SBaban Kenkre# 162*6f773e29SBaban Kenkre# Create all of the IPv4 IPMP interfaces. 163*6f773e29SBaban Kenkre# 164*6f773e29SBaban Kenkreif [ -n "$ipmp_list" ]; then 165*6f773e29SBaban Kenkre set -- $ipmp_list 166*6f773e29SBaban Kenkre while [ $# -gt 0 ]; do 167*6f773e29SBaban Kenkre if /sbin/ifconfig $1 ipmp; then 168*6f773e29SBaban Kenkre ipmp_created="$ipmp_created $1" 169*6f773e29SBaban Kenkre else 170*6f773e29SBaban Kenkre ipmp_failed="$ipmp_failed $1" 171*6f773e29SBaban Kenkre fi 172*6f773e29SBaban Kenkre shift 173*6f773e29SBaban Kenkre done 174*6f773e29SBaban Kenkre [ -n "$ipmp_failed" ] && warn_failed_ifs "create IPv4 IPMP" \ 175*6f773e29SBaban Kenkre "$ipmp_failed" 176*6f773e29SBaban Kenkrefi 177*6f773e29SBaban Kenkre 178*6f773e29SBaban Kenkre# 179*6f773e29SBaban Kenkre# Step through the IPv4 interface list and try to plumb every interface. 180*6f773e29SBaban Kenkre# Generate list of plumbed and failed IPv4 interfaces. 181*6f773e29SBaban Kenkre# 182*6f773e29SBaban Kenkreif [ -n "$inet_list" ]; then 183*6f773e29SBaban Kenkre set -- $inet_list 184*6f773e29SBaban Kenkre while [ $# -gt 0 ]; do 185*6f773e29SBaban Kenkre /sbin/ifconfig $1 plumb 186*6f773e29SBaban Kenkre if /sbin/ifconfig $1 inet >/dev/null 2>&1; then 187*6f773e29SBaban Kenkre inet_plumbed="$inet_plumbed $1" 188*6f773e29SBaban Kenkre else 189*6f773e29SBaban Kenkre inet_failed="$inet_failed $1" 190*6f773e29SBaban Kenkre fi 191*6f773e29SBaban Kenkre shift 192*6f773e29SBaban Kenkre done 193*6f773e29SBaban Kenkre [ -n "$inet_failed" ] && warn_failed_ifs "plumb IPv4" $inet_failed 194*6f773e29SBaban Kenkrefi 195*6f773e29SBaban Kenkre 196*6f773e29SBaban Kenkre# 197*6f773e29SBaban Kenkre# Step through the IPv6 interface list and plumb every interface. 198*6f773e29SBaban Kenkre# Generate list of plumbed and failed IPv6 interfaces. Each plumbed 199*6f773e29SBaban Kenkre# interface will be brought up later, after processing any contents of 200*6f773e29SBaban Kenkre# the /etc/hostname6.* file. 201*6f773e29SBaban Kenkre# 202*6f773e29SBaban Kenkreif [ -n "$inet6_list" ]; then 203*6f773e29SBaban Kenkre set -- $inet6_list 204*6f773e29SBaban Kenkre while [ $# -gt 0 ]; do 205*6f773e29SBaban Kenkre /sbin/ifconfig $1 inet6 plumb 206*6f773e29SBaban Kenkre if /sbin/ifconfig $1 inet6 >/dev/null 2>&1; then 207*6f773e29SBaban Kenkre inet6_plumbed="$inet6_plumbed $1" 208*6f773e29SBaban Kenkre else 209*6f773e29SBaban Kenkre inet6_failed="$inet6_failed $1" 210*6f773e29SBaban Kenkre fi 211*6f773e29SBaban Kenkre shift 212*6f773e29SBaban Kenkre done 213*6f773e29SBaban Kenkre [ -n "$inet6_failed" ] && warn_failed_ifs "plumb IPv6" $inet6_failed 214*6f773e29SBaban Kenkrefi 215*6f773e29SBaban Kenkre 216*6f773e29SBaban Kenkre# 217*6f773e29SBaban Kenkre# Create all of the IPv6 IPMP interfaces. 218*6f773e29SBaban Kenkre# 219*6f773e29SBaban Kenkreif [ -n "$ipmp6_list" ]; then 220*6f773e29SBaban Kenkre set -- $ipmp6_list 221*6f773e29SBaban Kenkre while [ $# -gt 0 ]; do 222*6f773e29SBaban Kenkre if /sbin/ifconfig $1 inet6 ipmp; then 223*6f773e29SBaban Kenkre ipmp6_created="$ipmp6_created $1" 224*6f773e29SBaban Kenkre else 225*6f773e29SBaban Kenkre ipmp6_failed="$ipmp6_failed $1" 226*6f773e29SBaban Kenkre fi 227*6f773e29SBaban Kenkre shift 228*6f773e29SBaban Kenkre done 229*6f773e29SBaban Kenkre [ -n "$ipmp6_failed" ] && warn_failed_ifs "create IPv6 IPMP" \ 230*6f773e29SBaban Kenkre "$ipmp6_failed" 231*6f773e29SBaban Kenkrefi 232*6f773e29SBaban Kenkre 233*6f773e29SBaban Kenkre# 234*6f773e29SBaban Kenkre# Process IPMP interfaces before non-IPMP interfaces 235*6f773e29SBaban Kenkre# to avoid accidental implicit IPMP group creation. 236*6f773e29SBaban Kenkre# 237*6f773e29SBaban Kenkreif [ -n "$ipmp_created" ]; then 238*6f773e29SBaban Kenkre i4s_fail= 239*6f773e29SBaban Kenkre echo "configuring IPv4 IPMP interfaces:\c" 240*6f773e29SBaban Kenkre set -- $ipmp_created 241*6f773e29SBaban Kenkre while [ $# -gt 0 ]; do 242*6f773e29SBaban Kenkre inet_process_hostname /sbin/ifconfig $1 inet \ 243*6f773e29SBaban Kenkre </etc/hostname.$1 >/dev/null 244*6f773e29SBaban Kenkre [ $? != 0 ] && i4s_fail="$i4s_fail $1" 245*6f773e29SBaban Kenkre echo " $1\c" 246*6f773e29SBaban Kenkre shift 247*6f773e29SBaban Kenkre done 248*6f773e29SBaban Kenkre echo "." 249*6f773e29SBaban Kenkre [ -n "$i4s_fail" ] && warn_failed_ifs "configure IPv4 IPMP" \ 250*6f773e29SBaban Kenkre $i4s_fail 251*6f773e29SBaban Kenkrefi 252*6f773e29SBaban Kenkre 253*6f773e29SBaban Kenkreif [ -n "$ipmp6_created" ]; then 254*6f773e29SBaban Kenkre i6_fail= 255*6f773e29SBaban Kenkre echo "configuring IPv6 IPMP interfaces:\c" 256*6f773e29SBaban Kenkre set -- $ipmp6_created 257*6f773e29SBaban Kenkre while [ $# -gt 0 ]; do 258*6f773e29SBaban Kenkre inet6_process_hostname /sbin/ifconfig $1 inet6 \ 259*6f773e29SBaban Kenkre </etc/hostname6.$1 >/dev/null && 260*6f773e29SBaban Kenkre /sbin/ifconfig $1 inet6 up 261*6f773e29SBaban Kenkre [ $? != 0 ] && i6_fail="$i6_fail $1" 262*6f773e29SBaban Kenkre echo " $1\c" 263*6f773e29SBaban Kenkre shift 264*6f773e29SBaban Kenkre done 265*6f773e29SBaban Kenkre echo "." 266*6f773e29SBaban Kenkre [ -n "$i6_fail" ] && warn_failed_ifs "configure IPv6 IPMP" \ 267*6f773e29SBaban Kenkre $i6_fail 268*6f773e29SBaban Kenkrefi 269*6f773e29SBaban Kenkre 270*6f773e29SBaban Kenkre# 271*6f773e29SBaban Kenkre# Process the /etc/hostname.* files of plumbed IPv4 interfaces. If an 272*6f773e29SBaban Kenkre# /etc/hostname file is not present or is empty, the ifconfig auto-dhcp 273*6f773e29SBaban Kenkre# / auto-revarp command will attempt to set the address, later. 274*6f773e29SBaban Kenkre# 275*6f773e29SBaban Kenkre# If /etc/hostname.lo0 exists the loop below will do additional 276*6f773e29SBaban Kenkre# configuration of lo0. 277*6f773e29SBaban Kenkre# 278*6f773e29SBaban Kenkreif [ -n "$inet_plumbed" ]; then 279*6f773e29SBaban Kenkre i4s_fail= 280*6f773e29SBaban Kenkre echo "configuring IPv4 interfaces:\c" 281*6f773e29SBaban Kenkre set -- $inet_plumbed 282*6f773e29SBaban Kenkre while [ $# -gt 0 ]; do 283*6f773e29SBaban Kenkre l3protect=`/sbin/ifconfig $1|grep -c L3PROTECT` 284*6f773e29SBaban Kenkre if [ $l3protect != 0 ]; then 285*6f773e29SBaban Kenkre echo "Ignoring /etc/hostname.$1" > /dev/msglog 286*6f773e29SBaban Kenkre else 287*6f773e29SBaban Kenkre inet_process_hostname /sbin/ifconfig $1 inet \ 288*6f773e29SBaban Kenkre </etc/hostname.$1 >/dev/null 289*6f773e29SBaban Kenkre [ $? != 0 ] && i4s_fail="$i4s_fail $1" 290*6f773e29SBaban Kenkre echo " $1\c" 291*6f773e29SBaban Kenkre fi 292*6f773e29SBaban Kenkre shift 293*6f773e29SBaban Kenkre done 294*6f773e29SBaban Kenkre echo "." 295*6f773e29SBaban Kenkre [ -n "$i4s_fail" ] && warn_failed_ifs "configure IPv4" $i4s_fail 296*6f773e29SBaban Kenkrefi 297*6f773e29SBaban Kenkre 298*6f773e29SBaban Kenkre# 299*6f773e29SBaban Kenkre# Process the /etc/hostname6.* files of plumbed IPv6 interfaces. After 300*6f773e29SBaban Kenkre# processing the hostname6 file, bring the interface up. If 301*6f773e29SBaban Kenkre# /etc/hostname6.lo0 exists the loop below will do additional 302*6f773e29SBaban Kenkre# configuration of lo0. 303*6f773e29SBaban Kenkre# 304*6f773e29SBaban Kenkreif [ -n "$inet6_plumbed" ]; then 305*6f773e29SBaban Kenkre i6_fail= 306*6f773e29SBaban Kenkre echo "configuring IPv6 interfaces:\c" 307*6f773e29SBaban Kenkre set -- $inet6_plumbed 308*6f773e29SBaban Kenkre while [ $# -gt 0 ]; do 309*6f773e29SBaban Kenkre l3protect=`/sbin/ifconfig $1|grep -c L3PROTECT` 310*6f773e29SBaban Kenkre if [ $l3protect != 0 ]; then 311*6f773e29SBaban Kenkre echo "Ignoring /etc/hostname6.$1" > /dev/msglog 312*6f773e29SBaban Kenkre else 313*6f773e29SBaban Kenkre inet6_process_hostname /sbin/ifconfig $1 inet6 \ 314*6f773e29SBaban Kenkre </etc/hostname6.$1 >/dev/null && 315*6f773e29SBaban Kenkre /sbin/ifconfig $1 inet6 up 316*6f773e29SBaban Kenkre [ $? != 0 ] && i6_fail="$i6_fail $1" 317*6f773e29SBaban Kenkre echo " $1\c" 318*6f773e29SBaban Kenkre fi 319*6f773e29SBaban Kenkre shift 320*6f773e29SBaban Kenkre done 321*6f773e29SBaban Kenkre echo "." 322*6f773e29SBaban Kenkre [ -n "$i6_fail" ] && warn_failed_ifs "configure IPv6" $i6_fail 323*6f773e29SBaban Kenkrefi 324*6f773e29SBaban Kenkre 325*6f773e29SBaban Kenkre# Run DHCP if requested. Skip boot-configured interface. 326*6f773e29SBaban Kenkreinterface_names="`echo /etc/dhcp.*[0-9] 2>/dev/null`" 327*6f773e29SBaban Kenkreif [ "$interface_names" != '/etc/dhcp.*[0-9]' ]; then 328*6f773e29SBaban Kenkre # 329*6f773e29SBaban Kenkre # First find the primary interface. Default to the first 330*6f773e29SBaban Kenkre # interface if not specified. First primary interface found 331*6f773e29SBaban Kenkre # "wins". Use care not to "reconfigure" a net-booted interface 332*6f773e29SBaban Kenkre # configured using DHCP. Run through the list of interfaces 333*6f773e29SBaban Kenkre # again, this time trying DHCP. 334*6f773e29SBaban Kenkre # 335*6f773e29SBaban Kenkre i4d_fail= 336*6f773e29SBaban Kenkre firstif= 337*6f773e29SBaban Kenkre primary= 338*6f773e29SBaban Kenkre ORIGIFS="$IFS" 339*6f773e29SBaban Kenkre IFS="${IFS}." 340*6f773e29SBaban Kenkre set -- $interface_names 341*6f773e29SBaban Kenkre 342*6f773e29SBaban Kenkre while [ $# -ge 2 ]; do 343*6f773e29SBaban Kenkre shift 344*6f773e29SBaban Kenkre [ -z "$firstif" ] && firstif=$1 345*6f773e29SBaban Kenkre 346*6f773e29SBaban Kenkre for i in `shcat /etc/dhcp\.$1`; do 347*6f773e29SBaban Kenkre if [ "$i" = primary ]; then 348*6f773e29SBaban Kenkre primary=$1 349*6f773e29SBaban Kenkre break 350*6f773e29SBaban Kenkre fi 351*6f773e29SBaban Kenkre done 352*6f773e29SBaban Kenkre 353*6f773e29SBaban Kenkre [ -n "$primary" ] && break 354*6f773e29SBaban Kenkre shift 355*6f773e29SBaban Kenkre done 356*6f773e29SBaban Kenkre 357*6f773e29SBaban Kenkre [ -z "$primary" ] && primary="$firstif" 358*6f773e29SBaban Kenkre cmdline=`shcat /etc/dhcp\.${primary}` 359*6f773e29SBaban Kenkre 360*6f773e29SBaban Kenkre if [ "$_INIT_NET_IF" != "$primary" ]; then 361*6f773e29SBaban Kenkre echo "starting DHCP on primary interface $primary" 362*6f773e29SBaban Kenkre /sbin/ifconfig $primary auto-dhcp primary $cmdline 363*6f773e29SBaban Kenkre # Exit code 4 means ifconfig timed out waiting for dhcpagent 364*6f773e29SBaban Kenkre [ $? != 0 ] && [ $? != 4 ] && i4d_fail="$i4d_fail $primary" 365*6f773e29SBaban Kenkre fi 366*6f773e29SBaban Kenkre 367*6f773e29SBaban Kenkre set -- $interface_names 368*6f773e29SBaban Kenkre 369*6f773e29SBaban Kenkre while [ $# -ge 2 ]; do 370*6f773e29SBaban Kenkre shift 371*6f773e29SBaban Kenkre cmdline=`shcat /etc/dhcp\.$1` 372*6f773e29SBaban Kenkre if [ "$1" != "$primary" -a \ 373*6f773e29SBaban Kenkre "$1" != "$_INIT_NET_IF" ]; then 374*6f773e29SBaban Kenkre echo "starting DHCP on interface $1" 375*6f773e29SBaban Kenkre /sbin/ifconfig $1 dhcp start wait 0 $cmdline 376*6f773e29SBaban Kenkre # Exit code can't be timeout when wait is 0 377*6f773e29SBaban Kenkre [ $? != 0 ] && i4d_fail="$i4d_fail $1" 378*6f773e29SBaban Kenkre fi 379*6f773e29SBaban Kenkre shift 380*6f773e29SBaban Kenkre done 381*6f773e29SBaban Kenkre IFS="$ORIGIFS" 382*6f773e29SBaban Kenkre unset ORIGIFS 383*6f773e29SBaban Kenkre [ -n "$i4d_fail" ] && warn_failed_ifs "configure IPv4 DHCP" $i4d_fail 384*6f773e29SBaban Kenkrefi 385*6f773e29SBaban Kenkre 386*6f773e29SBaban Kenkre# In order to avoid bringing up the interfaces that have 387*6f773e29SBaban Kenkre# intentionally been left down, perform RARP only if the system 388*6f773e29SBaban Kenkre# has no configured hostname in /etc/nodename 389*6f773e29SBaban Kenkrehostname="`shcat /etc/nodename 2>/dev/null`" 390*6f773e29SBaban Kenkreif [ "$_INIT_NET_STRATEGY" = "rarp" -o -z "$hostname" ]; then 391*6f773e29SBaban Kenkre /sbin/ifconfig -adD4 auto-revarp netmask + broadcast + up 392*6f773e29SBaban Kenkrefi 393*6f773e29SBaban Kenkre 394*6f773e29SBaban Kenkre# 395*6f773e29SBaban Kenkre# Process IPv4 and IPv6 interfaces that failed to plumb. Find an 396*6f773e29SBaban Kenkre# alternative interface to host the addresses. 397*6f773e29SBaban Kenkre# 398*6f773e29SBaban Kenkre[ -n "$inet_failed" ] && move_addresses inet 399*6f773e29SBaban Kenkre 400*6f773e29SBaban Kenkre[ -n "$inet6_failed" ] && move_addresses inet6 401*6f773e29SBaban Kenkre 402*6f773e29SBaban Kenkre# 403*6f773e29SBaban Kenkre# If the /etc/defaultrouter file exists, process it now so that the next 404*6f773e29SBaban Kenkre# stage of booting will have access to NFS. 405*6f773e29SBaban Kenkre# 406*6f773e29SBaban Kenkreif [ -f /etc/defaultrouter ]; then 407*6f773e29SBaban Kenkre while read router rubbish; do 408*6f773e29SBaban Kenkre case "$router" in 409*6f773e29SBaban Kenkre '#'* | '') ;; # Ignore comments, empty lines 410*6f773e29SBaban Kenkre *) /sbin/route -n add default -gateway $router ;; 411*6f773e29SBaban Kenkre esac 412*6f773e29SBaban Kenkre done </etc/defaultrouter 413*6f773e29SBaban Kenkrefi 414*6f773e29SBaban Kenkre 415*6f773e29SBaban Kenkre# 416*6f773e29SBaban Kenkre# We tell smf this service is online if any of the following is true: 417*6f773e29SBaban Kenkre# - no interfaces were configured for plumbing and no DHCP failures 418*6f773e29SBaban Kenkre# - there are any DHCP interfaces started 419*6f773e29SBaban Kenkre# - any non-loopback, non-DHCP IPv4 interfaces are up and have a non-zero 420*6f773e29SBaban Kenkre# address 421*6f773e29SBaban Kenkre# - any non-loopback IPv6 interfaces are up 422*6f773e29SBaban Kenkre# 423*6f773e29SBaban Kenkre# If we weren't asked to configure any interfaces, exit 424*6f773e29SBaban Kenkreif [ -z "$inet_list" ] && [ -z "$inet6_list" ]; then 425*6f773e29SBaban Kenkre # Config error if DHCP was attempted without plumbed interfaces 426*6f773e29SBaban Kenkre [ -n "$i4d_fail" ] && exit $SMF_EXIT_ERR_CONFIG 427*6f773e29SBaban Kenkre exit $SMF_EXIT_OK 428*6f773e29SBaban Kenkrefi 429*6f773e29SBaban Kenkre 430*6f773e29SBaban Kenkre# Any DHCP interfaces? 431*6f773e29SBaban Kenkre[ -n "`/sbin/ifconfig -a4 dhcp status 2>/dev/null`" ] && exit $SMF_EXIT_OK 432*6f773e29SBaban Kenkre 433*6f773e29SBaban Kenkre# Any non-loopback, non-DHCP IPv4 interfaces with usable addresses up? 434*6f773e29SBaban Kenkreif [ -n "`/sbin/ifconfig -a4uD`" ]; then 435*6f773e29SBaban Kenkre /sbin/ifconfig -a4uD | while read intf addr rest; do 436*6f773e29SBaban Kenkre [ $intf = inet ] && [ $addr != 127.0.0.1 ] && 437*6f773e29SBaban Kenkre [ $addr != 0.0.0.0 ] && exit 0 438*6f773e29SBaban Kenkre done && exit $SMF_EXIT_OK 439*6f773e29SBaban Kenkrefi 440*6f773e29SBaban Kenkre 441*6f773e29SBaban Kenkre# Any non-loopback IPv6 interfaces up? 442*6f773e29SBaban Kenkreif [ -n "`/sbin/ifconfig -au6`" ]; then 443*6f773e29SBaban Kenkre /sbin/ifconfig -au6 | while read intf addr rest; do 444*6f773e29SBaban Kenkre [ $intf = inet6 ] && [ $addr != ::1/128 ] && exit 0 445*6f773e29SBaban Kenkre done && exit $SMF_EXIT_OK 446*6f773e29SBaban Kenkrefi 447*6f773e29SBaban Kenkre 448*6f773e29SBaban Kenkre# This service was supposed to configure something yet didn't. Exit 449*6f773e29SBaban Kenkre# with config error. 450*6f773e29SBaban Kenkreexit $SMF_EXIT_ERR_CONFIG 451