Vitezslav Batrla's Weblog

Vitezslav Batrla's Weblog

All | Other | Pictures | Solaris

20050909 Pátek září 09, 2005

 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:

  1. /etc/ppp/peers/etcdma je call script s nastavením voleb pppd, zadejte své tel. číslo,
  2. /etc/ppp/chat-etcdma je chatscript (viz man chat(1M)) pro navázání spojení,
  3. /etc/ppp/chap-secrets obsahuje údaje pro autentizaci, zadejte své tel. číslo a heslo,
  4. /etc/ppp/options - prázdný soubor, pokud pppd nespouští root, musí tento soubor existovat, jinak pppd skončí s chybou,
  5. /etc/ppp/ip-up slouží k automatické konfiguraci DNS po připojení,
  6. /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:

  1. AT příkazy modemu GPC-6420
  2. Domovská stránka projektu OpenSolaris
  3. České stránky o CDMA
  4. Návod na připojení v Linuxu na www.root.cz
  5. Archív konfiguračních souborů


( IX 26 2005, 11:09:28 dop. CEST / IX 09 2005, 01:45:01 odp. CEST ) Permalink Comments [4]
Trackback: http://blogs.sun.com/vita78/entry/eurotel_data_expres_cdma_v


září 2005 »
PoÚtStČtSoNe
   
1
2
3
4
5
6
7
8
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
  
       
Today


XML







Today's Page Hits: 28