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