comgt: add directip proto
add a proto handler for sierra wireless directip modems Signed-off-by: John Crispin <blogic@openwrt.org> Backport of r42465 git-svn-id: svn://svn.openwrt.org/openwrt/branches/barrier_breaker@42577 3c298f89-4303-0410-b956-a3cf2f4a3e73
This commit is contained in:
parent
cebcd32fe8
commit
13237e2ea4
|
@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
PKG_NAME:=comgt
|
PKG_NAME:=comgt
|
||||||
PKG_VERSION:=0.32
|
PKG_VERSION:=0.32
|
||||||
PKG_RELEASE:=22
|
PKG_RELEASE:=23
|
||||||
|
|
||||||
PKG_SOURCE:=$(PKG_NAME).$(PKG_VERSION).tgz
|
PKG_SOURCE:=$(PKG_NAME).$(PKG_VERSION).tgz
|
||||||
PKG_SOURCE_URL:=@SF/comgt
|
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/getcarrier.gcom $(1)/etc/gcom/getcarrier.gcom
|
||||||
$(INSTALL_DATA) ./files/getcnum.gcom $(1)/etc/gcom/getcnum.gcom
|
$(INSTALL_DATA) ./files/getcnum.gcom $(1)/etc/gcom/getcnum.gcom
|
||||||
$(INSTALL_DATA) ./files/getimsi.gcom $(1)/etc/gcom/getimsi.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_DIR) $(1)/etc/hotplug.d/tty
|
||||||
$(INSTALL_DATA) ./files/3g.usb $(1)/etc/hotplug.d/tty/30-3g
|
$(INSTALL_DATA) ./files/3g.usb $(1)/etc/hotplug.d/tty/30-3g
|
||||||
$(INSTALL_DIR) $(1)/lib/netifd/proto
|
$(INSTALL_DIR) $(1)/lib/netifd/proto
|
||||||
$(INSTALL_BIN) ./files/3g.sh $(1)/lib/netifd/proto/3g.sh
|
$(INSTALL_BIN) ./files/3g.sh $(1)/lib/netifd/proto/3g.sh
|
||||||
|
$(INSTALL_BIN) ./files/directip.sh $(1)/lib/netifd/proto/directip.sh
|
||||||
endef
|
endef
|
||||||
|
|
||||||
$(eval $(call BuildPackage,comgt))
|
$(eval $(call BuildPackage,comgt))
|
||||||
|
|
|
@ -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
|
|
@ -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
|
|
@ -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