add a proto handler for sierra wireless directip modems Signed-off-by: John Crispin <blogic@openwrt.org> SVN-Revision: 42465master
parent
cc82f93251
commit
7bad68804c
@ -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