4 # Copyright (C) 2015 shibby
7 MODE
=`nvram get wan_proto`
8 LOCK
="/tmp/switch4g.lock"
10 if [ ! "$MODE" == "lte" ]; then
15 APN
=`nvram get modem_apn`
16 DEV
=`nvram get modem_dev4g`
17 TYP
=`nvram get modem_type`
18 IFA
=`nvram get wan_4g`
20 logger
4G MODEM
- connecting ...
22 if [ "$TYP" == "non-hilink" -o "$TYP" == "hw-ether" ]; then
26 if [ -z "$DEV" ]; then
27 logger
4G MODEM
- DIAG interface not found
- connection terminated
31 #we try use last diag iface first. If it failed then we try use any other ttyUSB device
32 TTY
=`ls /dev/ttyUSB* | grep -v $DEV`
35 while [ $CONNECTED == "0" ]; do
37 if [ "$COUNT" -lt "5" ]; then
38 MODE
="AT^NDISDUP=1,0" gcom
-d $i -s /etc
/gcom
/setverbose.gcom
> /tmp
/4g.mode
39 MODE
="AT^NDISDUP=1,1,\"$APN\"" gcom
-d $i -s /etc
/gcom
/setverbose.gcom
> /tmp
/4g.mode
41 CHECK
=`cat /tmp/4g.mode | grep "NDISSTAT:" | cut -d ":" -f2 | cut -d "," -f1`
42 if [ "$CHECK" == "1" ]; then
43 logger
4G MODEM
- connected ...
46 nvram
set modem_dev4g
="$i"
49 logger
4G MODEM
- device
$i connection failed.
51 COUNT
=`expr $COUNT + 1`
56 # checked all devices but still not connected?
57 if [ $CONNECTED == "0" ]; then
58 INTERVAL
=`nvram get modem_watchdog`
59 if [ "$INTERVAL" -gt 0 ]; then
60 logger
4G MODEM
- connection failed
- watchdog enabled
63 logger
4G MODEM
- connection failed
- process terminated
!
75 while [ $GO = "0" ]; do
76 if [ "$COUNT" == "5" ]; then
77 INTERVAL
=`nvram get modem_watchdog`
78 if [ "$INTERVAL" -gt 0 ]; then
79 logger
4G MODEM WAN IFACE failed
- watchdog enabled
82 logger
4G MODEM WAN IFACE failed
- connection process terminated
!
92 CHECKIFA
=`ifconfig | grep $IFA | wc -l`
93 if [ "$CHECKIFA" == "1" ]; then
95 logger
4G MODEM
- WAN IFACE configured ...
98 logger
4G MODEM WAN IFACE
- count
: $COUNT
99 COUNT
=`expr $COUNT + 1`
107 DEV
=`nvram get modem_dev4g`
108 TYP
=`nvram get modem_type`
110 logger
4G MODEM
- disconnecting ...
113 if [ "$TYP" == "non-hilink" -o "$TYP" == "hw-ether" ]; then
114 MODE
="AT^NDISDUP=1,0" gcom
-d $DEV -s /etc
/gcom
/setmode.gcom
120 IFA
=`nvram get wan_4g`
121 CARRIER
=`cat /sys/class/net/$IFA/carrier`
123 if [ "$CARRIER" == "0" ]; then
124 logger
4G MODEM Watchdog
- Connection down
- Reconnecting ...
125 watchdogDel
#remove Cron job. It will be added once again after succesful connection.
131 INTERVAL
=`nvram get modem_watchdog`
132 if [ "$INTERVAL" -gt 0 ]; then
133 ISSET
=`cru l | grep watchdog4g | wc -l`
135 if [ "$ISSET" == "0" ]; then
136 cru a watchdog4g
"*/$INTERVAL * * * * /usr/sbin/switch4g watchdog"
142 ISSET
=`cru l | grep watchdog4g | wc -l`
144 if [ "$ISSET" == "1" ]; then
150 if [ -f $LOCK ]; then #lock exist
151 logger
4G MODEM
- previous proces of switch4g still working
159 PIN
=`nvram get modem_pin`
160 IS_PIN
=`nvram get modem_pin | wc -w`
162 if [ "$IS_PIN" == "1" ]; then #only for non-hilink
164 #we try use last diag iface first. If it failed then we try use any other ttyUSB device
165 TTY
=`ls /dev/ttyUSB* | grep -v $DEV`
169 if [ "$COUNT" -lt "5" ]; then
171 PINCODE
="$PIN" gcom
-d $i -s /etc
/gcom
/setpin.gcom
> /tmp
/4g.pin
172 IS_READY
=`cat /tmp/4g.pin | grep successfully | wc -l`
173 if [ "$IS_READY" == "1" ]; then
174 logger
4G MODEM
- SIM ready
175 nvram
set modem_dev4g
="$i"
178 logger
4G MODEM
- SIM not ready
- count
: $COUNT
179 COUNT
=`expr $COUNT + 1`
184 logger
4G MODEM
- SIM locked
- connection process terminated
!
192 MODULES
="cdc_ether huawei_ether cdc_ncm"
194 for MODULE
in $MODULES; do
203 while [ $FOUND == "0" ]; do
204 #modem not found, try detect
205 DEVICES
=`lsusb | awk '{print $6}'`
207 for SWITCH
in $DEVICES; do
208 SEARCH
=`ls /etc/usb_modeswitch.d/$SWITCH | wc -l`
212 if [ "$SEARCH" == "1" ]; then
213 logger
4G MODEM FOUND
- $SWITCH - Switching ...
214 DV
=`echo $SWITCH | cut -d ":" -f1`
215 DP
=`echo $SWITCH | cut -d ":" -f2`
216 /usr
/sbin
/usb_modeswitch
-Q -c /etc
/usb_modeswitch.d
/$SWITCH -v $DV -p $DP
218 TEST1
=`cat /etc/usb_modeswitch.d/$SWITCH | grep "TargetVendor" | cut -d "=" -f2 | wc -l`
219 if [ "$TEST1" == "1" ]; then
220 VENDOR
=`cat /etc/usb_modeswitch.d/$SWITCH | grep "TargetVendor" | cut -d "=" -f2 | cut -d "x" -f2`
222 VENDOR
=`echo $SWITCH | cut -d ":" -f1`
225 TEST2
=`lsusb | awk '{print $6}' | grep $VENDOR | wc -l`
226 if [ "$TEST2" == "1" ]; then
227 PRODUCT
=`lsusb | awk '{print $6}' | grep $VENDOR | cut -d ":" -f2`
228 logger
4G MODEM ready
- $VENDOR:$PRODUCT
229 echo "$VENDOR:$PRODUCT" > /tmp
/4g.detect
235 for MODULE
in $MODULES; do
236 SEARCH
=`cat /proc/bus/usb/devices | grep Driver | grep $MODULE | wc -l`
238 if [ "$SEARCH" -gt 0 ]; then
239 if [ "$MODULE" == "cdc_ether" ]; then
241 elif [ "$MODULE" == "cdc_ncm" ]; then
243 elif [ "$MODULE" == "huawei_ether" ]; then
249 logger
4G MODEM NDIS found
- $TYPE - using
$MODULE module
250 nvram
set 4g_module
=$MODULE
254 if [ "$COUNT" == "5" ]; then
255 logger
4G MODEM NDIS not found
- process terminated
!
259 logger
4G MODEM NDIS not found
- $MODULE - count
: $COUNT
260 COUNT
=`expr $COUNT + 1`
270 #search WAN interface (usbX or ethX)
274 KERNEL
=`uname -r | cut -d "." -f1,2,3`
276 while [ $FOUND == "0" ]; do
277 if [ "$TYPE" == "hw-ether" ]; then
278 WAN
=`dmesg | grep huawei_ether | grep Device | grep register | cut -d ":" -f1 | tail -1`
279 elif [ "$KERNEL" == "2.6.36" ]; then #ARM
280 WAN
=`dmesg | grep $MODULE | grep register | grep "'" | cut -d " " -f3 | cut -d ":" -f1 | tail -1`
282 WAN
=`dmesg | grep $MODULE | grep register | grep "'" | cut -d ":" -f1 | tail -1`
285 IS_WAN
=`echo $WAN | wc -w`
287 if [ "$IS_WAN" -gt 0 ]; then
288 logger
4G MODEM WAN found
- $TYPE - using
$WAN as WAN
289 nvram
set wan_4g
="$WAN"
290 nvram
set modem_type
=$TYPE
293 if [ "$COUNT" == "5" ]; then
294 logger
4G MODEM WAN not found
- connection process terminated
!
298 logger
4G MODEM WAN not found
- count
: $COUNT
299 COUNT
=`expr $COUNT + 1`
309 US
=`cat /proc/bus/usb/devices | grep Driver | grep usbserial | wc -l`
311 if [ "$US" -gt 0 ]; then
312 logger
4G MODEM found
- Diagnostic interface
- using usbserial module
315 IS_VENDOR
=`echo $VENDOR | wc -w`
316 if [ "$IS_VENDOR" -gt 0 ]; then
317 IS_PRODUCT
=`echo $PRODUCT | wc -w`
318 if [ "$IS_PRODUCT" -gt 0 ]; then
319 logger
4G MODEM
- loading module usbserial
321 insmod usbserial vendor
=0x
$VENDOR product
=0x
$PRODUCT
322 echo "$VENDOR:$PRODUCT" > /tmp
/4g.detect
326 DEV
=`cat /proc/bus/usb/devices | grep Driver | grep usbserial | wc -l`
327 if [ "$DEV" -gt 0 ]; then
328 logger
4G MODEM ready
- using usbserial module
330 nvram
set 4g_module
=usbserial
332 #last change. try load usbserial for each usb devices
333 DEVICES
=`lsusb | awk '{print $6}'`
334 for SWITCH
in $DEVICES; do
335 if [ "$FOUND" == "0" ]; then
336 VENDOR
=`echo $SWITCH | cut -d ":" -f1`
337 PRODUCT
=`echo $SWITCH | cut -d ":" -f2`
339 insmod usbserial vendor
=0x
$VENDOR product
=0x
$PRODUCT
341 DEV
=`cat /proc/bus/usb/devices | grep Driver | grep usbserial | wc -l`
342 if [ "$DEV" -gt 0 ]; then
343 logger
4G MODEM ready
- using usbserial module
344 nvram
set 4g_module
=usbserial
345 echo "$VENDOR:$PRODUCT" > /tmp
/4g.detect
354 #search diagnostic device
355 TTY
=`ls /dev/ttyUSB*`
358 CHECKTTY
=`gcom -d $i -e info | grep OK | wc -l`
359 if [ "$CHECKTTY" == "1" ]; then #found working interface
360 logger
4G MODEM DIAG found
- $i
361 nvram
set modem_dev4g
=$i
364 logger
4G MODEM DIAG not found
370 #check signal strength
371 CSQ
=`gcom -d $DEVNR -s /etc/gcom/getstrength.gcom | grep "CSQ:" | cut -d " " -f2 | cut -d "," -f1`
373 logger
"4G MODEM Signal Strength: $DBM dBm"
377 ###################################################
379 if [ "$1" == "connect" ]; then
381 elif [ "$1" == "disconnect" ]; then
383 elif [ "$1" == "watchdog" ]; then
392 if [ "$TYPE" == "non-hilink" -o "$TYPE" == "hw-ether" ]; then #only for non-hilink
400 #force connection after detect 4G modem