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