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:
parent
39b6b3e477
commit
e15e39ed4a
5 changed files with 38 additions and 74 deletions
|
@ -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
|
||||
|
|
|
@ -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
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue