]> git.proxmox.com Git - mirror_frr.git/blame - solaris/frr.init.in
zebra: Fixup spaces/tabs issue found by CI in rt_socket.c
[mirror_frr.git] / solaris / frr.init.in
CommitLineData
1b414a17 1#!/sbin/sh
2#
c2be59ba 3# Copyright 2007 Sun Microsystems, Inc. All rights reserved.
1b414a17 4# Use is subject to license terms.
5#
447a8fe9 6# This file is part of FRRouting.
def09df7 7#
447a8fe9 8# FRRouting is free software; you can redistribute it and/or modify
7f8512d9 9# it under the terms of the GNU General Public License as published by the
def09df7
PJ
10# Free Software Foundation; either version 2, or (at your option) any
11# later version.
12#
447a8fe9 13# FRRouting is distributed in the hope that it will be useful, but
def09df7
PJ
14# WITHOUT ANY WARRANTY; without even the implied warranty of
15# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16# General Public License for more details.
17#
18# You should have received a copy of the GNU General Public License
447a8fe9 19# along with FRRouting; see the file COPYING. If not, write to
7f8512d9
MW
20# the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
21# Boston, MA 02111-1307, USA.
def09df7 22#
75db03eb 23# Starts/stops the given daemon
1b414a17 24
25SMFINCLUDE=/lib/svc/share/smf_include.sh
c2be59ba
PJ
26ROUTEADMINCLUDE=/lib/svc/share/routing_include.sh
27GLOBAL_OPTIONS="PAfiug"
75db03eb 28DAEMON_PATH=@sbindir@
c2be59ba
PJ
29USER=@enable_user@
30GROUP=@enable_group@
1b414a17 31
c2be59ba
PJ
32# handle upgrade of daemon-args SMF property to new routeadm properties
33# used during upgrade too by routeadm.
34# relevant to S10U4+ only.
35handle_routeadm_upgrade () {
36 GLOBAL_OPTIONS="PAfiug"
37
38 daemon_args=`get_daemon_args $SMF_FMRI`
39
40 if [ -n "$daemon_args" ]; then
41 set_daemon_value_property "$SMF_FMRI" "$daemon_args" \
42 "$GLOBAL_OPTIONS" "P" vty_port 0
43 set_daemon_value_property "$SMF_FMRI" "$daemon_args" \
44 "$GLOBAL_OPTIONS" "A" vty_address
45 set_daemon_value_property "$SMF_FMRI" "$daemon_args" \
46 "$GLOBAL_OPTIONS" "f" config_file
47 set_daemon_value_property "$SMF_FMRI" "$daemon_args" \
48 "$GLOBAL_OPTIONS" "i" pid_file
49 set_daemon_value_property "$SMF_FMRI" "$daemon_args" \
50 "$GLOBAL_OPTIONS" "u" user
51 set_daemon_value_property "$SMF_FMRI" "$daemon_args" \
52 "$GLOBAL_OPTIONS" "g" group
53
54 case "$1" in
55 zebra)
56 set_daemon_boolean_property "$SMF_FMRI" "$daemon_args" \
57 "${GLOBAL_OPTIONS}b" "b" batch true false
58 ;;
59 ripd|ripngd)
60 set_daemon_boolean_property "$SMF_FMRI" "$daemon_args" \
61 "${GLOBAL_OPTIONS}r" "r" retain true false
62 ;;
63 bgpd)
64 set_daemon_boolean_property "$SMF_FMRI" "$daemon_args" \
65 "${GLOBAL_OPTIONS}rnp" "r" retain true false
66 set_daemon_boolean_property "$SMF_FMRI" "$daemon_args" \
67 "${GLOBAL_OPTIONS}rnp" "n" no_kernel true false
68 set_daemon_value_property "$SMF_FMRI" "$daemon_args" \
69 "${GLOBAL_OPTIONS}rnp" "p" bgp_port
70 esac
71 clear_daemon_args $SMF_FMRI
72 fi
73}
74
75upgrade_config () {
76 DAEMON=$1
447a8fe9 77 # handle upgrade of SUNWzebra to FRRouting
7f8512d9 78 if [ -d "/etc/frr" -a ! -f "/etc/frr/${DAEMON}.conf" ] ; then
c2be59ba
PJ
79 if [ -f "/etc/sfw/zebra/${DAEMON}.conf" ] ; then
80 cp "/etc/sfw/zebra/${DAEMON}.conf" \
7f8512d9 81 "/etc/frr/${DAEMON}.conf.upgrade" \
c2be59ba 82 || exit $SMF_EXIT_ERR_FATAL
7f8512d9 83 chown "${USER}:${GROUP}" "/etc/frr/${DAEMON}.conf.upgrade" \
c2be59ba 84 || exit $SMF_EXIT_ERR_FATAL
7f8512d9 85 chmod 0600 "/etc/frr/${DAEMON}.conf.upgrade" \
c2be59ba 86 || exit $SMF_EXIT_ERR_FATAL
7f8512d9 87 mv "/etc/frr/${DAEMON}.conf.upgrade" "/etc/frr/${DAEMON}.conf" \
c2be59ba
PJ
88 || exit $SMF_EXIT_ERR_FATAL
89 fi
90 fi
91
7f8512d9
MW
92 if [ ! -f "/etc/frr/${DAEMON}.conf" ] ; then
93 touch "/etc/frr/${DAEMON}.conf.new" \
c2be59ba 94 || exit $SMF_EXIT_ERR_FATAL
7f8512d9 95 chown "${USER}:${GROUP}" "/etc/frr/${DAEMON}.conf.new" \
c2be59ba 96 || exit $SMF_EXIT_ERR_FATAL
7f8512d9 97 chmod 0600 "/etc/frr/${DAEMON}.conf.new" \
c2be59ba 98 || exit $SMF_EXIT_ERR_FATAL
7f8512d9 99 mv "/etc/frr/${DAEMON}.conf.new" "/etc/frr/${DAEMON}.conf" \
c2be59ba
PJ
100 || exit $SMF_EXIT_ERR_FATAL
101 fi
102}
103
104# Relevant to S10+
7f8512d9
MW
105frr_is_globalzone () {
106 if [ "${FRR_INIT_ZONENAME:=`/sbin/zonename`}" = "global" \
c2be59ba 107 -o `/sbin/zonename -t` = "exclusive" ]; then
75db03eb 108 return 0
c2be59ba
PJ
109 else
110 return 1
111 fi
112}
113
114routeadm_daemon_args () {
115 # globals
116 args="`get_daemon_option_from_property $SMF_FMRI config_file f`"
117 args="${args} `get_daemon_option_from_property $SMF_FMRI vty_port P`"
118 args="${args} `get_daemon_option_from_property $SMF_FMRI vty_address A`"
119 args="${args} `get_daemon_option_from_property $SMF_FMRI pid_file i`"
120
121 # user and group we need for config file upgrade..
122 SMF_USER=`get_routeadm_property $SMF_FMRI user`
123 SMF_GROUP=`get_routeadm_property()$SMF_FMRI group`
124 if [ "${SMF_USER}" ] ; then
125 USER="${SMF_USER}"
126 args="${args} -u ${SMF_USER}"
127 fi
128 if [ "${SMF_GROUP}" ] ; then
129 GROUP="${SMF_GROUP}"
130 args="${args} -g ${SMF_GROUP}"
131 fi
132
133 case $1 in
134 zebra)
135 args="${args} `get_daemon_option_from_boolean_property $SMF_FMRI batch -b true`"
136 ;;
137 ripd|ripngd)
138 args="${args} `get_daemon_option_from_boolean_property $SMF_FMRI retain -r true`"
139 ;;
140 bgpd)
141 args="${args} `get_daemon_option_from_boolean_property $SMF_FMRI retain -r true`"
142 args="${args} `get_daemon_option_from_boolean_property $SMF_FMRI no_kernel -n true`"
143 args="${args} `get_daemon_option_from_property $SMF_FMRI bgp_port p 179`"
144 ;;
145 esac
146 echo ${args}
147}
148
75db03eb
PJ
149# Include smf functions, if available. If not, define smf_present to indicate
150# there is no SMF. Should allow this script to work pre-S10.
1b414a17 151if [ -f "$SMFINCLUDE" ] ; then
152 . "$SMFINCLUDE";
c2be59ba
PJ
153
154 # source the SMF-routeadm include if present..
155 if [ -f "$ROUTEADMINCLUDE" ] ; then
156 . "$ROUTEADMINCLUDE"
157 fi
75db03eb
PJ
158else
159 # pre-SMF system, fake up any functions and exit codes
160 # which SMFINCLUDE usually provides.
161 smf_present () {
162 return 1
163 }
164 SMF_EXIT_OK=0;
165 SMF_EXIT_ERR_CONFIG=96;
166 SMF_EXIT_ERR_FATAL=95;
1b414a17 167fi
75db03eb
PJ
168
169# if there's no SMF, set some default DAEMON_ARGS
170smf_present || DAEMON_ARGS=""
1b414a17 171
172usage () {
75db03eb 173 if smf_present ; then
c2be59ba 174 echo "Usage: $0 <daemon>";
75db03eb
PJ
175 else
176 echo "Usage: $0 <stop|start> <daemon> <daemon arguments>";
177 fi
178 echo "The --pid_file argument is implied";
179 echo "This help message: $0 <help|usage>";
180}
1b414a17 181
75db03eb 182# parse arguments, different according to SMF or not.
1b414a17 183case $1 in
184 'help' | 'usage')
75db03eb 185 usage
c2be59ba 186 exit $SMF_EXIT_OK
75db03eb 187 ;;
1b414a17 188esac
189
75db03eb 190if smf_present ; then
7f8512d9 191 FRR_METHOD="start"
75db03eb 192else
7f8512d9 193 FRR_METHOD="$1"
75db03eb 194 shift;
1b414a17 195fi
196
75db03eb 197DAEMON="$1"
1b414a17 198
75db03eb
PJ
199# daemon path must be given
200if [ -z "$DAEMON_PATH/$DAEMON" ]; then
201 usage
202 exit $SMF_EXIT_ERR_FATAL
203fi
204
205# only bgpd is suitable for running in a non-global zone, at this
206# time.
207case "${DAEMON}" in
75db03eb 208 bgpd)
e24f0638 209 ;;
c2be59ba 210 zebra | ospfd | ospf6d | ripd | ripngd )
7f8512d9 211 frr_is_globalzone || exit $SMF_EXIT_OK
1b414a17 212 ;;
213 *)
75db03eb
PJ
214 usage
215 exit $SMF_EXIT_ERR_CONFIG;
1b414a17 216 ;;
217esac
218
447a8fe9 219# Older FRRouting SMF packages pass daemon args on the commandline
c2be59ba
PJ
220# Newer SMF routeadm model uses properties for each argument
221# so we must handle that.
222if [ smf_present -a -f "$ROUTEADMINCLUDE" ]; then
223 handle_routeadm_upgrade $DAEMON;
224 DAEMON_ARGS=`routeadm_daemon_args`;
c2be59ba
PJ
225else
226 if [ $# -gt 0 ] ; then
227 shift
228 DAEMON_ARGS="$@"
229 fi
230fi
231
232upgrade_config "$DAEMON"
233
234if [ ! -f "@sysconfdir@/${DAEMON}.conf" ] ; then
235 echo "Could not find config file, @sysconfdir@/${DAEMON}.conf"
236 exit $SMF_EXIT_ERR_CONFIG
237fi
238
7f8512d9
MW
239# we need @frr_statedir@ to exist, it probably is on tmpfs.
240if [ ! -d @frr_statedir@ ] ; then
241 mkdir -p @frr_statedir@
242 chown @enable_user@:@enable_group@ @frr_statedir@
243 chmod 751 @frr_statedir@
9b78d052 244fi
245
7f8512d9 246PIDFILE="@frr_statedir@/${DAEMON}.pid"
75db03eb 247
1b414a17 248start () {
c2be59ba
PJ
249 if [ ! -x "$DAEMON_PATH/$DAEMON" ] ; then
250 echo "Error, could not find daemon, $DAEMON_PATH/$DAEMON"
251 exit $SMF_EXIT_ERR_FATAL
252 fi
253 eval exec $DAEMON_PATH/$DAEMON $DAEMON_ARGS --pid_file ${PIDFILE} &
1b414a17 254}
255
3523bea8 256stop_by_pidfile () {
1b414a17 257 if [ -f "${PIDFILE}" ]; then
258 /usr/bin/kill -TERM `/usr/bin/cat "${PIDFILE}"`
259 fi
260}
261
7f8512d9 262case "$FRR_METHOD" in
1b414a17 263'start')
75db03eb 264 start
1b414a17 265 ;;
266'stop')
3523bea8 267 stop_by_pidfile
1b414a17 268 ;;
269
1b414a17 270*)
271 usage
c2be59ba 272 exit $SMF_EXIT_ERR_FATAL
1b414a17 273 ;;
274esac
275
276exit $SMF_EXIT_OK;