Uruchomienie połączenia GSM w trybie NDIS
Ostatnia zmiana: 2013-11-26 18:43

Modemy USB (np. Huawei) mogą zwykle pracować w dwóch trybach pracy:
- RAS, przez interfejs szeregowy, najczęściej wykorzystywany. Połączenie nawiązuje się przy pomocy odpowiedniego programu i demona ppp.
- NDIS, w tym trybie działa i zachowuje się jak zwykła karta sieciowa.

Zaletą trybu NDIS jest zwykle możliwość uzyskania większej prędkości połączenia. Opisane rozwiązane prezentuje możliwość nawiązania połączenia NDIS przy wykorzystaniu popularnego modemu Huawei E173u-2 (+ karta Aero2).

Sprawdzenie modemu

Nie wszystkie modele obsługują ten tryb. Jeżeli uruchomimy polecenie:


    # cat /proc/bus/usb/devices

to zostaną wyświetlone informacje szczegółowe na temat urządzeń USB. Wśród nich znajduje się informacja o modemie:


T: Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 2 Spd=12 MxCh= 0
D: Ver= 2.00 Cls=ef(misc ) Sub=02 Prot=01 MxPS=64 #Cfgs= 1
P: Vendor=12d1 ProdID=1436 Rev= 0.00
S: Manufacturer=HUAWEI Technology
S: Product=HUAWEI Mobile
C:* #Ifs= 7 Cfg#= 1 Atr=e0 MxPwr=500mA
A: FirstIf#= 1 IfCount= 2 Cls=02(comm.) Sub=00 Prot=00
I:* If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=ff Driver=option
E: Ad=81(I) Atr=03(Int.) MxPS= 64 Ivl=5ms
E: Ad=82(I) Atr=02(Bulk) MxPS= 64 Ivl=0ms
E: Ad=01(O) Atr=02(Bulk) MxPS= 64 Ivl=0ms
I:* If#= 1 Alt= 0 #EPs= 1 Cls=02(comm.) Sub=06 Prot=ff Driver=(none)
E: Ad=83(I) Atr=03(Int.) MxPS= 64 Ivl=5ms
I:* If#= 2 Alt= 0 #EPs= 2 Cls=0a(data ) Sub=00 Prot=00 Driver=(none)
E: Ad=84(I) Atr=02(Bulk) MxPS= 64 Ivl=0ms
E: Ad=02(O) Atr=02(Bulk) MxPS= 64 Ivl=0ms
I:* If#= 3 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=option
E: Ad=85(I) Atr=02(Bulk) MxPS= 64 Ivl=0ms
E: Ad=03(O) Atr=02(Bulk) MxPS= 64 Ivl=0ms
I:* If#= 4 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=option
E: Ad=86(I) Atr=02(Bulk) MxPS= 64 Ivl=0ms
E: Ad=04(O) Atr=02(Bulk) MxPS= 64 Ivl=0ms
I:* If#= 5 Alt= 0 #EPs= 2 Cls=08(stor.) Sub=06 Prot=50 Driver=usb-storage
E: Ad=87(I) Atr=02(Bulk) MxPS= 64 Ivl=0ms
E: Ad=05(O) Atr=02(Bulk) MxPS= 64 Ivl=0ms
I:* If#= 6 Alt= 0 #EPs= 2 Cls=08(stor.) Sub=06 Prot=50 Driver=usb-storage
E: Ad=06(O) Atr=02(Bulk) MxPS= 64 Ivl=0ms
E: Ad=88(I) Atr=02(Bulk) MxPS= 64 Ivl=0ms

Występują tam dwie sekcje bez sterownika (none). Najczęściej jest to właśnie miejsce na sterownik trybu NDIS nazwany w linuksie CDC Ether. W takim przypadku można spróbować uruchomić ten tryb.

Instalacja

Niezbędne jest zainstalowanie odpowiedniego sterownika. Niestety, te spotykane w OpenWrt nie wspierają modemów USB, dlatego należy skorzystać z moich obrazów i zainstalować sterownik pochodzący ode mnie:


    # opkg update
    # opkg install kmod-usb-net-cdc-ether

Po instalacji modułu wraz z zależnościami należy sprawdzić czy nasz modem jest przez niego obsługiwany (cat /proc/bus/usb/devices):


    I:* If#= 1 Alt= 0 #EPs= 1 Cls=02(comm.) Sub=06 Prot=ff Driver=cdc_ether
    E: Ad=83(I) Atr=03(Int.) MxPS= 64 Ivl=5ms
    I:* If#= 2 Alt= 0 #EPs= 2 Cls=0a(data ) Sub=00 Prot=00 Driver=cdc_ether

Jeżeli tak jest - to połowa sukcesu.

Konfiguracja

Zmieniamy sekcję wan w pliku /etc/config/network na następującą:


    config 'interface' 'wan'
        option 'auto' '0'
        option 'proto' 'dhcp'
        option ifname usb0
        option macaddr 00:01:02:03:04:05

Opcja macaddr jest ważna i należy ją zostawić w takiej postaci. Interfejs sieciowy będzie nazywał się usb0; adres IP będzie uzyskany z dhcp.

Nawiązanie połączenia

Wystarczy wydać polecenie


    AT^NDISDUP=1,1,"darmowy"

do modemu aby połączenie zostało nawiązane. Jednym z argumentów jest nazwa APN (dla Aero2 jest to właśnie "darmowy" - patrz także poradnik Router 3G).
Polecenie można wydać ręcznie np. przy pomocy programu picocom, choć oczywiście najprościej to zautomatyzować. Jeżeli używany jest mój obraz można to zrobić dodając do pliku /etc/rc.local następujące polecenia:


    sleep 5
    MODE="AT^NDISDUP=1,1,\"darmowy\"" gcom -d /dev/ttyUSB2 -s /etc/gcom/setmode.gcom
    ifup wan


Rozłączenie połączenia następuje po wydaniu polecenia


    # MODE="AT^NDISDUP=1,0" gcom -d /dev/ttyUSB2 -s /etc/gcom/setmode.gcom


Dla modemów Sierra Wireless patrz: http://eko.one.pl/?p=openwrt-modemygsm#sierrawirelessdirectipmodems . Nie wszystkie modemy HUAWEI obsługują polecenie AT^NDISDUP, być może w niektórych przypadkach będzie trzeba użyć innych poleceń.