the e3267 that sami sent me works with this proto, but i am failing to get a DHCP addr. could someone with a ncm dongle please try this patch on top of latest trunk please and tell me if they are getting a dhcp addr ?
On 08/10/2014 05:17, John Crispin wrote: > From: Matti Laakso <malaa...@elisanet.fi> > > Signed-off-by: Matti Laakso <malaa...@elisanet.fi> > --- > package/network/utils/comgt/Makefile | 15 ++ > package/network/utils/comgt/files/3g.usb | 2 +- > package/network/utils/comgt/files/ncm.json | 49 +++++++ > package/network/utils/comgt/files/ncm.sh | 156 > +++++++++++++++++++++ > package/network/utils/comgt/files/runcommand.gcom | 26 ++++ > 5 files changed, 247 insertions(+), 1 deletion(-) > create mode 100644 package/network/utils/comgt/files/ncm.json > create mode 100644 package/network/utils/comgt/files/ncm.sh > create mode 100644 package/network/utils/comgt/files/runcommand.gcom > > diff --git a/package/network/utils/comgt/Makefile > b/package/network/utils/comgt/Makefile > index 11a1a49..5fccd94 100644 > --- a/package/network/utils/comgt/Makefile > +++ b/package/network/utils/comgt/Makefile > @@ -40,6 +40,12 @@ $(call Package/comgt/Default) > DEPENDS:=+comgt +kmod-usb-serial +kmod-usb-serial-sierrawireless > +kmod-usb-net +kmod-usb-net-sierrawireless > 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 > +endef > + > define Package/comgt/description > comgt is a scripting language interpreter useful for establishing > communications on serial lines and through PCMCIA modems as well as GPRS > @@ -86,5 +92,14 @@ define Package/comgt-directip/install > $(INSTALL_BIN) ./files/directip.sh $(1)/lib/netifd/proto/directip.sh > endef > > +define Package/comgt-ncm/install > + $(INSTALL_DIR) $(1)/etc/gcom > + $(INSTALL_DATA) ./files/ncm.json $(1)/etc/gcom/ncm.json > + $(INSTALL_DATA) ./files/runcommand.gcom $(1)/etc/gcom/runcommand.gcom > + $(INSTALL_DIR) $(1)/lib/netifd/proto > + $(INSTALL_BIN) ./files/ncm.sh $(1)/lib/netifd/proto/ncm.sh > +endef > + > $(eval $(call BuildPackage,comgt)) > $(eval $(call BuildPackage,comgt-directip)) > +$(eval $(call BuildPackage,comgt-ncm)) > diff --git a/package/network/utils/comgt/files/3g.usb > b/package/network/utils/comgt/files/3g.usb > index fd6837e..ac8326b 100644 > --- a/package/network/utils/comgt/files/3g.usb > +++ b/package/network/utils/comgt/files/3g.usb > @@ -8,7 +8,7 @@ find_3g_iface() { > > local proto > config_get proto "$cfg" proto > - [ "$proto" = 3g ] || return 0 > + [ "$proto" = 3g ] || [ "$proto" = ncm ] || return 0 > > # bypass state vars here because 00-netstate could clobber .device > local dev=$(uci_get network "$cfg" device) > diff --git a/package/network/utils/comgt/files/ncm.json > b/package/network/utils/comgt/files/ncm.json > new file mode 100644 > index 0000000..b9b15cd > --- /dev/null > +++ b/package/network/utils/comgt/files/ncm.json > @@ -0,0 +1,49 @@ > +{ > + "huawei": { > + "initialize": [ > + "AT", > + "ATZ", > + "ATQ0", > + "ATV1", > + "ATE1", > + "ATS0=0" > + ], > + "modes": { > + "preferlte": > "AT^SYSCFGEX=\\\"030201\\\",3fffffff,2,4,7fffffffffffffff,,", > + "preferumts": > "AT^SYSCFGEX=\\\"0201\\\",3fffffff,2,4,7fffffffffffffff,,", > + "lte": > "AT^SYSCFGEX=\\\"03\\\",3fffffff,2,4,7fffffffffffffff,,", > + "umts": > "AT^SYSCFGEX=\\\"02\\\",3fffffff,2,4,7fffffffffffffff,,", > + "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" > + }, > + "SAMSUNG": { > + "initialize": [ > + "AT", > + "AT+CGREG=2", > + "AT+CFUN=5", > + "AT+MODESELECT=3", > + "AT+CGDCONT=1,\\\"IP\\\",\\\"${apn}\\\"" > + ], > + "modes": { > + "umts": "AT+CHANGEALLPATH=1" > + }, > + "connect": "AT+CGATT=1", > + "disconnect": "AT+CGATT=0" > + }, > + "Sony": { > + "initialize": [ > + "AT+CFUN=1", > + "AT+CGDCONT=1,\\\"IP\\\",\\\"${apn}\\\"", > + > "AT*EIAAUW=1,1,\\\"${username}\\\",\\\"${password}\\\",${auth:-00111}" > + ], > + "modes": { > + "umts": "AT+CFUN=6", > + "gsm": "AT+CFUN=5" > + }, > + "connect": "AT*ENAP=1,1", > + "disconnect": "AT*ENAP=0" > + } > +} > diff --git a/package/network/utils/comgt/files/ncm.sh > b/package/network/utils/comgt/files/ncm.sh > new file mode 100644 > index 0000000..14e421f > --- /dev/null > +++ b/package/network/utils/comgt/files/ncm.sh > @@ -0,0 +1,156 @@ > +#!/bin/sh > + > +. /lib/functions.sh > +. ../netifd-proto.sh > +init_proto "$@" > + > +proto_ncm_init_config() { > + no_device=1 > + available=1 > + proto_config_add_string "device:device" > + proto_config_add_string apn > + proto_config_add_string auth > + proto_config_add_string username > + proto_config_add_string password > + proto_config_add_string pincode > + proto_config_add_string delay > + proto_config_add_string mode > +} > + > +proto_ncm_setup() { > + local interface="$1" > + > + local manufacturer initialize setmode connect > + > + 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" > + proto_notify_error "$interface" NO_DEVICE > + proto_set_available "$interface" 0 > + return 1 > + } > + [ -e "$device" ] || { > + echo "ncm[$$]" "Control device not valid" > + proto_set_available "$interface" 0 > + return 1 > + } > + [ -n "$apn" ] || { > + echo "ncm[$$]" "No APN specified" > + proto_notify_error "$interface" NO_APN > + proto_set_available "$interface" 0 > + return 1 > + } > + > + [ -n "$delay" ] && sleep "$delay" > + > + manufacturer=`gcom -d "$device" -s /etc/gcom/getcardinfo.gcom | awk > '/Manufacturer/ { print $2 }'` > + [ $? -ne 0 ] && { > + echo "ncm[$$]" "Failed to get modem information" > + proto_notify_error "$interface" GETINFO_FAILED > + proto_set_available "$interface" 0 > + return 1 > + } > + > + json_load "$(cat /etc/gcom/ncm.json)" > + json_select "$manufacturer" > + [ $? -ne 0 ] && { > + echo "ncm[$$]" "Unsupported modem" > + proto_notify_error "$interface" UNSUPPORTED_MODEM > + proto_set_available "$interface" 0 > + return 1 > + } > + 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" > + proto_notify_error "$interface" INITIALIZE_FAILED > + proto_set_available "$interface" 0 > + return 1 > + } > + done > + > + [ -n "$pincode" ] && { > + PINCODE="$pincode" gcom -d "$device" -s /etc/gcom/setpin.gcom > || { > + echo "ncm[$$]" "Unable to verify PIN" > + proto_notify_error "$interface" PIN_FAILED > + proto_block_restart "$interface" > + return 1 > + } > + } > + [ -n "$mode" ] && { > + 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" > + proto_notify_error "$interface" SETMODE_FAILED > + proto_set_available "$interface" 0 > + return 1 > + } > + json_select .. > + } > + > + json_get_var connect connect > + eval COMMAND="$connect" gcom -d "$device" -s /etc/gcom/runcommand.gcom > || { > + echo "ncm[$$]" "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 > + 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" > + > + manufacturer=`gcom -d "$device" -s /etc/gcom/getcardinfo.gcom | awk > '/Manufacturer/ { print $2 }'` > + [ $? -ne 0 ] && { > + echo "ncm[$$]" "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" > + proto_notify_error "$interface" UNSUPPORTED_MODEM > + return 1 > + } > + > + json_get_var disconnect disconnect > + COMMAND="$disconnect" gcom -d "$device" -s /etc/gcom/runcommand.gcom || > { > + echo "ncm[$$]" "Failed to disconnect" > + proto_notify_error "$interface" DISCONNECT_FAILED > + return 1 > + } > +} > + > +add_protocol ncm > diff --git a/package/network/utils/comgt/files/runcommand.gcom > b/package/network/utils/comgt/files/runcommand.gcom > new file mode 100644 > index 0000000..6ba061f > --- /dev/null > +++ b/package/network/utils/comgt/files/runcommand.gcom > @@ -0,0 +1,26 @@ > +# run AT-command from environment > +opengt > + set com 115200n81 > + set senddelay 0.02 > + waitquiet 1 0.2 > + flash 0.1 > + > +:start > + send "sending -> " > + send $env("COMMAND") > + send "^n" > + > + waitfor 15 "OK","ERR","ERROR" > + if % = 0 goto continue > + if % = 1 goto error > + if % = 2 goto error > + > + print "Timeout running AT-command\n" > + exit 1 > + > +:error > + print "Error running AT-command\n" > + exit 1 > + > +:continue > + exit 0 _______________________________________________ openwrt-devel mailing list openwrt-devel@lists.openwrt.org https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel