routing/batmand/files/etc/init.d/batmand
Sven Eckelmann 5802c44e3c batmand: Convert to procd based init script
The legacy init script had various problems in comparison with procd based
init scripts. It wasn't able to correctly track the running process
instance and thus could:

* accidentally kill another (non init controlled) daemon instance when stop
  is used
* not restart the daemon depending on config changes when reload is used

The information about a running instance and its parameters can now be
handled by a global controller (procd). The process must not fork anymore
and leave the control to procd. The process with its parameters can then be
used by procd to trigger the stop/start of the process at the right time.

Signed-off-by: Sven Eckelmann <sven@narfation.org>
2019-07-28 00:17:15 +02:00

91 lines
2.2 KiB
Bash

#!/bin/sh /etc/rc.common
START=90
USE_PROCD=1
batmand_start() {
local config="$1"
local batman_args
local interface
local hnas
local gateway_class
local originator_interval
local preferred_gateway
local routing_class
local visualisation_srv
local local policy_routing_script
local disable_client_nat
local disable_aggregation
[ "$config" = "general" ] || return 1
config_get interface "$config" interface
if [ "$interface" = "" ]; then
echo $1 Error, you must specify at least a network interface
return 1
fi
config_get hnas "$config" hna
config_get gateway_class "$config" gateway_class
config_get originator_interval "$config" originator_interval
config_get preferred_gateway "$config" preferred_gateway
config_get routing_class "$config" routing_class
config_get visualisation_srv "$config" visualisation_srv
config_get policy_routing_script "$config" policy_routing_script
config_get disable_client_nat "$config" disable_client_nat
config_get disable_aggregation "$config" disable_aggregation
batman_args=""
for hna in $hnas; do
batman_args=${batman_args}'-a '$hna' '
done
if [ $gateway_class ]; then
batman_args=${batman_args}'-g '$gateway_class' '
fi
if [ $originator_interval ]; then
batman_args=${batman_args}'-o '$originator_interval' '
fi
if [ $preferred_gateway ]; then
batman_args=${batman_args}'-p '$preferred_gateway' '
fi
if [ $routing_class ]; then
batman_args=${batman_args}'-r '$routing_class' '
fi
if [ $visualisation_srv ]; then
batman_args=${batman_args}'-s '$visualisation_srv' '
fi
if [ $policy_routing_script ]; then
batman_args=${batman_args}'--policy-routing-script '$policy_routing_script' '
fi
if [ $disable_client_nat ]; then
batman_args=${batman_args}'--disable-client-nat '
fi
if [ $disable_aggregation ]; then
batman_args=${batman_args}'--disable-aggregation '
fi
procd_open_instance "${config}"
procd_set_param command /usr/sbin/batmand
procd_append_param command --no-detach
procd_append_param command ${batman_args}
procd_append_param command ${interface}
procd_set_param netdev ${interface}
procd_close_instance
}
start_service() {
config_load "batmand"
config_foreach batmand_start batmand
}
service_triggers() {
procd_add_reload_trigger "batmand"
}