xref: /onnv-gate/usr/src/cmd/svc/milestone/net-install (revision 12926:599476a18982)
1*12926SMark.Haywood@Oracle.COM#!/sbin/sh
2*12926SMark.Haywood@Oracle.COM#
3*12926SMark.Haywood@Oracle.COM# CDDL HEADER START
4*12926SMark.Haywood@Oracle.COM#
5*12926SMark.Haywood@Oracle.COM# The contents of this file are subject to the terms of the
6*12926SMark.Haywood@Oracle.COM# Common Development and Distribution License (the "License").
7*12926SMark.Haywood@Oracle.COM# You may not use this file except in compliance with the License.
8*12926SMark.Haywood@Oracle.COM#
9*12926SMark.Haywood@Oracle.COM# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10*12926SMark.Haywood@Oracle.COM# or http://www.opensolaris.org/os/licensing.
11*12926SMark.Haywood@Oracle.COM# See the License for the specific language governing permissions
12*12926SMark.Haywood@Oracle.COM# and limitations under the License.
13*12926SMark.Haywood@Oracle.COM#
14*12926SMark.Haywood@Oracle.COM# When distributing Covered Code, include this CDDL HEADER in each
15*12926SMark.Haywood@Oracle.COM# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16*12926SMark.Haywood@Oracle.COM# If applicable, add the following below this CDDL HEADER, with the
17*12926SMark.Haywood@Oracle.COM# fields enclosed by brackets "[]" replaced with your own identifying
18*12926SMark.Haywood@Oracle.COM# information: Portions Copyright [yyyy] [name of copyright owner]
19*12926SMark.Haywood@Oracle.COM#
20*12926SMark.Haywood@Oracle.COM# CDDL HEADER END
21*12926SMark.Haywood@Oracle.COM#
22*12926SMark.Haywood@Oracle.COM#
23*12926SMark.Haywood@Oracle.COM# Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
24*12926SMark.Haywood@Oracle.COM#
25*12926SMark.Haywood@Oracle.COM
26*12926SMark.Haywood@Oracle.COM. /lib/svc/share/smf_include.sh
27*12926SMark.Haywood@Oracle.COM. /lib/svc/share/net_include.sh
28*12926SMark.Haywood@Oracle.COM
29*12926SMark.Haywood@Oracle.COMIPADM=/sbin/ipadm
30*12926SMark.Haywood@Oracle.COMSVCCFG=/usr/sbin/svccfg
31*12926SMark.Haywood@Oracle.COMSVCPROP=/usr/bin/svcprop
32*12926SMark.Haywood@Oracle.COMSVCADM=/usr/sbin/svcadm
33*12926SMark.Haywood@Oracle.COMROUTE=/sbin/route
34*12926SMark.Haywood@Oracle.COM
35*12926SMark.Haywood@Oracle.COMNET_NWAM_FMRI="svc:/network/physical:nwam"
36*12926SMark.Haywood@Oracle.COMNET_INSTALL_FMRI=$SMF_FMRI
37*12926SMark.Haywood@Oracle.COM
38*12926SMark.Haywood@Oracle.COMNET_V4IF=install_ipv4_interface
39*12926SMark.Haywood@Oracle.COMNET_V6IF=install_ipv6_interface
40*12926SMark.Haywood@Oracle.COM
41*12926SMark.Haywood@Oracle.COMNET_UNDEFINED_STRING_PROP="\"\""
42*12926SMark.Haywood@Oracle.COM
43*12926SMark.Haywood@Oracle.COMnet_install_debug=0
44*12926SMark.Haywood@Oracle.COM
45*12926SMark.Haywood@Oracle.COMunset net_install_name net_install_addrtype net_install_addr \
46*12926SMark.Haywood@Oracle.COM    net_install_dhcpwait net_install_interface_id \
47*12926SMark.Haywood@Oracle.COM    net_install_stateless net_install_stateful net_install_route
48*12926SMark.Haywood@Oracle.COM
49*12926SMark.Haywood@Oracle.COMnet_configure_install_if()
50*12926SMark.Haywood@Oracle.COM{
51*12926SMark.Haywood@Oracle.COM	ipv6_interface=$1
52*12926SMark.Haywood@Oracle.COM
53*12926SMark.Haywood@Oracle.COM	case $net_install_addrtype in
54*12926SMark.Haywood@Oracle.COM	static)
55*12926SMark.Haywood@Oracle.COM		cmd="$IPADM create-addr -T static "
56*12926SMark.Haywood@Oracle.COM		cmd=$cmd"-a local=$net_install_addr $net_install_name"
57*12926SMark.Haywood@Oracle.COM		;;
58*12926SMark.Haywood@Oracle.COM
59*12926SMark.Haywood@Oracle.COM	dhcp)
60*12926SMark.Haywood@Oracle.COM		dhcpwait=""
61*12926SMark.Haywood@Oracle.COM		if [ "$net_install_dhcpwait" != "" ]; then
62*12926SMark.Haywood@Oracle.COM			dhcpwait="-w $net_install_dhcpwait"
63*12926SMark.Haywood@Oracle.COM		fi
64*12926SMark.Haywood@Oracle.COM
65*12926SMark.Haywood@Oracle.COM		cmd="$IPADM create-addr -T dhcp $dhcpwait $net_install_name"
66*12926SMark.Haywood@Oracle.COM		;;
67*12926SMark.Haywood@Oracle.COM	addrconf)
68*12926SMark.Haywood@Oracle.COM		interface_id=""
69*12926SMark.Haywood@Oracle.COM		if [ "$net_install_interface_id" != "" ]; then
70*12926SMark.Haywood@Oracle.COM			interface_id="-i $net_install_interface_id"
71*12926SMark.Haywood@Oracle.COM		fi
72*12926SMark.Haywood@Oracle.COM
73*12926SMark.Haywood@Oracle.COM		state=""
74*12926SMark.Haywood@Oracle.COM		if [ "$net_install_stateless" != "" ]; then
75*12926SMark.Haywood@Oracle.COM			state="-p stateless=$net_install_stateless"
76*12926SMark.Haywood@Oracle.COM		fi
77*12926SMark.Haywood@Oracle.COM
78*12926SMark.Haywood@Oracle.COM		if [ "$net_install_stateful" != "" ]; then
79*12926SMark.Haywood@Oracle.COM			if [ "$state" = "" ]; then
80*12926SMark.Haywood@Oracle.COM				state="-p stateful=$net_install_stateful"
81*12926SMark.Haywood@Oracle.COM			else
82*12926SMark.Haywood@Oracle.COM				state=$state",stateful=$net_install_stateful"
83*12926SMark.Haywood@Oracle.COM			fi
84*12926SMark.Haywood@Oracle.COM		fi
85*12926SMark.Haywood@Oracle.COM
86*12926SMark.Haywood@Oracle.COM		cmd="$IPADM create-addr -T addrconf "
87*12926SMark.Haywood@Oracle.COM		cmd=$cmd"$interface_id $state $net_install_name"
88*12926SMark.Haywood@Oracle.COM		;;
89*12926SMark.Haywood@Oracle.COM	esac
90*12926SMark.Haywood@Oracle.COM
91*12926SMark.Haywood@Oracle.COM	$cmd
92*12926SMark.Haywood@Oracle.COM	if [ $? -ne 0 ]; then
93*12926SMark.Haywood@Oracle.COM		net_record_err "Error configuring interface:\n\"$cmd\"" $?
94*12926SMark.Haywood@Oracle.COM		return $SMF_EXIT_ERR_FATAL
95*12926SMark.Haywood@Oracle.COM	fi
96*12926SMark.Haywood@Oracle.COM
97*12926SMark.Haywood@Oracle.COM	if [ "$net_install_route" != "" ]; then
98*12926SMark.Haywood@Oracle.COM		if [ $ipv6_interface == 1 ]; then
99*12926SMark.Haywood@Oracle.COM			details="-inet6 default"
100*12926SMark.Haywood@Oracle.COM		else
101*12926SMark.Haywood@Oracle.COM			details="default"
102*12926SMark.Haywood@Oracle.COM		fi
103*12926SMark.Haywood@Oracle.COM		ifp=`echo $net_install_name | /usr/bin/cut -f1 -d'/'`
104*12926SMark.Haywood@Oracle.COM		details="$details $net_install_route -ifp $ifp"
105*12926SMark.Haywood@Oracle.COM		cmd="$ROUTE add $details"
106*12926SMark.Haywood@Oracle.COM		$cmd
107*12926SMark.Haywood@Oracle.COM		cmd="$ROUTE get $details"
108*12926SMark.Haywood@Oracle.COM		$cmd
109*12926SMark.Haywood@Oracle.COM		if [ $? -ne 0 ]; then
110*12926SMark.Haywood@Oracle.COM			err=$?
111*12926SMark.Haywood@Oracle.COM			msg="Error creating default route:\n\"$cmd\""
112*12926SMark.Haywood@Oracle.COM			net_record_err "$msg" $err
113*12926SMark.Haywood@Oracle.COM			return $SMF_EXIT_ERR_FATAL
114*12926SMark.Haywood@Oracle.COM		fi
115*12926SMark.Haywood@Oracle.COM		rootdir=/etc/svc/volatile
116*12926SMark.Haywood@Oracle.COM		/usr/bin/mkdir -p $rootdir/etc/inet
117*12926SMark.Haywood@Oracle.COM		if [ $? -ne 0 ]; then
118*12926SMark.Haywood@Oracle.COM			err=$?
119*12926SMark.Haywood@Oracle.COM			msg="Error creating \"$rootdir/etc/inet\" directory"
120*12926SMark.Haywood@Oracle.COM			net_record_err "$msg" $err
121*12926SMark.Haywood@Oracle.COM			return $SMF_EXIT_ERR_FATAL
122*12926SMark.Haywood@Oracle.COM		fi
123*12926SMark.Haywood@Oracle.COM		cmd="$ROUTE -R $rootdir -p add $details"
124*12926SMark.Haywood@Oracle.COM		$cmd
125*12926SMark.Haywood@Oracle.COM		if [ $? -ne 0 ]; then
126*12926SMark.Haywood@Oracle.COM			err=$?
127*12926SMark.Haywood@Oracle.COM			msg="Error adding persistent default route:\n\"$cmd\""
128*12926SMark.Haywood@Oracle.COM			net_record_err "$msg" $err
129*12926SMark.Haywood@Oracle.COM			return $SMF_EXIT_ERR_FATAL
130*12926SMark.Haywood@Oracle.COM		fi
131*12926SMark.Haywood@Oracle.COM	fi
132*12926SMark.Haywood@Oracle.COM
133*12926SMark.Haywood@Oracle.COM	return $SMF_EXIT_OK
134*12926SMark.Haywood@Oracle.COM}
135*12926SMark.Haywood@Oracle.COM
136*12926SMark.Haywood@Oracle.COMnet_process_v4_pg()
137*12926SMark.Haywood@Oracle.COM{
138*12926SMark.Haywood@Oracle.COM	net_install_name=""
139*12926SMark.Haywood@Oracle.COM	net_install_addrtype=""
140*12926SMark.Haywood@Oracle.COM	net_install_addr=""
141*12926SMark.Haywood@Oracle.COM	net_install_dhcpwait=""
142*12926SMark.Haywood@Oracle.COM	net_install_route=""
143*12926SMark.Haywood@Oracle.COM
144*12926SMark.Haywood@Oracle.COM	#
145*12926SMark.Haywood@Oracle.COM	# Retrieve the mandatory interface name property value. If
146*12926SMark.Haywood@Oracle.COM	# the value is empty, then no interface is configured.
147*12926SMark.Haywood@Oracle.COM	#
148*12926SMark.Haywood@Oracle.COM	prop=`$SVCPROP -p $NET_V4IF/name $NET_INSTALL_FMRI`
149*12926SMark.Haywood@Oracle.COM	if [ $? -ne 0 -o "$prop" = "$NET_UNDEFINED_STRING_PROP" ]; then
150*12926SMark.Haywood@Oracle.COM		return $SMF_EXIT_OK
151*12926SMark.Haywood@Oracle.COM	fi
152*12926SMark.Haywood@Oracle.COM	net_install_name=$prop
153*12926SMark.Haywood@Oracle.COM
154*12926SMark.Haywood@Oracle.COM	#
155*12926SMark.Haywood@Oracle.COM	# Retrieve the mandatory address type property value. The two
156*12926SMark.Haywood@Oracle.COM	# valid values are "static" and "dhcp".
157*12926SMark.Haywood@Oracle.COM	#
158*12926SMark.Haywood@Oracle.COM	prop=`$SVCPROP -p $NET_V4IF/address_type $NET_INSTALL_FMRI`
159*12926SMark.Haywood@Oracle.COM	if [ $? -ne 0 -o "$prop" = "$NET_UNDEFINED_STRING_PROP" ]; then
160*12926SMark.Haywood@Oracle.COM		msg="No \"address_type\" property defined in the "
161*12926SMark.Haywood@Oracle.COM		msg=$msg"\"$NET_V4IF\" property group"
162*12926SMark.Haywood@Oracle.COM		net_record_err "$msg" 0
163*12926SMark.Haywood@Oracle.COM		return $SMF_EXIT_ERR_CONFIG
164*12926SMark.Haywood@Oracle.COM	fi
165*12926SMark.Haywood@Oracle.COM	case $prop in
166*12926SMark.Haywood@Oracle.COM	static | dhcp)
167*12926SMark.Haywood@Oracle.COM		net_install_addrtype=$prop
168*12926SMark.Haywood@Oracle.COM		;;
169*12926SMark.Haywood@Oracle.COM	*)
170*12926SMark.Haywood@Oracle.COM		msg="Bad value, \"$prop\", defined for the \"address_type\" "
171*12926SMark.Haywood@Oracle.COM		msg=$msg"property in the \"$NET_V4IF\" property group"
172*12926SMark.Haywood@Oracle.COM		net_record_err "$msg" 0
173*12926SMark.Haywood@Oracle.COM		return $SMF_EXIT_ERR_CONFIG
174*12926SMark.Haywood@Oracle.COM		;;
175*12926SMark.Haywood@Oracle.COM	esac
176*12926SMark.Haywood@Oracle.COM
177*12926SMark.Haywood@Oracle.COM	#
178*12926SMark.Haywood@Oracle.COM	# Retrieve the static address property value. The address property
179*12926SMark.Haywood@Oracle.COM	# only applies to static address type configurations. If not
180*12926SMark.Haywood@Oracle.COM	# configuring a static address, then the property should still have
181*12926SMark.Haywood@Oracle.COM	# its default value of 0.0.0.0/0.
182*12926SMark.Haywood@Oracle.COM	#
183*12926SMark.Haywood@Oracle.COM	prop=`$SVCPROP -p $NET_V4IF/static_address $NET_INSTALL_FMRI`
184*12926SMark.Haywood@Oracle.COM	if [ $? -eq 0 -a "$prop" != "$NET_UNDEFINED_STRING_PROP" ]; then
185*12926SMark.Haywood@Oracle.COM		if [ "$net_install_addrtype" = "dhcp" ]; then
186*12926SMark.Haywood@Oracle.COM			if [ "$prop" != "${NET_INADDR_ANY}/0" ]; then
187*12926SMark.Haywood@Oracle.COM				msg="Warning: static address ignored "
188*12926SMark.Haywood@Oracle.COM				msg=$msg"in the \"$NET_V4IF\ property group"
189*12926SMark.Haywood@Oracle.COM				net_record_err "$msg" 0
190*12926SMark.Haywood@Oracle.COM			fi
191*12926SMark.Haywood@Oracle.COM		else
192*12926SMark.Haywood@Oracle.COM			if [ "$prop" = "${NET_INADDR_ANY}/0" ]; then
193*12926SMark.Haywood@Oracle.COM				msg="Error: static address required in the "
194*12926SMark.Haywood@Oracle.COM				msg=$msg"\"$NET_V4IF\" property group"
195*12926SMark.Haywood@Oracle.COM				net_record_err "$msg" 0
196*12926SMark.Haywood@Oracle.COM				return $SMF_EXIT_ERR_CONFIG
197*12926SMark.Haywood@Oracle.COM			fi
198*12926SMark.Haywood@Oracle.COM			net_install_addr=$prop
199*12926SMark.Haywood@Oracle.COM		fi
200*12926SMark.Haywood@Oracle.COM	else
201*12926SMark.Haywood@Oracle.COM		if [ "$net_install_addrtype" = "static" ]; then
202*12926SMark.Haywood@Oracle.COM			msg="Error: static address required in the "
203*12926SMark.Haywood@Oracle.COM			msg=$msg"\"$NET_V4IF\" property group"
204*12926SMark.Haywood@Oracle.COM			net_record_err "$msg" 0
205*12926SMark.Haywood@Oracle.COM			return $SMF_EXIT_ERR_CONFIG
206*12926SMark.Haywood@Oracle.COM		fi
207*12926SMark.Haywood@Oracle.COM	fi
208*12926SMark.Haywood@Oracle.COM
209*12926SMark.Haywood@Oracle.COM	#
210*12926SMark.Haywood@Oracle.COM	# Retrieve the optional DHCP wait property value.
211*12926SMark.Haywood@Oracle.COM	#
212*12926SMark.Haywood@Oracle.COM	prop=`$SVCPROP -p $NET_V4IF/dhcp_wait $NET_INSTALL_FMRI`
213*12926SMark.Haywood@Oracle.COM	if [ $? -eq 0 -a "$prop" != "$NET_UNDEFINED_STRING_PROP" ]; then
214*12926SMark.Haywood@Oracle.COM		if [ "$net_install_addrtype" != "dhcp" ]; then
215*12926SMark.Haywood@Oracle.COM			if [ "$prop" != "120" ]; then
216*12926SMark.Haywood@Oracle.COM				msg="Warning: DHCP wait value ignored in the "
217*12926SMark.Haywood@Oracle.COM				msg=$msg"\"$NET_V4IF\" property group"
218*12926SMark.Haywood@Oracle.COM				net_record_err "$msg" 0
219*12926SMark.Haywood@Oracle.COM			fi
220*12926SMark.Haywood@Oracle.COM		else
221*12926SMark.Haywood@Oracle.COM			net_install_dhcpwait=$prop
222*12926SMark.Haywood@Oracle.COM		fi
223*12926SMark.Haywood@Oracle.COM	fi
224*12926SMark.Haywood@Oracle.COM
225*12926SMark.Haywood@Oracle.COM	#
226*12926SMark.Haywood@Oracle.COM	# Retrieve the optional default route property value.
227*12926SMark.Haywood@Oracle.COM	#
228*12926SMark.Haywood@Oracle.COM	prop=`$SVCPROP -p $NET_V4IF/default_route $NET_INSTALL_FMRI`
229*12926SMark.Haywood@Oracle.COM	if [ $? -eq 0 -a "$prop" != "$NET_UNDEFINED_STRING_PROP" ]; then
230*12926SMark.Haywood@Oracle.COM		if [ "$prop" != "$NET_INADDR_ANY" ]; then
231*12926SMark.Haywood@Oracle.COM			net_install_route=$prop
232*12926SMark.Haywood@Oracle.COM		fi
233*12926SMark.Haywood@Oracle.COM	fi
234*12926SMark.Haywood@Oracle.COM
235*12926SMark.Haywood@Oracle.COM	net_configure_install_if 0
236*12926SMark.Haywood@Oracle.COM
237*12926SMark.Haywood@Oracle.COM	return $?
238*12926SMark.Haywood@Oracle.COM}
239*12926SMark.Haywood@Oracle.COM
240*12926SMark.Haywood@Oracle.COMnet_process_v6_pg()
241*12926SMark.Haywood@Oracle.COM{
242*12926SMark.Haywood@Oracle.COM	net_install_name=""
243*12926SMark.Haywood@Oracle.COM	net_install_addrtype=""
244*12926SMark.Haywood@Oracle.COM	net_install_addr=""
245*12926SMark.Haywood@Oracle.COM	net_install_stateless=""
246*12926SMark.Haywood@Oracle.COM	net_install_stateful=""
247*12926SMark.Haywood@Oracle.COM	net_install_interface_id=""
248*12926SMark.Haywood@Oracle.COM	net_install_route=""
249*12926SMark.Haywood@Oracle.COM
250*12926SMark.Haywood@Oracle.COM	#
251*12926SMark.Haywood@Oracle.COM	# Retrieve the mandatory interface name property value. If
252*12926SMark.Haywood@Oracle.COM	# the value is empty, then no interface is configured.
253*12926SMark.Haywood@Oracle.COM	#
254*12926SMark.Haywood@Oracle.COM	prop=`$SVCPROP -p $NET_V6IF/name $NET_INSTALL_FMRI`
255*12926SMark.Haywood@Oracle.COM	if [ $? -ne 0 -o "$prop" = "$NET_UNDEFINED_STRING_PROP" ]; then
256*12926SMark.Haywood@Oracle.COM		return $SMF_EXIT_OK
257*12926SMark.Haywood@Oracle.COM	fi
258*12926SMark.Haywood@Oracle.COM	net_install_name=$prop
259*12926SMark.Haywood@Oracle.COM
260*12926SMark.Haywood@Oracle.COM	#
261*12926SMark.Haywood@Oracle.COM	# Retrieve the mandatory address type property value. The two
262*12926SMark.Haywood@Oracle.COM	# valid values are "static" and "addrconf".
263*12926SMark.Haywood@Oracle.COM	#
264*12926SMark.Haywood@Oracle.COM	prop=`$SVCPROP -p $NET_V6IF/address_type $NET_INSTALL_FMRI`
265*12926SMark.Haywood@Oracle.COM	if [ $? -ne 0 -o "$prop" = "$NET_UNDEFINED_STRING_PROP" ]; then
266*12926SMark.Haywood@Oracle.COM		msg="No \"address_type\" property defined in the "
267*12926SMark.Haywood@Oracle.COM		msg=$msg"\"$NET_V6IF\" property group"
268*12926SMark.Haywood@Oracle.COM		net_record_err "$msg" 0
269*12926SMark.Haywood@Oracle.COM		return $SMF_EXIT_ERR_CONFIG
270*12926SMark.Haywood@Oracle.COM	fi
271*12926SMark.Haywood@Oracle.COM	case $prop in
272*12926SMark.Haywood@Oracle.COM	static | addrconf)
273*12926SMark.Haywood@Oracle.COM		net_install_addrtype=$prop
274*12926SMark.Haywood@Oracle.COM		;;
275*12926SMark.Haywood@Oracle.COM	*)
276*12926SMark.Haywood@Oracle.COM		msg="Bad value \"$prop\" defined for \"address_type\""
277*12926SMark.Haywood@Oracle.COM		net_record_err "$msg" 0
278*12926SMark.Haywood@Oracle.COM		return $SMF_EXIT_ERR_CONFIG
279*12926SMark.Haywood@Oracle.COM		;;
280*12926SMark.Haywood@Oracle.COM	esac
281*12926SMark.Haywood@Oracle.COM
282*12926SMark.Haywood@Oracle.COM	#
283*12926SMark.Haywood@Oracle.COM	# Retrieve the static address property value. The address property
284*12926SMark.Haywood@Oracle.COM	# only applies to static address type configurations. If not
285*12926SMark.Haywood@Oracle.COM	# configuring a static address, then the property should still have
286*12926SMark.Haywood@Oracle.COM	# its default value of ::0/0.
287*12926SMark.Haywood@Oracle.COM	#
288*12926SMark.Haywood@Oracle.COM	prop=`$SVCPROP -p $NET_V6IF/static_address $NET_INSTALL_FMRI`
289*12926SMark.Haywood@Oracle.COM	if [ $? -eq 0 -a "$prop" != "$NET_UNDEFINED_STRING_PROP" ]; then
290*12926SMark.Haywood@Oracle.COM		if [ "$net_install_addrtype" = "addrconf" ]; then
291*12926SMark.Haywood@Oracle.COM			if [ "$prop" != "${NET_IN6ADDR_ANY_INIT}/0" ]; then
292*12926SMark.Haywood@Oracle.COM				msg="Warning: static address ignored in the "
293*12926SMark.Haywood@Oracle.COM				msg=$msg"\"$NET_V6IF\" property group"
294*12926SMark.Haywood@Oracle.COM				net_record_err "$msg" 0
295*12926SMark.Haywood@Oracle.COM			fi
296*12926SMark.Haywood@Oracle.COM		else
297*12926SMark.Haywood@Oracle.COM			if [ "$prop" = "${NET_IN6ADDR_ANY_INIT}/0" ]; then
298*12926SMark.Haywood@Oracle.COM				msg="Error: static address required in the "
299*12926SMark.Haywood@Oracle.COM				msg=$msg"\"$NET_V6IF\" property group"
300*12926SMark.Haywood@Oracle.COM				net_record_err "$msg" 0
301*12926SMark.Haywood@Oracle.COM				return $SMF_EXIT_ERR_CONFIG
302*12926SMark.Haywood@Oracle.COM			fi
303*12926SMark.Haywood@Oracle.COM			net_install_addr=$prop
304*12926SMark.Haywood@Oracle.COM		fi
305*12926SMark.Haywood@Oracle.COM	else
306*12926SMark.Haywood@Oracle.COM		if [ "$net_install_addrtype" = "static" ]; then
307*12926SMark.Haywood@Oracle.COM			msg="Error: static address required in the "
308*12926SMark.Haywood@Oracle.COM			msg=$msg"\"$NET_V6IF\" property group"
309*12926SMark.Haywood@Oracle.COM			net_record_err "$msg" 0
310*12926SMark.Haywood@Oracle.COM			return $SMF_EXIT_ERR_CONFIG
311*12926SMark.Haywood@Oracle.COM		fi
312*12926SMark.Haywood@Oracle.COM
313*12926SMark.Haywood@Oracle.COM	fi
314*12926SMark.Haywood@Oracle.COM
315*12926SMark.Haywood@Oracle.COM	#
316*12926SMark.Haywood@Oracle.COM	# Retrieve the optional interface id property value. The
317*12926SMark.Haywood@Oracle.COM	# property only applies to addrconf address type configurations.
318*12926SMark.Haywood@Oracle.COM	# If configuring a static address, then the property should still
319*12926SMark.Haywood@Oracle.COM	# have its default value of ::0/0.
320*12926SMark.Haywood@Oracle.COM	#
321*12926SMark.Haywood@Oracle.COM	prop=`$SVCPROP -p $NET_V6IF/interface_id $NET_INSTALL_FMRI`
322*12926SMark.Haywood@Oracle.COM	if [ $? -eq 0 -a "$prop" != "$NET_UNDEFINED_STRING_PROP" ]; then
323*12926SMark.Haywood@Oracle.COM		if [ "$prop" != "${NET_IN6ADDR_ANY_INIT}/0" ]; then
324*12926SMark.Haywood@Oracle.COM			if [ "$net_install_addrtype" != "addrconf" ]; then
325*12926SMark.Haywood@Oracle.COM				msg="Warning: interface id value ignored in "
326*12926SMark.Haywood@Oracle.COM				msg=$msg"the \"$NET_V6IF\" property group"
327*12926SMark.Haywood@Oracle.COM				net_record_err "$msg" 0
328*12926SMark.Haywood@Oracle.COM			else
329*12926SMark.Haywood@Oracle.COM				net_install_interface_id=$prop
330*12926SMark.Haywood@Oracle.COM			fi
331*12926SMark.Haywood@Oracle.COM		fi
332*12926SMark.Haywood@Oracle.COM	fi
333*12926SMark.Haywood@Oracle.COM
334*12926SMark.Haywood@Oracle.COM	#
335*12926SMark.Haywood@Oracle.COM	# Retrieve the optional stateless property value. The property
336*12926SMark.Haywood@Oracle.COM	# only applies to addrconf address type configurations. If
337*12926SMark.Haywood@Oracle.COM	# configuring a static address, then the property should still
338*12926SMark.Haywood@Oracle.COM	# have its default value of "yes".
339*12926SMark.Haywood@Oracle.COM	#
340*12926SMark.Haywood@Oracle.COM	prop=`$SVCPROP -p $NET_V6IF/stateless $NET_INSTALL_FMRI`
341*12926SMark.Haywood@Oracle.COM	if [ $? -eq 0 -a "$prop" != "$NET_UNDEFINED_STRING_PROP" ]; then
342*12926SMark.Haywood@Oracle.COM		case $prop in
343*12926SMark.Haywood@Oracle.COM		yes)
344*12926SMark.Haywood@Oracle.COM			net_install_stateless=$prop
345*12926SMark.Haywood@Oracle.COM			;;
346*12926SMark.Haywood@Oracle.COM		no)
347*12926SMark.Haywood@Oracle.COM			if [ "$net_install_addrtype" != "addrconf" ]; then
348*12926SMark.Haywood@Oracle.COM				msg="Warning: stateless value ignored in the "
349*12926SMark.Haywood@Oracle.COM				msg=$msg"\"$NET_V6IF\" property group"
350*12926SMark.Haywood@Oracle.COM				net_record_err "$msg" 0
351*12926SMark.Haywood@Oracle.COM			else
352*12926SMark.Haywood@Oracle.COM				net_install_stateless=$prop
353*12926SMark.Haywood@Oracle.COM			fi
354*12926SMark.Haywood@Oracle.COM			;;
355*12926SMark.Haywood@Oracle.COM		*)
356*12926SMark.Haywood@Oracle.COM			msg="Bad value \"$prop\" defined for the \"stateless\""
357*12926SMark.Haywood@Oracle.COM			msg=$msg" property in the \"$NET_V6IF\" property group"
358*12926SMark.Haywood@Oracle.COM			net_record_err "$msg" 0
359*12926SMark.Haywood@Oracle.COM			return $SMF_EXIT_ERR_CONFIG
360*12926SMark.Haywood@Oracle.COM		;;
361*12926SMark.Haywood@Oracle.COM		esac
362*12926SMark.Haywood@Oracle.COM	fi
363*12926SMark.Haywood@Oracle.COM
364*12926SMark.Haywood@Oracle.COM	#
365*12926SMark.Haywood@Oracle.COM	# Retrieve the optional stateful property value. The property
366*12926SMark.Haywood@Oracle.COM	# only applies to addrconf address type configurations. If
367*12926SMark.Haywood@Oracle.COM	# configuring a static address, then the property should still
368*12926SMark.Haywood@Oracle.COM	# have its default value of "yes".
369*12926SMark.Haywood@Oracle.COM	#
370*12926SMark.Haywood@Oracle.COM	prop=`$SVCPROP -p $NET_V6IF/stateful $NET_INSTALL_FMRI`
371*12926SMark.Haywood@Oracle.COM	if [ $? -eq 0 -a "$prop" != "$NET_UNDEFINED_STRING_PROP" ]; then
372*12926SMark.Haywood@Oracle.COM		case $prop in
373*12926SMark.Haywood@Oracle.COM		yes)
374*12926SMark.Haywood@Oracle.COM			net_install_stateful=$prop
375*12926SMark.Haywood@Oracle.COM			;;
376*12926SMark.Haywood@Oracle.COM		no)
377*12926SMark.Haywood@Oracle.COM			if [ "$net_install_addrtype" != "addrconf" ]; then
378*12926SMark.Haywood@Oracle.COM				msg="Warning: stateless value ignored in the "
379*12926SMark.Haywood@Oracle.COM				msg=$msg"\"$NET_V6IF\" property group"
380*12926SMark.Haywood@Oracle.COM				net_record_err "$msg" 0
381*12926SMark.Haywood@Oracle.COM			else
382*12926SMark.Haywood@Oracle.COM				net_install_stateful=$prop
383*12926SMark.Haywood@Oracle.COM			fi
384*12926SMark.Haywood@Oracle.COM			;;
385*12926SMark.Haywood@Oracle.COM		*)
386*12926SMark.Haywood@Oracle.COM			msg="Bad value \"$prop\" defined for the \"stateless\""
387*12926SMark.Haywood@Oracle.COM			msg=$msg" property in the \"$NET_V6IF\" property group"
388*12926SMark.Haywood@Oracle.COM			net_record_err "$msg" 0
389*12926SMark.Haywood@Oracle.COM			return $SMF_EXIT_ERR_CONFIG
390*12926SMark.Haywood@Oracle.COM		;;
391*12926SMark.Haywood@Oracle.COM		esac
392*12926SMark.Haywood@Oracle.COM	fi
393*12926SMark.Haywood@Oracle.COM
394*12926SMark.Haywood@Oracle.COM	#
395*12926SMark.Haywood@Oracle.COM	# Retrieve the optional default route property value.
396*12926SMark.Haywood@Oracle.COM	#
397*12926SMark.Haywood@Oracle.COM	prop=`$SVCPROP -p $NET_V6IF/default_route $NET_INSTALL_FMRI`
398*12926SMark.Haywood@Oracle.COM	if [ $? -eq 0 -a "$prop" != "$NET_UNDEFINED_STRING_PROP" ]; then
399*12926SMark.Haywood@Oracle.COM		if [ "$prop" != "$NET_IN6ADDR_ANY_INIT" ]; then
400*12926SMark.Haywood@Oracle.COM			net_install_route=$prop
401*12926SMark.Haywood@Oracle.COM		fi
402*12926SMark.Haywood@Oracle.COM	fi
403*12926SMark.Haywood@Oracle.COM
404*12926SMark.Haywood@Oracle.COM	net_configure_install_if 1
405*12926SMark.Haywood@Oracle.COM
406*12926SMark.Haywood@Oracle.COM	return $?
407*12926SMark.Haywood@Oracle.COM}
408*12926SMark.Haywood@Oracle.COM
409*12926SMark.Haywood@Oracle.COMnet_process_install()
410*12926SMark.Haywood@Oracle.COM{
411*12926SMark.Haywood@Oracle.COM	vout=`$SVCCFG -s $NET_INSTALL_FMRI validate 2>&1`
412*12926SMark.Haywood@Oracle.COM	if [ "$vout" != "" ]; then
413*12926SMark.Haywood@Oracle.COM		msg="Validation errors in $NET_INSTALL_FMRI:\n$vout"
414*12926SMark.Haywood@Oracle.COM		net_record_err "$msg" 0
415*12926SMark.Haywood@Oracle.COM		return $SMF_EXIT_ERR_CONFIG
416*12926SMark.Haywood@Oracle.COM	fi
417*12926SMark.Haywood@Oracle.COM
418*12926SMark.Haywood@Oracle.COM	ecode=$SMF_EXIT_OK
419*12926SMark.Haywood@Oracle.COM	errs=0
420*12926SMark.Haywood@Oracle.COM	ifcnt=0
421*12926SMark.Haywood@Oracle.COM	for intf in $NET_V4IF $NET_V6IF
422*12926SMark.Haywood@Oracle.COM	do
423*12926SMark.Haywood@Oracle.COM		pg=`$SVCPROP -p $intf $NET_INSTALL_FMRI`
424*12926SMark.Haywood@Oracle.COM		if [ $? -eq 0 ]; then
425*12926SMark.Haywood@Oracle.COM			if service_is_enabled $NET_NWAM_FMRI; then
426*12926SMark.Haywood@Oracle.COM				msg="NWAM enabled. Install static "
427*12926SMark.Haywood@Oracle.COM				msg=$msg"configuration ignored."
428*12926SMark.Haywood@Oracle.COM				net_record_err "$msg" 0
429*12926SMark.Haywood@Oracle.COM				errs=`expr $errs + 1`
430*12926SMark.Haywood@Oracle.COM				ecode=$SMF_EXIT_ERR_CONFIG
431*12926SMark.Haywood@Oracle.COM			else
432*12926SMark.Haywood@Oracle.COM				if [ "$intf" == "$NET_V4IF" ]; then
433*12926SMark.Haywood@Oracle.COM					net_process_v4_pg
434*12926SMark.Haywood@Oracle.COM				else
435*12926SMark.Haywood@Oracle.COM					net_process_v6_pg
436*12926SMark.Haywood@Oracle.COM				fi
437*12926SMark.Haywood@Oracle.COM				if [ $? -ne $SMF_EXIT_OK ]; then
438*12926SMark.Haywood@Oracle.COM					#
439*12926SMark.Haywood@Oracle.COM				    	# Last error wins.
440*12926SMark.Haywood@Oracle.COM					#
441*12926SMark.Haywood@Oracle.COM					ecode=$?
442*12926SMark.Haywood@Oracle.COM					errs=`expr $errs + 1`
443*12926SMark.Haywood@Oracle.COM				else
444*12926SMark.Haywood@Oracle.COM					ifcnt=`expr $ifcnt + 1`
445*12926SMark.Haywood@Oracle.COM				fi
446*12926SMark.Haywood@Oracle.COM			fi
447*12926SMark.Haywood@Oracle.COM			$SVCCFG -s $NET_INSTALL_FMRI delpg $intf
448*12926SMark.Haywood@Oracle.COM			$SVCCFG -s $NET_INSTALL_FMRI refresh
449*12926SMark.Haywood@Oracle.COM		fi
450*12926SMark.Haywood@Oracle.COM	done
451*12926SMark.Haywood@Oracle.COM
452*12926SMark.Haywood@Oracle.COM 	if [ $net_install_debug -eq 1 ]; then
453*12926SMark.Haywood@Oracle.COM		if [ $errs -ne 0 ]; then
454*12926SMark.Haywood@Oracle.COM			echo "$errs errors encountered" \
455*12926SMark.Haywood@Oracle.COM			    "configuring interfaces on behalf of install"
456*12926SMark.Haywood@Oracle.COM		fi
457*12926SMark.Haywood@Oracle.COM
458*12926SMark.Haywood@Oracle.COM		if [ $ifcnt -ne 0 ]; then
459*12926SMark.Haywood@Oracle.COM			echo "$ifcnt interfaces configured on" \
460*12926SMark.Haywood@Oracle.COM			    "behalf of install"
461*12926SMark.Haywood@Oracle.COM		fi
462*12926SMark.Haywood@Oracle.COM	fi
463*12926SMark.Haywood@Oracle.COM
464*12926SMark.Haywood@Oracle.COM	return $ecode
465*12926SMark.Haywood@Oracle.COM}
466*12926SMark.Haywood@Oracle.COM
467*12926SMark.Haywood@Oracle.COM#
468*12926SMark.Haywood@Oracle.COM# The network/install service will be enabled by the install derived profile
469*12926SMark.Haywood@Oracle.COM# after the intial install. The service will disable itself after processing
470*12926SMark.Haywood@Oracle.COM# the install defined property values.
471*12926SMark.Haywood@Oracle.COM#
472*12926SMark.Haywood@Oracle.COM# When the non-global shared-IP stack zone boots, it tries to bring up this
473*12926SMark.Haywood@Oracle.COM# service as well. We just want to exit successfully.
474*12926SMark.Haywood@Oracle.COM#
475*12926SMark.Haywood@Oracle.COMif smf_is_nonglobalzone; then
476*12926SMark.Haywood@Oracle.COM	if [ `/sbin/zonename -t` = shared ]; then
477*12926SMark.Haywood@Oracle.COM		$SVCADM disable $NET_INSTALL_FMRI
478*12926SMark.Haywood@Oracle.COM		exit $SMF_EXIT_OK
479*12926SMark.Haywood@Oracle.COM	fi
480*12926SMark.Haywood@Oracle.COMfi
481*12926SMark.Haywood@Oracle.COM
482*12926SMark.Haywood@Oracle.COMnet_process_install || exit $?
483*12926SMark.Haywood@Oracle.COM
484*12926SMark.Haywood@Oracle.COM$SVCADM disable $NET_INSTALL_FMRI
485*12926SMark.Haywood@Oracle.COMexit $SMF_EXIT_OK
486