comgt: port 3g.sh to netifd
authorFelix Fietkau <nbd@openwrt.org>
Thu, 27 Oct 2011 20:29:00 +0000 (20:29 +0000)
committerFelix Fietkau <nbd@openwrt.org>
Thu, 27 Oct 2011 20:29:00 +0000 (20:29 +0000)
SVN-Revision: 28634

13 files changed:
package/comgt/Makefile
package/comgt/files-netifd/3g.sh [new file with mode: 0644]
package/comgt/files-netifd/3g.usb [new file with mode: 0644]
package/comgt/files-old/3g.button [new file with mode: 0644]
package/comgt/files-old/3g.connect [new file with mode: 0644]
package/comgt/files-old/3g.iface [new file with mode: 0644]
package/comgt/files-old/3g.sh [new file with mode: 0644]
package/comgt/files-old/3g.usb [new file with mode: 0644]
package/comgt/files/3g.button [deleted file]
package/comgt/files/3g.connect [deleted file]
package/comgt/files/3g.iface [deleted file]
package/comgt/files/3g.sh [deleted file]
package/comgt/files/3g.usb [deleted file]

index 61c123a737fdb10532ddd24d16238df2742fc857..c071c8ca19c8f24458f4f4db1de139feb4dea071 100644 (file)
@@ -17,6 +17,10 @@ PKG_MD5SUM:=db2452680c3d953631299e331daf49ef
 
 PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME).$(PKG_VERSION)
 
+PKG_CONFIG_DEPENDS:=CONFIG_USE_NETIFD
+COMGT_VARIANT:=$(if $(CONFIG_USE_NETIFD),netifd,old)
+FILES_DIR:=./files-$(COMGT_VARIANT)
+
 include $(INCLUDE_DIR)/package.mk
 
 define Package/comgt
@@ -41,28 +45,37 @@ define Build/Compile
                comgt
 endef
 
+define Package/comgt/install/netifd
+       $(INSTALL_DIR) $(1)/lib/netifd/proto
+       $(INSTALL_BIN) $(FILES_DIR)/3g.sh $(1)/lib/netifd/proto/3g.sh
+endef
+
+define Package/comgt/install/old
+       $(INSTALL_DIR) $(1)/etc/ppp
+       $(INSTALL_BIN) $(FILES_DIR)/3g.connect $(1)/etc/ppp/3g.connect
+       $(INSTALL_DIR) $(1)/lib/network
+       $(INSTALL_BIN) $(FILES_DIR)/3g.sh $(1)/lib/network/3g.sh
+       $(INSTALL_DIR) $(1)/etc/hotplug.d/button
+       $(INSTALL_DATA) $(FILES_DIR)/3g.button $(1)/etc/hotplug.d/button/05-3g
+       $(INSTALL_DIR) $(1)/etc/hotplug.d/iface
+       $(INSTALL_DATA) $(FILES_DIR)/3g.iface $(1)/etc/hotplug.d/iface/05-3g
+endef
+
 define Package/comgt/install
        $(INSTALL_DIR) $(1)/usr/bin
        $(INSTALL_BIN) $(PKG_BUILD_DIR)/comgt $(1)/usr/bin/
        ln -s comgt $(1)/usr/bin/gcom
-       $(INSTALL_DIR) $(1)/etc/ppp
-       $(INSTALL_BIN) ./files/3g.connect $(1)/etc/ppp/3g.connect
        $(INSTALL_DIR) $(1)/etc/chatscripts
        $(INSTALL_DATA) ./files/3g.chat $(1)/etc/chatscripts/3g.chat
        $(INSTALL_DATA) ./files/evdo.chat $(1)/etc/chatscripts/evdo.chat
-       $(INSTALL_DIR) $(1)/lib/network
-       $(INSTALL_BIN) ./files/3g.sh $(1)/lib/network/3g.sh
-       $(INSTALL_DIR) $(1)/etc/hotplug.d/button
-       $(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/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
        $(INSTALL_DATA) ./files/getcardinfo.gcom $(1)/etc/gcom/getcardinfo.gcom
        $(INSTALL_DATA) ./files/getstrength.gcom $(1)/etc/gcom/getstrength.gcom
+       $(INSTALL_DIR) $(1)/etc/hotplug.d/tty
+       $(INSTALL_DATA) $(FILES_DIR)/3g.usb $(1)/etc/hotplug.d/tty/30-3g
+       $(Package/comgt/install/$(COMGT_VARIANT))
 endef
 
 $(eval $(call BuildPackage,comgt))
diff --git a/package/comgt/files-netifd/3g.sh b/package/comgt/files-netifd/3g.sh
new file mode 100644 (file)
index 0000000..cbf8bd1
--- /dev/null
@@ -0,0 +1,83 @@
+#!/bin/sh
+INCLUDE_ONLY=1
+
+. ../netifd-proto.sh
+. ./ppp.sh
+init_proto "$@"
+
+proto_3g_init_config() {
+       no_device=1
+       available=1
+       ppp_generic_init_config
+       proto_config_add_string "device"
+       proto_config_add_string "apn"
+       proto_config_add_string "service"
+       proto_config_add_int "pincode"
+}
+
+proto_3g_setup() {
+       local interface="$1"
+       local chat
+
+       json_get_var device device
+       json_get_var apn apn
+       json_get_var service service
+       json_get_var pincode pincode
+
+       [ -e "$device" ] || {
+               proto_set_available "$interface" 0
+               return 1
+       }
+
+       case "$service" in
+               cdma|evdo)
+                       chat="/etc/chatscripts/evdo.chat"
+               ;;
+               *)
+                       chat="/etc/chatscripts/3g.chat"
+                       cardinfo=$(gcom -d "$device" -s /etc/gcom/getcardinfo.gcom)
+                       if echo "$cardinfo" | grep -q Novatel; then
+                               case "$service" in
+                                       umts_only) CODE=2;;
+                                       gprs_only) CODE=1;;
+                                       *) CODE=0;;
+                               esac
+                               export MODE="AT\$NWRAT=${CODE},2"
+                       elif echo "$cardinfo" | grep -q Option; then
+                               case "$service" in
+                                       umts_only) CODE=1;;
+                                       gprs_only) CODE=0;;
+                                       *) CODE=3;;
+                               esac
+                               export MODE="AT_OPSYS=${CODE}"
+                       fi
+
+                       if [ -n "$pincode" ]; then
+                               PINCODE="$pincode" gcom -d "$device" -s /etc/gcom/setpin.gcom || {
+                                       proto_notify_error "$interface" PIN_FAILED
+                                       proto_block_restart "$interface"
+                                       return 1
+                               }
+                       fi
+                       [ -n "$MODE" ] && gcom -d "$device" -s /etc/gcom/setmode.gcom
+               ;;
+       esac
+
+       connect="${apn:+USE_APN=$apn }/usr/sbin/chat -t5 -v -E -f $chat"
+       ppp_generic_setup "$interface" \
+               noaccomp \
+               nopcomp \
+               novj \
+               nobsdcomp \
+               noauth \
+               lock \
+               crtscts \
+               115200 "$device"
+       return 0
+}
+
+proto_3g_teardown() {
+       proto_kill_command "$interface"
+}
+
+add_protocol 3g
diff --git a/package/comgt/files-netifd/3g.usb b/package/comgt/files-netifd/3g.usb
new file mode 100644 (file)
index 0000000..d3859c2
--- /dev/null
@@ -0,0 +1,33 @@
+#!/bin/sh
+. /etc/functions.sh
+. /lib/netifd/netifd-proto.sh
+
+find_3g_iface() {
+       local cfg="$1"
+       local tty="$2"
+
+       local proto
+       config_get proto "$cfg" proto
+       [ "$proto" = 3g ] || return 0
+
+       local dev
+       config_get dev "$cfg" device
+
+       if [ "${dev##*/}" = "${tty##*/}" ]; then
+               if [ "$ACTION" = add ]; then
+                       available=1
+               else
+                       available=0
+               fi
+               proto_set_available "$cfg" $available
+       fi
+}
+
+case "$DEVICENAME" in
+       tty*)
+               [ -e "/dev/$DEVICENAME" ] || [ "$ACTION" = remove ] || exit 0
+               config_load network
+               config_foreach find_3g_iface interface "/dev/$DEVICENAME"
+       ;;
+esac
+
diff --git a/package/comgt/files-old/3g.button b/package/comgt/files-old/3g.button
new file mode 100644 (file)
index 0000000..57f4286
--- /dev/null
@@ -0,0 +1,36 @@
+button_action() {(
+       # use led for keeping track of the state
+       case "$(cat /proc/diag/led/3g_green)" in
+               1)
+                       ifdown "$1"
+                       ifup wan
+               ;;
+               0)
+                       ifdown wan
+                       ifup "$1"
+               ;;
+       esac
+)}
+
+[ "$ACTION" = "released" -a "$BUTTON" = "3g" ] && {
+       HOTPLUG="$(cat /proc/sys/kernel/hotplug)"
+       (echo /bin/true > /proc/sys/kernel/hotplug)
+
+       include /lib/network
+       scan_interfaces
+       config_cb() {
+               config_get TYPE "$CONFIG_SECTION" TYPE
+               case "$TYPE" in
+                       interface)
+                               config_get proto "$CONFIG_SECTION" proto
+                               config_get button "$CONFIG_SECTION" button
+                               case "$button" in
+                                       1|on|enabled) [ "$proto" = "3g" ] && button_action "$CONFIG_SECTION";;
+                               esac
+                       ;;
+               esac
+       }
+       config_load network
+
+       (echo $HOTPLUG > /proc/sys/kernel/hotplug)
+} &
diff --git a/package/comgt/files-old/3g.connect b/package/comgt/files-old/3g.connect
new file mode 100644 (file)
index 0000000..04f45f9
--- /dev/null
@@ -0,0 +1,4 @@
+#!/bin/sh
+. /lib/network/3g.sh
+set_3g_led 1 1 1
+/usr/sbin/chat -V -E -f /etc/chatscripts/3g.chat
diff --git a/package/comgt/files-old/3g.iface b/package/comgt/files-old/3g.iface
new file mode 100644 (file)
index 0000000..a89f053
--- /dev/null
@@ -0,0 +1,15 @@
+include /lib/network
+config_load network
+scan_interfaces
+config_get proto "$INTERFACE" proto
+[ "$proto" = "3g" ] && {
+       config_get iface "$INTERFACE" ifname
+       case "$ACTION" in
+               ifup)
+                       set_3g_led 1 1 0
+               ;;
+               ifdown)
+                       set_3g_led 0 0 0
+               ;;
+       esac
+}
diff --git a/package/comgt/files-old/3g.sh b/package/comgt/files-old/3g.sh
new file mode 100644 (file)
index 0000000..616beec
--- /dev/null
@@ -0,0 +1,119 @@
+set_3g_led() {
+       # set on WRT54G3G only
+       [ -f /proc/diag/model ] || return 0
+       grep -q "WRT54G3G" /proc/diag/model >/dev/null || return 0
+       echo "$1" > /proc/diag/led/3g_green
+       echo "$2" > /proc/diag/led/3g_blue
+       grep -q "WRT54G3G$" /proc/diag/model >/dev/null || return 0
+       echo "$3" > /proc/diag/led/3g_blink
+}
+
+scan_3g() {
+       local device
+       config_get device "$1" device
+
+       # try to figure out the device if it's invalid
+       [ -n "$device" -a -e "$device" ] || {
+               for device in /dev/ttyUSB0 /dev/ttyUSB1 /dev/ttyUSB2 /dev/tts/2 /dev/usb/tts/0 /dev/noz0; do
+                       [ -e "$device" ] && {
+                               config_set "$1" device "$device"
+                               break
+                       }
+               done
+       }
+
+       # enable 3G with the 3G button by default
+       local button
+       config_get button "$1" button
+       [ -z "$button" ] && {
+               config_set "$1" button 1
+       }
+}
+
+stop_interface_3g() {
+       stop_interface_ppp "$1"
+       set_3g_led 0 0 0
+       killall gcom >/dev/null 2>/dev/null
+}
+
+setup_interface_3g() {
+       local iface="$1"
+       local config="$2"
+       local chat="/etc/chatscripts/3g.chat"
+
+       local device
+       config_get device "$config" device
+
+       local maxwait
+       config_get maxwait "$config" maxwait
+       maxwait=${maxwait:-20}
+       while [ ! -e "$device" -a $maxwait -gt 0 ];do # wait for driver loading to catch up
+               maxwait=$(($maxwait - 1))
+               sleep 1
+       done
+
+       for module in slhc ppp_generic ppp_async; do
+               /sbin/insmod $module 2>&- >&-
+       done
+
+       local apn
+       config_get apn "$config" apn
+
+       local service
+       config_get service "$config" service
+
+       local pincode
+       config_get pincode "$config" pincode
+
+       local mtu
+       config_get mtu "$config" mtu
+
+       set_3g_led 1 0 1
+
+       # figure out hardware specific commands for the card
+       case "$service" in
+               cdma|evdo) chat="/etc/chatscripts/evdo.chat";;
+       *)
+               cardinfo=$(gcom -d "$device" -s /etc/gcom/getcardinfo.gcom)
+               if echo "$cardinfo" | grep Novatel; then
+                       case "$service" in
+                               umts_only) CODE=2;;
+                               gprs_only) CODE=1;;
+                               *) CODE=0;;
+                       esac
+                       mode="AT\$NWRAT=${CODE},2"
+               elif echo "$cardinfo" | grep Option; then
+                       case "$service" in
+                               umts_only) CODE=1;;
+                               gprs_only) CODE=0;;
+                               *) CODE=3;;
+                       esac
+                       mode="AT_OPSYS=${CODE}"
+               fi
+               # Don't assume Option to be default as it breaks with Huawei Cards/Sticks
+
+               test -z "$pincode" || {
+                       PINCODE="$pincode" gcom -d "$device" -s /etc/gcom/setpin.gcom || {
+                               echo "$config(3g): Failed to set the PIN code."
+                               set_3g_led 0 0 0
+                               return 1
+                       }
+               }
+               test -z "$mode" || {
+                       MODE="$mode" gcom -d "$device" -s /etc/gcom/setmode.gcom
+               }
+       esac
+       set_3g_led 1 0 0
+
+       config_set "$config" "connect" "${apn:+USE_APN=$apn }/usr/sbin/chat -t5 -v -E -f $chat"
+       start_pppd "$config" \
+               noaccomp \
+               nopcomp \
+               novj \
+               nobsdcomp \
+               noauth \
+               lock \
+               crtscts \
+               ${mtu:+mtu $mtu mru $mtu} \
+               115200 "$device"
+}
diff --git a/package/comgt/files-old/3g.usb b/package/comgt/files-old/3g.usb
new file mode 100644 (file)
index 0000000..ba6c646
--- /dev/null
@@ -0,0 +1,42 @@
+#!/bin/sh
+
+. /etc/functions.sh
+
+log() {
+       logger -t 3g-hotplug "$@"
+}
+
+find_3g_iface() {
+       local cfg="$1"
+       local tty="$2"
+
+       local proto
+       config_get proto "$cfg" proto
+       [ "$proto" = 3g ] || return 0
+
+       local auto
+       config_get_bool auto "$cfg" auto 1
+       [ "$auto" = 1 ] || [ "$ACTION" = remove ] || return 0
+
+       local dev
+       config_get dev "$cfg" device
+
+       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
+
diff --git a/package/comgt/files/3g.button b/package/comgt/files/3g.button
deleted file mode 100644 (file)
index 57f4286..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-button_action() {(
-       # use led for keeping track of the state
-       case "$(cat /proc/diag/led/3g_green)" in
-               1)
-                       ifdown "$1"
-                       ifup wan
-               ;;
-               0)
-                       ifdown wan
-                       ifup "$1"
-               ;;
-       esac
-)}
-
-[ "$ACTION" = "released" -a "$BUTTON" = "3g" ] && {
-       HOTPLUG="$(cat /proc/sys/kernel/hotplug)"
-       (echo /bin/true > /proc/sys/kernel/hotplug)
-
-       include /lib/network
-       scan_interfaces
-       config_cb() {
-               config_get TYPE "$CONFIG_SECTION" TYPE
-               case "$TYPE" in
-                       interface)
-                               config_get proto "$CONFIG_SECTION" proto
-                               config_get button "$CONFIG_SECTION" button
-                               case "$button" in
-                                       1|on|enabled) [ "$proto" = "3g" ] && button_action "$CONFIG_SECTION";;
-                               esac
-                       ;;
-               esac
-       }
-       config_load network
-
-       (echo $HOTPLUG > /proc/sys/kernel/hotplug)
-} &
diff --git a/package/comgt/files/3g.connect b/package/comgt/files/3g.connect
deleted file mode 100644 (file)
index 04f45f9..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/bin/sh
-. /lib/network/3g.sh
-set_3g_led 1 1 1
-/usr/sbin/chat -V -E -f /etc/chatscripts/3g.chat
diff --git a/package/comgt/files/3g.iface b/package/comgt/files/3g.iface
deleted file mode 100644 (file)
index a89f053..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-include /lib/network
-config_load network
-scan_interfaces
-config_get proto "$INTERFACE" proto
-[ "$proto" = "3g" ] && {
-       config_get iface "$INTERFACE" ifname
-       case "$ACTION" in
-               ifup)
-                       set_3g_led 1 1 0
-               ;;
-               ifdown)
-                       set_3g_led 0 0 0
-               ;;
-       esac
-}
diff --git a/package/comgt/files/3g.sh b/package/comgt/files/3g.sh
deleted file mode 100644 (file)
index 616beec..0000000
+++ /dev/null
@@ -1,119 +0,0 @@
-set_3g_led() {
-       # set on WRT54G3G only
-       [ -f /proc/diag/model ] || return 0
-       grep -q "WRT54G3G" /proc/diag/model >/dev/null || return 0
-       echo "$1" > /proc/diag/led/3g_green
-       echo "$2" > /proc/diag/led/3g_blue
-       grep -q "WRT54G3G$" /proc/diag/model >/dev/null || return 0
-       echo "$3" > /proc/diag/led/3g_blink
-}
-
-scan_3g() {
-       local device
-       config_get device "$1" device
-
-       # try to figure out the device if it's invalid
-       [ -n "$device" -a -e "$device" ] || {
-               for device in /dev/ttyUSB0 /dev/ttyUSB1 /dev/ttyUSB2 /dev/tts/2 /dev/usb/tts/0 /dev/noz0; do
-                       [ -e "$device" ] && {
-                               config_set "$1" device "$device"
-                               break
-                       }
-               done
-       }
-
-       # enable 3G with the 3G button by default
-       local button
-       config_get button "$1" button
-       [ -z "$button" ] && {
-               config_set "$1" button 1
-       }
-}
-
-stop_interface_3g() {
-       stop_interface_ppp "$1"
-       set_3g_led 0 0 0
-       killall gcom >/dev/null 2>/dev/null
-}
-
-setup_interface_3g() {
-       local iface="$1"
-       local config="$2"
-       local chat="/etc/chatscripts/3g.chat"
-
-       local device
-       config_get device "$config" device
-
-       local maxwait
-       config_get maxwait "$config" maxwait
-       maxwait=${maxwait:-20}
-       while [ ! -e "$device" -a $maxwait -gt 0 ];do # wait for driver loading to catch up
-               maxwait=$(($maxwait - 1))
-               sleep 1
-       done
-
-       for module in slhc ppp_generic ppp_async; do
-               /sbin/insmod $module 2>&- >&-
-       done
-
-       local apn
-       config_get apn "$config" apn
-
-       local service
-       config_get service "$config" service
-
-       local pincode
-       config_get pincode "$config" pincode
-
-       local mtu
-       config_get mtu "$config" mtu
-
-       set_3g_led 1 0 1
-
-       # figure out hardware specific commands for the card
-       case "$service" in
-               cdma|evdo) chat="/etc/chatscripts/evdo.chat";;
-       *)
-               cardinfo=$(gcom -d "$device" -s /etc/gcom/getcardinfo.gcom)
-               if echo "$cardinfo" | grep Novatel; then
-                       case "$service" in
-                               umts_only) CODE=2;;
-                               gprs_only) CODE=1;;
-                               *) CODE=0;;
-                       esac
-                       mode="AT\$NWRAT=${CODE},2"
-               elif echo "$cardinfo" | grep Option; then
-                       case "$service" in
-                               umts_only) CODE=1;;
-                               gprs_only) CODE=0;;
-                               *) CODE=3;;
-                       esac
-                       mode="AT_OPSYS=${CODE}"
-               fi
-               # Don't assume Option to be default as it breaks with Huawei Cards/Sticks
-
-               test -z "$pincode" || {
-                       PINCODE="$pincode" gcom -d "$device" -s /etc/gcom/setpin.gcom || {
-                               echo "$config(3g): Failed to set the PIN code."
-                               set_3g_led 0 0 0
-                               return 1
-                       }
-               }
-               test -z "$mode" || {
-                       MODE="$mode" gcom -d "$device" -s /etc/gcom/setmode.gcom
-               }
-       esac
-       set_3g_led 1 0 0
-
-       config_set "$config" "connect" "${apn:+USE_APN=$apn }/usr/sbin/chat -t5 -v -E -f $chat"
-       start_pppd "$config" \
-               noaccomp \
-               nopcomp \
-               novj \
-               nobsdcomp \
-               noauth \
-               lock \
-               crtscts \
-               ${mtu:+mtu $mtu mru $mtu} \
-               115200 "$device"
-}
diff --git a/package/comgt/files/3g.usb b/package/comgt/files/3g.usb
deleted file mode 100644 (file)
index ba6c646..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-#!/bin/sh
-
-. /etc/functions.sh
-
-log() {
-       logger -t 3g-hotplug "$@"
-}
-
-find_3g_iface() {
-       local cfg="$1"
-       local tty="$2"
-
-       local proto
-       config_get proto "$cfg" proto
-       [ "$proto" = 3g ] || return 0
-
-       local auto
-       config_get_bool auto "$cfg" auto 1
-       [ "$auto" = 1 ] || [ "$ACTION" = remove ] || return 0
-
-       local dev
-       config_get dev "$cfg" device
-
-       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
-