olsrd: replace hotplug scripts with procd

With hotplug scripts we manage interface ifup events to restart olsrd,
regenerate config files and therefor add the interface.

Hotplug is deprecated and should be replaced with procd.
This commit is contained in:
Nico Geyso 2015-02-04 13:13:54 +01:00 committed by Lars Gierth
parent 39b6b3e477
commit e15e39ed4a
5 changed files with 38 additions and 74 deletions

View file

@ -181,8 +181,6 @@ define Package/olsrd/install
$(INSTALL_DIR) $(1)/etc/init.d
$(INSTALL_BIN) ./files/olsrd4.init $(1)/etc/init.d/olsrd
$(INSTALL_BIN) ./files/olsrd6.init $(1)/etc/init.d/olsrd6
$(INSTALL_DIR) $(1)/etc/hotplug.d/iface
$(INSTALL_BIN) ./files/olsrd.hotplug.sh $(1)/etc/hotplug.d/iface/50-olsrd
endef
define Package/olsrd-mod-arprefresh/install

View file

@ -1,71 +0,0 @@
#!/bin/sh
olsrd_list_configured_interfaces()
{
local i=0
local interface
while interface="$( uci -q get $OLSRD.@Interface[$i].interface )"; do {
case "$( uci -q get $OLSRD.@Interface[$i].ignore )" in
1|on|true|enabled|yes)
# is disabled
;;
*)
echo "$interface" # e.g. 'lan'
;;
esac
i=$(( $i + 1 ))
} done
}
olsrd_interface_already_in_config()
{
# e.g.: 'Interface "eth0.1" "eth0.2" "wlan0"'
if grep -s ^'Interface ' '/var/etc/$OLSRD.conf' | grep -q "\"$DEVICE\""; then
logger -t olsrd_hotplug -p daemon.debug "[OK] already_active: '$INTERFACE' => '$DEVICE'"
return 0
else
logger -t olsrd_hotplug -p daemon.info "[OK] ifup: '$INTERFACE' => '$DEVICE'"
return 1
fi
}
olsrd_interface_needs_adding()
{
local interface
# likely and cheap operation:
olsrd_interface_already_in_config && return 1
for interface in $(olsrd_list_configured_interfaces); do {
[ "$interface" = "$INTERFACE" ] && {
olsrd_interface_already_in_config || return 0
}
} done
logger -t olsrd_hotplug -p daemon.debug "[OK] interface '$INTERFACE' => '$DEVICE' not used for $OLSRD"
return 1
}
case "$ACTION" in
ifup)
# only work after the first normal startup
# also: no need to test, if enabled
OLSRD=olsrd
[ -e "/var/etc/$OLSRD.conf" ] && {
# INTERFACE = e.g. 'wlanadhocRADIO1' or 'cfg144d8f'
# DEVICE = e.g. 'wlan1-1'
olsrd_interface_needs_adding && {
. /etc/rc.common /etc/init.d/$OLSRD restart
}
}
OLSRD=olsrd6
[ -e "/var/etc/$OLSRD.conf" ] && {
olsrd_interface_needs_adding && {
. /etc/rc.common /etc/init.d/$OLSRD restart
}
}
;;
esac

View file

@ -57,6 +57,25 @@ system_config() {
fi
}
olsrd_list_configured_interfaces()
{
local i=0
local interface
while interface="$( uci -q get $OLSRD.@Interface[$i].interface )"; do {
case "$( uci -q get $OLSRD.@Interface[$i].ignore )" in
1|on|true|enabled|yes)
# is disabled
;;
*)
echo "$interface" # e.g. 'lan'
;;
esac
i=$(( $i + 1 ))
} done
}
olsrd_find_config_file() {
local cfg="$1"
validate_varname "$cfg" || return 0

View file

@ -6,12 +6,21 @@
START=65
USE_PROCD=1
CONF=/var/etc/olsrd.conf
OLSRD=olsrd
start_service() {
procd_open_instance
procd_set_param command /usr/sbin/olsrd -f $CONF -nofork
procd_set_param respawn
procd_set_param file $CONF # automatically restart olsrd if cfg has changed
# restart on ifup interface events
local network = olsrd_list_configured_interfaces $OLSRD
for n in $network; do
procd_add_reload_interface_trigger $n /etc/init.d/$OLSRD reload
done
procd_close_instance
olsrd_setup_smartgw_rules

View file

@ -6,12 +6,21 @@
START=65
USE_PROCD=1
CONF=/var/etc/olsrd6.conf
OLSRD=olsrd6
start_service() {
procd_open_instance
procd_set_param command /usr/sbin/olsrd -f $CONF -nofork
procd_set_param respawn
procd_set_param file $CONF # automatically restart olsrd6 if cfg has changed
procd_set_param file $CONF # automatically restart olsrd if cfg has changed
# restart on ifup interface events
local network = olsrd_list_configured_interfaces $OLSRD
for n in $network; do
procd_add_reload_interface_trigger $n /etc/init.d/$OLSRD reload
done
procd_close_instance
olsrd_setup_smartgw_rules