Browse Source

comgt: port 3g.sh to netifd

SVN-Revision: 28634
Felix Fietkau 14 years ago
parent
commit
d495281b6e

+ 23 - 10
package/comgt/Makefile

@@ -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))

+ 83 - 0
package/comgt/files-netifd/3g.sh

@@ -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

+ 33 - 0
package/comgt/files-netifd/3g.usb

@@ -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
+

+ 0 - 0
package/comgt/files/3g.button → package/comgt/files-old/3g.button


+ 0 - 0
package/comgt/files/3g.connect → package/comgt/files-old/3g.connect


+ 0 - 0
package/comgt/files/3g.iface → package/comgt/files-old/3g.iface


+ 0 - 0
package/comgt/files/3g.sh → package/comgt/files-old/3g.sh


+ 0 - 0
package/comgt/files/3g.usb → package/comgt/files-old/3g.usb