olsr: hotplug: fix a wrong grep (never successful) in olsrd_interface_already_in_config()
[feed/routing.git] / olsrd / files / olsrd.hotplug.sh
index db709a8155162896428d3dc4d50382b9ccec9c47..ee41a2eb57ebe96a6ea2d1d060439d134b421b00 100755 (executable)
@@ -5,40 +5,46 @@ 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
+       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"
+                               echo "$interface"       # e.g. 'lan'
                        ;;
                esac
 
-               i=$(( $i + 1 ))
+               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="$1"    # e.g. wlanadhocRADIO1
-       local device="$2"       # e.g. wlan1-1
-       local myif
-       local config="/var/etc/olsrd.conf"
-
-       for myif in $(olsrd_list_configured_interfaces); do {
-               [ "$myif" = "$interface" ] && {
-                       if grep -s ^'Interface ' "$config" | grep -q "\"$device\""; then
-                               logger -t olsrd_hotplug -p daemon.debug "[OK] already_active: $INTERFACE => $DEVICE"
-                               return 1
-                       else
-                               logger -t olsrd_hotplug -p daemon.info "[OK] ifup: $INTERFACE => $DEVICE"
-                               return 0
-                       fi
+       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 not used for olsrd"
+       logger -t olsrd_hotplug -p daemon.debug "[OK] interface '$INTERFACE' => '$DEVICE' not used for $OLSRD"
        return 1
 }
 
@@ -46,9 +52,19 @@ case "$ACTION" in
        ifup)
                # only work after the first normal startup
                # also: no need to test, if enabled
-               [ -e '/var/run/olsrd.pid' ] && {
-                       olsrd_interface_needs_adding "$INTERFACE" "$DEVICE" && {
-                               . /etc/rc.common /etc/init.d/olsrd restart
+               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
                        }
                }
        ;;