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

John Crispin john at phrozen.org
Sat Dec 10 23:47:54 PST 2016


Hi Matti

i noticed that you remove the ipv6 option/support and this is not
mentioned in the commit message. could you elaborate on that one ?

	John

On 06/12/2016 17:52, Matti Laakso wrote:
> 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
> 



More information about the Lede-dev mailing list