1#!/bin/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 2009 Sun Microsystems, Inc. All rights reserved. 24# Use is subject to license terms. 25# 26 27# 28# IPfilter's firewall 29# 30# routed and its siblings use ICMP Router Discovery protocol, simply allow 31# these packets so the client portion of routed can work. 32# 33gen_IRDP_rules() 34{ 35 # Allow incoming icmp from routers for successful discovery. 36 # IRDP - ICMP type 9 and 10, advertisement and solicitation, respectively. 37 # 38 echo "pass in log quick proto icmp from any to any icmp-type 10" >>${1} 39 echo "pass in log quick proto icmp from any to any icmp-type 9" >>${1} 40} 41 42# 43# These functions are used to help map daemon arguments to appropriate 44# routing properties and back, allowing legacy specifications of daemon 45# arguments to be reflected in SMF property values for daemon services. 46# 47 48# 49# set_routeadm_property inst_fmri propname propvalue 50# 51# Functions sets appropriate property value in routeadm property group 52# (via routeadm -m) for inst_fmri to propvalue. 53# 54set_routeadm_property() 55{ 56 /sbin/routeadm -m $1 ${2}="${3}" 57} 58 59# 60# The functions below are used to map from daemon arguments to appropriate 61# routeadm properties (properties that the service user can manipulate 62# to control daemon functionality. getopts is used extensively to 63# retrieve options/values from argument list, and these option values 64# are used to set properties appropriately. 65# 66 67# 68# set_daemon_value_property inst_fmri optstring options option prop 69# default_value 70# 71# Function looks for option/value in argument string, and sets associated 72# property if found. If a default is specified, and the option is not 73# in the argument string, it will be used. 74# 75set_daemon_value_property() 76{ 77 OPTIND=1 78 value_set="" 79 while getopts $3 opt $2; do 80 case $opt in 81 "$4" ) set_routeadm_property $1 $5 $OPTARG 82 value_set="true" 83 ;; 84 ? ) 85 esac 86 done 87 # No value set - use default if specified. 88 if [ -z "$value_set" -a -n "$6" ]; then 89 set_routeadm_property $1 $5 $6 90 fi 91} 92 93# 94# set_daemon_ordered_multivalue_property inst_fmri optstring options option prop 95# default_value 96# 97# Function looks for option/values in argument string, and sets associated 98# property if found. If a default is specified, and the option is not 99# in the argument string, it will be used. Use ";" as delimiter for 100# multiple values. 101# 102set_daemon_ordered_multivalue_property() 103{ 104 OPTIND=1 105 value_set="" 106 while getopts $3 opt $2; do 107 case $opt in 108 "$4" ) if [ -z "$value_set" ]; then 109 value_set="${OPTARG}" 110 else 111 value_set="$value_set;${OPTARG}" 112 fi 113 ;; 114 ? ) 115 esac 116 done 117 if [ -n "$value_set" ]; then 118 set_routeadm_property $1 $5 "$value_set" 119 fi 120 # No value set - use default if specified. 121 if [ -z "$value_set" -a -n "$6" ]; then 122 set_routeadm_property $1 $5 $6 123 fi 124} 125 126# 127# set_daemon_boolean_property inst_fmri optstring options option 128# prop value_if_found default 129# 130# Function looks for option in argument string, and sets associated 131# property, if found, to value_if_found. If a default is specified, and 132# the option is not found, it will be used. 133# 134set_daemon_boolean_property() 135{ 136 OPTIND=1 137 value_set="" 138 while getopts $3 opt $2; do 139 case $opt in 140 "$4" ) set_routeadm_property $1 $5 $6 141 value_set="true" 142 ;; 143 ? ) 144 esac 145 done 146 # No value set - use default if specified. 147 if [ -z "$value_set" -a -n "$7" ]; then 148 set_routeadm_property $1 $5 $7 149 fi 150} 151 152# 153# set_daemon_nonoption_properties inst_fmri optstring options propnames 154# default 155# 156# Function looks past option list for addition values, and sets properties 157# specified in propnames to additional positional values. If no value 158# is found for additional property, default is used. 159# 160set_daemon_nonoption_properties() 161{ 162 OPTIND=1 163 # Skip options 164 while getopts $3 opt $2; do 165 case $opt in 166 ? ) 167 esac 168 done 169 pos=$OPTIND 170 for prop in $4 171 do 172 val=`/usr/bin/echo $2 | /usr/bin/nawk -v POS=$pos \ 173 '{ print $POS }'` 174 if [ -z "$val" ]; then 175 val="$5" 176 fi 177 set_routeadm_property $1 $prop $val 178 pos=`expr $pos + 1` 179 done 180} 181 182# 183# get_daemon_args $inst_fmri 184# 185# Retrieves routeadm/daemon-args property values, if any. Removes 186# quotes around values including spaces. 187# 188get_daemon_args() 189{ 190 args=`/usr/sbin/svccfg -s $1 listprop routeadm/daemon-args | \ 191 /usr/bin/nawk '{ for (i = 3; i <= NF; i++) printf "%s ", $i }' | \ 192 /usr/bin/nawk '{sub(/^\"/, ""); sub(/\"[ \t]*$/,""); print}'` 193 echo "$args" 194} 195 196# 197# clear_daemon_args $inst_fmri 198# 199# Blanks routeadm/daemon-args property used in upgrade. 200# 201clear_daemon_args() 202{ 203 /usr/sbin/svccfg -s $1 delprop routeadm/daemon-args 2>/dev/null 204} 205 206# 207# The functions below are used to map back from property settings to 208# commandline arguments to launch daemons. 209# 210 211get_routeadm_property() 212{ 213 propval=`/sbin/routeadm -l $1 | /usr/bin/nawk -v PROP=$2 \ 214 '($1 == PROP) { for (i = 3; i < NF; i++) printf $i" "; \ 215 if (NF >= 3) {printf $NF}}'` 216 echo "$propval" 217} 218 219# 220# get_daemon_option_from_boolean_property inst_fmri prop option value_set 221# 222# Returns appropriate daemon option for boolean property prop - if current 223# value matches value_set. 224# 225get_daemon_option_from_boolean_property() 226{ 227 propval=`get_routeadm_property $1 $2` 228 if [ "$propval" = "$4" ]; then 229 echo "${3}" 230 fi 231} 232 233# 234# get_daemon_option_from_property inst_fmri prop option ignore_value 235# 236# Returns appropriate daemon option and associated value (unless value 237# matches ignore_value, in which case nothing is returned). 238# 239get_daemon_option_from_property() 240{ 241 propval=`get_routeadm_property $1 $2` 242 if [ "$propval" != "$4" ]; then 243 echo "-${3} $propval" 244 fi 245} 246 247# 248# get_daemon_ordered_multivalue_option_from_property inst_fmri prop 249# option 250# 251# Returns appropriate daemon option and associated values. Values are 252# unquoted, i.e. -A value1 -A value2 253# 254get_daemon_ordered_multivalue_option_from_property() 255{ 256 # get property values, removing trailing delimiter. 257 propvals=`get_routeadm_property $1 $2 | \ 258 /usr/bin/nawk '{sub(/;[ \t]*$/, ""); print }'` 259 # Substitute switch for internal delimiters. 260 fixed_propvals=`/usr/bin/echo $propvals | \ 261 /usr/bin/nawk -v SWITCH=" -${3} " \ 262 '{sub(/;/, SWITCH); print }'` 263 if [ -n "$fixed_propvals" ]; then 264 echo "-${3} $fixed_propvals" 265 fi 266} 267 268# 269# get_nonoption_property inst_fmri prop ignore_value 270# 271# Returns appropriate non-option property (at end of option list), unless 272# value matches ignore value, in which case nothing is returned. 273# 274get_daemon_nonoption_property() 275{ 276 propval=`get_routeadm_property $1 $2` 277 if [ -n "$propval" -a "$propval" != "$3" ]; then 278 echo "$propval" 279 fi 280} 281