|
Eurotel Data Expres (CDMA) v operačním systému Solaris 10, Solaris Express a Nevada
Pár slov na úvod
Rádi bychom se s Vámi podělili o zkušenosti, které jsme s Petrem Šumberou získali při provozování služby Eurotel Data Expres v operačním systému Solaris verze 10 a vyšší. Eurotel Data Expres je bezdrátové vysokorychlostní připojení k internetu poskytované (jak jinak) společností Eurotel v České Republice. Služba využívá technologii CDMA ve frekvenčním pásmu 450 MHz a je nabízena od srpna 2004. Pro připojení k internetu je dodáván USB modem Gtran GPC-6420, který má podporu v MS Windows, Linuxu a jak vyplyne z následujících řádků, funguje po troše úsilí i v OS Solaris.
Na rozdíl od Linuxu, kde je podpora ve formě kernelového driveru, v Solarisu neexistuje specifický ovladač (ne na úrovni kernelu) pro CDMA modem, který by jej podporoval jako svůj primární cíl. Místo vývoje chybějícího ovladače pro kernel jsme se spokojili s již existujícím obecným ovladačem ugen pro USB zařízení, která nemají svůj kernelový ovladač. Další variantou by bylo využití knihovny libusb, ale komplikuje ji potřeba zdrojového kódu a kompilace - od této varianty bylo upuštěno, je zde zmíněna pouze jako další možná cesta.
Ovladač ugen
Je obecný ovladač USB zařízení, který umožňuje přístup k hardware pomocí standardních unixových operací open/close/read/write/aioread/aiowrite nad soubory. Součástí systému je od verze 10 (port z FreeBSD) a jeho smyslem je zjednodušit psaní ovladačů pro různá USB zařízení a umožnit jejich přesunutí do user-space. S použitím ugen pro CDMA modem vznikají 2 méně závažné problémy:
- ugen nepodporuje "polling" ani neblokující io operace pro bulk přenosy (viz man ugen(7D))
- ugen nastavuje timeout pro operaci bulk read, po jehož vypršení vrací volání read chybu EIO. Výchozí hodnota timeoutu je poměrně nízká - 10 sekund.
První bod dokážeme eliminovat pomocnou aplikací, která čte data z CDMA bez použití poll v blokujícím režimu a následně je předává do pppd rourou. V naší implementaci je pro tyto účely použit program cat. Démon pppd pak čte data ze standardního vstupu (z roury) a zapisuje na standardní výstup, který je přesměrován do CDMA modemu. Toto chování pppd, kdy komunikuje přes standardní vstup a výstup a ne přes terminál, je zapnuto volbou notty.
Druhý bod vede k zásahu do konfigurace jádra a zvednutí výchozí hodnoty timeoutu na hodnotu poněkud vyšší, např. 1h.
Postup aneb Mini-HowTo
Krok 1: Připojení ovladače ugen k CDMA modemu
Následujícími přikazy odstraňte a následně připojte ovladač ugen k CDMA modemu. Po aplikaci je nutný restart systému, aby se změny projevily.
# rem_drv ugen
# add_drv -i '"usb5c6,3196.0"' -m '* 0666 root sys' ugen
# init 6
Pokud si systém během restartu na nic nestěžoval, pak nastal ten správný čas na fyzické připojení modemu k počítači. Výsledkem by mělo být hlášení v logu (nebo výstupu dmesg), oznamující, že zařízení bylo rozpoznáno ovladačem:
Sep 8 22:45:15 noname usba: [ID 912658 kern.info] USB 1.1 device (usb5c6,3196) operating at full speed (USB 1.x) on USB 1.10 root hub: communications@2, ugen2 at bus address 2
Sep 8 22:45:15 noname usba: [ID 349649 kern.info] Qualcomm, Incorporated CDMA Technologies MSM
Sep 8 22:45:15 noname genunix: [ID 936769 kern.info] ugen2 is /pci@0,0/pci1025,57@10/communications@2
Sep 8 22:45:15 noname genunix: [ID 408114 kern.info] /pci@0,0/pci1025,57@10/communications@2 (ugen2) online
a v systému by měl vzniknout adresář:
/dev/usb/5c6.3196/0/
Pro vysvětlení: kód 5c6 je id výrobce, 3196 id produktu a 0 je číslo instance CDMA modemu. Pokud máte (jen) jeden CDMA modem a objevilo se více instancí, pak to znamená, že některé linky jsou neplatné a nebyly automaticky odstraněny. Tuto situaci většinou řeším odpojením zařízení a příkazem devfsadm -C, který provede úklid adresáře /dev a odstraní všechny neplatné linky, viz man devfsadm(1M). Ovšem rád se nechám poučit, pokud to jde jednodušeji a lépe.
V adresáři /dev/usb/5c6.3196/0/ by se mělo objevit několik souborů (endpoints), resp. symbolických linků:
cntrl0 devstat if0in1stat if1in10stat if1out11stat
cntrl0stat if0in1 if1in10 if1out11
Jejich popis je nad rámec tohoto textu, nicméňe zájemci si mohou prostudovat manuálovou stránku ugen(7D).
Krok 2: Prodloužení ugen_bulk_timeout
Původní hodnota timeoutu je 10 sekund, což znamená že po deseti sekundách bez aktivity dojde k ukončení připojení díky tomu, že operace read ze vstupního zařízení vrací chybu EIO. Oprava (workaround) je jednoduchá a spočívá přidání řádku do /etc/system, nebo nastavení proměnné za běhu pomocí kernel debuggeru (což ale není triviální ani permanentní). Hodnota timeoutu se udává v sekundách a 1 hodina byla zvolena experimentálně.
V Solaris verze 10 je třeba přidat do /etc/system řádek:
set ugen:ugen_bulk_timeout = 3600
V Nevadě (kódóvé označení příští verze) a Solaris Express se kód ugen přesunul do modulu usba (nícméňe funkčnost zůstala zachována). Zde je třeba přidat do /etc/system řádek:
set usba:ugen_bulk_timeout = 3600
Po změně je nutný restart (init 6), aby systém načetl nové nastavení.
Krok 3: Konfigurace pppd
Je podobná jako v jiných systémech s pppd, např. v Linuxu (viz návod na www.root.cz). Na rozdíl od Linuxu se ppp démonovi neříká jakou rychlostí má komunikovat a se kterým terminálem. Tyto dvě volby jsou nahrazeny volbou notty.
V nastavení jde o: nastavení voleb pppd, chat script, skripty pro automatickou konfiguraci DNS a soubor s heslem pro CHAP. Pro zjednodušení je přiložen archív obsahující všechny potřebné soubory. Po rozbalení archívu je nutné zadat telefonní číslo a heslo přidělené Eurotelem do dvou souborů. Následuje krátký komentář k obsahu archívu:
- /etc/ppp/peers/etcdma je call script s nastavením voleb pppd, zadejte své tel. číslo,
- /etc/ppp/chat-etcdma je chatscript (viz man chat(1M)) pro navázání spojení,
- /etc/ppp/chap-secrets obsahuje údaje pro autentizaci, zadejte své tel. číslo a heslo,
- /etc/ppp/options - prázdný soubor, pokud pppd nespouští root, musí tento soubor existovat, jinak pppd skončí s chybou,
- /etc/ppp/ip-up slouží k automatické konfiguraci DNS po připojení,
- /etc/ppp/ip-down slouží pro obnovení původní konfigurace DNS po ukončení spojení.
Ještě malá poznámka na závěr - skripty ip-up a ip-down předpokládají, že name services používají DNS. Tzn., že /etc/nsswitch.conf obsahuje např. tyto řádky:
hosts: files dns
ipnodes: files dns
Více viz man nsswitch.conf(4).
Krok 5: Spuštění připojení
Stačí se přepnout do adresáře /dev/usb/5c6.3196/0 a spustit v terminálu příkaz:
cat if1in10 | pppd call etcdma > if1out11
Krok 6: Monitorování a hledání chyb
tail -f /var/adm/messages
Krok 7: Ukončení připojení
pkill pppd
Praxe
A na konec obrázek jako důkaz .
Odkazy:
- AT příkazy modemu GPC-6420
- Domovská stránka projektu OpenSolaris
- České stránky o CDMA
- Návod na připojení v Linuxu na www.root.cz
- Archív konfiguračních souborů
( IX 26 2005, 11:09:28 dop. CEST / IX 09 2005, 01:45:01 odp. CEST )
Permalink
Trackback: http://blogs.sun.com/vita78/entry/eurotel_data_expres_cdma_v
|
Posted by jakub on listopad 05, 2005 at 11:50 dop. CET #
Z toho plyne změna v kroku 1:
add_drv -i '"usb16d5,6501"' -m '* 0666 root sys' ugen
a v kroku 5:
cat /dev/usb/16d5.6501/0/if0in2 | pppd call etcdma > /dev/usb/16d5.6501/0/if0out2
Posted by Víťa on prosinec 21, 2005 at 10:49 odp. CET #
Posted by Tomáš Bátrla on prosinec 29, 2005 at 03:22 odp. CET #
Posted by Pawel on duben 17, 2006 at 03:52 odp. CEST #