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


_______________________________________________
Lede-dev mailing list
Lede-dev@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/lede-dev

Reply via email to