diff --git a/package/network/utils/comgt/Makefile b/package/network/utils/comgt/Makefile index 9ab2f14e8c..500365aaab 100644 --- a/package/network/utils/comgt/Makefile +++ b/package/network/utils/comgt/Makefile @@ -44,7 +44,7 @@ endef define Package/comgt-ncm $(call Package/comgt/Default) TITLE+=NCM 3G/4G Support - DEPENDS:=+comgt +kmod-usb-serial +kmod-usb-serial-option +kmod-usb-net +kmod-usb-net-cdc-ncm +kmod-usb-net-huawei-cdc-ncm + DEPENDS:=+comgt endef define Package/comgt/description diff --git a/package/network/utils/comgt/files/ncm.json b/package/network/utils/comgt/files/ncm.json index b9b15cdba0..ea4f98485f 100644 --- a/package/network/utils/comgt/files/ncm.json +++ b/package/network/utils/comgt/files/ncm.json @@ -19,7 +19,7 @@ "connect": "AT^NDISDUP=1,1,\\\"${apn}\\\"${username:+,\\\"$username\\\"}${password:+,\\\"$password\\\"}${auth:+,$auth}", "disconnect": "AT^NDISDUP=1,0" }, - "SAMSUNG": { + "samsung": { "initialize": [ "AT", "AT+CGREG=2", @@ -33,7 +33,7 @@ "connect": "AT+CGATT=1", "disconnect": "AT+CGATT=0" }, - "Sony": { + "sony": { "initialize": [ "AT+CFUN=1", "AT+CGDCONT=1,\\\"IP\\\",\\\"${apn}\\\"", diff --git a/package/network/utils/comgt/files/ncm.sh b/package/network/utils/comgt/files/ncm.sh index 14e421fcad..2c2835fe39 100644 --- a/package/network/utils/comgt/files/ncm.sh +++ b/package/network/utils/comgt/files/ncm.sh @@ -1,8 +1,10 @@ #!/bin/sh -. /lib/functions.sh -. ../netifd-proto.sh -init_proto "$@" +[ -n "$INCLUDE_ONLY" ] || { + . /lib/functions.sh + . ../netifd-proto.sh + init_proto "$@" +} proto_ncm_init_config() { no_device=1 @@ -20,34 +22,52 @@ proto_ncm_init_config() { proto_ncm_setup() { local interface="$1" - local manufacturer initialize setmode connect + local manufacturer initialize setmode connect ifname devname devpath local device apn auth username password pincode delay mode json_get_vars device apn auth username password pincode delay mode [ -n "$device" ] || { - echo "ncm[$$]" "No control device specified" + echo "No control device specified" proto_notify_error "$interface" NO_DEVICE proto_set_available "$interface" 0 return 1 } [ -e "$device" ] || { - echo "ncm[$$]" "Control device not valid" + echo "Control device not valid" proto_set_available "$interface" 0 return 1 } [ -n "$apn" ] || { - echo "ncm[$$]" "No APN specified" + echo "No APN specified" proto_notify_error "$interface" NO_APN proto_set_available "$interface" 0 return 1 } + devname="$(basename "$device")" + case "$devname" in + 'tty'*) + devpath="$(readlink -f /sys/class/tty/$devname/device)" + ifname="$( ls "$devpath"/../../*/net )" + ;; + *) + devpath="$(readlink -f /sys/class/usbmisc/$devname/device/)" + ifname="$( ls "$devpath"/net )" + ;; + esac + [ -n "$ifname" ] || { + echo "The interface could not be found." + proto_notify_error "$interface" NO_IFACE + proto_set_available "$interface" 0 + return 1 + } + [ -n "$delay" ] && sleep "$delay" - manufacturer=`gcom -d "$device" -s /etc/gcom/getcardinfo.gcom | awk '/Manufacturer/ { print $2 }'` + manufacturer=`gcom -d "$device" -s /etc/gcom/getcardinfo.gcom | awk '/Manufacturer/ { print tolower($2) }'` [ $? -ne 0 ] && { - echo "ncm[$$]" "Failed to get modem information" + echo "Failed to get modem information" proto_notify_error "$interface" GETINFO_FAILED proto_set_available "$interface" 0 return 1 @@ -56,7 +76,7 @@ proto_ncm_setup() { json_load "$(cat /etc/gcom/ncm.json)" json_select "$manufacturer" [ $? -ne 0 ] && { - echo "ncm[$$]" "Unsupported modem" + echo "Unsupported modem" proto_notify_error "$interface" UNSUPPORTED_MODEM proto_set_available "$interface" 0 return 1 @@ -64,7 +84,7 @@ proto_ncm_setup() { json_get_values initialize initialize for i in $initialize; do eval COMMAND="$i" gcom -d "$device" -s /etc/gcom/runcommand.gcom || { - echo "ncm[$$]" "Failed to initialize modem" + echo "Failed to initialize modem" proto_notify_error "$interface" INITIALIZE_FAILED proto_set_available "$interface" 0 return 1 @@ -73,7 +93,7 @@ proto_ncm_setup() { [ -n "$pincode" ] && { PINCODE="$pincode" gcom -d "$device" -s /etc/gcom/setpin.gcom || { - echo "ncm[$$]" "Unable to verify PIN" + echo "Unable to verify PIN" proto_notify_error "$interface" PIN_FAILED proto_block_restart "$interface" return 1 @@ -83,7 +103,7 @@ proto_ncm_setup() { json_select modes json_get_var setmode "$mode" COMMAND="$setmode" gcom -d "$device" -s /etc/gcom/runcommand.gcom || { - echo "ncm[$$]" "Failed to set operating mode" + echo "Failed to set operating mode" proto_notify_error "$interface" SETMODE_FAILED proto_set_available "$interface" 0 return 1 @@ -91,66 +111,66 @@ proto_ncm_setup() { json_select .. } - json_get_var connect connect + json_get_vars connect eval COMMAND="$connect" gcom -d "$device" -s /etc/gcom/runcommand.gcom || { - echo "ncm[$$]" "Failed to connect" + echo "Failed to connect" proto_notify_error "$interface" CONNECT_FAILED proto_set_available "$interface" 0 return 1 } - echo "ncm[$$]" "Connected, starting DHCP" - proto_init_update "*" 1 + echo "Connected, starting DHCP" + + proto_init_update "$ifname" 1 proto_send_update "$interface" json_init json_add_string name "${interface}_dhcp" json_add_string ifname "@$interface" json_add_string proto "dhcp" - json_close_object ubus call network add_dynamic "$(json_dump)" json_init json_add_string name "${interface}_dhcpv6" json_add_string ifname "@$interface" json_add_string proto "dhcpv6" - json_close_object ubus call network add_dynamic "$(json_dump)" } proto_ncm_teardown() { local interface="$1" - proto_init_update "*" 0 - proto_send_update "$interface" - local manufacturer disconnect - local device + local device json_get_vars device - echo "ncm[$$]" "Stopping network" + echo "Stopping network" - manufacturer=`gcom -d "$device" -s /etc/gcom/getcardinfo.gcom | awk '/Manufacturer/ { print $2 }'` + manufacturer=`gcom -d "$device" -s /etc/gcom/getcardinfo.gcom | awk '/Manufacturer/ { print tolower($2) }'` [ $? -ne 0 ] && { - echo "ncm[$$]" "Failed to get modem information" + echo "Failed to get modem information" proto_notify_error "$interface" GETINFO_FAILED return 1 } json_load "$(cat /etc/gcom/ncm.json)" json_select "$manufacturer" || { - echo "ncm[$$]" "Unsupported modem" + echo "Unsupported modem" proto_notify_error "$interface" UNSUPPORTED_MODEM return 1 } - json_get_var disconnect disconnect + json_get_vars disconnect COMMAND="$disconnect" gcom -d "$device" -s /etc/gcom/runcommand.gcom || { - echo "ncm[$$]" "Failed to disconnect" + echo "Failed to disconnect" proto_notify_error "$interface" DISCONNECT_FAILED return 1 } -} -add_protocol ncm + proto_init_update "*" 0 + proto_send_update "$interface" +} +[ -n "$INCLUDE_ONLY" ] || { + add_protocol ncm +} diff --git a/package/network/utils/comgt/files/runcommand.gcom b/package/network/utils/comgt/files/runcommand.gcom index ab24339dc9..e99b6f922a 100644 --- a/package/network/utils/comgt/files/runcommand.gcom +++ b/package/network/utils/comgt/files/runcommand.gcom @@ -6,14 +6,15 @@ opengt flash 0.1 :start - send "sending -> " + print "sending -> ",$env("COMMAND"),"\n" send $env("COMMAND") send "^m" - waitfor 15 "OK","ERR","ERROR" + waitfor 15 "OK","ERR","ERROR","COMMAND NOT SUPPORT" if % = 0 goto continue if % = 1 goto error if % = 2 goto error + if % = 3 goto notsupported print "Timeout running AT-command\n" exit 1 @@ -22,5 +23,9 @@ opengt print "Error running AT-command\n" exit 1 +:notsupported + print "AT-command not supported\n" + exit 1 + :continue exit 0