deca2c95e22cc5749ffbdf32d441365c15e6d0f7
[openwrt/openwrt.git] / package / network / utils / comgt / files / 3g.sh
1 #!/bin/sh
2 INCLUDE_ONLY=1
3
4 . ../netifd-proto.sh
5 . ./ppp.sh
6 init_proto "$@"
7
8 proto_3g_init_config() {
9 no_device=1
10 available=1
11 ppp_generic_init_config
12 proto_config_add_string "device:device"
13 proto_config_add_string "apn"
14 proto_config_add_string "service"
15 proto_config_add_string "pincode"
16 proto_config_add_string "dialnumber"
17 }
18
19 proto_3g_setup() {
20 local interface="$1"
21 local chat
22
23 json_get_var device device
24 json_get_var apn apn
25 json_get_var service service
26 json_get_var pincode pincode
27 json_get_var dialnumber dialnumber
28
29 [ -e "$device" ] || {
30 proto_set_available "$interface" 0
31 return 1
32 }
33
34 case "$service" in
35 cdma|evdo)
36 chat="/etc/chatscripts/evdo.chat"
37 ;;
38 *)
39 chat="/etc/chatscripts/3g.chat"
40 cardinfo=$(gcom -d "$device" -s /etc/gcom/getcardinfo.gcom)
41 if echo "$cardinfo" | grep -q Novatel; then
42 case "$service" in
43 umts_only) CODE=2;;
44 gprs_only) CODE=1;;
45 *) CODE=0;;
46 esac
47 export MODE="AT\$NWRAT=${CODE},2"
48 elif echo "$cardinfo" | grep -q Option; then
49 case "$service" in
50 umts_only) CODE=1;;
51 gprs_only) CODE=0;;
52 *) CODE=3;;
53 esac
54 export MODE="AT_OPSYS=${CODE}"
55 elif echo "$cardinfo" | grep -q "Sierra Wireless"; then
56 SIERRA=1
57 elif echo "$cardinfo" | grep -qi huawei; then
58 case "$service" in
59 umts_only) CODE="14,2";;
60 gprs_only) CODE="13,1";;
61 *) CODE="2,2";;
62 esac
63 export MODE="AT^SYSCFG=${CODE},3FFFFFFF,2,4"
64 fi
65
66 if [ -n "$pincode" ]; then
67 PINCODE="$pincode" gcom -d "$device" -s /etc/gcom/setpin.gcom || {
68 proto_notify_error "$interface" PIN_FAILED
69 proto_block_restart "$interface"
70 return 1
71 }
72 fi
73 [ -n "$MODE" ] && gcom -d "$device" -s /etc/gcom/setmode.gcom
74
75 # wait for carrier to avoid firmware stability bugs
76 [ -n "$SIERRA" ] && {
77 gcom -d "$device" -s /etc/gcom/getcarrier.gcom || return 1
78 }
79
80 if [ -z "$dialnumber" ]; then
81 dialnumber="*99***1#"
82 fi
83
84 ;;
85 esac
86
87 connect="${apn:+USE_APN=$apn }DIALNUMBER=$dialnumber /usr/sbin/chat -t5 -v -E -f $chat"
88 ppp_generic_setup "$interface" \
89 noaccomp \
90 nopcomp \
91 novj \
92 nobsdcomp \
93 noauth \
94 lock \
95 crtscts \
96 115200 "$device"
97 return 0
98 }
99
100 proto_3g_teardown() {
101 proto_kill_command "$interface"
102 }
103
104 add_protocol 3g