[LEDE-DEV] [PATCH] comgt-ncm: Add support for specifying profile index

Matti Laakso malaakso at elisanet.fi
Tue Dec 6 08:52:14 PST 2016


Add support for specifying a call profile index instead of APN. A
specific index different from 1 must be used for some service
provider and modem combinations.

In addition, change the manufacturer detection to use the standard
AT+CGMI command, which produces more predictable output than ATI,
and remove the redundant ipv6 option, since it is more customary
to specify the PDP context type with mobile connections.

Signed-off-by: Matti Laakso <malaakso at elisanet.fi>
---
 package/network/utils/comgt/Makefile               |  2 +-
 package/network/utils/comgt/files/getcardinfo.gcom |  2 +-
 package/network/utils/comgt/files/ncm.json         | 26 ++++-----
 package/network/utils/comgt/files/ncm.sh           | 65 ++++++++++------------
 4 files changed, 44 insertions(+), 51 deletions(-)

diff --git a/package/network/utils/comgt/Makefile b/package/network/utils/comgt/Makefile
index 9d99d64..4b6e6ea 100644
--- a/package/network/utils/comgt/Makefile
+++ b/package/network/utils/comgt/Makefile
@@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
 
 PKG_NAME:=comgt
 PKG_VERSION:=0.32
-PKG_RELEASE:=27
+PKG_RELEASE:=28
 
 PKG_SOURCE:=$(PKG_NAME).$(PKG_VERSION).tgz
 PKG_SOURCE_URL:=@SF/comgt
diff --git a/package/network/utils/comgt/files/getcardinfo.gcom b/package/network/utils/comgt/files/getcardinfo.gcom
index 5c69a64..f91665f 100644
--- a/package/network/utils/comgt/files/getcardinfo.gcom
+++ b/package/network/utils/comgt/files/getcardinfo.gcom
@@ -6,7 +6,7 @@ opengt
  flash 0.1
 
 :start
- send "ATI^m"
+ send "AT+CGMI^m"
  get 1 "" $s
  print $s
 
diff --git a/package/network/utils/comgt/files/ncm.json b/package/network/utils/comgt/files/ncm.json
index d1f8699..8f74e17 100644
--- a/package/network/utils/comgt/files/ncm.json
+++ b/package/network/utils/comgt/files/ncm.json
@@ -7,7 +7,7 @@
 			"ATV1",
 			"ATE1",
 			"ATS0=0",
-			"AT+CGDCONT=1,\\\"${pdptype}\\\",\\\"${apn}\\\""
+			"AT+CGDCONT=${profile},\\\"${pdptype}\\\"${apn:+,\\\"$apn\\\"}"
 		],
 		"modes": {
 			"preferlte": "AT^SYSCFGEX=\\\"030201\\\",3fffffff,2,4,7fffffffffffffff,,",
@@ -17,8 +17,8 @@
 			"gsm": "AT^SYSCFGEX=\\\"01\\\",3fffffff,2,4,7fffffffffffffff,,",
 			"auto": "AT^SYSCFGEX=\\\"00\\\",3fffffff,2,4,7fffffffffffffff,,"
 		},
-		"connect": "AT^NDISDUP=1,1,\\\"${apn}\\\"${username:+,\\\"$username\\\"}${password:+,\\\"$password\\\"}${auth:+,$auth}",
-		"disconnect": "AT^NDISDUP=1,0"
+		"connect": "AT^NDISDUP=${profile},1${apn:+,\\\"$apn\\\"}${username:+,\\\"$username\\\"}${password:+,\\\"$password\\\"}${auth:+,$auth}",
+		"disconnect": "AT^NDISDUP=${profile},0"
 	},
 	"samsung": {
 		"initialize": [
@@ -26,7 +26,7 @@
 			"AT+CGREG=2",
 			"AT+CFUN=5",
 			"AT+MODESELECT=3",
-			"AT+CGDCONT=1,\\\"${pdptype}\\\",\\\"${apn}\\\""
+			"AT+CGDCONT=${profile},\\\"${pdptype}\\\"${apn:+,\\\"$apn\\\"}"
 		],
 		"modes": {
 			"umts": "AT+CHANGEALLPATH=1"
@@ -34,11 +34,11 @@
 		"connect": "AT+CGATT=1",
 		"disconnect": "AT+CGATT=0"
 	},
-	"sierra wireless, incorporated": {
+	"sierra": {
 		"initialize": [
 			"AT+CFUN=1",
-			"AT+CGDCONT=1,\\\"${pdptype}\\\",\\\"${apn}\\\"",
-			"AT$QCPDPP=1${auth:+,$auth}${password:+,\\\"$password\\\"}${username:+,\\\"$username\\\"}"
+			"AT+CGDCONT=${profile},\\\"${pdptype}\\\"${apn:+,\\\"$apn\\\"}",
+			"AT$QCPDPP=${profile},${auth:-0}${password:+,\\\"$password\\\"}${username:+,\\\"$username\\\"}"
 		],
 		"modes": {
 			"preferlte": "AT!SELRAT=07",
@@ -48,20 +48,20 @@
 			"gsm": "AT!SELRAT=02",
 			"auto": "AT!SELRAT=00"
 		},
-		"connect": "AT!SCACT=1,1",
-		"disconnect": "AT!SCACT=0,1"
+		"connect": "AT!SCACT=1,${profile}",
+		"disconnect": "AT!SCACT=0,${profile}"
 	},
-	"sony ericsson": {
+	"sony": {
 		"initialize": [
 			"AT+CFUN=1",
-			"AT+CGDCONT=1,\\\"${pdptype}\\\",\\\"${apn}\\\"",
-			"AT*EIAAUW=1,1,\\\"${username}\\\",\\\"${password}\\\",${auth:-00111}"
+			"AT+CGDCONT=${profile},\\\"${pdptype}\\\"${apn:+,\\\"$apn\\\"}",
+			"AT*EIAAUW=${profile},1,\\\"${username}\\\",\\\"${password}\\\",${auth:-00111}"
 		],
 		"modes": {
 			"umts": "AT+CFUN=6",
 			"gsm": "AT+CFUN=5"
 		},
-		"connect": "AT*ENAP=1,1",
+		"connect": "AT*ENAP=1,${profile}",
 		"disconnect": "AT*ENAP=0"
 	}
 }
diff --git a/package/network/utils/comgt/files/ncm.sh b/package/network/utils/comgt/files/ncm.sh
index 14b6347..df60fe8 100644
--- a/package/network/utils/comgt/files/ncm.sh
+++ b/package/network/utils/comgt/files/ncm.sh
@@ -18,7 +18,7 @@ proto_ncm_init_config() {
 	proto_config_add_string delay
 	proto_config_add_string mode
 	proto_config_add_string pdptype
-	proto_config_add_boolean ipv6
+	proto_config_add_int profile
 	proto_config_add_defaults
 }
 
@@ -27,22 +27,15 @@ proto_ncm_setup() {
 
 	local manufacturer initialize setmode connect ifname devname devpath
 
-	local device apn auth username password pincode delay mode pdptype ipv6 $PROTO_DEFAULT_OPTIONS
-	json_get_vars device apn auth username password pincode delay mode pdptype ipv6 $PROTO_DEFAULT_OPTIONS
-	
-	if [ "$ipv6" = 0 ]; then
-		ipv6=""
-	else
-		ipv6=1
-	fi
-	
-	[ -z "$pdptype" ] && {
-		if [ -n "$ipv6" ]; then
-			pdptype="IPV4V6"
-		else
-			pdptype="IP"
-		fi
-	}
+	local device apn auth username password pincode delay mode pdptype profile $PROTO_DEFAULT_OPTIONS
+	json_get_vars device apn auth username password pincode delay mode pdptype profile $PROTO_DEFAULT_OPTIONS
+
+	[ "$metric" = "" ] && metric="0"
+
+	[ -n "$profile" ] || profile=1
+
+	pdptype=`echo "$pdptype" | awk '{print toupper($0)}'`
+	[ "$pdptype" = "IP" -o "$pdptype" = "IPV6" -o "$pdptype" = "IPV4V6" ] || $pdptype="IP"
 
 	[ -n "$ctl_device" ] && device=$ctl_device
 
@@ -57,11 +50,6 @@ proto_ncm_setup() {
 		proto_set_available "$interface" 0
 		return 1
 	}
-	[ -n "$apn" ] || {
-		echo "No APN specified"
-		proto_notify_error "$interface" NO_APN
-		return 1
-	}
 
 	devname="$(basename "$device")"
 	case "$devname" in
@@ -83,7 +71,7 @@ proto_ncm_setup() {
 
 	[ -n "$delay" ] && sleep "$delay"
 
-	manufacturer=`gcom -d "$device" -s /etc/gcom/getcardinfo.gcom | awk '/Manufacturer/ { print tolower($2) }'`
+	manufacturer=`gcom -d "$device" -s /etc/gcom/getcardinfo.gcom | awk 'NF { print tolower($1); exit; }'`
 	[ $? -ne 0 ] && {
 		echo "Failed to get modem information"
 		proto_notify_error "$interface" GETINFO_FAILED
@@ -126,6 +114,7 @@ proto_ncm_setup() {
 		json_select ..
 	}
 
+	echo "Starting network $interface"
 	json_get_vars connect
 	eval COMMAND="$connect" gcom -d "$device" -s /etc/gcom/runcommand.gcom || {
 		echo "Failed to connect"
@@ -133,19 +122,21 @@ proto_ncm_setup() {
 		return 1
 	}
 
-	echo "Connected, starting DHCP on $ifname"
+	echo "Setting up $ifname"
 	
 	proto_init_update "$ifname" 1
 	proto_send_update "$interface"
 
-	json_init
-	json_add_string name "${interface}_4"
-	json_add_string ifname "@$interface"
-	json_add_string proto "dhcp"
-	proto_add_dynamic_defaults
-	ubus call network add_dynamic "$(json_dump)"
+	[ "$pdptype" = "IP" -o "$pdptype" = "IPV4V6" ] && {
+		json_init
+		json_add_string name "${interface}_4"
+		json_add_string ifname "@$interface"
+		json_add_string proto "dhcp"
+		proto_add_dynamic_defaults
+		ubus call network add_dynamic "$(json_dump)"
+	}
 
-	[ -n "$ipv6" ] && {
+	[ "$pdptype" = "IPV6" -o "$pdptype" = "IPV4V6" ] && {
 		json_init
 		json_add_string name "${interface}_6"
 		json_add_string ifname "@$interface"
@@ -161,12 +152,14 @@ proto_ncm_teardown() {
 
 	local manufacturer disconnect
 
-	local device
-	json_get_vars device
+	local device profile
+	json_get_vars device profile
+
+	[ -n "$profile" ] || profile=1
 
-	echo "Stopping network"
+	echo "Stopping network $interface"
 
-	manufacturer=`gcom -d "$device" -s /etc/gcom/getcardinfo.gcom | awk '/Manufacturer/ { print tolower($2) }'`
+	manufacturer=`gcom -d "$device" -s /etc/gcom/getcardinfo.gcom | awk 'NF { print tolower($1); exit; }'`
 	[ $? -ne 0 ] && {
 		echo "Failed to get modem information"
 		proto_notify_error "$interface" GETINFO_FAILED
@@ -181,7 +174,7 @@ proto_ncm_teardown() {
 	}
 
 	json_get_vars disconnect
-	COMMAND="$disconnect" gcom -d "$device" -s /etc/gcom/runcommand.gcom || {
+	eval COMMAND="$disconnect" gcom -d "$device" -s /etc/gcom/runcommand.gcom || {
 		echo "Failed to disconnect"
 		proto_notify_error "$interface" DISCONNECT_FAILED
 		return 1
-- 
2.7.4




More information about the Lede-dev mailing list