parent
2af4d04336
commit
d495281b6e
@ -0,0 +1,83 @@ |
||||
#!/bin/sh |
||||
INCLUDE_ONLY=1 |
||||
|
||||
. ../netifd-proto.sh |
||||
. ./ppp.sh |
||||
init_proto "$@" |
||||
|
||||
proto_3g_init_config() { |
||||
no_device=1 |
||||
available=1 |
||||
ppp_generic_init_config |
||||
proto_config_add_string "device" |
||||
proto_config_add_string "apn" |
||||
proto_config_add_string "service" |
||||
proto_config_add_int "pincode" |
||||
} |
||||
|
||||
proto_3g_setup() { |
||||
local interface="$1" |
||||
local chat |
||||
|
||||
json_get_var device device |
||||
json_get_var apn apn |
||||
json_get_var service service |
||||
json_get_var pincode pincode |
||||
|
||||
[ -e "$device" ] || { |
||||
proto_set_available "$interface" 0 |
||||
return 1 |
||||
} |
||||
|
||||
case "$service" in |
||||
cdma|evdo) |
||||
chat="/etc/chatscripts/evdo.chat" |
||||
;; |
||||
*) |
||||
chat="/etc/chatscripts/3g.chat" |
||||
cardinfo=$(gcom -d "$device" -s /etc/gcom/getcardinfo.gcom) |
||||
if echo "$cardinfo" | grep -q Novatel; then |
||||
case "$service" in |
||||
umts_only) CODE=2;; |
||||
gprs_only) CODE=1;; |
||||
*) CODE=0;; |
||||
esac |
||||
export MODE="AT\$NWRAT=${CODE},2" |
||||
elif echo "$cardinfo" | grep -q Option; then |
||||
case "$service" in |
||||
umts_only) CODE=1;; |
||||
gprs_only) CODE=0;; |
||||
*) CODE=3;; |
||||
esac |
||||
export MODE="AT_OPSYS=${CODE}" |
||||
fi |
||||
|
||||
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 |
||||
[ -n "$MODE" ] && gcom -d "$device" -s /etc/gcom/setmode.gcom |
||||
;; |
||||
esac |
||||
|
||||
connect="${apn:+USE_APN=$apn }/usr/sbin/chat -t5 -v -E -f $chat" |
||||
ppp_generic_setup "$interface" \ |
||||
noaccomp \ |
||||
nopcomp \ |
||||
novj \ |
||||
nobsdcomp \ |
||||
noauth \ |
||||
lock \ |
||||
crtscts \ |
||||
115200 "$device" |
||||
return 0 |
||||
} |
||||
|
||||
proto_3g_teardown() { |
||||
proto_kill_command "$interface" |
||||
} |
||||
|
||||
add_protocol 3g |
@ -0,0 +1,33 @@ |
||||
#!/bin/sh |
||||
. /etc/functions.sh |
||||
. /lib/netifd/netifd-proto.sh |
||||
|
||||
find_3g_iface() { |
||||
local cfg="$1" |
||||
local tty="$2" |
||||
|
||||
local proto |
||||
config_get proto "$cfg" proto |
||||
[ "$proto" = 3g ] || return 0 |
||||
|
||||
local dev |
||||
config_get dev "$cfg" device |
||||
|
||||
if [ "${dev##*/}" = "${tty##*/}" ]; then |
||||
if [ "$ACTION" = add ]; then |
||||
available=1 |
||||
else |
||||
available=0 |
||||
fi |
||||
proto_set_available "$cfg" $available |
||||
fi |
||||
} |
||||
|
||||
case "$DEVICENAME" in |
||||
tty*) |
||||
[ -e "/dev/$DEVICENAME" ] || [ "$ACTION" = remove ] || exit 0 |
||||
config_load network |
||||
config_foreach find_3g_iface interface "/dev/$DEVICENAME" |
||||
;; |
||||
esac |
||||
|
Loading…
Reference in new issue