xref: /titanic_51/usr/src/cmd/svc/milestone/net-nwam (revision 45e662eb8429b38c18931ebeed30f2e5287ae51b)
1#!/sbin/sh
2#
3# CDDL HEADER START
4#
5# The contents of this file are subject to the terms of the
6# Common Development and Distribution License (the "License").
7# You may not use this file except in compliance with the License.
8#
9# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10# or http://www.opensolaris.org/os/licensing.
11# See the License for the specific language governing permissions
12# and limitations under the License.
13#
14# When distributing Covered Code, include this CDDL HEADER in each
15# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16# If applicable, add the following below this CDDL HEADER, with the
17# fields enclosed by brackets "[]" replaced with your own identifying
18# information: Portions Copyright [yyyy] [name of copyright owner]
19#
20# CDDL HEADER END
21#
22#
23# Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
24#
25
26. /lib/svc/share/smf_include.sh
27. /lib/svc/share/net_include.sh
28
29# FMRI constants
30IPSEC_IKE_FMRI="svc:/network/ipsec/ike"
31IPSEC_POLICY_FMRI="svc:/network/ipsec/policy"
32IPFILTER_FMRI="svc:/network/ipfilter:default"
33NIS_CLIENT_FMRI="svc:/network/nis/client:default"
34NET_PHYS_FMRI="svc:/network/physical:default"
35NET_NWAM_FMRI="svc:/network/physical:nwam"
36NET_LOC_FMRI="svc:/network/location:default"
37NFS_MAPID_FMRI="svc:/network/nfs/mapid:default"
38
39#
40# Default *.conf files
41# Set appropriate config SMF property to these files when NWAM is stopped
42# and corresponding config properties in the Legacy location are emtpy
43#
44IPF6_DEFAULT_CONFIG_FILE=/etc/ipf/ipf6.conf
45IPNAT_DEFAULT_CONFIG_FILE=/etc/ipf/ipnat.conf
46IPPOOL_DEFAULT_CONFIG_FILE=/etc/ipf/ippool.conf
47IPSEC_IKE_DEFAULT_CONFIG_FILE=/etc/inet/ike/config
48IPSEC_POLICY_DEFAULT_CONFIG_FILE=/etc/inet/ipsecinit.conf
49
50# commands
51BASENAME=/usr/bin/basename
52CAT=/usr/bin/cat
53CP=/usr/bin/cp
54DOMAINNAME=/usr/bin/domainname
55GREP=/usr/bin/grep
56LDAPCLIENT=/usr/sbin/ldapclient
57MKDIR=/usr/bin/mkdir
58MKFIFO=/usr/bin/mkfifo
59NAWK=/usr/bin/nawk
60NWAMCFG=/usr/sbin/nwamcfg
61RM=/usr/bin/rm
62SVCADM=/usr/sbin/svcadm
63SVCCFG=/usr/sbin/svccfg
64SVCPROP=/usr/bin/svcprop
65
66# Path to directories
67# We don't have a writable file system so we write to /etc/svc/volatile and
68# then later copy anything interesting to /etc/nwam.
69VOL_NWAM_PATH=/etc/svc/volatile/nwam
70VOL_LEGACY_PATH=$VOL_NWAM_PATH/Legacy
71PERM_LEGACY_PATH=/etc/nwam/loc/Legacy
72NIS_BIND_PATH=/var/yp/binding
73
74#
75# copy_to_legacy_loc <file>
76#
77# Copies the file to the Legacy location directory
78# (in /etc/svc/volatile/nwam/Legacy)
79#
80copy_to_legacy_loc() {
81	$MKDIR -p $VOL_LEGACY_PATH
82	if [ -f "$1" ]; then
83		$CP -p $1 $VOL_LEGACY_PATH
84	fi
85}
86
87#
88# copy_from_legacy_loc <destination file>
89#
90# Copies file with the same name from Legacy location
91# (in /etc/nwam/loc/Legacy) to the given destination file
92#
93copy_from_legacy_loc () {
94	DEST_DIR=`/usr/bin/dirname $1`
95	SRC_FILE="$PERM_LEGACY_PATH/`$BASENAME $1`"
96
97	# Make destination directory if needed
98	if [ ! -d "$DEST_DIR" ]; then
99		$MKDIR -p $DEST_DIR
100	fi
101
102	if [ -f "$SRC_FILE" ]; then
103		$CP -p $SRC_FILE $DEST_DIR
104	fi
105}
106
107#
108# write_loc_prop <property> <value> <file>
109#
110# Appends to <file> a nwamcfg command to set <property> to <value> if non-empty
111#
112write_loc_prop () {
113	prop=$1
114	val=$2
115	file=$3
116
117	if [ -n "$val" -a -n "$file" ]; then
118		echo "set $prop=$val" >> $file
119	fi
120}
121
122#
123# set_smf_prop <fmri> <property name> <property value>
124#
125set_smf_prop () {
126	$SVCCFG -s $1 setprop $2 = astring: "$3" && return
127}
128
129#
130# get_smf_prop <fmri> <property name>
131#
132get_smf_prop () {
133	$SVCPROP -p $2 $1
134}
135
136#
137# Creates Legacy location from the current configuration
138#
139create_legacy_loc () {
140	CREATE_LOC_LEGACY_FILE=$VOL_NWAM_PATH/create_loc_legacy
141
142	#
143	# Write nwamcfg commands to create Legacy location to
144	# $CREATE_LOC_LEGACY_FILE as values for properties are determined
145	# Note that some of the *_CONFIG_FILE variables point at copies of
146	# files we've made and others indicate where those copies should be
147	# if we are enabling the location.
148	#
149	echo "create loc Legacy" > $CREATE_LOC_LEGACY_FILE
150	write_loc_prop "activation-mode" "system" $CREATE_LOC_LEGACY_FILE
151
152	NAMESERVICES=""
153	NAMESERVICES_CONFIG_FILE=""
154	DNS_NAMESERVICE_CONFIGSRC=""
155	DNS_NAMESERVICE_DOMAIN=""
156	DNS_NAMESERVICE_SERVERS=""
157	DNS_NAMESERVICE_SEARCH=""
158	NIS_NAMESERVICE_CONFIGSRC=""
159	NIS_NAMESERVICE_SERVERS=""
160	LDAP_NAMESERVICE_CONFIGSRC=""
161	LDAP_NAMESERVICE_SERVERS=""
162	DEFAULT_DOMAIN=""
163
164	# Copy /etc/nsswitch.conf file
165	copy_to_legacy_loc /etc/nsswitch.conf
166	NAMESERVICES_CONFIG_FILE="$VOL_LEGACY_PATH/nsswitch.conf"
167
168	# Gather DNS info from resolv.conf if present.
169	if [ -f /etc/resolv.conf ]; then
170		NAMESERVICES="dns,"
171		$GREP -i "added by dhcp" /etc/nsswitch.conf >/dev/null
172		if [ $? -eq 0 ]; then
173			DNS_NAMESERVICE_CONFIGSRC="dhcp"
174		else
175			DNS_NAMESERVICE_CONFIGSRC="manual"
176			DNS_NAMESERVICE_DOMAIN=`$NAWK '$1 == "domain" {\
177			    print $2 }' < /etc/resolv.conf`
178			DNS_NAMESERVICE_SERVERS=`$NAWK '$1 == "nameserver" \
179			    { printf "%s,", $2 }' < /etc/resolv.conf`
180			DNS_NAMESERVICE_SEARCH=`$NAWK '$1 == "search" \
181			    { printf "%s,", $2 }' < /etc/resolv.conf`
182			copy_to_legacy_loc /etc/resolv.conf
183		fi
184	fi
185
186	# Gather NIS info from appropriate file if present.
187	if service_is_enabled $NIS_CLIENT_FMRI; then
188		NAMESERVICES="${NAMESERVICES}nis,"
189		NIS_NAMESERVICE_CONFIGSRC="manual"
190		DEFAULT_DOMAIN=`$CAT /etc/defaultdomain`
191
192		yp_servers=`$NAWK '{ printf "%s ", $1 }' \
193		    < $NIS_BIND_PATH/$DEFAULT_DOMAIN/ypservers`
194		for serv in $yp_servers; do
195			if is_valid_addr $serv; then
196				addr="$serv,"
197			else
198				addr=`$GREP -iw $serv /etc/inet/hosts | \
199				    $NAWK '{ printf "%s,", $1 }'`
200			fi
201			NIS_NAMESERVICE_SERVERS="${NIS_NAMESERVICE_SERVERS}$addr"
202		done
203	fi
204
205	# Gather LDAP info via ldapclient(1M).
206	if [ -f /var/ldap/ldap_client_file ]; then
207		copy_to_legacy /var/ldap/ldap_client_file
208		NAMESERVICES="${NAMESERVICES}ldap,"
209		LDAP_NAMESERVICE_CONFIGSRC="manual"
210		LDAP_NAMESERVICE_SERVERS=`$LDAPCLIENT list 2>/dev/null | \
211		    $NAWK '$1 == "preferredServerList:" { print $2 }'`
212		DEFAULT_DOMAIN=`$CAT /etc/defaultdomain`
213	fi
214
215	# Now, write nwamcfg commands for nameservices
216	write_loc_prop "nameservices" $NAMESERVICES $CREATE_LOC_LEGACY_FILE
217 	write_loc_prop "nameservices-config-file" $NAMESERVICES_CONFIG_FILE \
218 	    $CREATE_LOC_LEGACY_FILE
219	write_loc_prop "dns-nameservice-configsrc" $DNS_NAMESERVICE_CONFIGSRC \
220	    $CREATE_LOC_LEGACY_FILE
221	write_loc_prop "dns-nameservice-domain" $DNS_NAMESERVICE_DOMAIN \
222 	    $CREATE_LOC_LEGACY_FILE
223	write_loc_prop "dns-nameservice-servers" $DNS_NAMESERVICE_SERVERS \
224	    $CREATE_LOC_LEGACY_FILE
225	write_loc_prop "dns-nameservice-search" $DNS_NAMESERVICE_SEARCH \
226	    $CREATE_LOC_LEGACY_FILE
227	write_loc_prop "nis-nameservice-configsrc" $NIS_NAMESERVICE_CONFIGSRC \
228	    $CREATE_LOC_LEGACY_FILE
229	write_loc_prop "nis-nameservice-servers" $NIS_NAMESERVICE_SERVERS \
230	    $CREATE_LOC_LEGACY_FILE
231	write_loc_prop "ldap-nameservice-configsrc" $LDAP_NAMESERVICE_CONFIGSRC\
232	    $CREATE_LOC_LEGACY_FILE
233	write_loc_prop "ldap-nameservice-servers" $LDAP_NAMESERVICE_SERVERS \
234	    $CREATE_LOC_LEGACY_FILE
235	write_loc_prop "default-domain" $DEFAULT_DOMAIN $CREATE_LOC_LEGACY_FILE
236
237	# Retrieve NFSv4 domain from SMF.
238	if service_is_enabled $NFS_MAPID_FMRI; then
239		NFS_DOMAIN=`get_smf_prop NFS_MAPID_FMRI \
240		    nfs-props/nfsmapid_domain`
241		write_loc_prop "nfsv4-domain" \
242		    $NFS_DOMAIN $CREATE_LOC_LEGACY_FILE
243	fi
244
245	IPF_CONFIG_FILE=""
246	IPF6_CONFIG_FILE=""
247	IPNAT_CONFIG_FILE=""
248	IPPOOL_CONFIG_FILE=""
249	IKE_CONFIG_FILE=""
250	IPSEC_POLICY_CONFIG_FILE=""
251
252	#
253	# IPFilter
254	#
255	# If the firewall policy is "custom", simply copy the
256	# custom_policy_file.  If the firewall policy is "none", "allow" or
257	# "deny", save the value as "/<value>".  When reverting back to the
258	# Legacy location, these values will have to be treated as special.
259	#
260	# For all configuration files, copy them to the Legacy directory.
261	# Use the respective properties to remember the original locations
262	# of the files so that they can be copied back there when NWAM is
263	# stopped.
264	#
265	if service_is_enabled $IPFILTER_FMRI; then
266		FIREWALL_POLICY=`get_smf_prop $IPFILTER_FMRI \
267		    firewall_config_default/policy`
268		if [ "$FIREWALL_POLICY" = "custom" ]; then
269			IPF_CONFIG_FILE=`get_smf_prop $IPFILTER_FMRI \
270			    firewall_config_default/custom_policy_file`
271			copy_to_legacy_loc $IPF_CONFIG_FILE
272		else
273			# save value as /none, /allow, or /deny
274			IPF_CONFIG_FILE="/$FIREWALL_POLICY"
275		fi
276		IPF6_CONFIG_FILE=`get_smf_prop $IPFILTER_FMRI \
277		    config/ipf6_config_file`
278		copy_to_legacy_loc $IPF6_CONFIG_FILE
279
280		IPNAT_CONFIG_FILE=`get_smf_prop $IPFILTER_FMRI \
281		    config/ipnat_config_file`
282		copy_to_legacy_loc $IPNAT_CONFIG_FILE
283
284		IPPOOL_CONFIG_FILE=`get_smf_prop $IPFILTER_FMRI \
285		    config/ippool_config_file`
286		copy_to_legacy_loc $IPPOOL_CONFIG_FILE
287	fi
288
289	# IKE
290	if service_is_enabled $IPSEC_IKE_FMRI:default; then
291		IKE_CONFIG_FILE=`get_smf_prop $IPSEC_IKE_FMRI config/config_file`
292		copy_to_legacy_loc $IKE_CONFIG_FILE
293	fi
294
295	# IPsec
296	if service_is_enabled $IPSEC_POLICY_FMRI:default; then
297		IPSEC_POLICY_CONFIG_FILE=`get_smf_prop $IPSEC_POLICY_FMRI \
298		    config/config_file`
299		copy_to_legacy_loc $IPSEC_POLICY_CONFIG_FILE
300	fi
301
302	if [ -n "$IPF_CONFIG_FILE" -a \( "$IPF_CONFIG_FILE" = "/allow" \
303	    -o "$IPF_CONFIG_FILE" = "/deny" -o "$IPF_CONFIG_FILE" = "/none" \
304	    -o -f "$IPF_CONFIG_FILE" \) ]; then
305		write_loc_prop "ipfilter-config-file" $IPF_CONFIG_FILE \
306		    $CREATE_LOC_LEGACY_FILE
307	fi
308	if [ -n "$IPF6_CONFIG_FILE" -a -f "$IPF6_CONFIG_FILE" ]; then
309		write_loc_prop "ipfilter-v6-config-file" $IPF6_CONFIG_FILE \
310		    $CREATE_LOC_LEGACY_FILE
311	fi
312	if [ -n "$IPNAT_CONFIG_FILE" -a -f "$IPNAT_CONFIG_FILE" ]; then
313		write_loc_prop "ipnat-config-file" $IPNAT_CONFIG_FILE \
314		    $CREATE_LOC_LEGACY_FILE
315	fi
316	if [ -n "$IPPOOL_CONFIG_FILE" -a -f "$IPPOOL_CONFIG_FILE" ]; then
317		write_loc_prop "ippool-config-file" $IPPOOL_CONFIG_FILE \
318		    $CREATE_LOC_LEGACY_FILE
319	fi
320	if [ -n "$IKE_CONFIG_FILE" -a -f "$IKE_CONFIG_FILE" ]; then
321		write_loc_prop "ike-config-file" $IKE_CONFIG_FILE \
322		    $CREATE_LOC_LEGACY_FILE
323	fi
324	if [ -n "$IPSEC_POLICY_CONFIG_FILE" -a -f "$IPSEC_POLICY_CONFIG_FILE" ]
325	then
326		write_loc_prop "ipsecpolicy-config-file" \
327		    $IPSEC_POLICY_CONFIG_FILE $CREATE_LOC_LEGACY_FILE
328	fi
329
330	# End
331	echo "end" >> $CREATE_LOC_LEGACY_FILE
332	# network/location will create the Legacy location with these commands.
333}
334
335#
336# Undoes the effects of the Legacy location creation
337#
338revert_to_legacy_loc () {
339	$SVCADM disable dns/client
340	$SVCADM disable nis/client
341	$SVCADM disable ldap/client
342
343	# copy nsswitch.conf to /etc/nsswitch.conf
344	copy_from_legacy_loc /etc/nsswitch.conf
345
346	# DNS - copy resolv.conf to /etc/resolv.conf
347	if [ -f "$PERM_LEGACY_PATH/resolv.conf" ]; then
348		copy_from_legacy_loc /etc/resolv.conf
349	        $SVCADM enable dns/client
350	fi
351
352	# set /etc/defaultdomain and domainname(1M)
353	DEFAULT_DOMAIN=`nwam_get_loc_prop Legacy default-domain`
354	if [ -n "$DEFAULT_DOMAIN" ]; then
355		$DOMAINNAME $DEFAULT_DOMAIN
356		$DOMAINNAME > /etc/defaultdomain
357	fi
358
359	# NIS - directory and ypserver in /var/yp/binding/
360	NIS_CONFIGSRC=`nwam_get_loc_prop Legacy nis-nameservice-configsrc`
361	NIS_SERVERS=`nwam_get_loc_prop Legacy nis-nameservice-servers`
362	if [ -n "$NIS_CONFIGSRC" ]; then
363		if [ ! -d "$NIS_BIND_PATH/$DEFAULT_DOMAIN" ]; then
364			$MKDIR -p $NIS_BIND_PATH/$DEFAULT_DOMAIN
365		fi
366		if [ -n "$NIS_SERVERS" ]; then
367			echo "$NIS_SERVERS" | $NAWK \
368			    'FS="," { for (i = 1; i <= NF; i++) print $i }' \
369			    > $NIS_BIND_PATH/$DEFAULT_DOMAIN/ypservers
370		fi
371		$SVCADM enable nis/client
372	fi
373
374	# LDAP - copy ldap_client_file to /var/ldap/ldap_client_file
375	if [ -f "$PERM_LEGACY_PATH/ldap_client_file" ]; then
376		copy_from_legacy_loc /var/ldap/ldap_client_file
377		$SVCADM enable ldap/client
378	fi
379
380	# Copy back nfs NFSMAPID_DOMAIN
381	NFSMAPID_DOMAIN=`nwam_get_loc_prop Legacy nfsv4-domain`
382	if [ -n "$NFSMAPID_DOMAIN" ]; then
383		set_smf_prop $NFS_MAPID_FMRI \
384		    nfs-props/nfsmapid_domain $NFSMAPID_DOMAIN
385		$SVCADM refresh $NFS_MAPID_FMRI
386		$SVCADM enable $NFS_MAPID_FMRI
387	fi
388
389	# IPFilter, IPsec, and IKE
390	ipf_file=`nwam_get_loc_prop Legacy ipfilter-config-file`
391	ipf6_file=`nwam_get_loc_prop Legacy ipfilter-v6-config-file`
392	ipnat_file=`nwam_get_loc_prop Legacy ipnat-config-file`
393	ippool_file=`nwam_get_loc_prop Legacy ippool-config-file`
394	ike_file=`nwam_get_loc_prop Legacy ike-config-file`
395	pol_file=`nwam_get_loc_prop Legacy ipsecpolicy-config-file`
396
397	if [ -n "$ike_file" ]; then
398		copy_from_legacy_loc $ike_file
399		set_smf_prop $IPSEC_IKE_FMRI config/config_file $ike_file
400		$SVCADM refresh $IPSEC_IKE_FMRI
401		$SVCADM enable $IPSEC_IKE_FMRI
402	else
403		set_smf_prop $IPSEC_IKE_FMRI config/config_file \
404		    $IPSEC_IKE_DEFAULT_CONFIG_FILE
405		$SVCADM disable $IPSEC_IKE_FMRI
406	fi
407	if [ -n "$pol_file" ]; then
408		copy_from_legacy_loc $pol_file
409		set_smf_prop $IPSEC_POLICY_FMRI config/config_file $pol_file
410		$SVCADM refresh $IPSEC_POLICY_FMRI
411		$SVCADM enable $IPSEC_POLICY_FMRI
412	else
413		set_smf_prop $IPSEC_POLICY_FMRI config/config_file \
414		    $IPSEC_POLICY_DEFAULT_CONFIG_FILE
415		$SVCADM disable $IPSEC_POLICY_FMRI
416	fi
417
418	refresh_ipf=false
419	if [ -n "$ipf_file" ]; then
420		# change /none, /allow, and /deny to firewall policy
421		if [ "$ipf_file" = "/none" -o "$ipf_file" = "/allow" \
422		    -o "$ipf_file" = "/deny" ]; then
423			policy=`echo "$ipf_file" | $NAWK 'FS="/" { print $2 }'`
424			set_smf_prop $IPFILTER_FMRI \
425			    firewall_config_default/policy $policy
426			# no need to clear custom_policy_file as it isn't "custom"
427		else
428			copy_from_legacy_loc $ipf_file
429			set_smf_prop $IPFILTER_FMRI \
430			    firewall_config_default/policy "custom"
431			set_smf_prop $IPFILTER_FMRI \
432			    firewall_config_default/custom_policy_file $ipf_file
433		fi
434		refresh_ipf=true
435	fi
436	if [ -n "$ipf6_file" ]; then
437		copy_from_legacy_loc $ipf6_file
438		set_smf_prop $IPFILTER_FMRI config/ipf6_config_file $ipf6_file
439		refresh_ipf=true
440	else
441		set_smf_prop $IPFILTER_FMRI config/ipf6_config_file \
442		    $IPF6_DEFAULT_CONFIG_FILE
443	fi
444	if [ -n "$ipnat_file" ]; then
445		copy_from_legacy_loc $ipnat_file
446		set_smf_prop $IPFILTER_FMRI config/ipnat_config_file $ipnat_file
447		refresh_ipf=true
448	else
449		set_smf_prop $IPFILTER_FMRI config/ipnat_config_file \
450		    $IPNAT_DEFAULT_CONFIG_FILE
451	fi
452	if [ -n "$ippool_file" ]; then
453		copy_from_legacy_loc $ippool_file
454		set_smf_prop $IPFILTER_FMRI config/ippool_config_file \
455		    $ippool_file
456		refresh_ipf=true
457	else
458		set_smf_prop $IPFILTER_FMRI config/ippool_config_file \
459		    $IPPOOL_DEFAULT_CONFIG_FILE
460	fi
461
462	$SVCADM refresh $IPFILTER_FMRI
463	if [ "$refresh_ipf" = "true" ]; then
464		$SVCADM enable $IPFILTER_FMRI
465	else
466		$SVCADM disable $IPFILTER_FMRI
467	fi
468
469	# Remove the Legacy directories, script and location
470	$RM -rf $VOL_LEGACY_PATH
471	$RM -rf $PERM_LEGACY_PATH
472	$RM -f $VOL_NWAM_PATH/create_loc_legacy
473	$NWAMCFG destroy loc Legacy
474}
475
476#
477# Script entry point
478#
479# Arguments to net-nwam are
480#       method ( start | refresh | stop | -u | -c )
481#
482
483#
484# Create nwam directory in /etc/svc/volatile
485#
486if [ ! -d $VOL_NWAM_PATH ]; then
487	$MKDIR -m 0755 $VOL_NWAM_PATH
488fi
489
490case "$1" in
491'refresh')
492	/usr/bin/pkill -HUP -z `smf_zonename` nwamd
493	#
494	# Enable network/location.  Needed on first boot post-install as
495	# network/location will not exist until after manifest-import runs.
496	#
497	if service_exists $NET_LOC_FMRI ; then
498		$SVCADM enable -t $NET_LOC_FMRI
499	fi
500	;;
501
502'start')
503	# The real daemon is not started in a shared stack zone. But we need to
504	# create a dummy background process to preserve contract lifetime.
505	smf_configure_ip
506	if [ $? = "1" ] ; then
507		$RM -f $VOL_NWAM_PATH/nwam_blocked
508		$MKFIFO $VOL_NWAM_PATH/nwam_blocked
509		($CAT <$VOL_NWAM_PATH/nwam_blocked >/dev/null) &
510		exit $SMF_EXIT_OK
511	fi
512
513	#
514	# Enable network/location.
515	#
516	if service_exists $NET_LOC_FMRI ; then
517		$SVCADM enable -t $NET_LOC_FMRI
518	fi
519
520	if smf_is_globalzone; then
521		net_reconfigure || exit $SMF_EXIT_ERR_CONFIG
522
523		# Update PVID on interfaces configured with VLAN 1
524		update_pvid
525
526		#
527		# Upgrade handling. The upgrade file consists of a series
528		# of dladm(1M) commands. Note that after we are done, we
529		# cannot rename the upgrade script file as the file system
530		# is still read-only at this point. Defer this to the
531		# manifest-import service.
532		#
533		upgrade_script=/var/svc/profile/upgrade_datalink
534		if [ -f "${upgrade_script}" ]; then
535			. "${upgrade_script}"
536		fi
537
538		#
539		# Upgrade handling for ibd:
540		# After we are done with the upgrade handling, we can not set the
541		# ibd/ibd_upgraded property to "true" as the file system is
542		# read-only at this point. It will be done later by ibd-post-upgrade
543		# service.
544		#
545		ibd_upgraded=`/bin/svcprop -c -p ibd/ibd_upgraded \
546		    svc:/network/physical:default 2> /dev/null`
547		if [ "$ibd_upgraded" != "true" ]; then
548			/sbin/ibd_upgrade -v
549		fi
550
551		# Bring up simnet instances
552		/sbin/dladm up-simnet
553		# Initialize security objects.
554		/sbin/dladm init-secobj
555
556		#
557		# Initialize VNICs, VLANs and flows.  Though they are brought
558		# up here, NWAM will not automatically manage VNICs and VLANs.
559		#
560		/sbin/dladm up-vnic
561		/sbin/dladm up-vlan
562		/sbin/dladm up-part
563		/sbin/dladm up-aggr
564		/sbin/flowadm init-flow
565	fi
566
567	#
568	# We also need to create the Legacy location, which is used
569	# to restore non-NWAM settings that are overwritten when
570	# NWAM is enabled (e.g. resolv.conf, nsswitch.conf, etc.).
571	#
572	$NWAMCFG list loc Legacy >/dev/null 2>&1
573	if [ $? -eq 1 ]; then
574		create_legacy_loc
575	fi
576
577	# start nwamd in foreground; it will daemonize itself
578	if /lib/inet/nwamd ; then
579		exit $SMF_EXIT_OK
580	else
581		exit $SMF_EXIT_ERR_FATAL
582	fi
583	;;
584
585'stop')
586	# We need to make the dummy process we created above stop.
587	smf_configure_ip
588	if [ $? = "1" ] ; then
589		echo "stop" > $VOL_NWAM_PATH/nwam_blocked
590		exit $SMF_EXIT_OK
591	fi
592
593	/usr/bin/pkill -z `smf_zonename` nwamd
594
595	#
596	# Restore the non-NWAM settings.
597	#
598	$NWAMCFG list loc Legacy >/dev/null 2>&1
599	if [ $? -eq 1 ]; then
600		echo "No Legacy location to revert to!"
601		exit $SMF_EXIT_OK
602	fi
603	revert_to_legacy_loc
604	# remove the location property group
605	$SVCCFG -s $NET_LOC_FMRI delpg location
606	;;
607
608'-u')
609	# After we run this part of the script upon the next reboot
610	# network/physical:default will be enabled and
611	# network/physical:nwam will be disabled.
612	# There are various other parts of the system (nscd, nfs) that
613	# depend on continuing to have a working network.  For this
614	# reason we don't change the network configuration immediately.
615	#
616	# Disable network/physical temporarily and make sure that will
617	# be enabled on reboot.
618	$SVCADM disable -st $NET_PHYS_FMRI
619	$SVCCFG -s $NET_PHYS_FMRI setprop general/enabled=true
620
621	# If nwam is online then make sure that it's temporarily enabled.
622	nwam_online=`$SVCPROP -t -p restarter/state $NET_NWAM_FMRI`
623	if [ $? -eq 0 ]; then
624		set -- $nwam_online
625		[ $3 = "online" ] && $SVCADM enable -st $NET_NWAM_FMRI
626	fi
627
628	# Set nwam so that it won't be enabled upon reboot.
629	$SVCCFG -s $NET_NWAM_FMRI setprop general/enabled=false
630	exit 0
631	;;
632
633'-c')
634	# Nothing to do for sysidtool
635	exit 0
636	;;
637
638*)
639	echo "Usage: $0 { start | stop | refresh }"
640	exit $SMF_EXIT_ERR_FATAL
641	;;
642esac
643exit $SMF_EXIT_OK
644