A Linux és a Mobilnet - segíts magadon és másokon

Nyár, kirándulás vidéken, madárcsicsergés, szerverteremben kernelpánik. Kell hát valamilyen olcsó, alkalmi mobilnet. A Linuxot persze egyik szolgáltató sem támogatja, pedig tőlük kell venni a modemet, mert határozottan olcsóbb mint külső forrásból, de így sajnos azzal kell dolgozni, amit adnak és bizony adnak, olyat, hogy arról koldulunk. ;)

Én a Saturnból és a Tescoból vettem Tés és Vodás prepaid-netet, előbbit Huawei E173s-1, utóbbit ZTE K3570-Z modemmel. Egyik 4990Ft volt, másik 5990Ft, ezért járt a modem és net 7 napig, 1GB-ig. Telefonon be kell aktiválni használat előtt, pár perc, feltéve, hogy eléred az ügyfélszolgáltatot. (Mindkettő katasztrófális.) A modemek egyébként szolgáltatófüggők.

Fedora 15 van a laptopon (is), a ZTE K3570-Z (Voda) pöccre ment vele: a NetworkManager feldobta modemként, csak pár kattintással be kellett állítanom, hogy melyk szolgáltató és kész.
Ezzel szemben a Huawei E173s-1 (T) nem megy pöccre, volt itt udev debuggolás, kernel driver olvasás, usb_modeswitch hekkelés, minden jóság vasárnapra. Mivel makro szinten egész jól feltérképeztem a mobilmodemek szoftver stackjét, meg is osztom azzal, aki nem fél ha olajos lesz a keze, hátha segít egyszer egy rakoncátlan modem belövésében.

- Mélyvíz -

Nos, az USB modemek munkára fogását az udev kezdi. Az ő dolga az ún. modeswitch, ami bekapcsolja a modem funkciót, hiszen alapból a stickek csak olyanok mint egy pendrive, csak a Windowsos bloatware drivert tárolják. Az ismert modemek listáját a /lib/udev/rules.d/40-usb_modeswitch.rules fájl tartalmazza. Csatlakoztatáskor ez alapján hívja meg az udev az /lib/udev/usb_modeswitch TCL scriptet, ami az /usr/sbin/usb_modeswitch binárist megfelelően felparaméterezi, ami aztán a /etc/usb_modeswitch.d/ alatt lévő hardverspecifikus konfigfájlok alapján megpróbálja elvégezni a módváltást a sticken (a módváltástól az USB ProductID is megváltozik, az lsusb-n látszik). Ha a fenti .rules fájlban nincs benne a modem, nem történik meg a módváltás, csak pendriveként üzemel tovább. Az udev által hívott scriptek stderr-je alapból sajnos elveszik, az alapértelmezésben err szintű loggolás ignorálja (ld. /etc/udev/udev.conf). Hogy a meghívott scriptek hibáit lásd, ahhoz legalább info szinte kell emelni a loggolást, pl így:

udevadm control --log-priority=info

Emellett az /lib/udev/usb_modeswitch is képes loggolni fájlokba a /var/log/usb_modeswitch_* alá, ha a /etc/usb_modeswitch.conf fájlban bekapcsolod az EnableLogging-ot. (Ha maga a /lib/udev/usb_modeswitch száll el, akkor azt persze csak az udev tudja megfelelően loggolni.) Ha a módváltás nem sikerül, akkor így jöhetsz rá, hogy mi a baj.

Ha a módváltás sikerült, akkor a megfelelő "usb serial" kernel drivert is betöltötte a /lib/udev/usb_modeswitch, így feltűnnek a soros portok a rendszerben (ttyUSBn). Ezek a modemek tömegcikkek, ha 5 forintal olcsóbban össze lehet hozni darabját, akkor bizony hajlamosak egy teljesen új modellt bevezetni, szóval pörög a piac, amit a modemeknél alapértelmezett option.c usb serial driver nem bír naprakészen követni. Emiatt dinamikusan "programozhatóvá" tették, a /sys alatt menet közben vehetőek fel alá az új modellek. Ezt azért lehet megtenni, mert a kommunikációs protokoll gyakorlatilag ugyanaz, csak az eszközök azonosítója változik. A Huawei E173s-1 azonosítója pl szintén nincs az option.c driverben (még). Az udev itt biza' nem vacakol, minden modemnek látszó tárgyat megpróbál felvenni egy /lib/udev/usb_modeswitch --driver-bind hívással az option.c-nek, hátha bejön - az E173s-1-nél pl bejön. Ezt azért fontos tudni, mert ha kapsz egy tuti usb_modeswitch konfigfájlt egy új modemhez és azt kézzel lefuttatod, akkor bizony a modem mód ellenére jó esélyed lesz, hogy az option.c driver nem fogja felismerni és azt hiszed, hogy a usb_modeswitch nem sikerült, pedig csak az option.c -t kell tanítani.

Ha az option driver kezelésbe vette, lesz néhány soros portunk a userspaceben, ahol az udev felhívására akcióba lép a ModemManager. A ModemManagernek gyártóspecifikus driverei (userspace pluginjei) vannak, hiszen pl. a hálózatválasztás, sms kezelés, térerő lekérdezés egyáltalán nem szabványos, de kell. A megfelelő driver kiválasztása itt az AT parancsokra adott válaszok alapján megy. Ha az eszközt kezelésbe vette a driver, a ModemManager egy kezdetleges D-Bus API-n behirdeti az új modemet a NetworkManager felé (is) és innen már megkezdődik a hardverfüggetlen interakció a juzerrel, amire nem térek ki, minket csak a hardver érdekelt.

Összefoglalva, egy új modem támogatása tehát csak több szinten valósulhat meg:

  • kell, hogy ismerje az udev
  • kell, hogy tudja kezelni az usb_modeswitch
  • kell, hogy ismerje az option.c (vagy az udev tanítsa meg neki)
  • kell, hogy tudja kezelni a ModemManager pluginje

Nekem a Huawei E173s-1 -el csak annyi volt a probléma, hogy a modeswitch előtt várni kellett egy kicsit, hogy pontosan miért, azt nem tudom, de nem is érdekel, hiszen a megoldásnak nincs komoly hátránya. A várakozást a /lib/udev/usb_modeswitch script támogatja, csak a /etc/usb_modeswitch.d/12d1:1c0b konfigba kellett írni, hogy: WaitBefore=3.

Ha neked is sikerült működésre bírni egy makacs modemet, mindenképp tedd közkinccsé, mert ez olyan dolog, amihez közösség kell, mert egy embernek/cégnek sincs hozzáférése ahhoz a millió modemhez ami a piacon van.

http://www.draisberghof.de/usb_modeswitch/bb/viewtopic.php?p=4863#4863
https://bugzilla.redhat.com/show_bug.cgi?id=725265

A NetworkManager egyébként egy álom, ha belegondolok, hogy hány layert, milyen vaskos stacket fog össze és tesz kezelhetővé, hát egy könnycsepp menten kicsordul a szemem sarkából.. :) Pláne azért, mert megéltem mi volt előtte.

Hozzászólások

En is szeretem a NM-et, bar szerintem kisse eroszakos, de ez legyen a legnagyobb hibaja.

A Voda ZTE stickjeivel szinte senkinek nincs gondja, mas kerdes, hogy a Voda is - akar csak a tobbi szolgaltato - csak elofizeteseseknek ad ertelmes mobilnetet.
--

Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant. | Gentoo Portal 

Furcsa, Inviteles Huawei E173 Ubuntu 1010/1104 alatt pöc-röff megy! Fedora most nincs kéznél.

Kis mellekzonge, kijott az uj CentOS 6 Live, gondoltam felpattintom egy pendrive-ra, kiprobalom a mobilnetem rajta. network-manager felajanlotta a mobile broadband lehetoseget, kaptam is rajta. Sajnos Magyarorszagnal nem szerepelt a listaban az invitel, na sebaj, majd most fog, megadtam neki az apn-t, aztan kivancsian vartam, h csatlakozik-e es siker :)

Nekem Telenor Huawei E173 (MobilePartner) stick van a netbookhoz, Ubuntu 11.04-el.
Kezdetben nem ment sehogy sem. Megjelent az eszközök között, de nem épült fel a kapcsolat, ciklikusan el-eltűnt a listáról, stb.

A Google segített aztán, mert hosszas keresgélés és próba után találtam egy megoldást a problémára itt

Ez a program (Movistar 3.5G) a modem Windows-os alatt megszokott kezelőfelületét biztosítja Linux alatt. Pontosan ugyanúgy is működik. A stick bedugása után automatikusan elindul és bekéri a PIN kódot. Innentől kezdve akár ki is léphetek belőle, mert a NetworkManager-ben is el tudom már indítani a kapcsolatot, de folytathatom a Movistar 3.5G-vel is a csatlakozást.

Szóval ez nem éppen egy "szakértő megoldás", de jó, ha tudják a Linux felhasználók, hogy van ez a lehetőség is.

Nekem egy T-mobile-os ZTE-m van (most a pontos típusra nem emlékszem) alapból CDrom ként ismeri fel a Kubuntu és csak annyit kell vele tenni, hogy konzolból kiadom az eject /dev/srX parancsot és máris látszik a /dev/ttyUSBX node.

Cask tudnam miert nem ugy mukodnek ezek a joszagok, hogy egy setconfiguration -t kikuld nekik a host, utanna modemek lesznek.
http://www.beyondlogic.org/usbnutshell/usb5.shtml#ConfigurationDescript…

Ezek modeswitch -et hasznalo eszkozok kaphatnak -e egyeltalana USB -certet ?

Nem tudom, hogy hany fillerrel lenne dragabb, ha hubnak latszana amire egy modem es egy cdrom van kotve...

Amit nem lehet megirni assemblyben, azt nem lehet megirni.

HUB chipre nincs is szükség, mert egy eszköz tud több interfacet mutatni, pl az én modemem modeswitch után csak kibővül a modem funkciókkal, a storage classt sem veszti el.

Szerintem ez a beteg helyzet a Windows miatt alakult ki, hiszen ha azonnal látszana a modem, akkor azonnal drivert követelne hozzá a Windows, ami megzavarná a felhasználókat. Így először felismeri a storaget, ahonnan regisztrálhatja magát a Windows alá a driver és utána nem lesz gond a vendor-függő interfészek felbukkanása. Elég gány megoldás, de ez van.

Még egy kis infó itt: http://en.wikipedia.org/wiki/Virtual_CD-ROM_switching_utility

Adott egy ZTE/Vodafone K3570-Z modem. Adott egy lucidikus ubuntu.

Felraktam az usb_modeswitch* csomagot maverick-ből, mert a lucidos még nem tudja a 3570z-t.

Én speciel pon/poff-ot használok, mert a networkmanagert legyilkoltam a gépemről, de a barátnőmnek a gépére (szintén lucid) szerettem volna csilli-villi networkmanageresre beállítani a mobilnetet.

A /dev/ttyUSB* létrejön, de NM nem látja a modemet. Ilyenkor mi van????
A régi jó (ill már nem annyira jó) E220-at simán látta.

A NetworkManager egyébként egy álom, ha belegondolok, hogy hány layert, milyen vaskos stacket fog össze és tesz kezelhetővé, hát egy könnycsepp menten kicsordul a szemem sarkából.. :) Pláne azért, mert megéltem mi volt előtte.

+1

Jahm... nekem a wifi azota letezik, amiota van NM. Elotte otletem se volt, hogy kell azt konfiguralni. Azota persze sokat tanultam rola, most mar nem okoz nehezseget egy wpa_supplicant vagy egy iwconfig parameterezese, de sokaig ugy telepitettem a Gentoot, hogy benyomtam a halokabelt a laptopba, es addig benn maradt, amig nem lett NM a gepen.
--

Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant. | Gentoo Portal 

hali,

E173s2-vel jatszott mar valaki? minden jonak tunik, csak epp nem tud parosodni rendesen a t-mobile halozattal:

tarcsaz, konnekt, auth, PAP, majd par madodperc mulva bont error 16-tal:

--> WvDial: Internet dialer version 1.61
--> Initializing modem.
--> Sending: ATZ
ATZ
OK
--> Sending: ATQ0 V1 E1 S0=0 &C1 &D2
ATQ0 V1 E1 S0=0 &C1 &D2
OK
--> Sending: AT+CGDCONT=1,"IP","internet"
AT+CGDCONT=1,"IP","internet"
OK
--> Sending: AT+CGEQREQ=3,0,0,0,0,0
AT+CGEQREQ=3,0,0,0,0,0
OK
--> Sending: AT+CGEQMIN=1,0,0,0,0,0
AT+CGEQMIN=1,0,0,0,0,0
OK
--> Modem initialized.
--> Sending: ATDT*99#
--> Waiting for carrier.
ATDT*99#
CONNECT
--> Carrier detected.  Starting PPP immediately.
--> Starting pppd at Tue Mar 27 10:39:14 2012
--> Pid of pppd: 6648
--> Using interface ppp0
--> Disconnecting at Tue Mar 27 10:39:38 2012
--> The PPP daemon has died: A modem hung up the phone (exit code = 16)
--> man pppd explains pppd error codes in more detail.
--> Try again and look into /var/log/messages and the wvdial and pppd man pages for more information.
--> Auto Reconnect will be attempted in 5 seconds

ill.:

Mar 27 10:39:14 localhost pppd[6648]: pppd 2.4.5 started by nobody, uid 0
Mar 27 10:39:14 localhost pppd[6648]: speed 3600000 not supported
Mar 27 10:39:14 localhost pppd[6648]: Using interface ppp0
Mar 27 10:39:14 localhost pppd[6648]: Connect: ppp0 <--> /dev/ttyUSB0
Mar 27 10:39:14 localhost pppd[6648]: Remote message: Greetings!!
Mar 27 10:39:14 localhost pppd[6648]: PAP authentication succeeded
Mar 27 10:39:38 localhost pppd[6648]: Modem hangup
Mar 27 10:39:38 localhost pppd[6648]: Connection terminated.
Mar 27 10:39:38 localhost pppd[6648]: Exit.

mi lehet a bibi?

t