51

Odp: Modemy 3G w trybie NDIS/CDC i multiwan inaczej

W moim przypadku reboot działa idealnie. Jak maiłem TL-MR3420 to w nim wyłączałem zasilanie modemu przez GPIO:

echo 0 > /sys/devices/virtual/gpio/gpio6/value
sleep 1
echo 1 > /sys/devices/virtual/gpio/gpio6/value

ale to nie zawsze pomagało. Teraz w jego miejscu pracuje WRT160NL a on niema możliwości wyłączenia zasilania GPIO.

install.sh - Aktualizacja systemu, sysinfo.sh - Info.o systemie, openvpn-auth.sh - Login dla OpenVPN
Tu moje skrypty na GitHub

52

Odp: Modemy 3G w trybie NDIS/CDC i multiwan inaczej

Jeśli reset pomaga to znaczy, że coś złego dzieje się z systemem. Przy restarcie routera modem nie jest nawet rozłączany. W sieci można znaleźć informację, że modemy Huawei można zresetować komendami: AT+CFUN=4 a później AT+CFUN=6. Nie testowałem tego rozwiązania jeszcze.

53

Odp: Modemy 3G w trybie NDIS/CDC i multiwan inaczej

Podsunąłeś mi pomysł z AT+CFUN=1,1, zmienię ndisup.gcom i sprawdzę. Potem sprawdzę AT+CFUN=4 a później AT+CFUN=6.

install.sh - Aktualizacja systemu, sysinfo.sh - Info.o systemie, openvpn-auth.sh - Login dla OpenVPN
Tu moje skrypty na GitHub

54

Odp: Modemy 3G w trybie NDIS/CDC i multiwan inaczej

Wypróbuje Twoje skrypty ma Hauwei E3276 (sterownik CDC NCM)  dla Gargoyle. Operator to Cyfrowy Polsat. Czy Twoje skrypty są uniwersalne, czy pod innym operatorem trzeba wnosić jakieś zmiany?

TL-WDR3600
TL-WR1043ND
TL-WR842ND

55

Odp: Modemy 3G w trybie NDIS/CDC i multiwan inaczej

Nie, skrypty nie są uniwersalne. Miałem tylko kilka modemów i klika różnych router-ów, a patrząc na ich ilość na rynku nie można założyć że skrypty zadziałają z każdą konfiguracją.

install.sh - Aktualizacja systemu, sysinfo.sh - Info.o systemie, openvpn-auth.sh - Login dla OpenVPN
Tu moje skrypty na GitHub

56

Odp: Modemy 3G w trybie NDIS/CDC i multiwan inaczej

Dzięki koledze fruits jest kolejna wersja skryptu ndisup.gcom:

opengt
    let $x="ndisup:"+$basename($dev())+" "
    print $x+"Establishing 3G modem connection in NDIS mode\n"
    print $x+"Script for comgt version 1.05 Rafal Drzymala 2012\n"
#
# Changelog
#    1.00    RD    First stable code
#    1.01    RD    Moved "Getting received signal strength" section
#                Reset command changed from ATZ to ATZ0
#                Changed wait time for establish connection from 20 to 30 secs
#    1.02    RD    Changed signal level bar
#    1.03    RD    Added support for SYSINFOEX modem command
#    1.04    RD    Moved "Checking for password input request" section (frutis suggestion)
#    1.05    RD    Reset command changed AT+CFUN=1 to AT+CFUN=1,1
#                Corrected decode result of AT^SYSINFOEX modem command (frutis suggestion)
#
# Modem succesfuly tested
# - HUAWEI E173        11.126.85.00.209
# Modem tested, not supported 
# - HUAWEI E160G    11.608.02.02.55
# - HUAWEI E160        11.604.09.00.00
# - HUAWEI E220
#
    set com 115200n81
    set ignorecase on
    set comecho off
    set senddelay 0.02

    let $a=$env("APN")
    let $m=$env("MODE")
    let $p=$env("PINCODE")

    if  $a = "" print $x+"APN environment var not specified\n" goto finish    
    let r1=1

:start
# Initializing communication with modem
    if r1=1 print $x+"Try to communicate with modem\n"
    if r1>1 print $x+"Again try to communicate with modem (",r1,")\n"
    waitquiet 2 0.5
    send "ATQ0; E0^m"
    waitfor 1 "OK"
    if % = -1 goto comm_timeout
    send "AT+CMEE=2^m"
    waitfor 1 "OK","ERROR","+CME ERROR: ","COMMAND NOT SUPPORT"
    if % = -1 goto comm_timeout
    if % = 2 waitquiet 1 0.5
    send "AT\^CURC=0^m"
    waitfor 1 "OK","ERROR","+CME ERROR: ","COMMAND NOT SUPPORT"
    if % = -1 goto comm_timeout
    if % = 2 waitquiet 1 0.5

# Checking for password input request
    print $x+"Checking for password input request\n"
    let u=0
    send "AT+CPIN?^m"
    waitfor 5 "+CPIN: ","ERROR","+CME ERROR: ","COMMAND NOT SUPPORT"
    if % = -1 goto comm_timeout
    if % = 1 print $x+"Error while checking for password input request\n" goto end_chkpin
    if % = 2 gosub cme_error print $x+"Error "+$e+" while checking for password input request\n" goto end_chkpin
    if % = 3 print $x+"Command not supported\n" goto end_chkpin
    get 1 "^mOK^m" $i1
    if % != 0 goto comm_timeout
    let $d="Unknown modem response ("+$i1+")"
    if $i1 = "READY" let $d="MT without password input request"
    if $i1 = "SIM PIN" let $d="UICC/SIM PIN password request"
    if $i1 = "SIM PUK" let $d="UICC/SIM PUK password request, to unblock the SIM PIN which was blocked for 3 verification failure"
    if $i1 = "SIM PIN2" let $d="PIN2 password request"
    if $i1 = "SIM PUK2" let $d="PUK2 password request, to unblock the SIM PIN2 which was blocked for 3 verification failure"
    if $i1 = "PH-SIM PIN" let $d="SIM lock (phone-to-SIM) is required"
    if $i1 = "PH-NET PIN" let $d="Network personnalisation is required"
    print $x+"- state: "+$d+"\n"
    if $i1 = "SIM PIN" goto do_pin_unlock
    if $i1 <> "READY" goto finish
:end_chkpin

# Unlock the PIN 
    goto end_pin_unlock
:do_pin_unlock
    print $x+"UICC/SIM unlocking by PIN\n"
    if $p = "" print $x+"PINCODE environment var not specified\n" goto abort
    send "AT+CPIN="+$p"^m"
    waitfor 5 "OK","ERROR","+CME ERROR: ","COMMAND NOT SUPPORT"
    if % = -1 goto comm_timeout
    if % = 1 print $x+"Error while unlocking by PIN\n" goto abort
    if % = 2 gosub cme_error print $x+"Error "+$e+" while unlocking by PIN\n" goto abort
    if % = 3 print $x+"Command not supported\n" goto abort
    print $x+"UICC/SIM unlocked successfully\n"
    let r2=0
:wait_for_reg
    let r2=r2+1
    if r2>5 print $x+"Number of retries exhausted\n" goto abort
    print $x+"Waiting for network registration (",r2,")\n"
    send "AT+CGREG=0; +CGREG?^m"
    waitfor 2 "+CGREG: ","ERROR","+CME ERROR: ","COMMAND NOT SUPPORT"
    if % = -1 goto comm_timeout
    if % = 1 print $x+"Error while getting network registration status\n" goto end_pin_unlock
    if % = 2 gosub cme_error print $x+"Error "+$e+" while getting network registration status\n" goto end_pin_unlock
    if % = 3 print $x+"Command not supported\n" goto end_pin_unlock
    get 1 "," $i1
    if % != 0 goto comm_timeout
    get 1 "^m^mOK^m" $i2
    if % != 0 goto comm_timeout
    let $d="Unknown modem response ("+$i2+")"
    if $i2 = "0" waitquiet 1 5 goto wait_for_reg
    if $i2 = "1" goto end_pin_unlock
    if $i2 = "2" waitquiet 1 5 goto wait_for_reg
    if $i2 = "3" let $d="Registration rejected"
    if $i2 = "4" let $d="Unknown reasons"
    if $i2 = "5" goto end_pin_unlock
    print $x+"- error: "+$d+"\n"
    goto abort
:end_pin_unlock

# Getting device information
    print $x+"Getting device information\n"
    waitquiet 1 0.2 
    send "AT+CGMI^m"
    get 1 "^mOK^m" $i1
    if % != 0 goto comm_timeout
    waitquiet 1 0.1
    send "AT+CGMM^m"
    get 1 "^mOK^m" $i2
    if % != 0 goto comm_timeout
    waitquiet 1 0.1 
    send "AT+CGMR^m"
    get 1 "^mOK^m" $i3
    if % != 0 goto comm_timeout
    waitquiet 1 0.1
    send "AT+CGSN^m"
    get 1 "^mOK^m" $i4
    if % != 0 goto comm_timeout
    if len($i1)>1 let $i1=$right($i1,len($i1)-1)
    if len($i2)>1 let $i2=$right($i2,len($i2)-1)
    if len($i3)>1 let $i3=$right($i3,len($i3)-1)
    if len($i4)>1 let $i4=$right($i4,len($i4)-1)
    print $x+"- modem: "+$toupper($i1)+" "+$toupper($i2)+"\n"
    print $x+"- firmware: "+$i3+"\n"
    print $x+"- IMEI: "+$i4+"\n"

# Getting received signal strength
    print $x+"Getting received signal strength\n"
    send "AT+CSQ^m"
    waitfor 5 "+CSQ: ","ERROR","+CME ERROR: ","COMMAND NOT SUPPORT"
    if % = -1 goto comm_timeout
    if % = 1 print $x+"Error while getting received signal strength\n" goto end_sigstr
    if % = 2 gosub cme_error print $x+"Error "+$e+" while getting received signal strength\n" goto end_sigstr
    get 1 "," $i1
    if % != 0 goto comm_timeout
    get 1 "^mOK^m" $i2
    if % != 0 goto comm_timeout
    if $i1 = "99" print $x+"- signal strength: unknown\n" goto end_sigstr
    let s1=val($i1)
    let s2=(s1*2)-113 
    let s3=((s1*100000)/31000)
    print $x+"- signal strength: (",s1,"), ",s2," dBm, ",s3,"%\n"
    let s3=s3/2
    let $s3=$left("##################################################",s3)
    let $s3=$s3+$right("----1----2----3----5----5----6----7----8----9----$",50-s3)
    print $x+"- level: ["+$s3+"]\n"
:end_sigstr

# Checking modem for NDIS support
    print $x+"Checking modem for NDIS support\n"
    send "AT\^DIALMODE?^m" 
    waitfor 5 "\^DIALMODE:","ERROR","+CME ERROR: ","COMMAND NOT SUPPORT"
    if % = -1 goto comm_timeout
    if % > 0 print $x+"- This modem doesn't support NDIS mode\n" goto abort
    get 1 "^mOK^m" $i1
    if % != 0 goto comm_timeout
    let $i1=$left($i1,1)
    if $i1 = "1" goto ok_ndis_check
    if $i1 = "2" goto ok_ndis_check
    print $x+"- This modem doesn't support NDIS mode\n"
    goto abort
:ok_ndis_check
    print $x+"- NDIS mode is supported by this modem\n"
    waitquiet 1 1

# Getting system information
    print $x+"Getting system information\n"
:do_sysinfoex
    send "AT\^SYSINFOEX^m"
    waitfor 5 "\^SYSINFOEX:","ERROR","+CME ERROR: ","COMMAND NOT SUPPORT"
    if % = -1 goto comm_timeout
    if % = 1 goto end_sysinfoex
    if % = 2 gosub cme_error goto end_sysinfoex
    if % = 3 goto end_sysinfoex
    get 1 "," $i1
    if % != 0 goto comm_timeout
    get 1 "," $i2
    if % != 0 goto comm_timeout
    get 1 "," $i3
    if % != 0 goto comm_timeout
    get 1 "," $i4
    if % != 0 goto comm_timeout
    get 1 "," $i5
    if % != 0 goto comm_timeout
    get 1 "," $i6
    if % != 0 goto comm_timeout
    get 1 "," $i7
    if % != 0 goto comm_timeout
    get 1 "," $i8
    if % != 0 goto comm_timeout
    get 1 "^mOK^m" $i9
    if % != 0 goto comm_timeout
    let $d="Unknown modem response ("+$i1+")"
    if $i1 = "0" let $d="No service"
    if $i1 = "1" let $d="Restricted service"
    if $i1 = "2" let $d="Valid service"
    if $i1 = "3" let $d="Restricted regional service"
    if $i1 = "4" let $d="Power-saving and deep sleep state"
    print $x+"- service state: "+$d+"\n"
    let $d="Unknown modem response ("+$i2+")"
    if $i2 = "0" let $d="No service"
    if $i2 = "1" let $d="Only CS service"
    if $i2 = "2" let $d="Only PS service"
    if $i2 = "3" let $d="PS+CS service"
    if $i2 = "4" let $d="CS and PS not registered, searching"
    print $x+"- domain: "+$d+"\n"    
    let $d="Unknown modem response ("+$i3+")"
    if $i3 = "0" let $d="Non roaming state"
    if $i3 = "1" let $d="Roaming state"
    print $x+"- roaming: "+$d+"\n"
    let $d="Unknown modem response ("+$i4+")"
    if $i4 = "0" let $d="Invalid USIM card state or pin code locked"
    if $i4 = "1" let $d="Valid USIM card state"
    if $i4 = "2" let $d="USIM is invalid in case of CS"
    if $i4 = "3" let $d="USIM is invalid in case of PS"
    if $i4 = "4" let $d="USIM is invalid in case of either CS or PS"
    if $i4 = "240" let $d="ROMSIM"
    if $i4 = "255" let $d="USIM card is not existent"
    print $x+"- SIM: "+$d+"\n"
    let $d="Unknown modem response ("+$i6+")"
    if $i7 != "" let d$=$i7 let $i6=""
    if $i6 = "0" let $d="No service"
    if $i6 = "1" let $d="GSM"
    if $i6 = "2" let $d="CDMA"
    if $i6 = "3" let $d="WCDMA"
    if $i6 = "4" let $d="TD-SCDMA"
    if $i6 = "5" let $d="WIMAX"
    if $i6 = "6" let $d="LTE"
    print $x+"- mode: "+$d+"\n"
    let $d="Unknown modem response ("+$i8+")"
    if $i9 != "" let d$=$i9 let $i8=""
    if $i8 = "0" let $d="No service"
    if $i8 = "1" let $d="GSM"
    if $i8 = "2" let $d="GPRS"
    if $i8 = "3" let $d="EDGE"
    if $i8 = "21" let $d="IS95A"
    if $i8 = "22" let $d="IS95B"
    if $i8 = "23" let $d="CDMA2000 1X"
    if $i8 = "24" let $d="EVDO Rel0"
    if $i8 = "25" let $d="EVDO RelA"
    if $i8 = "26" let $d="EVDO RelB"
    if $i8 = "27" let $d="HYBRID (CDMA2000 1X)"
    if $i8 = "28" let $d="HYBRID (EVDO Rel0)"
    if $i8 = "29" let $d="HYBRID (EVDO RelA)"
    if $i8 = "30" let $d="HYBRID (EVDO RelB)"
    if $i8 = "41" let $d="WCDMA"
    if $i8 = "42" let $d="HSDPA"
    if $i8 = "43" let $d="HSUPA"
    if $i8 = "44" let $d="HSPA"
    if $i8 = "45" let $d="HSPA+"
    if $i8 = "46" let $d="DC-HSPA+"
    if $i8 = "61" let $d="TD-SCDMA"
    if $i8 = "62" let $d="HSDPA"
    if $i8 = "63" let $d="HSUPA"
    if $i8 = "64" let $d="HSPA"
    if $i8 = "65" let $d="HSPA+"
    if $i8 = "81" let $d="802.16e"
    if $i8 = "101" let $d="LTE"
    print $x+"- sub mode: "+$d+"\n"
    # Invalid state do finish
    if $i2 = "1" goto abort
    if $i4 = "0" goto abort
    if $i4 = "3" goto finish
    if $i4 = "4" goto finish
    if $i4 = "255" goto finish
    # Invalid state do restart_modem
    if $i1 = "0" goto restart_modem
    if $i1 = "4" goto restart_modem
    if $i2 = "0" goto restart_modem
    if $i2 = "4" goto restart_modem
    if $i6 = "0" goto restart_modem
    goto end_sysinfo
:end_sysinfoex

:do_sysinfo
    send "AT\^SYSINFO^m"
    waitfor 5 "\^SYSINFO:","ERROR","+CME ERROR: ","COMMAND NOT SUPPORT"
    if % = -1 goto comm_timeout
    if % = 1 print $x+"Error while getting system information\n" goto end_sysinfo
    if % = 2 gosub cme_error print $x+"Error "+$e+" while getting system information\n" goto end_sysinfo
    if % = 3 print $x+"Command not supported\n" goto end_sysinfo
    get 1 "," $i1
    if % != 0 goto comm_timeout
    get 1 "," $i2
    if % != 0 goto comm_timeout
    get 1 "," $i3
    if % != 0 goto comm_timeout
    get 1 "," $i4
    if % != 0 goto comm_timeout
    get 1 "^mOK^m" $i5
    if % != 0 goto comm_timeout
    if len($i5)>3 let $i6=$right($i5,1)
    let $i5=$left($i5,1)
    let $d="Unknown modem response ("+$i1+")"
    if $i1 = "0" let $d="No service"
    if $i1 = "1" let $d="Restricted service"
    if $i1 = "2" let $d="Valid service"
    if $i1 = "3" let $d="Restricted regional service"
    if $i1 = "4" let $d="Power-saving and deep sleep state"
    print $x+"- service state: "+$d+"\n"
    let $d="Unknown modem response ("+$i2+")"
    if $i2 = "0" let $d="No service"
    if $i2 = "1" let $d="Only CS service"
    if $i2 = "2" let $d="Only PS service"
    if $i2 = "3" let $d="PS+CS service"
    if $i2 = "4" let $d="CS and PS not registered, searching"
    print $x+"- domain: "+$d+"\n"    
    let $d="Unknown modem response ("+$i3+")"
    if $i3 = "0" let $d="Non roaming state"
    if $i3 = "1" let $d="Roaming state"
    print $x+"- roaming: "+$d+"\n"
    let $d="Unknown modem response ("+$i4+")"
    if $i4 = "0" let $d="No service"
    if $i4 = "1" let $d="AMPS"
    if $i4 = "2" let $d="CDMA"
    if $i4 = "3" let $d="GSM/GPRS"
    if $i4 = "4" let $d="HDR"
    if $i4 = "5" let $d="WCDMA"
    if $i4 = "6" let $d="GPS"
    if $i4 = "7" let $d="GSM/WCDMA"
    if $i4 = "8" let $d="CDMA/HDR HYBRID"
    if $i4 = "15" let $d="TD-SCDMA"
    print $x+"- mode: "+$d+"\n"
    let $d="Unknown modem response ("+$i5+")"
    if $i5 = "0" let $d="Invalid USIM card state or pin code locked"
    if $i5 = "1" let $d="Valid USIM card state"
    if $i5 = "2" let $d="USIM is invalid in case of CS"
    if $i5 = "3" let $d="USIM is invalid in case of PS"
    if $i5 = "4" let $d="USIM is invalid in case of either CS or PS"
    if $i5 = "255" let $d="USIM card is not existent"
    print $x+"- SIM: "+$d+"\n"
    let $d="Unknown modem response ("+$i6+")"
    if $i6 = "0" let $d="No service"
    if $i6 = "1" let $d="GSM"
    if $i6 = "2" let $d="GPRS"
    if $i6 = "3" let $d="EDGE"
    if $i6 = "4" let $d="WCDMA"
    if $i6 = "5" let $d="HSDPA"
    if $i6 = "6" let $d="HSUPA"
    if $i6 = "7" let $d="HSDPA and HSUPA"
    if $i6 = "8" let $d="TD_SCDMA"
    if $i6 = "9" let $d="HSPA+"
    if $i6 = "17" let $d="HSPA+(64QAM)"
    if $i6 = "18" let $d="HSPA+(MIMO)"
    print $x+"- sub mode: "+$d+"\n"
    # Invalid state do finish
    if $i2 = "1" goto abort
    if $i5 = "0" goto abort
    if $i5 = "3" goto finish
    if $i5 = "4" goto finish
    if $i5 = "255" goto finish
    # Invalid state do restart_modem
    if $i1 = "0" goto restart_modem
    if $i1 = "4" goto restart_modem
    if $i2 = "0" goto restart_modem
    if $i2 = "4" goto restart_modem
    if $i4 = "0" goto restart_modem
:end_sysinfo

# Getting network registration status
    print $x+"Getting network registration status\n"
    let $i2=""
    send "AT+CGREG=2; +CGREG?^m"
    waitfor 2 "+CGREG: ","ERROR","+CME ERROR: ","COMMAND NOT SUPPORT"
    if % = -1 goto comm_timeout
    if % = 1 print $x+"Error while getting network registration status\n" goto end_cgreg
    if % = 2 gosub cme_error print $x+"Error "+$e+" while getting network registration status\n" goto end_cgreg
    if % = 3 print $x+"Command not supported\n" goto end_cgreg
    get 1 "," $i1
    if % != 0 goto comm_timeout
    get 1 "^m^mOK^m" $i4
    if % != 0 goto comm_timeout
    let $i2=$left($i4,1)
    if len($i4)>2 let $i3=$mid($i4,2,len($i4)-2)
    let $d="Unknown modem response ("+$i2+")"
    if $i2 = "0" let $d="Not registered. The MS is not searching the new operators to be registered"
    if $i2 = "1" let $d="Local network is registered"
    if $i2 = "2" let $d="Not registered. But the MS is searching the new operators to be registered"
    if $i2 = "3" let $d="Registration rejected"
    if $i2 = "4" let $d="Unknown reasons"
    if $i2 = "5" let $d="Roaming network is registered"
    print $x+"- status: "+$d+"\n"
    print $x+"- lac, ci: "+$i3+"\n"
    send "AT+CGREG=0^m"
    waitfor 1 "OK","ERROR","+CME ERROR: ","COMMAND NOT SUPPORT"
    if % = -1 goto comm_timeout
    if % = 2 waitquiet 1 0.5
:end_cgreg

# Disable CME error report
    send "AT+CMEE=0^m"
    waitfor 5 "OK","ERROR","+CME ERROR: ","COMMAND NOT SUPPORT"
    if % = -1 goto comm_timeout

# Verify if the modem is connected to APN
    print $x+"Verify if the modem is connected to APN\n"
    send "AT\^DHCP?^m"
    waitfor 5 "\^DHCP:","ERROR","+CME ERROR: ","COMMAND NOT SUPPORT"
    if % = -1 goto comm_timeout
    if % = 0 print $x+"Modem is already connected\n" goto do_disconnect
    if % = 3 print $x+"Command not supported\n" goto abort
    print $x+"No connection detected\n"

# Disconnecting from current APN
goto end_disconnect
:do_disconnect
    print $x+"Disconnecting from current APN\n"
    send "AT\^NDISDUP=1,0^m"
    waitfor 5 "OK","ERROR","+CME ERROR: ","COMMAND NOT SUPPORT"
    if % = -1 goto comm_timeout
    if % = 1 print $x+"Error while disconnecting from current APN\n" goto abort
    if % = 2 gosub cme_error print $x+"Error "+$e+" while disconnecting from current APN\n" goto abort
    if % = 3 print $x+"Command not supported\n" goto abort
    print $x+"Disconnected successfully\n"
    waitquiet 1 0.5
:end_disconnect    

# Setting mode
    if $m = "" goto end_mode_set
    print $x+"Setting mode "+$m+"\n"
    send $m+"^m"
    waitfor 5 "OK","ERROR","+CME ERROR: ","COMMAND NOT SUPPORT"
    if % = -1 goto comm_timeout
    if % = 1 print $x+"Error while setting mode error\n" goto abort
    if % = 2 gosub cme_error print $x+"Error "+$e+" while setting mode error\n" goto abort
    if % = 3 print $x+"Command not supported\n" goto abort
    print $x+"Mode set successfully\n"
:end_mode_set

# Establishing connection
    print $x+"Try to establish connection via APN "+$a+"\n"
    send "AT\^NDISDUP=1,1,\""+$a+"\"^m" 
    waitfor 5 "OK","ERROR","+CME ERROR: ","COMMAND NOT SUPPORT"
    if % = -1 goto comm_timeout
    if % = 1 print $x+"Error while connecting\n" goto abort
    if % = 2 gosub cme_error print $x+"Error "+$e+" while connecting\n" goto abort
    if % = 3 print $x+"Command not supported\n" goto abort
    print $x+"Waiting for establish connection\n"
    let r3=0
:wait_for_connection    
    let r3=r3+1
    if r3>30 goto restart_modem
    send "AT\^DHCP?^m"
    waitfor 5 "\^DHCP:","ERROR","+CME ERROR: ","COMMAND NOT SUPPORT"
    if % = -1 goto comm_timeout
    if % = 0 print $x+"Connection established\n" goto finish
    if % = 1 waitquiet 1 1 goto wait_for_connection
    if % = 2 waitquiet 1 1 goto wait_for_connection
    if % = 3 print $x+"Command not supported\n" goto abort

# In case of normal exit
:finish
    print $x+"Done.\n"
    exit 0

# In case of occurred an error
:abort
    print $x+"Done!\n"
    exit 1

# Error CME routine
:cme_error
    get 1 "^m" $e
    let $e="'"+$e+"'"
    return

# Restarting modem and start all
:restart_modem
    let r1=r1+1
    if r1>5 print $x+"Number of restart retries was exhausted\n" goto abort
    print $x+"Restarting modem\n"
    waitquiet 2 2
    send "AT\^NDISDUP=1,0^m"
    waitquiet 2 1
    send "ATZ0^m"
    waitquiet 2 1
    send "AT&F^m"
    waitquiet 2 1
    send "AT+CFUN=1,1^m"
    waitquiet 2 1
    goto start

# Timeout detected
:comm_timeout
    print $x+"Modem is not responding, timeout detected\n"
    goto restart_modem
# Done
install.sh - Aktualizacja systemu, sysinfo.sh - Info.o systemie, openvpn-auth.sh - Login dla OpenVPN
Tu moje skrypty na GitHub

57

Odp: Modemy 3G w trybie NDIS/CDC i multiwan inaczej

Wypróbowałem skrypty Rafała dla poniższej konfiguracji, efekt końcowy zadowalający.

Router: TP-Link TL-WR842N/ND v1 Gargoyle 1.5.9.2 (r35228), by obsy
Modem: HUAWEI E3276
Internet: Cyfrowy Polsat LTE
Skrypt 3gtester: Establishing 3G modem connection in dialup or NDIS mode Script version 1.07 Rafal Drzymala 2012
Skrypt ndisup.gcom: Establishing 3G modem connection in NDIS mode Script for comgt version 1.05 Rafal Drzymala 2012

Zadziałało po zmiane w skrypcie ndisup.gcom w sekcji "Restarting modem and start all" linia 487 - według oryginalnego skryptu:

send "AT\^NDISDUP=1,0^m"

zmieniłem na:

send "AT\^NDISDUP=1,1^m"

.
Przed ta zmiana modem się łączył (? dioda świeciła stale) ale nie pobierał adresów dla interfejsu wwan0.

Moje obecne ustawienia

root@Gargoyle:~# cat /etc/config/network

config interface 'loopback'
        option ifname 'lo'
        option proto 'static'
        option ipaddr '127.0.0.1'
        option netmask '255.0.0.0'

config interface 'lan'
        option ifname 'eth0'
        option type 'bridge'
        option proto 'static'
        option netmask '255.255.255.0'
        option ipaddr '192.168.20.1'

config interface 'wan'
        option auto '0'
        option proto 'dhcp'
        option ifname 'wwan0'
        option comm '/dev/ttyUSB0'
        option mode 'AT^NDISDUP=1,1'
        option apn 'internet.cp'
        option rebootafter '900'

config switch
        option name 'eth0'
        option reset '1'
        option enable_vlan '1'

config switch_vlan
        option device 'eth0'
        option vlan '1'
        option ports '0 1 2 3 4'

root@Gargoyle:~# cat /etc/rc.local
# Put your custom commands here that should be executed once
# the system init finished. By default this file does nothing.
sleep 5
/sbin/3gtester3
exit 0
TL-WDR3600
TL-WR1043ND
TL-WR842ND

58

Odp: Modemy 3G w trybie NDIS/CDC i multiwan inaczej

Niestety nie mam takiego modemu, więc nie przetestuję.
Umieściłeś w sekcji config interface 'wan' w parametrze mode komendę 'AT^NDISDUP=1,1'. W takiej sytuacji skrypt ndisup.gcom wysyła do modemu dwa razy tą komendę, i jego zachowanie może być dziwne.
Moim założeniem było, aby parametr mode był uzywany do ustawiania takich parametrów modemu jak np. uzywane pasma, roaming, tryby transmisji. (np. AT^SYSCFG=2,2,3FFFFFFF,2,1)

install.sh - Aktualizacja systemu, sysinfo.sh - Info.o systemie, openvpn-auth.sh - Login dla OpenVPN
Tu moje skrypty na GitHub

59

Odp: Modemy 3G w trybie NDIS/CDC i multiwan inaczej

To ostatnie wersjie skryptów:

Skrypt /bin/3gtester.sh

#!/bin/sh
# Establishing 3G modem connection in dialup or NDIS mode
# Script version 1.09 Rafal Drzymala 2012,2013
#
# Changelog
#    1.00    RD    First stable code
#    1.01    RD    Prevent from parallel comgt/gcom execution
#    1.02    RD    Added logger priority, redirect comgt/gcom to logger
#    1.03    RD    Changed ICMP monitoring, use device, multiwan or default dns
#    1.04    RD    Changed ICMP data size to 1 byte
#    1.05    RD    Changed log messages, added wwan interface detection (frutis suggestion)
#    1.06    RD    Added router auto-reboot after connection timeout detected (if rebootafter option in network present)
#    1.07    RD    Added reboots log
#    1.08    RD    Improve reboot rutine
#    1.09    RD    Small improvements
#
SCR=$(basename $0)
DEF_ICMP="8.8.8.8 8.8.4.4"
COMGT_APP="gcom"
NDISUP="/etc/gcom/ndisup.gcom"
FPATH="/usr/data/"
if ! which "$COMGT_APP" >/dev/null; then
    logger -p user.error -t $SCR "Application $COMGT_APP does not exist"
    exit
fi
[ -e "$NDISUP" ] ||    logger -p user.notice -t $SCR "Script $NDISUP does not exist"
[ -e "$FPATH" ] || mkdir -p $FPATH 
WANS=$(uci show network | awk -F[.=] '{if (($3=="proto" && $4=="3g") || ($3=="ifname" && (match($4,"usb[0-9]") || match($4,"wwan[0-9]")))) print $2}')
for WAN in $WANS; do
    NDIS="N"
    UPTIME=$(cut -d "." -f1 /proc/uptime)
    NOW=$(date -u +"%Y.%m.%d-%H:%M:%S %s")
    [ $(uci -q get network.$WAN.proto) != "3g" ] && NDIS="Y"
    DEV_IFNAME=$(uci -q get network.$WAN.ifname)
    DEV_APN=$(uci -q get network.$WAN.apn)
    DEV_PINCODE=$(uci -q get network.$WAN.pincode)
    DEV_MODE=$(uci -q get network.$WAN.mode)
    DEV_REBOOTAFTER=$(uci -q get network.$WAN.rebootafter)
    [ "$NDIS" == "Y" ] && DEV_COMM=$(uci -q get network.$WAN.comm)
    [ "$NDIS" == "N" ] && DEV_COMM=$(uci -q get network.$WAN.device)
    DEV_AUTO="1"
    [ "$NDIS" == "N" ] && DEV_AUTO=$(uci -q get network.$WAN.auto)
    DEV_ICMP=$(uci -q get network.$WAN.dns)
    [ "$DEV_ICMP" == "" ] && DEV_ICMP=$(uci -q get multiwan.$WAN.dns)
    [ "$DEV_ICMP" == "" ] && DEV_ICMP=$DEF_ICMP
    logger -p user.notice -t $SCR "Checking for active connection $WAN ($DEV_IFNAME) attempting to ping $DEV_ICMP"
    if [ "$DEV_AUTO" == "1" ]; then
        if [ -e $DEV_COMM ]; then
            echo "$NOW $UPTIME" >$FPATH$SCR.$WAN.check
            for ICMP in $DEV_ICMP; do
                if ping -q -c 1 -W 2 -s 1 -I $DEV_IFNAME $ICMP &>/dev/null; then
                    ICMP_OK=$ICMP
                    break
                fi
            done
            if [ "$ICMP_OK" != "" ]; then
                logger -p user.notice -t $SCR "ICMP successfully sent via $WAN ($DEV_IFNAME) to $ICMP_OK"
                echo "$NOW $UPTIME" >$FPATH$SCR.$WAN.ok
            else
                logger -p user.notice -t $SCR "Restarting connection $WAN ($DEV_IFNAME) using device $DEV_COMM and apn $DEV_APN"
                [ "$DEV_MODE" != "" ] && logger -p user.notice -t $SCR "Using additional modem command $DEV_MODE"
                if [ "$NDIS" == "N" ]; then
                    (ifdown $WAN; sleep 2; ifup $WAN) &
                else
                    COMGT_DEV="-d $DEV_COMM"
                    COMGT_SCR="-s $NDISUP"
                    if pgrep -l -f "$COMGT_APP $COMGT_DEV $COMGT_SCR"> /dev/null; then
                        logger -p user.notice -t $SCR "Connection $WAN ($DEV_IFNAME) is already restarted"
                    elif pgrep -l -f "$COMGT_APP $COMGT_DEV"> /dev/null; then
                        logger -p user.notice -t $SCR "Device $DEV_COMM used by another instance of $COMGT_APP"
                    elif ([ "$DEV_COMM" == "/dev/ttyUSB2" ] || [ "$DEV_COMM" == "/dev/noz2" ] || [ "$DEV_COMM" == "/dev/modem" ]) && pgrep -l -f  "$COMGT_APP" | grep -q -v "\-d"> /dev/null; then
                        logger -p user.notice -t $SCR "Device $DEV_COMM used by another instance of $COMGT_APP"
                    else
                        (ifdown $WAN; PINCODE=$DEV_PINCODE APN=$DEV_APN MODE=$DEV_MODE $COMGT_APP $COMGT_DEV $COMGT_SCR | logger -p user.notice -t $COMGT_APP; sleep 2; ifup $WAN) &
                    fi
                fi
            fi
            if [ "$DEV_REBOOTAFTER" != "" ] && [ "$UPTIME" -ge "$DEV_REBOOTAFTER" ]; then
                LAST_ICMP_CHK=$(cut -d " " -f2 $FPATH$SCR.$WAN.check)
                LAST_ICMP_OK=$(cut -d " " -f2 $FPATH$SCR.$WAN.ok)
                if [ "$LAST_ICMP_CHK" != "" ] && [ "$LAST_ICMP_OK" != "" ] && [ "$LAST_ICMP_CHK" -ge "$LAST_ICMP_OK" ]; then
                    SINCE_ICMP_OK=$(($LAST_ICMP_CHK-$LAST_ICMP_OK))
                    [ "$SINCE_ICMP_OK" -gt "0" ] && logger -p user.notice -t $SCR "Lapsing $SINCE_ICMP_OK second(s) since the last sent the correct ICMP"
                    if [ "$UPTIME" -ge "$DEV_REBOOTAFTER" ] && [ "$SINCE_ICMP_OK" -ge "$DEV_REBOOTAFTER" ]; then
                        logger -p user.notice -t $SCR "Device $WAN ($DEV_IFNAME) reboot timeout detected, rebooting router..."
                        echo "$NOW $UPTIME $WAN" >>$FPATH$SCR.reboots
                        reboot
                    fi
                fi
            fi
        else
            logger -p user.error -t $SCR "Device $DEV_COMM for $WAN not exist"
        fi
    fi
done
# Done

Skrypt /etc/gcom/ndisup.gcom

opengt
    let $x="ndisup:"+$basename($dev())+" "
    print $x+"Establishing 3G modem connection in NDIS mode\n"
    print $x+"Script for comgt version 1.07 Rafal Drzymala 2012\n"
#
# Changelog
#    1.00    RD    First stable code
#    1.01    RD    Moved "Getting received signal strength" section
#            Reset command changed from ATZ to ATZ0
#            Changed wait time for establish connection from 20 to 30 secs
#    1.02    RD    Changed signal level bar
#    1.03    RD    Added support for SYSINFOEX modem command
#    1.04    RD    Moved "Checking for password input request" section (frutis suggestion)
#    1.05    RD    Reset command changed AT+CFUN=1 to AT+CFUN=1,1
#            Corrected decode result of AT^SYSINFOEX modem command (frutis suggestion)
#    1.06    RD    Improvements dialog with modem
#            Changed waiting for establish connection rutine
#            Changed waiting for restart modem
#    1.07    RD    Improvements restart modem
#            
#
# Modem succesfuly tested
# - HUAWEI E173        11.126.85.00.209
# Modem tested, not supported 
# - HUAWEI E160G    11.608.02.02.55
# - HUAWEI E160        11.604.09.00.00
# - HUAWEI E220
#
    set com 115200n81
    set ignorecase on
    set comecho off
    set senddelay 0.02

    let $a=$env("APN")
    if $a = "" let $a=$env("COMGTAPN")
    if $a = "" print $x+"APN or COMGTAPN environment var not specified\n" goto finish    
    let $m=$env("MODE")
    let $p=$env("PINCODE")
    if $p = "" let $p=$env("COMGTPIN")
    let r1=1

:start
# Initializing communication with modem
    if r1 = 1 print $x+"Try to communicate with modem\n"
    if r1 > 1 print $x+"Again try to communicate with modem (",r1,")\n"
    waitquiet 1 0.5
    send "ATQ0; E0^m"
    waitfor 1 "OK^m^j","ERROR^m^j","+CME ERROR: ","COMMAND NOT SUPPORT^m^j"
    if % = -1 goto comm_timeout
    if % = 1 print $x+"Error while setting modem (1)\n"
    if % = 2 gosub cme_error print $x+"Error "+$e+" while setting modem (1)\n"
    if % = 3 print $x+"Command not supported (1)\n"
    send "AT+CMEE=2^m"
    waitfor 1 "OK^m^j","ERROR^m^j","+CME ERROR: ","COMMAND NOT SUPPORT^m^j"
    if % = -1 goto comm_timeout
    if % = 1 print $x+"Error while setting modem (2)\n"
    if % = 2 gosub cme_error print $x+"Error "+$e+" while setting modem (2)\n"
    if % = 3 print $x+"Command not supported (2)\n"
    send "AT\^CURC=0^m"
    waitfor 1 "OK^m^j","ERROR^m^j","+CME ERROR: ","COMMAND NOT SUPPORT^m^j"
    if % = -1 goto comm_timeout
    if % = 1 print $x+"Error while setting modem (3)\n"
    if % = 2 gosub cme_error print $x+"Error "+$e+" while setting modem (3)\n"
    if % = 3 print $x+"Command not supported (3)\n"

# Checking for password input request
    print $x+"Checking for password input request\n"
    let u=0
    send "AT+CPIN?^m"
    waitfor 5 "+CPIN: ","ERROR^m^j","+CME ERROR: ","COMMAND NOT SUPPORT^m^j"
    if % = -1 goto comm_timeout
    if % = 1 print $x+"Error while checking for password input request\n" goto end_chkpin
    if % = 2 gosub cme_error print $x+"Error "+$e+" while checking for password input request\n" goto end_chkpin
    if % = 3 print $x+"Command not supported\n" goto end_chkpin
    get 1 "^m" $i1
    if % != 0 goto comm_timeout
    waitfor 1 "OK^m^j"
    if % = -1 goto comm_timeout
    let $d="Unknown modem response ("+$i1+")"
    if $i1 = "READY" let $d="MT without password input request"
    if $i1 = "SIM PIN" let $d="UICC/SIM PIN password request"
    if $i1 = "SIM PUK" let $d="UICC/SIM PUK password request, to unblock the SIM PIN which was blocked for 3 verification failure"
    if $i1 = "SIM PIN2" let $d="PIN2 password request"
    if $i1 = "SIM PUK2" let $d="PUK2 password request, to unblock the SIM PIN2 which was blocked for 3 verification failure"
    if $i1 = "PH-SIM PIN" let $d="SIM lock (phone-to-SIM) is required"
    if $i1 = "PH-NET PIN" let $d="Network personnalisation is required"
    print $x+"- state: "+$d+"\n"
    if $i1 = "SIM PIN" goto do_pin_unlock
    if $i1 <> "READY" goto finish
:end_chkpin

# Unlock the PIN 
    goto end_pin_unlock
:do_pin_unlock
    print $x+"UICC/SIM unlocking by PIN\n"
    if $p = "" print $x+"PINCODE or COMGTPIN environment variable not specified\n" goto abort
    send "AT+CPIN="+$p"^m"
    waitfor 5 "OK^m^j","ERROR^m^j","+CME ERROR: ","COMMAND NOT SUPPORT^m^j"
    if % = -1 goto comm_timeout
    if % = 1 print $x+"Error while unlocking by PIN\n" goto abort
    if % = 2 gosub cme_error print $x+"Error "+$e+" while unlocking by PIN\n" goto abort
    if % = 3 print $x+"Command not supported\n" goto abort
    print $x+"UICC/SIM unlocked successfully\n"
    let r2=0
:wait_for_reg
    let r2=r2+1
    if r2>5 print $x+"Number of retries exhausted\n" goto abort
    print $x+"Waiting for network registration (",r2,")\n"
    send "AT+CGREG=0; +CGREG?^m"
    waitfor 2 "+CGREG: ","ERROR^m^j","+CME ERROR: ","COMMAND NOT SUPPORT^m^j"
    if % = -1 goto comm_timeout
    if % = 1 print $x+"Error while getting network registration status\n" goto end_pin_unlock
    if % = 2 gosub cme_error print $x+"Error "+$e+" while getting network registration status\n" goto end_pin_unlock
    if % = 3 print $x+"Command not supported\n" goto end_pin_unlock
    get 1 "," $i1
    if % != 0 goto comm_timeout
    get 1 "^m" $i2
    if % != 0 goto comm_timeout
    waitfor 1 "OK^m^j"
    if % = -1 goto comm_timeout
    let $i2=$left($i2,1)
    let $d="Unknown modem response ("+$i2+")"
    if $i2 = "0" goto wait_for_reg
    if $i2 = "1" goto end_pin_unlock
    if $i2 = "2" goto wait_for_reg
    if $i2 = "3" let $d="Registration rejected"
    if $i2 = "4" let $d="Unknown reasons"
    if $i2 = "5" goto end_pin_unlock
    print $x+"- error: "+$d+"\n"
    goto abort
:end_pin_unlock

# Getting device information
    print $x+"Getting device information\n"

    send "AT+CGMI^m"
    waitfor 1 "^m^j"
    if % = -1 goto comm_timeout
    get 1 "^m" $i1
    if % != 0 goto comm_timeout
    waitfor 1 "OK^m^j"
    if % = -1 goto comm_timeout

    send "AT+CGMM^m"
    waitfor 1 "^m^j"
    if % = -1 goto comm_timeout
    get 1 "^m" $i2
    if % != 0 goto comm_timeout
    waitfor 1 "OK^m^j"
    if % = -1 goto comm_timeout

    send "AT+CGMR^m"
    waitfor 1 "^m^j"
    if % = -1 goto comm_timeout
    get 1 "^m" $i3
    if % != 0 goto comm_timeout
    waitfor 1 "OK^m^j"
    if % = -1 goto comm_timeout

    send "AT+CGSN^m"
    waitfor 1 "^m^j"
    if % = -1 goto comm_timeout
    get 1 "^m" $i4
    if % != 0 goto comm_timeout
    waitfor 1 "OK^m^j"
    if % = -1 goto comm_timeout

    print $x+"- modem: "+$toupper($i1)+" "+$toupper($i2)+"\n"
    print $x+"- firmware: "+$i3+"\n"
    print $x+"- IMEI: "+$i4+"\n"
# 
#    system "export IMEI_"+$basename($dev())+"=\""+$i4+"\""


# Getting received signal strength
    print $x+"Getting received signal strength\n"
    send "AT+CSQ^m"
    waitfor 5 "+CSQ: ","ERROR^m^j","+CME ERROR: ","COMMAND NOT SUPPORT^m^j"
    if % = -1 goto comm_timeout
    if % = 1 print $x+"Error while getting received signal strength\n" goto end_sigstr
    if % = 2 gosub cme_error print $x+"Error "+$e+" while getting received signal strength\n" goto end_sigstr
    if % = 3 print $x+"Command not supported\n" goto end_sigstr
    get 1 "," $i1
    if % != 0 goto comm_timeout
    get 1 "^m" $i2
    if % != 0 goto comm_timeout
    waitfor 1 "OK^m^j"
    if % = -1 goto comm_timeout
    if $i1 = "99" print $x+"- signal strength: unknown\n" goto end_sigstr
    let s1=val($i1)
    let s2=(s1*2)-113 
    let s3=((s1*100000)/31000)
    print $x+"- signal strength: (",s1,"), ",s2," dBm, ",s3,"%\n"
    let s3=s3/2
    let $s3=$left("##################################################",s3)
    let $s3=$s3+$right("----1----2----3----5----5----6----7----8----9----$",50-s3)
    print $x+"- level: ["+$s3+"]\n"
:end_sigstr

# Checking modem for NDIS support
    print $x+"Checking modem for NDIS support\n"
    send "AT\^DIALMODE?^m" 
    waitfor 5 "\^DIALMODE:","ERROR^m^j","+CME ERROR: ","COMMAND NOT SUPPORT^m^j"
    if % = -1 goto comm_timeout
    if % = 2 gosub cme_error 
    if % > 0 print $x+"- This modem doesn't support NDIS mode\n" goto abort
    get 1 "^m" $i1
    if % != 0 goto comm_timeout
    let $i1=$left($i1,1)
    if $i1 = "1" goto ok_ndis_check
    if $i1 = "2" goto ok_ndis_check
    print $x+"- This modem doesn't support NDIS mode\n"
    goto abort
:ok_ndis_check
    print $x+"- NDIS mode is supported by this modem\n"

# Getting system information
    print $x+"Getting system information\n"
:do_sysinfoex
    send "AT\^SYSINFOEX^m"
    waitfor 5 "\^SYSINFOEX:","ERROR^m^j","+CME ERROR: ","COMMAND NOT SUPPORT^m^j"
    if % = -1 goto comm_timeout
    if % = 1 goto end_sysinfoex
    if % = 2 gosub cme_error goto end_sysinfoex
    if % = 3 goto end_sysinfoex
    get 1 "," $i1
    if % != 0 goto comm_timeout
    get 1 "," $i2
    if % != 0 goto comm_timeout
    get 1 "," $i3
    if % != 0 goto comm_timeout
    get 1 "," $i4
    if % != 0 goto comm_timeout
    get 1 "," $i5
    if % != 0 goto comm_timeout
    get 1 "," $i6
    if % != 0 goto comm_timeout
    get 1 "," $i7
    if % != 0 goto comm_timeout
    get 1 "," $i8
    if % != 0 goto comm_timeout
    get 1 "^m" $i9
    if % != 0 goto comm_timeout
    waitfor 1 "OK^m^j"
    if % = -1 goto comm_timeout
    let $d="Unknown modem response ("+$i1+")"
    if $i1 = "0" let $d="No service"
    if $i1 = "1" let $d="Restricted service"
    if $i1 = "2" let $d="Valid service"
    if $i1 = "3" let $d="Restricted regional service"
    if $i1 = "4" let $d="Power-saving and deep sleep state"
    print $x+"- service state: "+$d+"\n"
    let $d="Unknown modem response ("+$i2+")"
    if $i2 = "0" let $d="No service"
    if $i2 = "1" let $d="Only CS service"
    if $i2 = "2" let $d="Only PS service"
    if $i2 = "3" let $d="PS+CS service"
    if $i2 = "4" let $d="CS and PS not registered, searching"
    print $x+"- domain: "+$d+"\n"    
    let $d="Unknown modem response ("+$i3+")"
    if $i3 = "0" let $d="Non roaming state"
    if $i3 = "1" let $d="Roaming state"
    print $x+"- roaming: "+$d+"\n"
    let $d="Unknown modem response ("+$i4+")"
    if $i4 = "0" let $d="Invalid USIM card state or pin code locked"
    if $i4 = "1" let $d="Valid USIM card state"
    if $i4 = "2" let $d="USIM is invalid in case of CS"
    if $i4 = "3" let $d="USIM is invalid in case of PS"
    if $i4 = "4" let $d="USIM is invalid in case of either CS or PS"
    if $i4 = "240" let $d="ROMSIM"
    if $i4 = "255" let $d="USIM card is not existent"
    print $x+"- SIM: "+$d+"\n"
    let $d="Unknown modem response ("+$i6+")"
    if $i7 != "" let d$=$i7 let $i6=""
    if $i6 = "0" let $d="No service"
    if $i6 = "1" let $d="GSM"
    if $i6 = "2" let $d="CDMA"
    if $i6 = "3" let $d="WCDMA"
    if $i6 = "4" let $d="TD-SCDMA"
    if $i6 = "5" let $d="WIMAX"
    if $i6 = "6" let $d="LTE"
    print $x+"- mode: "+$d+"\n"
    let $d="Unknown modem response ("+$i8+")"
    if $i9 != "" let d$=$i9 let $i8=""
    if $i8 = "0" let $d="No service"
    if $i8 = "1" let $d="GSM"
    if $i8 = "2" let $d="GPRS"
    if $i8 = "3" let $d="EDGE"
    if $i8 = "21" let $d="IS95A"
    if $i8 = "22" let $d="IS95B"
    if $i8 = "23" let $d="CDMA2000 1X"
    if $i8 = "24" let $d="EVDO Rel0"
    if $i8 = "25" let $d="EVDO RelA"
    if $i8 = "26" let $d="EVDO RelB"
    if $i8 = "27" let $d="HYBRID (CDMA2000 1X)"
    if $i8 = "28" let $d="HYBRID (EVDO Rel0)"
    if $i8 = "29" let $d="HYBRID (EVDO RelA)"
    if $i8 = "30" let $d="HYBRID (EVDO RelB)"
    if $i8 = "41" let $d="WCDMA"
    if $i8 = "42" let $d="HSDPA"
    if $i8 = "43" let $d="HSUPA"
    if $i8 = "44" let $d="HSPA"
    if $i8 = "45" let $d="HSPA+"
    if $i8 = "46" let $d="DC-HSPA+"
    if $i8 = "61" let $d="TD-SCDMA"
    if $i8 = "62" let $d="HSDPA"
    if $i8 = "63" let $d="HSUPA"
    if $i8 = "64" let $d="HSPA"
    if $i8 = "65" let $d="HSPA+"
    if $i8 = "81" let $d="802.16e"
    if $i8 = "101" let $d="LTE"
    print $x+"- sub mode: "+$d+"\n"
    # Invalid state do finish
    if $i2 = "1" goto abort
    if $i4 = "0" goto abort
    if $i4 = "3" goto finish
    if $i4 = "4" goto finish
    if $i4 = "255" goto finish
    # Invalid state do restart_modem
    if $i1 = "0" goto restart_modem
    if $i1 = "4" goto restart_modem
    if $i2 = "0" goto restart_modem
    if $i2 = "4" goto restart_modem
    if $i6 = "0" goto restart_modem
    goto end_sysinfo
:end_sysinfoex

:do_sysinfo
    send "AT\^SYSINFO^m"
    waitfor 5 "\^SYSINFO:","ERROR^m^j","+CME ERROR: ","COMMAND NOT SUPPORT^m^j"
    if % = -1 goto comm_timeout
    if % = 1 print $x+"Error while getting system information\n" goto end_sysinfo
    if % = 2 gosub cme_error print $x+"Error "+$e+" while getting system information\n" goto end_sysinfo
    if % = 3 print $x+"Command not supported\n" goto end_sysinfo
    get 1 "," $i1
    if % != 0 goto comm_timeout
    get 1 "," $i2
    if % != 0 goto comm_timeout
    get 1 "," $i3
    if % != 0 goto comm_timeout
    get 1 "," $i4
    if % != 0 goto comm_timeout
    get 1 "^m" $i5
    if % != 0 goto comm_timeout
    waitfor 1 "OK^m^j"
    if % = -1 goto comm_timeout
    if len($i5)>3 let $i6=$right($i5,1)
    let $i5=$left($i5,1)
    let $d="Unknown modem response ("+$i1+")"
    if $i1 = "0" let $d="No service"
    if $i1 = "1" let $d="Restricted service"
    if $i1 = "2" let $d="Valid service"
    if $i1 = "3" let $d="Restricted regional service"
    if $i1 = "4" let $d="Power-saving and deep sleep state"
    print $x+"- service state: "+$d+"\n"
    let $d="Unknown modem response ("+$i2+")"
    if $i2 = "0" let $d="No service"
    if $i2 = "1" let $d="Only CS service"
    if $i2 = "2" let $d="Only PS service"
    if $i2 = "3" let $d="PS+CS service"
    if $i2 = "4" let $d="CS and PS not registered, searching"
    print $x+"- domain: "+$d+"\n"    
    let $d="Unknown modem response ("+$i3+")"
    if $i3 = "0" let $d="Non roaming state"
    if $i3 = "1" let $d="Roaming state"
    print $x+"- roaming: "+$d+"\n"
    let $d="Unknown modem response ("+$i4+")"
    if $i4 = "0" let $d="No service"
    if $i4 = "1" let $d="AMPS"
    if $i4 = "2" let $d="CDMA"
    if $i4 = "3" let $d="GSM/GPRS"
    if $i4 = "4" let $d="HDR"
    if $i4 = "5" let $d="WCDMA"
    if $i4 = "6" let $d="GPS"
    if $i4 = "7" let $d="GSM/WCDMA"
    if $i4 = "8" let $d="CDMA/HDR HYBRID"
    if $i4 = "15" let $d="TD-SCDMA"
    print $x+"- mode: "+$d+"\n"
    let $d="Unknown modem response ("+$i5+")"
    if $i5 = "0" let $d="Invalid USIM card state or pin code locked"
    if $i5 = "1" let $d="Valid USIM card state"
    if $i5 = "2" let $d="USIM is invalid in case of CS"
    if $i5 = "3" let $d="USIM is invalid in case of PS"
    if $i5 = "4" let $d="USIM is invalid in case of either CS or PS"
    if $i5 = "255" let $d="USIM card is not existent"
    print $x+"- SIM: "+$d+"\n"
    let $d="Unknown modem response ("+$i6+")"
    if $i6 = "0" let $d="No service"
    if $i6 = "1" let $d="GSM"
    if $i6 = "2" let $d="GPRS"
    if $i6 = "3" let $d="EDGE"
    if $i6 = "4" let $d="WCDMA"
    if $i6 = "5" let $d="HSDPA"
    if $i6 = "6" let $d="HSUPA"
    if $i6 = "7" let $d="HSDPA and HSUPA"
    if $i6 = "8" let $d="TD_SCDMA"
    if $i6 = "9" let $d="HSPA+"
    if $i6 = "17" let $d="HSPA+(64QAM)"
    if $i6 = "18" let $d="HSPA+(MIMO)"
    print $x+"- sub mode: "+$d+"\n"
    # Invalid state do finish
    if $i2 = "1" goto abort
    if $i5 = "0" goto abort
    if $i5 = "3" goto finish
    if $i5 = "4" goto finish
    if $i5 = "255" goto finish
    # Invalid state do restart_modem
    if $i1 = "0" goto restart_modem
    if $i1 = "4" goto restart_modem
    if $i2 = "0" goto restart_modem
    if $i2 = "4" goto restart_modem
    if $i4 = "0" goto restart_modem
:end_sysinfo

# Getting network registration status
    print $x+"Getting network registration status\n"
    let $i2=""
    send "AT+CGREG=2; +CGREG?^m"
    waitfor 2 "+CGREG: ","ERROR^m^j","+CME ERROR: ","COMMAND NOT SUPPORT^m^j"
    if % = -1 goto comm_timeout
    if % = 1 print $x+"Error while getting network registration status\n" goto end_cgreg
    if % = 2 gosub cme_error print $x+"Error "+$e+" while getting network registration status\n" goto end_cgreg
    if % = 3 print $x+"Command not supported\n" goto end_cgreg
    get 1 "," $i1
    if % != 0 goto comm_timeout
    get 1 "^m" $i4
    if % != 0 goto comm_timeout
    waitfor 1 "OK^m^j"
    if % = -1 goto comm_timeout
    let $i2=$left($i4,1)
    if len($i4)>2 let $i3=$mid($i4,2,len($i4)-2)
    let $d="Unknown modem response ("+$i2+")"
    if $i2 = "0" let $d="Not registered. The MS is not searching the new operators to be registered"
    if $i2 = "1" let $d="Local network is registered"
    if $i2 = "2" let $d="Not registered. But the MS is searching the new operators to be registered"
    if $i2 = "3" let $d="Registration rejected"
    if $i2 = "4" let $d="Unknown reasons"
    if $i2 = "5" let $d="Roaming network is registered"
    print $x+"- status: "+$d+"\n"
    print $x+"- lac, ci: "+$i3+"\n"
    send "AT+CGREG=0^m"
    waitfor 1 "OK^m^j","ERROR^m^j","+CME ERROR: ","COMMAND NOT SUPPORT^m^j"
    if % = -1 goto comm_timeout
    if % = 2 gosub cme_error
:end_cgreg

# Disable CME error report
    send "AT+CMEE=0^m"
    waitfor 1 "OK^m^j","ERROR^m^j","+CME ERROR: ","COMMAND NOT SUPPORT^m^j"
    if % = -1 goto comm_timeout
    if % = 1 print $x+"Error while setting modem (4)\n"
    if % = 2 gosub cme_error print $x+"Error "+$e+" while setting modem (4)\n"
    if % = 3 print $x+"Command not supported (4)\n"
    
# Verify if the modem is connected to APN
    print $x+"Verify if the modem is connected to APN\n"
    send "AT\^DHCP?^m"
    waitfor 5 "\^DHCP:","ERROR^m^j","+CME ERROR: ","COMMAND NOT SUPPORT^m^j"
    if % = -1 goto comm_timeout
    if % = 0 print $x+"Modem is already connected\n" goto do_disconnect
    if % = 2 gosub cme_error
    if % = 3 print $x+"Command not supported\n" goto abort
    print $x+"No connection detected\n"
    goto end_disconnect
:do_disconnect
    waitfor 1 "OK^m^j"
    if % = -1 goto comm_timeout

# Disconnecting from current APN
    print $x+"Disconnecting from current APN\n"
    send "AT\^NDISDUP=1,0^m"
    waitfor 5 "OK^m^j","ERROR^m^j","+CME ERROR: ","COMMAND NOT SUPPORT^m^j"
    if % = -1 goto comm_timeout
    if % = 1 print $x+"Error while disconnecting from current APN\n" goto abort
    if % = 2 gosub cme_error print $x+"Error "+$e+" while disconnecting from current APN\n" goto abort
    if % = 3 print $x+"Command not supported\n" goto abort
    print $x+"Disconnected successfully\n"
:end_disconnect    

# Setting mode
    if $m = "" goto end_mode_set
    print $x+"Setting mode "+$m+"\n"
    send $m+"^m"
    waitfor 5 "OK^m^j","ERROR^m^j","+CME ERROR: ","COMMAND NOT SUPPORT^m^j"
    if % = -1 goto comm_timeout
    if % = 1 print $x+"Error while setting mode error\n" goto abort
    if % = 2 gosub cme_error print $x+"Error "+$e+" while setting mode error\n" goto abort
    if % = 3 print $x+"Command not supported\n" goto abort
    print $x+"Mode set successfully\n"
:end_mode_set

# Establishing connection
    print $x+"Try to establish connection via APN "+$a+"\n"
    send "AT\^NDISDUP=1,1,\""+$a+"\"^m" 
    waitfor 5 "OK^m^j","ERROR^m^j","+CME ERROR: ","COMMAND NOT SUPPORT^m^j"
    if % = -1 goto comm_timeout
    if % = 1 print $x+"Error while connecting\n" goto abort
    if % = 2 gosub cme_error print $x+"Error "+$e+" while connecting\n" goto abort
    if % = 3 print $x+"Command not supported\n" goto abort
    print $x+"Waiting for establish connection\n"
    let r3 = 0
:wait_for_connection    
    let r3 = r3+1
    if r3 > 45 goto restart_modem
    if r3&3 = 3 print $x+"Still waiting ",r3-1," second(s)...\n"
    if r3 > 1 waitquiet 10 1
    send "AT\^DHCP?^m"
    waitfor 5 "\^DHCP:","ERROR^m^j","+CME ERROR: ","COMMAND NOT SUPPORT^m^j"
    if % = -1 goto comm_timeout
    if % = 0 print $x+"Connection established\n" goto conn_established
    if % = 1 goto wait_for_connection
    if % = 2 gosub cme_error goto wait_for_connection
    if % = 3 print $x+"Command not supported\n" goto abort
:conn_established
    waitfor 1 "OK^m^j"
    if % = -1 goto comm_timeout
    goto finish
    
# In case of normal exit
:finish
    print $x+"Done.\n"
    exit 0

# In case of occurred an error
:abort
    print $x+"Done!\n"
    exit 1

# Error CME routine
:cme_error
    get 1 "^m" $e
    let $e="'"+$e+"'"
    get 1 "^j" $t
    return

# Restarting modem and start all
:restart_modem
    let r1 = r1+1
    if r1 > 5 print $x+"Number of restart retries was exhausted\n" goto restart_final
    print $x+"Restarting modem\n"
    waitquiet 2 2
    send "AT\^NDISDUP=1,0^m"
    waitquiet 2 1
    send "ATZ0^m"
    waitquiet 2 1
    send "AT&F^m"
    waitquiet 2 1
    send "AT+CFUN=1^m"
    waitquiet 2 1
    let r3 = 0
:restart_wait    
    let r3 = r3+1
    sleep 1
    if r3&3 = 3 print $x+"Still waiting ",r3," second(s)...\n"
    if r3 < 20 goto restart_wait
    goto start
:restart_final
    waitquiet 2 1
    send "AT+CFUN=1,1^m"
    waitquiet 2 1
    goto abort
    
# Timeout detected
:comm_timeout
    print $x+"Modem is not responding, timeout detected\n"
    goto restart_modem
# Done
install.sh - Aktualizacja systemu, sysinfo.sh - Info.o systemie, openvpn-auth.sh - Login dla OpenVPN
Tu moje skrypty na GitHub

60

Odp: Modemy 3G w trybie NDIS/CDC i multiwan inaczej

OK wypróbuje te nowe wersje skryptów.
Zmienię w sekcji wan jak napisałeś, teraz rozumie już o co chodzi.

W miejscu gdzie testowałem (bez anteny zewnętrznej) miałem zasięg LTE 68%, w miejscu faktycznej instalacji osiągam jedynie 35% po WCDMA - modem na dzień dziś ma problem z połączeniem (gołoledź, śnieg itp) Przy normalnych warunkach osiągałem jakieś 50% po WCDMA - rzadko kiedy łączył się po LTE. Może powinienem zmienić antenę komniową AK C2 aby wzmocnić sygnał. Macie jakieś sprawdzone?

TL-WDR3600
TL-WR1043ND
TL-WR842ND

61

Odp: Modemy 3G w trybie NDIS/CDC i multiwan inaczej

Co do anten mam dwa przypadki gdzie stosuję anteny z modemami E173u2:

  • Połączenie z Play, antena Dipol ATK 20/850-960 MHz, osiągam bez problemów maksimum dostępne 4Mb przy sygnale 50%, BTS odległy ok. 6-7 km zasłonięty lasem. Mimo wszelkich trudności łącze jest stabilne.

  • Połączenie z Play antena Dipol ATK-LOG GSM/DCS/UMTS/HSDPA, tu także maksimum 4Mb, sygnał na poziomie <50%, BTS odległy ok. 0,5 km, kontakt wzrokowy. Centrum miasta duże zakłócenia, ale łącze bardzo stabilne.

install.sh - Aktualizacja systemu, sysinfo.sh - Info.o systemie, openvpn-auth.sh - Login dla OpenVPN
Tu moje skrypty na GitHub

62

Odp: Modemy 3G w trybie NDIS/CDC i multiwan inaczej

Witam serdecznie, pomoże mi ktoś smile Mianowicie mam dwa modemy: e173 i e3131 oraz internet play online i orange free. Chce by internet korzystal z play online i w razie problemow przelaczyl sie na drugi modem orange free i po powrocie play online wrocil na niego. Nie mam doświadczenia z sieciami 3g i linuxem stad pytanie do was i OGROMNĄ PROŚBĘ Sprzęt to wdr3600 z garygoyle, nawet jeżeli by miał ktoś chwilę zrobić zdalnie byłbym wdzięczny bardzo smile Pozdrawiam

63 (edytowany przez him2k 2014-01-21 23:07:03)

Odp: Modemy 3G w trybie NDIS/CDC i multiwan inaczej

No więc wrzuciłem te skrypty i niestety dalej modem chyba zalicza zawiechy tak samo jak w trybie RAS cz NDIS nie może złapać sieci (mruga zielona dioda)
Mam tp-linka mr3220 zobacze czy nie lepiej restartowac modem wyłączając na nim zasilanie usb...

Wersje: 3gtester.sh        1.11
              ndisup.gcom      1.08
              openwrt AA

Jan 21 22:32:01 OpenWrt cron.info crond[890]: crond: USER root pid 10093 cmd /bin/3gtester.sh
Jan 21 22:32:02 OpenWrt user.notice 3gtester.sh: Checking for active connection wan (wwan0) attempting to ping 8.8.8.8 8.8.4.4
Jan 21 22:32:06 OpenWrt user.notice 3gtester.sh: Restarting connection wan (wwan0) using device /dev/ttyUSB2 and apn darmowy
Jan 21 22:32:06 OpenWrt user.notice 3gtester.sh: Using additional modem command AT^SYSCFG=14,2,2000000000000,2,1
Jan 21 22:32:06 OpenWrt daemon.notice netifd: wan (9924): Received SIGTERM
Jan 21 22:32:06 OpenWrt daemon.notice netifd: Interface 'wan' is now down
Jan 21 22:32:06 OpenWrt user.notice gcom: ndisup:ttyUSB2 Establishing 3G modem connection in NDIS mode
Jan 21 22:32:06 OpenWrt user.notice gcom: ndisup:ttyUSB2 Script for comgt version 1.08 Rafal Drzymala 2012,2013
Jan 21 22:32:06 OpenWrt user.notice gcom: ndisup:ttyUSB2 Try to communicate with modem
Jan 21 22:32:07 OpenWrt user.notice gcom: ndisup:ttyUSB2 Checking for password input request
Jan 21 22:32:08 OpenWrt user.notice gcom: ndisup:ttyUSB2 Error 'SIM failure' while checking for password input request
Jan 21 22:32:08 OpenWrt user.notice gcom: ndisup:ttyUSB2 Sending command AT^SYSCFG=14,2,2000000000000,2,1
Jan 21 22:32:09 OpenWrt user.notice gcom: ndisup:ttyUSB2 Command sent successfully
Jan 21 22:32:09 OpenWrt user.notice gcom: ndisup:ttyUSB2 Getting device information
Jan 21 22:32:10 OpenWrt user.notice gcom: ndisup:ttyUSB2 - modem: HUAWEI E173
Jan 21 22:32:10 OpenWrt user.notice gcom: ndisup:ttyUSB2 - firmware: 11.126.16.05.755
Jan 21 22:32:10 OpenWrt user.notice gcom: ndisup:ttyUSB2 - IMEI: 869878005485510
Jan 21 22:32:10 OpenWrt user.notice gcom: ndisup:ttyUSB2 Getting received signal strength
Jan 21 22:32:11 OpenWrt user.notice gcom: ndisup:ttyUSB2 Error 'SIM failure' while getting received signal strength
Jan 21 22:32:11 OpenWrt user.notice gcom: ndisup:ttyUSB2 Checking modem for NDIS support
Jan 21 22:32:11 OpenWrt user.notice gcom: ndisup:ttyUSB2 - NDIS mode is supported by this modem
Jan 21 22:32:11 OpenWrt user.notice gcom: ndisup:ttyUSB2 Getting system information
Jan 21 22:32:11 OpenWrt user.notice gcom: ndisup:ttyUSB2 - service state: Restricted service
Jan 21 22:32:11 OpenWrt user.notice gcom: ndisup:ttyUSB2 - domain: No service
Jan 21 22:32:11 OpenWrt user.notice gcom: ndisup:ttyUSB2 - roaming: Roaming state
Jan 21 22:32:11 OpenWrt user.notice gcom: ndisup:ttyUSB2 - mode: WCDMA
Jan 21 22:32:11 OpenWrt user.notice gcom: ndisup:ttyUSB2 - SIM: USIM is invalid in case of CS
Jan 21 22:32:11 OpenWrt user.notice gcom: ndisup:ttyUSB2 - sub mode: WCDMA
Jan 21 22:32:11 OpenWrt user.notice gcom: ndisup:ttyUSB2 Restarting modem
Jan 21 22:32:21 OpenWrt user.notice gcom: ndisup:ttyUSB2 Still waiting 3 second(s)...
Jan 21 22:32:25 OpenWrt user.notice gcom: ndisup:ttyUSB2 Still waiting 7 second(s)...
Jan 21 22:32:29 OpenWrt user.notice gcom: ndisup:ttyUSB2 Still waiting 11 second(s)...
Jan 21 22:32:33 OpenWrt user.notice gcom: ndisup:ttyUSB2 Still waiting 15 second(s)...
Jan 21 22:32:37 OpenWrt user.notice gcom: ndisup:ttyUSB2 Still waiting 19 second(s)...
Jan 21 22:32:38 OpenWrt user.notice gcom: ndisup:ttyUSB2 Again try to communicate with modem (2)
Jan 21 22:32:39 OpenWrt user.notice gcom: ndisup:ttyUSB2 Checking for password input request
Jan 21 22:32:40 OpenWrt user.notice gcom: ndisup:ttyUSB2 Error 'SIM failure' while checking for password input request
Jan 21 22:32:40 OpenWrt user.notice gcom: ndisup:ttyUSB2 Sending command AT^SYSCFG=14,2,2000000000000,2,1
Jan 21 22:32:41 OpenWrt user.notice gcom: ndisup:ttyUSB2 Command sent successfully
Jan 21 22:32:41 OpenWrt user.notice gcom: ndisup:ttyUSB2 Getting device information
Jan 21 22:32:42 OpenWrt user.notice gcom: ndisup:ttyUSB2 - modem: HUAWEI E173
Jan 21 22:32:42 OpenWrt user.notice gcom: ndisup:ttyUSB2 - firmware: 11.126.16.05.755
Jan 21 22:32:42 OpenWrt user.notice gcom: ndisup:ttyUSB2 - IMEI: 869878005485510
Jan 21 22:32:42 OpenWrt user.notice gcom: ndisup:ttyUSB2 Getting received signal strength
Jan 21 22:32:43 OpenWrt user.notice gcom: ndisup:ttyUSB2 Error 'SIM failure' while getting received signal strength
Jan 21 22:32:43 OpenWrt user.notice gcom: ndisup:ttyUSB2 Checking modem for NDIS support
Jan 21 22:32:43 OpenWrt user.notice gcom: ndisup:ttyUSB2 - NDIS mode is supported by this modem
Jan 21 22:32:43 OpenWrt user.notice gcom: ndisup:ttyUSB2 Getting system information
Jan 21 22:32:44 OpenWrt user.notice gcom: ndisup:ttyUSB2 - service state: Restricted service
Jan 21 22:32:44 OpenWrt user.notice gcom: ndisup:ttyUSB2 - domain: No service
Jan 21 22:32:44 OpenWrt user.notice gcom: ndisup:ttyUSB2 - roaming: Roaming state
Jan 21 22:32:44 OpenWrt user.notice gcom: ndisup:ttyUSB2 - mode: WCDMA
Jan 21 22:32:44 OpenWrt user.notice gcom: ndisup:ttyUSB2 - SIM: USIM is invalid in case of CS
Jan 21 22:32:44 OpenWrt user.notice gcom: ndisup:ttyUSB2 - sub mode: WCDMA
Jan 21 22:32:44 OpenWrt user.notice gcom: ndisup:ttyUSB2 Restarting modem
Jan 21 22:32:53 OpenWrt user.notice gcom: ndisup:ttyUSB2 Still waiting 3 second(s)...
Jan 21 22:32:57 OpenWrt user.notice gcom: ndisup:ttyUSB2 Still waiting 7 second(s)...
Jan 21 22:33:01 OpenWrt user.notice gcom: ndisup:ttyUSB2 Still waiting 11 second(s)...
Jan 21 22:33:05 OpenWrt user.notice gcom: ndisup:ttyUSB2 Still waiting 15 second(s)...
Jan 21 22:33:09 OpenWrt user.notice gcom: ndisup:ttyUSB2 Still waiting 19 second(s)...
Jan 21 22:33:10 OpenWrt user.notice gcom: ndisup:ttyUSB2 Again try to communicate with modem (3)
Jan 21 22:33:12 OpenWrt user.notice gcom: ndisup:ttyUSB2 Checking for password input request
Jan 21 22:33:13 OpenWrt user.notice gcom: ndisup:ttyUSB2 Error 'SIM failure' while checking for password input request
Jan 21 22:33:13 OpenWrt user.notice gcom: ndisup:ttyUSB2 Sending command AT^SYSCFG=14,2,2000000000000,2,1
Jan 21 22:33:13 OpenWrt user.notice gcom: ndisup:ttyUSB2 Command sent successfully
Jan 21 22:33:13 OpenWrt user.notice gcom: ndisup:ttyUSB2 Getting device information
Jan 21 22:33:14 OpenWrt user.notice gcom: ndisup:ttyUSB2 - modem: HUAWEI E173
Jan 21 22:33:14 OpenWrt user.notice gcom: ndisup:ttyUSB2 - firmware: 11.126.16.05.755
Jan 21 22:33:14 OpenWrt user.notice gcom: ndisup:ttyUSB2 - IMEI: 869878005485510
Jan 21 22:33:14 OpenWrt user.notice gcom: ndisup:ttyUSB2 Getting received signal strength
Jan 21 22:33:15 OpenWrt user.notice gcom: ndisup:ttyUSB2 Error 'SIM failure' while getting received signal strength
Jan 21 22:33:15 OpenWrt user.notice gcom: ndisup:ttyUSB2 Checking modem for NDIS support
Jan 21 22:33:15 OpenWrt user.notice gcom: ndisup:ttyUSB2 - NDIS mode is supported by this modem
Jan 21 22:33:15 OpenWrt user.notice gcom: ndisup:ttyUSB2 Getting system information
Jan 21 22:33:16 OpenWrt user.notice gcom: ndisup:ttyUSB2 - service state: Restricted service
Jan 21 22:33:16 OpenWrt user.notice gcom: ndisup:ttyUSB2 - domain: No service
Jan 21 22:33:16 OpenWrt user.notice gcom: ndisup:ttyUSB2 - roaming: Roaming state
Jan 21 22:33:16 OpenWrt user.notice gcom: ndisup:ttyUSB2 - mode: WCDMA
Jan 21 22:33:16 OpenWrt user.notice gcom: ndisup:ttyUSB2 - SIM: USIM is invalid in case of CS
Jan 21 22:33:16 OpenWrt user.notice gcom: ndisup:ttyUSB2 - sub mode: WCDMA
Jan 21 22:33:16 OpenWrt user.notice gcom: ndisup:ttyUSB2 Restarting modem
root@OpenWrt:/#

Tu jest końcówka skryptu ndisup.gcom

# Restarting modem and start all
:restart_modem
        let r1 = r1+1
        if r1 > 5 print $x+"Number of restart retries was exhausted\n" goto restart_final
        print $x+"Restarting modem\n"
        waitquiet 2 2
        send "AT\^NDISDUP=1,0^m"
        waitquiet 2 1
        send "ATZ0^m"
        waitquiet 2 1
        send "AT&F^m"
        waitquiet 2 1
        send "AT+CFUN=1^m"
        waitquiet 2 1
        let r3 = 0
:restart_wait        
        let r3 = r3+1
        sleep 1
        if r3&3 = 3 print $x+"Still waiting ",r3," second(s)...\n"
        if r3 < 20 goto restart_wait
        goto start
:restart_final
        waitquiet 2 1
        send "AT+CFUN=1,1^m"
        waitquiet 2 1
        goto abort
        
# Timeout detected
:comm_timeout
        print $x+"Modem is not responding, timeout detected\n"
        goto restart_modem
# Done

i jak do niego wrzucić:

echo 0 > /sys/devices/virtual/gpio/gpio6/value
sleep 1
echo 1 > /sys/devices/virtual/gpio/gpio6/value

64 (edytowany przez Rafciq 2014-01-21 23:01:00)

Odp: Modemy 3G w trybie NDIS/CDC i multiwan inaczej

Witaj,
modem się chyba nie loguje do sieci.

Jest jakiś problem z kartą SIM.

Error 'SIM failure' while checking for password input request

Jeżeli to Aero2 to musi być włączony roaming czyli: AT^SYSCFG=14,2,2000000000000,1,1

install.sh - Aktualizacja systemu, sysinfo.sh - Info.o systemie, openvpn-auth.sh - Login dla OpenVPN
Tu moje skrypty na GitHub

65 (edytowany przez him2k 2014-01-21 23:09:05)

Odp: Modemy 3G w trybie NDIS/CDC i multiwan inaczej

config interface 'wan'
    option ifname 'wwan0'
    option proto 'dhcp'
    option comm '/dev/ttyUSB2'
    option mode 'AT^SYSCFG=14,2,2000000000000,2,1'
    option apn 'darmowy'
    option macaddr '00:01:02:03:04:05'
    option auto '0'
#    option defaultroute '0'
#    option peerdns '0'
    option dns '8.8.8.8 8.8.4.4'

Może jednak restart USB?

66

Odp: Modemy 3G w trybie NDIS/CDC i multiwan inaczej

Parametr "mode" zmień na AT^SYSCFG=14,2,2000000000000,1,1

install.sh - Aktualizacja systemu, sysinfo.sh - Info.o systemie, openvpn-auth.sh - Login dla OpenVPN
Tu moje skrypty na GitHub

67

Odp: Modemy 3G w trybie NDIS/CDC i multiwan inaczej

zmieniłem i nadal "wisi" po przeladowaniu /etc/init.d/network restart

echo 0 > /sys/devices/virtual/gpio/gpio8/value
echo 1 > /sys/devices/virtual/gpio/gpio8/value

to tez sprawdzalem recznie i nadal zielone mruga

68

Odp: Modemy 3G w trybie NDIS/CDC i multiwan inaczej

A co z tym SIM-em? Z tym błędem nie będzie działać.

install.sh - Aktualizacja systemu, sysinfo.sh - Info.o systemie, openvpn-auth.sh - Login dla OpenVPN
Tu moje skrypty na GitHub

69

Odp: Modemy 3G w trybie NDIS/CDC i multiwan inaczej

@Rafciq restart routera nie pomogl... przeczyściłem styki karty SIM zobaczymy co będzie dalej. Jak będzie dobrze zbuduje obraz z Twoimi skryptami mam nadzieję, ze bedzie chodzil bezawaryjnie... do momentu kiedy areo2 wprowadzi captcha.

70 (edytowany przez Rafciq 2014-01-21 23:59:28)

Odp: Modemy 3G w trybie NDIS/CDC i multiwan inaczej

Mam takich konfiguracji kilka, gdzie w każdej jest Huawei E173 i te skrypty. Systemy te są bezobsługowe i radzą sobie od wielu miesięcy bezproblemowo, gwarantując stały dostęp do netu..

install.sh - Aktualizacja systemu, sysinfo.sh - Info.o systemie, openvpn-auth.sh - Login dla OpenVPN
Tu moje skrypty na GitHub

71

Odp: Modemy 3G w trybie NDIS/CDC i multiwan inaczej

W przypadku Aero2 do pewnej bezawaryjnej pracy konieczne jest spełnienie 2-warunków: 1-stabilny sygnał na modemie, 2-router z wydajnym w zasilanie portem USB (lub cała paleta routerów do wyboru +dobrze współpracujący aktywny hub usb), cała reszta kombinacji wydaje mi się przerostem formy nad treścią. W czym jest ten szczególny problem z nawiązaniu połączenia z Aero2? Otóż w tym że takowe w porównaniu z dostępem komercyjnym trwa o wiele dłużej (dodatkowo jest to zależne od ilości użytkowników w sieci) a w tym czasie modem "żre" prąd i jak siadają jego parametry to połączenie zapętla się bez końca i dostępu nie ma. Przykład podłączony zestaw od początku maja E353 i AirRouter+Aero2, dostęp tylko przez openvpn do dziś działa bezbłędnie (dorzucony tylko skrypt pingujący hosta w sieci w celu utrzymania ciągłego połączenia w HSPA+). Leżący obok E367+BDI, na szczęście z dostępem, przetestowany z WR703N-podłączony do huba działa bezproblemowo, bezpośrednio wymaga za każdym razem restartu routera.

 Nazwa urządzenia:Gargoyle
Wersja Gargoyle:1.5.10.11 (r37768), by obsy
Model:Ubiquiti AirRouter
Konfiguracja urządzenia:Brama sieciowa
Zajętość pamięci RAM:18MB / 28.4MB (63.4%)
Połączenia:30/4096
Średnie obciążenie CPU:0.00 / 0.01 / 0.05  (1/5/15 min.)

72

Odp: Modemy 3G w trybie NDIS/CDC i multiwan inaczej

Będę robił pewną modyfikację w WR703N i jakimś innym, "dużym" TP-Linku z USB.

O ile z WR703N nie ma generalnie problemu jeżeli chodzi o przeróbkę zasilania dla urządzenia USB (najprostsza metoda to wlutowanie zworki i obejście sterowanego z GPIO MOSFET-u - tracimy możliwość sterowania zasilaniem na USB, ale zyskujemy w gnieździe USB zasilanie bezpośrednio z podłączonego zasilacza), to już w "dużych" TP-Linkach trzeba wymienić ten MOSFET na taki, który ma wyższy limit prądu. Standardowo stosowany jest 500 mA, ale są takie po 600, 1000 i 1500 mA. Zakładając, że główna przetwornica dostarczająca zasilanie na linii 5 V ma wystarczającą wydajność, to po wymianie MOSFET-u nie powinno być więcej problemów z prądożernymi modemami, dyskami itd.

Jak ktoś będzie chętny na taką przeróbkę (wymiana MOSFET-u), to będę miał trochę więcej scalaków.

73

Odp: Modemy 3G w trybie NDIS/CDC i multiwan inaczej

A nie prościej zrobić po prostu kabelek z oddzielnym zasilaniem 5v?

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

74

Odp: Modemy 3G w trybie NDIS/CDC i multiwan inaczej

Cezary napisał/a:

A nie prościej zrobić po prostu kabelek z oddzielnym zasilaniem 5v?

To najprostsze rozwiązanie, ale ja chcę nadal mieć możliwość sterowania zasilaniem na USB z GPIO.

75 (edytowany przez jarek7714 2014-01-23 01:19:33)

Odp: Modemy 3G w trybie NDIS/CDC i multiwan inaczej

pepe2k napisał/a:

Będę robił pewną modyfikację w WR703N i jakimś innym, "dużym" TP-Linku z USB.

O ile z WR703N nie ma generalnie problemu jeżeli chodzi o przeróbkę zasilania dla urządzenia USB (najprostsza metoda to wlutowanie zworki i obejście sterowanego z GPIO MOSFET-u - tracimy możliwość sterowania zasilaniem na USB, ale zyskujemy w gnieździe USB zasilanie bezpośrednio z podłączonego zasilacza), to już w "dużych" TP-Linkach trzeba wymienić ten MOSFET na taki, który ma wyższy limit prądu. Standardowo stosowany jest 500 mA, ale są takie po 600, 1000 i 1500 mA. Zakładając, że główna przetwornica dostarczająca zasilanie na linii 5 V ma wystarczającą wydajność, to po wymianie MOSFET-u nie powinno być więcej problemów z prądożernymi modemami, dyskami itd.

Nawet bym nie próbował rozbierać swojej 703/16MB/64MB-wygląda jak ze sklepu, ten RAM fajnie śmiga

 Gargoyle
Wersja Gargoyle:1.5.11.7 (r39154), by obsy
Model:TP-LINK TL-WR703N v1
Konfiguracja urządzenia:Brama sieciowa
Zajętość pamięci RAM:30.6MB / 60.1MB (50.8%)
Połączenia:62/4096
Średnie obciążenie CPU:0.14 / 0.08 / 0.14  (1/5/15 min.) 

a wydawało mi się że nie potrafi z niego korzystać (wcześniej testowałem jego użycie na wydajności USB, a to się jednak tak nie przekłada, za to jak uruchomię tora to sobie korzysta, a przy takim użyciu jak teraz już by się dawno zrestartował, zawiesił gdyby nie miał zapasu). Kabelek może i można podłączać ale już to tak ładnie nie wygląda i sterowania nie ma. Z tymi MOSFET to bdb pomysł, jeżeli przetwornice są dobre w TL, a zwłaszcza przy zastosowaniu z "nieszczęsnym" modelem MR3420v2, do tego jeszcze RAM 64MB, ewentualnie flash 8/16MB i mamy bardzo fajny, wydajny router do LTE. smile