comgt: move 3g hotplug handling to tty subsystem, fixes race on coldplug (#9211)
authorJo-Philipp Wich <jow@openwrt.org>
Tue, 3 May 2011 19:39:13 +0000 (19:39 +0000)
committerJo-Philipp Wich <jow@openwrt.org>
Tue, 3 May 2011 19:39:13 +0000 (19:39 +0000)
SVN-Revision: 26809

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

index 7c120cb50db8d19f78fc4cdb1cf05b9b600926ab..49cc08bbf123bc5e9bef5fb09dea46ea97ac1fed 100644 (file)
@@ -54,8 +54,8 @@ define Package/comgt/install
        $(INSTALL_DATA) ./files/3g.button $(1)/etc/hotplug.d/button/05-3g
        $(INSTALL_DIR) $(1)/etc/hotplug.d/iface
        $(INSTALL_DATA) ./files/3g.iface $(1)/etc/hotplug.d/iface/05-3g
-       $(INSTALL_DIR) $(1)/etc/hotplug.d/usb
-       $(INSTALL_DATA) ./files/3g.usb $(1)/etc/hotplug.d/usb/30-3g
+       $(INSTALL_DIR) $(1)/etc/hotplug.d/tty
+       $(INSTALL_DATA) ./files/3g.usb $(1)/etc/hotplug.d/tty/30-3g
        $(INSTALL_DIR) $(1)/etc/gcom
        $(INSTALL_DATA) ./files/setpin.gcom $(1)/etc/gcom/setpin.gcom
        $(INSTALL_DATA) ./files/setmode.gcom $(1)/etc/gcom/setmode.gcom
index d5a38b8a4ccfdd38723bd89c3cb1c194f0414626..ea2fba1509112cf8cec893e20bfae06646e3b3d9 100644 (file)
@@ -22,8 +22,11 @@ find_3g_iface() {
                config_get dev "$cfg" device
 
                if [ "${dev##*/}" = "${tty##*/}" ]; then
-                       log "Starting interface $cfg for device ${tty##*/}"
-                       ( sleep 1; /sbin/ifup "$cfg" ) &
+                       [ -z "$(ls /var/lock | grep ${dev##*/})" ] && {
+                               log "Starting interface $cfg for device ${dev##*/}"
+                               sleep 1
+                               /sbin/ifup "$cfg"
+                       }
                fi
        }
 }
@@ -31,13 +34,13 @@ find_3g_iface() {
 
 if [ "$ACTION" = add ]; then
        case "$DEVICENAME" in
-               *-*:*.*) config_load network;;
+               tty*) config_load network;;
                *) exit 0;;
        esac
 
        local tty
-       for tty in /sys/$DEVPATH/ttyUSB* /sys/$DEVPATH/tty/ttyACM* /sys/$DEVPATH/tty/ttyHS*; do
-               [ -d "$tty" ] || continue
+       for tty in /dev/ttyUSB* /dev/ttyACM* /dev/ttyHS*; do
+               [ -e "$tty" ] || continue
                config_foreach find_3g_iface interface "$tty"
        done
 fi