@ -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
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 di sconnect 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
}