xref: /onnv-gate/usr/src/cmd/svc/shell/routing_include.sh (revision 3048:ce5ba5995ea4)
1*3048Samaguire#!/bin/sh
2*3048Samaguire#
3*3048Samaguire# CDDL HEADER START
4*3048Samaguire#
5*3048Samaguire# The contents of this file are subject to the terms of the
6*3048Samaguire# Common Development and Distribution License (the "License").
7*3048Samaguire# You may not use this file except in compliance with the License.
8*3048Samaguire#
9*3048Samaguire# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10*3048Samaguire# or http://www.opensolaris.org/os/licensing.
11*3048Samaguire# See the License for the specific language governing permissions
12*3048Samaguire# and limitations under the License.
13*3048Samaguire#
14*3048Samaguire# When distributing Covered Code, include this CDDL HEADER in each
15*3048Samaguire# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16*3048Samaguire# If applicable, add the following below this CDDL HEADER, with the
17*3048Samaguire# fields enclosed by brackets "[]" replaced with your own identifying
18*3048Samaguire# information: Portions Copyright [yyyy] [name of copyright owner]
19*3048Samaguire#
20*3048Samaguire# CDDL HEADER END
21*3048Samaguire#
22*3048Samaguire#
23*3048Samaguire# Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
24*3048Samaguire# Use is subject to license terms.
25*3048Samaguire#
26*3048Samaguire# ident	"%Z%%M%	%I%	%E% SMI"
27*3048Samaguire
28*3048Samaguire#
29*3048Samaguire# These functions are used to help map daemon arguments to appropriate
30*3048Samaguire# routing properties and back, allowing legacy specifications of daemon
31*3048Samaguire# arguments to be reflected in SMF property values for daemon services.
32*3048Samaguire#
33*3048Samaguire
34*3048Samaguire#
35*3048Samaguire# set_routeadm_property inst_fmri propname propvalue
36*3048Samaguire#
37*3048Samaguire# Functions sets appropriate property value in routeadm property group
38*3048Samaguire# (via routeadm -m) for inst_fmri to propvalue.
39*3048Samaguire#
40*3048Samaguireset_routeadm_property()
41*3048Samaguire{
42*3048Samaguire	/sbin/routeadm -m $1 ${2}="${3}"
43*3048Samaguire}
44*3048Samaguire
45*3048Samaguire#
46*3048Samaguire# The functions below are used to map from daemon arguments to appropriate
47*3048Samaguire# routeadm properties (properties that the service user can manipulate
48*3048Samaguire# to control daemon functionality. getopts is used extensively to
49*3048Samaguire# retrieve options/values from argument list, and these option values
50*3048Samaguire# are used to set properties appropriately.
51*3048Samaguire#
52*3048Samaguire
53*3048Samaguire#
54*3048Samaguire# set_daemon_value_property inst_fmri optstring options option prop
55*3048Samaguire#	default_value
56*3048Samaguire#
57*3048Samaguire# Function looks for option/value in argument string, and sets associated
58*3048Samaguire# property if found. If a default is specified, and the option is not
59*3048Samaguire# in the argument string, it will be used.
60*3048Samaguire#
61*3048Samaguireset_daemon_value_property()
62*3048Samaguire{
63*3048Samaguire	OPTIND=1
64*3048Samaguire	value_set=""
65*3048Samaguire	while getopts $3 opt $2; do
66*3048Samaguire		case $opt in
67*3048Samaguire			"$4" )	set_routeadm_property $1 $5 $OPTARG
68*3048Samaguire				value_set="true"
69*3048Samaguire				;;
70*3048Samaguire			? )
71*3048Samaguire		esac
72*3048Samaguire	done
73*3048Samaguire	# No value set - use default if specified.
74*3048Samaguire	if [ -z "$value_set" -a -n "$6" ]; then
75*3048Samaguire		set_routeadm_property $1 $5 $6
76*3048Samaguire	fi
77*3048Samaguire}
78*3048Samaguire
79*3048Samaguire#
80*3048Samaguire# set_daemon_ordered_multivalue_property inst_fmri optstring options option prop
81*3048Samaguire#       default_value
82*3048Samaguire#
83*3048Samaguire# Function looks for option/values in argument string, and sets associated
84*3048Samaguire# property if found. If a default is specified, and the option is not
85*3048Samaguire# in the argument string, it will be used.  Use ";" as delimiter for
86*3048Samaguire# multiple values.
87*3048Samaguire#
88*3048Samaguireset_daemon_ordered_multivalue_property()
89*3048Samaguire{
90*3048Samaguire	OPTIND=1
91*3048Samaguire	value_set=""
92*3048Samaguire	while getopts $3 opt $2; do
93*3048Samaguire		case $opt in
94*3048Samaguire			"$4" )  if [ -z "$value_set" ]; then
95*3048Samaguire					value_set="${OPTARG}"
96*3048Samaguire				else
97*3048Samaguire					value_set="$value_set;${OPTARG}"
98*3048Samaguire				fi
99*3048Samaguire                                ;;
100*3048Samaguire			? )
101*3048Samaguire		esac
102*3048Samaguire	done
103*3048Samaguire	if [ -n "$value_set" ]; then
104*3048Samaguire		set_routeadm_property $1 $5 "$value_set"
105*3048Samaguire	fi
106*3048Samaguire	# No value set - use default if specified.
107*3048Samaguire	if [ -z "$value_set" -a -n "$6" ]; then
108*3048Samaguire		set_routeadm_property $1 $5 $6
109*3048Samaguire	fi
110*3048Samaguire}
111*3048Samaguire
112*3048Samaguire#
113*3048Samaguire# set_daemon_boolean_property inst_fmri optstring options option
114*3048Samaguire#       prop value_if_found default
115*3048Samaguire#
116*3048Samaguire# Function looks for option in argument string, and sets associated
117*3048Samaguire# property, if found, to value_if_found. If a default is specified, and
118*3048Samaguire# the option is not found, it will be used.
119*3048Samaguire#
120*3048Samaguireset_daemon_boolean_property()
121*3048Samaguire{
122*3048Samaguire	OPTIND=1
123*3048Samaguire	value_set=""
124*3048Samaguire	while getopts $3 opt $2; do
125*3048Samaguire		case $opt in
126*3048Samaguire			"$4" )	set_routeadm_property $1 $5 $6
127*3048Samaguire				value_set="true"
128*3048Samaguire				;;
129*3048Samaguire			? )
130*3048Samaguire		esac
131*3048Samaguire	done
132*3048Samaguire	# No value set - use default if specified.
133*3048Samaguire	if [ -z "$value_set" -a -n "$7" ]; then
134*3048Samaguire		set_routeadm_property $1 $5 $7
135*3048Samaguire	fi
136*3048Samaguire}
137*3048Samaguire
138*3048Samaguire#
139*3048Samaguire# set_daemon_nonoption_properties inst_fmri optstring options propnames
140*3048Samaguire#       default
141*3048Samaguire#
142*3048Samaguire# Function looks past option list for addition values, and sets properties
143*3048Samaguire# specified in propnames to additional positional values. If no value
144*3048Samaguire# is found for additional property, default is used.
145*3048Samaguire#
146*3048Samaguireset_daemon_nonoption_properties()
147*3048Samaguire{
148*3048Samaguire	OPTIND=1
149*3048Samaguire	# Skip options
150*3048Samaguire	while getopts $3 opt $2; do
151*3048Samaguire		case $opt in
152*3048Samaguire			? )
153*3048Samaguire		esac
154*3048Samaguire	done
155*3048Samaguire	pos=$OPTIND
156*3048Samaguire	for prop in $4
157*3048Samaguire	do
158*3048Samaguire		val=`/usr/bin/echo $2 | /usr/bin/nawk -v POS=$pos \
159*3048Samaguire		    '{ print $POS }'`
160*3048Samaguire		if [ -z "$val" ]; then
161*3048Samaguire			val="$5"
162*3048Samaguire		fi
163*3048Samaguire		set_routeadm_property $1 $prop $val
164*3048Samaguire		pos=`expr $pos + 1`
165*3048Samaguire	done
166*3048Samaguire}
167*3048Samaguire
168*3048Samaguire#
169*3048Samaguire# get_daemon_args $inst_fmri
170*3048Samaguire#
171*3048Samaguire# Retrieves routeadm/daemon-args property values, if any.  Removes
172*3048Samaguire# quotes around values including spaces.
173*3048Samaguire#
174*3048Samaguireget_daemon_args()
175*3048Samaguire{
176*3048Samaguire	args=`/usr/sbin/svccfg -s $1 listprop routeadm/daemon-args | \
177*3048Samaguire	    /usr/bin/nawk '{ for (i = 3; i <= NF; i++) printf "%s ", $i }' | \
178*3048Samaguire	    /usr/bin/nawk '{sub(/^\"/, ""); sub(/\"[ \t]*$/,""); print}'`
179*3048Samaguire	echo "$args"
180*3048Samaguire}
181*3048Samaguire
182*3048Samaguire#
183*3048Samaguire# clear_daemon_args $inst_fmri
184*3048Samaguire#
185*3048Samaguire# Blanks routeadm/daemon-args property used in upgrade.
186*3048Samaguire#
187*3048Samaguireclear_daemon_args()
188*3048Samaguire{
189*3048Samaguire	/usr/sbin/svccfg -s $1 delprop routeadm/daemon-args 2>/dev/null
190*3048Samaguire}
191*3048Samaguire
192*3048Samaguire#
193*3048Samaguire# The functions below are used to map back from property settings to
194*3048Samaguire# commandline arguments to launch daemons.
195*3048Samaguire#
196*3048Samaguire
197*3048Samaguireget_routeadm_property()
198*3048Samaguire{
199*3048Samaguire	propval=`/sbin/routeadm -l $1 | /usr/bin/nawk -v PROP=$2 \
200*3048Samaguire	    '($1 == PROP) { for (i = 3; i < NF; i++) printf $i" "; \
201*3048Samaguire	    if (NF >= 3) {printf $NF}}'`
202*3048Samaguire	echo "$propval"
203*3048Samaguire}
204*3048Samaguire
205*3048Samaguire#
206*3048Samaguire# get_daemon_option_from_boolean_property inst_fmri prop option value_set
207*3048Samaguire#
208*3048Samaguire# Returns appropriate daemon option for boolean property prop - if current
209*3048Samaguire# value matches value_set.
210*3048Samaguire#
211*3048Samaguireget_daemon_option_from_boolean_property()
212*3048Samaguire{
213*3048Samaguire	propval=`get_routeadm_property $1 $2`
214*3048Samaguire	if [ "$propval" = "$4" ]; then
215*3048Samaguire		echo "${3}"
216*3048Samaguire	fi
217*3048Samaguire}
218*3048Samaguire
219*3048Samaguire#
220*3048Samaguire# get_daemon_option_from_property inst_fmri prop option ignore_value
221*3048Samaguire#
222*3048Samaguire# Returns appropriate daemon option and associated value (unless value
223*3048Samaguire# matches ignore_value, in which case nothing is returned).
224*3048Samaguire#
225*3048Samaguireget_daemon_option_from_property()
226*3048Samaguire{
227*3048Samaguire	propval=`get_routeadm_property $1 $2`
228*3048Samaguire	if [ "$propval" != "$4" ]; then
229*3048Samaguire		echo "-${3} \"$propval\""
230*3048Samaguire	fi
231*3048Samaguire}
232*3048Samaguire
233*3048Samaguire#
234*3048Samaguire# get_daemon_ordered_multivalue_option_from_property_quoted inst_fmri prop
235*3048Samaguire# option
236*3048Samaguire#
237*3048Samaguire# Returns appropriate daemon option and associated values. Values are
238*3048Samaguire# quoted, i.e. -A "value1 has spaces" -A "value2 has spaces"
239*3048Samaguire#
240*3048Samaguireget_daemon_ordered_multivalue_option_from_property_quoted()
241*3048Samaguire{
242*3048Samaguire	# get property values, removing trailing delimiter.
243*3048Samaguire	propvals=`get_routeadm_property $1 $2 | \
244*3048Samaguire	    /usr/bin/nawk '{sub(/;[ \t]*$/, ""); print }'`
245*3048Samaguire	# Substitute switch for internal delimiters, quoting values.
246*3048Samaguire	fixed_propvals=`/usr/bin/echo $propvals | \
247*3048Samaguire	    /usr/bin/nawk -v SWITCH="\" -${3} \"" \
248*3048Samaguire	    '{sub(/;/, SWITCH); print }'`
249*3048Samaguire	if [ -n "$fixed_propvals" ]; then
250*3048Samaguire		echo "-${3} \"$fixed_propvals\""
251*3048Samaguire	fi
252*3048Samaguire}
253*3048Samaguire
254*3048Samaguire#
255*3048Samaguire# get_daemon_ordered_multivalue_option_from_property inst_fmri prop
256*3048Samaguire# option
257*3048Samaguire#
258*3048Samaguire# Returns appropriate daemon option and associated values. Values are
259*3048Samaguire# unquoted, i.e. -A value1 -A value2
260*3048Samaguire#
261*3048Samaguireget_daemon_ordered_multivalue_option_from_property()
262*3048Samaguire{
263*3048Samaguire	# get property values, removing trailing delimiter.
264*3048Samaguire	propvals=`get_routeadm_property $1 $2 | \
265*3048Samaguire	    /usr/bin/nawk '{sub(/;[ \t]*$/, ""); print }'`
266*3048Samaguire	# Substitute switch for internal delimiters.
267*3048Samaguire	fixed_propvals=`/usr/bin/echo $propvals | \
268*3048Samaguire	    /usr/bin/nawk -v SWITCH=" -${3} " \
269*3048Samaguire	    '{sub(/;/, SWITCH); print }'`
270*3048Samaguire	if [ -n "$fixed_propvals" ]; then
271*3048Samaguire		echo "-${3} $fixed_propvals"
272*3048Samaguire	fi
273*3048Samaguire}
274*3048Samaguire
275*3048Samaguire#
276*3048Samaguire# get_nonoption_property inst_fmri prop ignore_value
277*3048Samaguire#
278*3048Samaguire# Returns appropriate non-option property (at end of option list), unless
279*3048Samaguire# value matches ignore value, in which case nothing is returned.
280*3048Samaguire#
281*3048Samaguireget_daemon_nonoption_property()
282*3048Samaguire{
283*3048Samaguire	propval=`get_routeadm_property $1 $2`
284*3048Samaguire	if [ -n "$propval" -a "$propval" != "$3" ]; then
285*3048Samaguire		echo "$propval"
286*3048Samaguire	fi
287*3048Samaguire}
288