comgt: add tty hotplug remove handling, only iterate each tty once (#9211)
authorJo-Philipp Wich <jow@openwrt.org>
Wed, 4 May 2011 08:19:07 +0000 (08:19 +0000)
committerJo-Philipp Wich <jow@openwrt.org>
Wed, 4 May 2011 08:19:07 +0000 (08:19 +0000)
SVN-Revision: 26816

package/comgt/Makefile
package/comgt/files/3g.usb

index 49cc08bbf123bc5e9bef5fb09dea46ea97ac1fed..00c111811303e02dc60e0db35ae4596390d03dcc 100644 (file)
@@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
 
 PKG_NAME:=comgt
 PKG_VERSION:=0.32
-PKG_RELEASE:=8
+PKG_RELEASE:=9
 
 PKG_SOURCE:=$(PKG_NAME).$(PKG_VERSION).tgz
 PKG_SOURCE_URL:=@SF/comgt
index 590cad4177e8c3fc254892dde1bf82f791c25056..ba6c64617786a9b7a99a80ee97c72c86a965f1c5 100644 (file)
@@ -12,32 +12,31 @@ find_3g_iface() {
 
        local proto
        config_get proto "$cfg" proto
+       [ "$proto" = 3g ] || return 0
 
-       [ "$proto" = 3g ] && {
-               local auto
-               config_get_bool auto "$cfg" auto 1
-               [ "$auto" = 1 ] || return 0
+       local auto
+       config_get_bool auto "$cfg" auto 1
+       [ "$auto" = 1 ] || [ "$ACTION" = remove ] || return 0
 
-               local dev
-               config_get dev "$cfg" device
+       local dev
+       config_get dev "$cfg" device
 
-               if [ "${dev##*/}" = "${tty##*/}" ] && [ -z "$(ls /var/lock | grep ${dev##*/})" ]; then
+       if [ "${dev##*/}" = "${tty##*/}" ]; then
+               if [ "$ACTION" = add ]; then
                        log "Starting interface $cfg for device ${dev##*/}"
                        ( sleep 1; /sbin/ifup "$cfg" ) &
+               else
+                       log "Stopping interface $cfg for device ${dev##*/}"
+                       /sbin/ifdown "$cfg" &
                fi
-       }
+       fi
 }
 
+case "$DEVICENAME" in
+       tty*)
+               [ -e "/dev/$DEVICENAME" ] || [ "$ACTION" = remove ] || exit 0
+               config_load network
+               config_foreach find_3g_iface interface "/dev/$DEVICENAME"
+       ;;
+esac
 
-if [ "$ACTION" = add ]; then
-       case "$DEVICENAME" in
-               tty*) config_load network;;
-               *) exit 0;;
-       esac
-
-       local tty
-       for tty in /dev/ttyUSB* /dev/ttyACM* /dev/ttyHS*; do
-               [ -e "$tty" ] || continue
-               config_foreach find_3g_iface interface "$tty"
-       done
-fi