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