comgt: add directip proto
add a proto handler for sierra wireless directip modems Signed-off-by: John Crispin <blogic@openwrt.org> SVN-Revision: 42465
This commit is contained in:
parent
cc82f93251
commit
7bad68804c
@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=comgt
|
||||
PKG_VERSION:=0.32
|
||||
PKG_RELEASE:=22
|
||||
PKG_RELEASE:=23
|
||||
|
||||
PKG_SOURCE:=$(PKG_NAME).$(PKG_VERSION).tgz
|
||||
PKG_SOURCE_URL:=@SF/comgt
|
||||
@ -59,10 +59,13 @@ define Package/comgt/install
|
||||
$(INSTALL_DATA) ./files/getcarrier.gcom $(1)/etc/gcom/getcarrier.gcom
|
||||
$(INSTALL_DATA) ./files/getcnum.gcom $(1)/etc/gcom/getcnum.gcom
|
||||
$(INSTALL_DATA) ./files/getimsi.gcom $(1)/etc/gcom/getimsi.gcom
|
||||
$(INSTALL_DATA) ./files/directip.gcom $(1)/etc/gcom/directip.gcom
|
||||
$(INSTALL_DATA) ./files/directip-stop.gcom $(1)/etc/gcom/directip-stop.gcom
|
||||
$(INSTALL_DIR) $(1)/etc/hotplug.d/tty
|
||||
$(INSTALL_DATA) ./files/3g.usb $(1)/etc/hotplug.d/tty/30-3g
|
||||
$(INSTALL_DIR) $(1)/lib/netifd/proto
|
||||
$(INSTALL_BIN) ./files/3g.sh $(1)/lib/netifd/proto/3g.sh
|
||||
$(INSTALL_BIN) ./files/directip.sh $(1)/lib/netifd/proto/directip.sh
|
||||
endef
|
||||
|
||||
$(eval $(call BuildPackage,comgt))
|
||||
|
16
package/network/utils/comgt/files/directip-stop.gcom
Normal file
16
package/network/utils/comgt/files/directip-stop.gcom
Normal file
@ -0,0 +1,16 @@
|
||||
opengt
|
||||
set com 115200n81
|
||||
set comecho off
|
||||
set senddelay 0.05
|
||||
waitquiet 1 0.2
|
||||
|
||||
:start
|
||||
send "AT!SCACT=0,3^m"
|
||||
waitfor 5 "OK"
|
||||
if % = 0 goto hangupok
|
||||
print "WWAN error. Hangup failed.\r\n"
|
||||
exit 1
|
||||
|
||||
:hangupok
|
||||
print "WWAN connection established.\r\n"
|
||||
exit 0
|
55
package/network/utils/comgt/files/directip.gcom
Normal file
55
package/network/utils/comgt/files/directip.gcom
Normal file
@ -0,0 +1,55 @@
|
||||
opengt
|
||||
set com 115200n81
|
||||
set comecho off
|
||||
set senddelay 0.05
|
||||
waitquiet 1 0.2
|
||||
|
||||
:start
|
||||
if $env("USE_AUTH") = "0" goto connect
|
||||
send "AT$QCPDPP=3,"
|
||||
send $env("USE_AUTH")
|
||||
send ",\""
|
||||
if $env("USE_USER") <> "" send $env("USE_USER")
|
||||
send "\",\""
|
||||
if $env("USE_PASS") <> "" send $env("USE_PASS")
|
||||
send "\"^m"
|
||||
waitfor 5 "OK"
|
||||
if % = 0 goto connect
|
||||
print "WWAN error. Auth failed.\r\n"
|
||||
exit 1
|
||||
|
||||
:connect
|
||||
send "AT+CFUN=1^m"
|
||||
send "AT+CGDCONT=3,\"IP\",\""
|
||||
send $env("USE_APN")
|
||||
send "\"^m"
|
||||
waitfor 5 "OK"
|
||||
if % = 0 goto connok
|
||||
print "WWAN error. Connection failed.\r\n"
|
||||
exit 1
|
||||
|
||||
:connok
|
||||
let c=1
|
||||
:loop
|
||||
sleep 2
|
||||
send "AT+CGATT?^m"
|
||||
waitfor 5 "+CGATT: 1"
|
||||
if % = 0 goto carrierok
|
||||
if c > 10 goto carriererr
|
||||
inc c
|
||||
goto loop
|
||||
|
||||
carriererr:
|
||||
print "WWAN error. No carrier.\r\n"
|
||||
exit 1
|
||||
|
||||
:carrierok
|
||||
send "AT!SCACT=1,3^m"
|
||||
waitfor 5 "OK"
|
||||
if % = 0 goto dialok
|
||||
print "WWAN error. Dialing failed.\r\n"
|
||||
exit 1
|
||||
|
||||
:dialok
|
||||
print "WWAN connection established.\r\n"
|
||||
exit 0
|
92
package/network/utils/comgt/files/directip.sh
Normal file
92
package/network/utils/comgt/files/directip.sh
Normal file
@ -0,0 +1,92 @@
|
||||
#!/bin/sh
|
||||
|
||||
. /lib/functions.sh
|
||||
. ../netifd-proto.sh
|
||||
init_proto "$@"
|
||||
|
||||
proto_directip_init_config() {
|
||||
available=1
|
||||
proto_config_add_string "device:device"
|
||||
proto_config_add_string "ifname"
|
||||
proto_config_add_string "apn"
|
||||
proto_config_add_string "pincode"
|
||||
proto_config_add_string "auth"
|
||||
proto_config_add_string "username"
|
||||
proto_config_add_string "password"
|
||||
}
|
||||
|
||||
proto_directip_setup() {
|
||||
local interface="$1"
|
||||
local chat
|
||||
|
||||
local device apn pincode ifname auth username password
|
||||
json_get_vars device apn pincode ifname auth username password
|
||||
|
||||
[ -e "$device" ] || {
|
||||
proto_notify_error "$interface" NO_DEVICE
|
||||
proto_set_available "$interface" 0
|
||||
return 1
|
||||
}
|
||||
|
||||
[ -n "$ifname" ] || {
|
||||
proto_notify_error "$interface" NO_IFNAME
|
||||
proto_set_available "$interface" 0
|
||||
return 1
|
||||
}
|
||||
|
||||
cardinfo=$(gcom -d "$device" -s /etc/gcom/getcardinfo.gcom)
|
||||
[ -n $(echo "$cardinfo" | grep -q "Sierra Wireless") ] || {
|
||||
proto_notify_error "$interface" BAD_DEVICE
|
||||
proto_block_restart "$interface"
|
||||
return 1
|
||||
}
|
||||
|
||||
if [ -n "$pincode" ]; then
|
||||
PINCODE="$pincode" gcom -d "$device" -s /etc/gcom/setpin.gcom || {
|
||||
proto_notify_error "$interface" PIN_FAILED
|
||||
proto_block_restart "$interface"
|
||||
return 1
|
||||
}
|
||||
fi
|
||||
# wait for carrier to avoid firmware stability bugs
|
||||
gcom -d "$device" -s /etc/gcom/getcarrier.gcom || return 1
|
||||
|
||||
local auth_type=0
|
||||
[ -z "$auth" ] && case $auth in
|
||||
pap) auth_type=1;;
|
||||
chap) auth_type=1;;
|
||||
esac
|
||||
|
||||
USE_APN="$apn" USE_USER="$username" USE_PASS="$password" USE_AUTH="$auth_type" \
|
||||
gcom -d "$device" -s /etc/gcom/directip.gcom || {
|
||||
proto_notify_error "$interface" CONNECT_FAILED
|
||||
proto_block_restart "$interface"
|
||||
return 1
|
||||
}
|
||||
|
||||
logger -p daemon.info -t "directip[$$]" "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"
|
||||
ubus call network add_dynamic "$(json_dump)"
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
proto_directip_teardown() {
|
||||
local interface="$1"
|
||||
|
||||
local device
|
||||
json_get_vars device
|
||||
|
||||
gcom -d "$device" -s /etc/gcom/directip-stop.gcom || proto_notify_error "$interface" CONNECT_FAILED
|
||||
|
||||
proto_init_update "*" 0
|
||||
proto_send_update "$interface"
|
||||
}
|
||||
|
||||
add_protocol directip
|
Loading…
Reference in New Issue
Block a user