From e15e39ed4add9f6147fa94e50f61caaeedfe5b30 Mon Sep 17 00:00:00 2001 From: Nico Geyso Date: Wed, 4 Feb 2015 13:13:54 +0100 Subject: [PATCH] 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. --- olsrd/Makefile | 2 - olsrd/files/olsrd.hotplug.sh | 71 ------------------------------------ olsrd/files/olsrd.sh | 19 ++++++++++ olsrd/files/olsrd4.init | 9 +++++ olsrd/files/olsrd6.init | 11 +++++- 5 files changed, 38 insertions(+), 74 deletions(-) delete mode 100755 olsrd/files/olsrd.hotplug.sh diff --git a/olsrd/Makefile b/olsrd/Makefile index 91bd25a..4cdc94f 100644 --- a/olsrd/Makefile +++ b/olsrd/Makefile @@ -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 diff --git a/olsrd/files/olsrd.hotplug.sh b/olsrd/files/olsrd.hotplug.sh deleted file mode 100755 index 99e834e..0000000 --- a/olsrd/files/olsrd.hotplug.sh +++ /dev/null @@ -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 diff --git a/olsrd/files/olsrd.sh b/olsrd/files/olsrd.sh index 65532ff..b0df329 100644 --- a/olsrd/files/olsrd.sh +++ b/olsrd/files/olsrd.sh @@ -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 diff --git a/olsrd/files/olsrd4.init b/olsrd/files/olsrd4.init index c909e04..5f4b279 100644 --- a/olsrd/files/olsrd4.init +++ b/olsrd/files/olsrd4.init @@ -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 diff --git a/olsrd/files/olsrd6.init b/olsrd/files/olsrd6.init index 670218f..55a1e48 100644 --- a/olsrd/files/olsrd6.init +++ b/olsrd/files/olsrd6.init @@ -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