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

1. Sprawdzenie modemu
2. Instalacja
3. Konfiguracja
4. Nawiązanie połączenia


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).

UWAGA: dla trybu NDIS mogą być wymagane inne sterowniki niż przedstawiony poniżej zobacz także ten wątek na forum: http://eko.one.pl/forum/viewtopic.php?pid=76450#p76450

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ń.