xref: /onnv-gate/usr/src/cmd/svc/shell/routing_include.sh (revision 9655:747cb98fdf2f)
13048Samaguire#!/bin/sh
23048Samaguire#
33048Samaguire# CDDL HEADER START
43048Samaguire#
53048Samaguire# The contents of this file are subject to the terms of the
63048Samaguire# Common Development and Distribution License (the "License").
73048Samaguire# You may not use this file except in compliance with the License.
83048Samaguire#
93048Samaguire# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
103048Samaguire# or http://www.opensolaris.org/os/licensing.
113048Samaguire# See the License for the specific language governing permissions
123048Samaguire# and limitations under the License.
133048Samaguire#
143048Samaguire# When distributing Covered Code, include this CDDL HEADER in each
153048Samaguire# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
163048Samaguire# If applicable, add the following below this CDDL HEADER, with the
173048Samaguire# fields enclosed by brackets "[]" replaced with your own identifying
183048Samaguire# information: Portions Copyright [yyyy] [name of copyright owner]
193048Samaguire#
203048Samaguire# CDDL HEADER END
213048Samaguire#
223048Samaguire#
238823STruong.Q.Nguyen@Sun.COM# Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
243048Samaguire# Use is subject to license terms.
253048Samaguire#
268823STruong.Q.Nguyen@Sun.COM
278823STruong.Q.Nguyen@Sun.COM#
288823STruong.Q.Nguyen@Sun.COM# IPfilter's firewall
298823STruong.Q.Nguyen@Sun.COM#
308823STruong.Q.Nguyen@Sun.COM# routed and its siblings use ICMP Router Discovery protocol, simply allow
318823STruong.Q.Nguyen@Sun.COM# these packets so the client portion of routed can work.
328823STruong.Q.Nguyen@Sun.COM#
338823STruong.Q.Nguyen@Sun.COMgen_IRDP_rules()
348823STruong.Q.Nguyen@Sun.COM{
358823STruong.Q.Nguyen@Sun.COM	# Allow incoming icmp from routers for successful discovery.
368823STruong.Q.Nguyen@Sun.COM	# IRDP - ICMP type 9 and 10, advertisement and solicitation, respectively.
378823STruong.Q.Nguyen@Sun.COM	#
388823STruong.Q.Nguyen@Sun.COM	echo "pass in log quick proto icmp from any to any icmp-type 10" >>${1}
398823STruong.Q.Nguyen@Sun.COM	echo "pass in log quick proto icmp from any to any icmp-type 9" >>${1}
408823STruong.Q.Nguyen@Sun.COM}
413048Samaguire
423048Samaguire#
433048Samaguire# These functions are used to help map daemon arguments to appropriate
443048Samaguire# routing properties and back, allowing legacy specifications of daemon
453048Samaguire# arguments to be reflected in SMF property values for daemon services.
463048Samaguire#
473048Samaguire
483048Samaguire#
493048Samaguire# set_routeadm_property inst_fmri propname propvalue
503048Samaguire#
513048Samaguire# Functions sets appropriate property value in routeadm property group
523048Samaguire# (via routeadm -m) for inst_fmri to propvalue.
533048Samaguire#
543048Samaguireset_routeadm_property()
553048Samaguire{
563048Samaguire	/sbin/routeadm -m $1 ${2}="${3}"
573048Samaguire}
583048Samaguire
593048Samaguire#
603048Samaguire# The functions below are used to map from daemon arguments to appropriate
613048Samaguire# routeadm properties (properties that the service user can manipulate
623048Samaguire# to control daemon functionality. getopts is used extensively to
633048Samaguire# retrieve options/values from argument list, and these option values
643048Samaguire# are used to set properties appropriately.
653048Samaguire#
663048Samaguire
673048Samaguire#
683048Samaguire# set_daemon_value_property inst_fmri optstring options option prop
693048Samaguire#	default_value
703048Samaguire#
713048Samaguire# Function looks for option/value in argument string, and sets associated
723048Samaguire# property if found. If a default is specified, and the option is not
733048Samaguire# in the argument string, it will be used.
743048Samaguire#
753048Samaguireset_daemon_value_property()
763048Samaguire{
773048Samaguire	OPTIND=1
783048Samaguire	value_set=""
793048Samaguire	while getopts $3 opt $2; do
803048Samaguire		case $opt in
813048Samaguire			"$4" )	set_routeadm_property $1 $5 $OPTARG
823048Samaguire				value_set="true"
833048Samaguire				;;
843048Samaguire			? )
853048Samaguire		esac
863048Samaguire	done
873048Samaguire	# No value set - use default if specified.
883048Samaguire	if [ -z "$value_set" -a -n "$6" ]; then
893048Samaguire		set_routeadm_property $1 $5 $6
903048Samaguire	fi
913048Samaguire}
923048Samaguire
933048Samaguire#
943048Samaguire# set_daemon_ordered_multivalue_property inst_fmri optstring options option prop
953048Samaguire#       default_value
963048Samaguire#
973048Samaguire# Function looks for option/values in argument string, and sets associated
983048Samaguire# property if found. If a default is specified, and the option is not
993048Samaguire# in the argument string, it will be used.  Use ";" as delimiter for
1003048Samaguire# multiple values.
1013048Samaguire#
1023048Samaguireset_daemon_ordered_multivalue_property()
1033048Samaguire{
1043048Samaguire	OPTIND=1
1053048Samaguire	value_set=""
1063048Samaguire	while getopts $3 opt $2; do
1073048Samaguire		case $opt in
1083048Samaguire			"$4" )  if [ -z "$value_set" ]; then
1093048Samaguire					value_set="${OPTARG}"
1103048Samaguire				else
1113048Samaguire					value_set="$value_set;${OPTARG}"
1123048Samaguire				fi
1133048Samaguire                                ;;
1143048Samaguire			? )
1153048Samaguire		esac
1163048Samaguire	done
1173048Samaguire	if [ -n "$value_set" ]; then
1183048Samaguire		set_routeadm_property $1 $5 "$value_set"
1193048Samaguire	fi
1203048Samaguire	# No value set - use default if specified.
1213048Samaguire	if [ -z "$value_set" -a -n "$6" ]; then
1223048Samaguire		set_routeadm_property $1 $5 $6
1233048Samaguire	fi
1243048Samaguire}
1253048Samaguire
1263048Samaguire#
1273048Samaguire# set_daemon_boolean_property inst_fmri optstring options option
1283048Samaguire#       prop value_if_found default
1293048Samaguire#
1303048Samaguire# Function looks for option in argument string, and sets associated
1313048Samaguire# property, if found, to value_if_found. If a default is specified, and
1323048Samaguire# the option is not found, it will be used.
1333048Samaguire#
1343048Samaguireset_daemon_boolean_property()
1353048Samaguire{
1363048Samaguire	OPTIND=1
1373048Samaguire	value_set=""
1383048Samaguire	while getopts $3 opt $2; do
1393048Samaguire		case $opt in
1403048Samaguire			"$4" )	set_routeadm_property $1 $5 $6
1413048Samaguire				value_set="true"
1423048Samaguire				;;
1433048Samaguire			? )
1443048Samaguire		esac
1453048Samaguire	done
1463048Samaguire	# No value set - use default if specified.
1473048Samaguire	if [ -z "$value_set" -a -n "$7" ]; then
1483048Samaguire		set_routeadm_property $1 $5 $7
1493048Samaguire	fi
1503048Samaguire}
1513048Samaguire
1523048Samaguire#
1533048Samaguire# set_daemon_nonoption_properties inst_fmri optstring options propnames
1543048Samaguire#       default
1553048Samaguire#
1563048Samaguire# Function looks past option list for addition values, and sets properties
1573048Samaguire# specified in propnames to additional positional values. If no value
1583048Samaguire# is found for additional property, default is used.
1593048Samaguire#
1603048Samaguireset_daemon_nonoption_properties()
1613048Samaguire{
1623048Samaguire	OPTIND=1
1633048Samaguire	# Skip options
1643048Samaguire	while getopts $3 opt $2; do
1653048Samaguire		case $opt in
1663048Samaguire			? )
1673048Samaguire		esac
1683048Samaguire	done
1693048Samaguire	pos=$OPTIND
1703048Samaguire	for prop in $4
1713048Samaguire	do
1723048Samaguire		val=`/usr/bin/echo $2 | /usr/bin/nawk -v POS=$pos \
1733048Samaguire		    '{ print $POS }'`
1743048Samaguire		if [ -z "$val" ]; then
1753048Samaguire			val="$5"
1763048Samaguire		fi
1773048Samaguire		set_routeadm_property $1 $prop $val
1783048Samaguire		pos=`expr $pos + 1`
1793048Samaguire	done
1803048Samaguire}
1813048Samaguire
1823048Samaguire#
1833048Samaguire# get_daemon_args $inst_fmri
1843048Samaguire#
1853048Samaguire# Retrieves routeadm/daemon-args property values, if any.  Removes
1863048Samaguire# quotes around values including spaces.
1873048Samaguire#
1883048Samaguireget_daemon_args()
1893048Samaguire{
1903048Samaguire	args=`/usr/sbin/svccfg -s $1 listprop routeadm/daemon-args | \
1913048Samaguire	    /usr/bin/nawk '{ for (i = 3; i <= NF; i++) printf "%s ", $i }' | \
1923048Samaguire	    /usr/bin/nawk '{sub(/^\"/, ""); sub(/\"[ \t]*$/,""); print}'`
1933048Samaguire	echo "$args"
1943048Samaguire}
1953048Samaguire
1963048Samaguire#
1973048Samaguire# clear_daemon_args $inst_fmri
1983048Samaguire#
1993048Samaguire# Blanks routeadm/daemon-args property used in upgrade.
2003048Samaguire#
2013048Samaguireclear_daemon_args()
2023048Samaguire{
2033048Samaguire	/usr/sbin/svccfg -s $1 delprop routeadm/daemon-args 2>/dev/null
2043048Samaguire}
2053048Samaguire
2063048Samaguire#
2073048Samaguire# The functions below are used to map back from property settings to
2083048Samaguire# commandline arguments to launch daemons.
2093048Samaguire#
2103048Samaguire
2113048Samaguireget_routeadm_property()
2123048Samaguire{
2133048Samaguire	propval=`/sbin/routeadm -l $1 | /usr/bin/nawk -v PROP=$2 \
2143048Samaguire	    '($1 == PROP) { for (i = 3; i < NF; i++) printf $i" "; \
2153048Samaguire	    if (NF >= 3) {printf $NF}}'`
216*9655SSebastien.Roy@Sun.COM	echo "$propval"
2173048Samaguire}
2183048Samaguire
2193048Samaguire#
2203048Samaguire# get_daemon_option_from_boolean_property inst_fmri prop option value_set
2213048Samaguire#
2223048Samaguire# Returns appropriate daemon option for boolean property prop - if current
2233048Samaguire# value matches value_set.
2243048Samaguire#
2253048Samaguireget_daemon_option_from_boolean_property()
2263048Samaguire{
2273048Samaguire	propval=`get_routeadm_property $1 $2`
2283048Samaguire	if [ "$propval" = "$4" ]; then
2293048Samaguire		echo "${3}"
2303048Samaguire	fi
2313048Samaguire}
2323048Samaguire
2333048Samaguire#
2343048Samaguire# get_daemon_option_from_property inst_fmri prop option ignore_value
2353048Samaguire#
2363048Samaguire# Returns appropriate daemon option and associated value (unless value
2373048Samaguire# matches ignore_value, in which case nothing is returned).
2383048Samaguire#
2393048Samaguireget_daemon_option_from_property()
2403048Samaguire{
2413048Samaguire	propval=`get_routeadm_property $1 $2`
2423048Samaguire	if [ "$propval" != "$4" ]; then
243*9655SSebastien.Roy@Sun.COM		echo "-${3} $propval"
2443048Samaguire	fi
2453048Samaguire}
2463048Samaguire
2473048Samaguire#
2483048Samaguire# get_daemon_ordered_multivalue_option_from_property inst_fmri prop
2493048Samaguire# option
2503048Samaguire#
2513048Samaguire# Returns appropriate daemon option and associated values. Values are
2523048Samaguire# unquoted, i.e. -A value1 -A value2
2533048Samaguire#
2543048Samaguireget_daemon_ordered_multivalue_option_from_property()
2553048Samaguire{
2563048Samaguire	# get property values, removing trailing delimiter.
2573048Samaguire	propvals=`get_routeadm_property $1 $2 | \
2583048Samaguire	    /usr/bin/nawk '{sub(/;[ \t]*$/, ""); print }'`
2593048Samaguire	# Substitute switch for internal delimiters.
2603048Samaguire	fixed_propvals=`/usr/bin/echo $propvals | \
2613048Samaguire	    /usr/bin/nawk -v SWITCH=" -${3} " \
2623048Samaguire	    '{sub(/;/, SWITCH); print }'`
2633048Samaguire	if [ -n "$fixed_propvals" ]; then
2643048Samaguire		echo "-${3} $fixed_propvals"
2653048Samaguire	fi
2663048Samaguire}
2673048Samaguire
2683048Samaguire#
2693048Samaguire# get_nonoption_property inst_fmri prop ignore_value
2703048Samaguire#
2713048Samaguire# Returns appropriate non-option property (at end of option list), unless
2723048Samaguire# value matches ignore value, in which case nothing is returned.
2733048Samaguire#
2743048Samaguireget_daemon_nonoption_property()
2753048Samaguire{
2763048Samaguire	propval=`get_routeadm_property $1 $2`
2773048Samaguire	if [ -n "$propval" -a "$propval" != "$3" ]; then
2783048Samaguire		echo "$propval"
2793048Samaguire	fi
2803048Samaguire}
281