Konfiguracja modemu LTE w trybie NDIS (NCM)

Spis treści

Sporo modemów LTE potrafi pracować w kilku trybach. Weźmy na przykład modem Huawei E3372s-153 w wersji NON-HiLink. Standardowo obsługuje on tryb RAS (Remote Access Services) jak i NDIS (Network Driver Interface Specification). Domyślnie też włączony jest NDIS ale, by móc z tego trybu korzystać na debianie, musimy nieco inaczej skonfigurować sobie połączenie sieciowe. Gdy w grę wchodzą modemy LTE, to użytkownicy zwykli korzystać z narzędzia wvdial , który zaprzęga do pracy demona PPP i w ten sposób modem zaczyna pracować w trybie RAS, a nie NDIS. W tym wpisie skonfigurujemy sobie połączenie sieciowe na debianie w taki sposób, by wykorzystywało ono potencjał trybu NDIS.

Modemy LTE i pakiet usb-modeswitch

Z pakietu usb-modeswitch można zrezygnować, o ile posiadamy odpowiedni typ modemu LTE obsługujący polecenia AT.

Jako, że w modemach LTE znajdują się sterowniki dla systemów windows, to taki modem zwykle z początku jest wykrywany jako pendrive czy CD-ROM. Przy takim stanie rzeczy nie będziemy mieć odpowiednich urządzeń w katalogu /dev/ , tj. /dev/ttyUSB0 , etc. Dlatego też musimy doinstalować w miarę nowy pakiet usb-modeswitch , który zajmie się przełączeniem stanu modemu tuż po podpięciu go do portu USB.

Jak ustalić czy modem LTE pracuje w trybie NDIS (NCM)

W przypadku, gdy nie wiemy jakie tryby pracy obsługuje nasz modem LTE, to przydałoby się pierw to ustalić. Najprościej jest do tego celu wykorzystać polecenia AT. Na debianie, czy też w ogóle na linux'ach, można bezpośrednio zapisywać urządzenie /dev/ttyUSB0 przy pomocy echo . Ja jednak wolę korzystać z odpowiedniego oprogramowania, np. cu , socat czy też minicom . Tutaj posłużymy się cu . Instalujemy zatem ten pakiet i pytamy modem o obsługiwane tryby pracy w poniższy sposób:

$ cu -l /dev/ttyUSB0
Connected.

ate1
at^curc=0

AT^SETPORT=?

^SETPORT:3: 3G DIAG
^SETPORT:10: 4G MODEM
^SETPORT:1: 3G MODEM
^SETPORT:12: 4G PCUI
^SETPORT:13: 4G DIAG
^SETPORT:5: 3G GPS
^SETPORT:14: 4G GPS
^SETPORT:A: BLUE TOOTH
^SETPORT:16: NCM
^SETPORT:A1: CDROM
^SETPORT:A2: SD

Jeśli nasz modem posiada port 16 , to obsługuje tryb NDIS. Zobaczmy czy ten port jest włączony. Wpisujemy zatem to poniższe polecenie:

AT^SETPORT?

^SETPORT:A1,A2;12,10,16,A1,A2

W tym przypadku jest. Jeśli w powyższym wyniku nie będzie portu 16 ale nasz modem go obsługuje, to musimy ten port włączyć. Robimy to w poniższy sposób:

AT^SETPORT="A1,A2;12,10,16,A1,A2"
AT^RESET

By wyjść z programu cu musimy wpisać ~ i . (tylda i kropka).

Konfiguracja połączenia

Po podpięciu modemu LTE w trybie NDIS do portu USB, w debianie powinien pojawić się nowy interfejs sieciowy. Zwykle jest to wwan0 . Możemy to odczytać z wyjścia poleceń ifconfig lub ip , przykładowo:

# ip addr show wwan0
9: wwan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN group default qlen 1000
    link/ether 00:1e:10:1f:00:00 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::21e:10ff:fe1f:0/64 scope link
       valid_lft forever preferred_lft forever

Jak widzimy wyżej, ten interfejs nie posiada jeszcze żadnej adresacji i musimy go skonfigurować. Na debianie konfiguracja interfejsów odbywa się albo przez plik /etc/network/interfaces , albo też można wykorzystać do tego moduł oferowany przez systemd. W tym przypadku skorzystamy z opcji pierwszej. Edytujemy zatem wspomniany plik i dodajemy do niego ten poniższy blok kodu:

allow-hotplug wwan0
iface wwan0 inet dhcp
      pre-up sleep 1
      pre-up echo -e "AT^SYSCFGEX=\"03\",3FFFFFFF,1,2,800C5,,\r" > /dev/ttyUSB0
      pre-up echo -e "AT^NDISDUP=1,1,\"internet\"\r" > /dev/ttyUSB0
      pre-down echo -e "AT^NDISDUP=1,0\r" > /dev/ttyUSB0

Linijka z allow-hotplug będzie podnosić interfejs przy starcie systemu oraz przy podłączaniu modemu LTE do portu USB. Konfiguracja tego interfejsu odbywa się za pomocą protokołu DHCP. By jednak adresacja mogła być pobrana, musimy odpowiednio skonfigurować modem. Dlatego właśnie korzystamy z dyrektyw pre-up , które zawierają polecenia AT. Te komendy zostaną wykonane tuż przed podniesieniem interfejsu. Pierwsze z poleceń AT wymusza tryb połączenie LTE, drugie łączy z APN internet . W linijce z pre-down jest polecenie AT, które zostanie zaaplikowane przed położeniem interfejsu. W tym przypadku rozłączenie z APN. Generalnie rzecz biorąc, komendy mogą być dowolne, tj. w ramach obsługiwanych przez modem poleceń AT. W moim przypadku trzeba było opóźnić nieco przesyłanie poleceń AT przy podłączaniu modemu do portu USB, dlatego tam na początku mamy linijkę z sleep 1 . Bez niej, modem zwyczajnie nie mógł uzyskać adresacji via DHCP.

Mikhail Morfikov avatar
Mikhail Morfikov
Po ponad 10 latach spędzonych z różnej maści linux'ami (Debian/Ubuntu, OpenWRT, Android) mogę śmiało powiedzieć, że nie ma rzeczy niemożliwych i problemów, których nie da się rozwiązać. Jedną umiejętność, którą ludzki umysł musi posiąść, by wybrnąć nawet z tej najbardziej nieprzyjemniej sytuacji, to zdolność logicznego rozumowania.