diff options
Diffstat (limited to 'package/network/utils/comgt/files/ncm.sh')
-rw-r--r-- | package/network/utils/comgt/files/ncm.sh | 82 |
1 files changed, 51 insertions, 31 deletions
diff --git a/package/network/utils/comgt/files/ncm.sh b/package/network/utils/comgt/files/ncm.sh index 14e421f..2c2835f 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 +} |