7.15.14. Łączenie się z Internetem przez GPRS

Ten rozdział opisuje jak połączyć się z Internetem za pomocą telefonu komórkowego wykorzystując system GPRS. General Packet Radio System (GPRS) jest metodą dostępu do Internetu w sieciach GSM, która, w przeciwieństwie do zwykłego połączenia komutowanego (Sekcja 7.15.6) oraz połączenia HSCSD, charakteryzuje się pakietową transmisją danych. Trzy cechy odróżniają system GPRS od pozostałych metod dostępu: po pierwsze, użytkownik płaci tylko za ilość przesłanych danych a nie za czas połączenia. Po drugie, GPRS jest szybszy od zwykłego połączenia dial-up z siecią przez telefon komórkowy (9,6 kbps), bo pozwala na łączenie kilku kanałów i osiągnięcie przepływu do abonenta (downstream) do 115 kbps (na razie ani sieci, ani telefony nie wspierają jeszcze tak dużych prędkości transmisji). Po trzecie, system GPRS pozwala odbierać połączenia i SMS-y w trakcie trwania sesji (połączenia) GPRS. Sesja jest wówczas na czas połączenia zawieszana, a po jego zakończeniu - wznawiana. Dodatkowym atutem jest czas nawiązywania połączenia - jest kilkakrotnie krótszy niż w przypadku zwykłych modemów dial-up.

Usługa GPRS musi być aktywowana u operatora telefonii komórkowej (w niniejszym opisie, dla uproszczenia wszystkie przykłady i konfiguracja będą przedstawione dla sieci Era). W Erze aktywacja usługi jest za darmo, standardowo nie ma również żadnej opłaty miesięcznej w abonamencie. Koszt: 49 gr (+VAT) za 100 kB wysłanych i (oddzielnie) odebranych danych (na poziomie protokołu IP). "Kwantem rozliczeniowym" jest właśnie 100 kB. Oznacza to, że minimalna opłata za sesję GPRS wynosi 49 gr (dane odebrane) + 49 gr (dane wysłane) = 98 gr (kilkaset bajtów musi być zawsze wysłanych i odebranych w ramach nawiązywania połączenia). Sesja GPRS przerwana połączeniem przychodzącym i (automatycznie) wznowiona, jest traktowana jak pojedyncza sesja (choćby trwała nawet cały dzień :-) ). GPRS jest bardzo użyteczny przy połączeniach shellowych. Połączenie tekstowe/konsolowe z serwerem jest relatywnie tanie (chociaż do każdego znaku należy doliczyć nagłówek IP) i nie ma ciągłej presji czasu jak w przypadku zwykłego połączenia dial-up przez telefon komórkowy.

Naturalnie, system GPRS musi być wspierany przez telefon. Aktualnie coraz więcej telefonów ma wbudowanego GPRS-a, są to m.in.: Nokia 6310, 6310i, 7650, 8310; Ericsson R520, T65i, T39, T68; Siemens ME45, M50, S55 i wiele innych.

Sesje GPRS mogą być uruchamiane na dwa sposoby:

7.15.14.1. IrDA

W podrozdziale tym opisany jest sposób instalacji i konfiguracji systemu IrDA na Linuksie z jednym z nowszych systemów RedHat (rodzina 7.x, 8.x, 9.x). Starsze systemy RedHat wymagały łat na jądro (teraz IrDA jest już standardowo wspierana) oraz doinstalowania pakietu irda-utils (obecnego w nowszych wersjach systemu).

IrDA jest obecna we wszystkich obecnie produkowanych laptopach a wyposażenie komputera stacjonarnego w system IrDA (dioda podczerwieni podłączana do płyty głównej) to kwestia kilkudziesięciu złotych.

Zanim zaczniemy konfigurować IrD-ę na Linuksie, powinniśmy dokładnie dowiedzieć się jakie są ustawienie w naszym systemie (sprawdzić w BIOS-ie). Często należy uaktywnić system IrDA, ponieważ może być standardowo wyłączony. Należy sprawdzić pod którym portem komunikacyjnym będzie widoczna IrDA. W przypadku laptopów będzie to zwykle COM2, czyli /dev/ttyS1. Co ciekawe, niektóre systemy biurkowe, wyposażone w dwa porty COM, podpinają IrD-ę pod COM2 - prawdopodobnie wyłączając standardowy, "kablowy" port szeregowy. Warto także sprawdzić numer portu i przerwanie przydzielone przez BIOS.

Po włączeniu IrD-y w BIOS-ie i odczytaniu jej parametrów uruchamiany Linuksa. Następnie:

Teraz sprawdzamy czy nasz telefon zostanie wykryty przez system: włączamy IrD-ę w telefonie i stawiamy naprzeciwko nadajnika (ang. transceiver) IrD-y. Wywołujemy komendę:
cat /proc/net/irda/discovery
Jeśli telefon został wykryty, to program cat powinien na wyjściu na wyjściu zwrócić informację jak poniżej:
IrLMP: Discovery log:

nickname: Nokia 6310i, hint: 0xb125, saddr: 0xb4bd12f0, daddr: 0x0000b624
Wartości nickname, hint, saddr i daddr mogą się różnić w zależności od modelu telefonu - ważny jest fakt pojawienia się tej całej linii. W przypadku niewykrycia urządzenia zostanie zwrócony pusty log:
rLMP: Discovery log:
Powodem jest zwykle niewłączenie IrD-y w telefonie lub niewidzenie się czytnika IrD-y w telefonie i w komputerze (niektóre telefony mają podczerwień na czubku, a inne - z boku obudowy).

Jeśli telefon został wykryty, możemy spróbować się połączyć z telefonem za pomocą programu minicom (tu drobna dygresja: minicom jest programem do komunikacji przez porty/łącza szeregowe. W nomenklaturze komputerowej człon "com", "COM" lub "comm", pochodzący zapewne od słowa "communication", oznacza komunikację szeregową (ang. serial communications), kojarzoną zwykle z portami szeregowymi, tzw. COM-ami w pececie i interfejsem RS-232. Jak się ma IrDA to komunikacji szeregowej? Otóż wiele standardów, w tym także bezprzewodowych, wspiera tryb komunikacji, który jest identyczny do tego znanego z RS-232. W przypadku IrD-y tryb ten zwie się IrCOMM (Infared COMM) a w przypadku Bluetootha RFCOMM (Radio Frequency COMM). Dzięki temu istnieje prosta możliwość przeniesienia setek programów wykorzystujących komunikację szeregową do nowych zastosowań oraz możliwość tworzenia nowych aplikacji, w oparciu o tradycyjny i opanowany sposób komunikacji. Program minicom nie wie i nie musi wiedzieć, że porozumiewa się poprzez łącze bezprzewodowe. Koniec dygresji). Tu uwaga! Urządzeniem, które należy wskazać programowi minicom jest /dev/ircomm0 a nie /dev/ttyS1. Sprawdzamy czy odpowiada na komendy Hayesa (AT). Odpowiada? Więc IrDA została zainstalowana.

7.15.14.2. GPRS - Konfiguracja pppd

Opisany tu sposób konfiguracji połączenia przez GPRS został zaczerpnięty z dokumentu Mikko Rapeliego pt.: "Of Linux, GPRS Phones, Serial Cable, IrDA, Bluetooth and USB" (http://www.iki.fi/mikko.rapeli/linux_gprs.html) i zmodyfikowany na potrzeby połączenia z siecią Era przez telefon Nokia 6310i. W plikach pozostawiono angielskie komentarze autora, żeby ułatwić ich dostosowanie do innych konfiguracji (np. Plus GSM, telefony Siemensa itd.). Thank you, Mikko. Good job.

Żeby skonfigurować program pppd w celu obsługi systemu GPRS, należy stworzyć 4 pliki:

Warto również stworzyć 2 skrypty (z flagą wykonywalności), które automatycznie ustawią nam przekazane prze Erę adresy DNS-ów:

Uwaga! W przypadku telefonów Nokia 6310/6310i (może też innych?) stwierdziliśmy objaw zrywania połączenia GPRS po ok. dwóch minutach. Żeby się go pozbyć, należy otworzyć plik /etc/ppp/options i sprawdzić czy w pliku jest następująca linia (lub podobna):

lcp-echo-failure 4
Jeśli jest - należy ją usunąć albo wykomentować. Należy się również upewnić czy opcji tej nie ma w innych plikach odczytywanych przy połączeniu, można to sprawdzić np. programem grep:
grep -r lcp-echo-failure /etc/ppp

Teraz czas na przetestowanie połączenia. Wywołanie komendy:

pppd call gprs
spowoduje odczytanie przez pppd pliku /etc/ppp/peers/gprs i uruchomienie zawartych tam instrukcji. Na wyjściu powinniśmy otrzymać komunikaty drukujące kolejne fazy połączenia: komendy AT, wybieranie numeru i otrzymanie adresu IP. Powinny nam zostać również przesłane adresy IP serwerów DNS (ostatni komunikat przed odłączeniem się od terminala). Za obsługą opcja adresów IP serwerów DNS stoi opcja usepeerdns, dzięki której adresy IP zostaną umieszczone w pliku /etc/ppp/resolv.conf, a następnie przekopiowane przez nasz skrypt /etc/ppp/ip-up.local do /etc/resolv.conf. Zakończenie połączenia następuje przez wywołanie:
killall pppd
Ta barbarzyńska z pozoru metoda zakończenia połączenia sprawuje się wyśmienicie, w tym wywołuje skrypty /etc/ppp/if-down i /etc/ppp/if-down.local (czyli zamyka połączenie w sposób, jaki byśmy oczekiwali).

W przypadku połączenia GPRS istotna jest ilość wysłanych i odebranych bajtów. Informację tę można zdobyć wywołując komendę pppstats (przed zakończeniem połączenia!).

7.15.14.3. Instalacja modemów Sony Ericsson GC75, GC75e, GC85, GC89

W tym podrozdziale zostanie opisana instalacja modemów GPRS Sony Ericsson GC75 i GC75e oraz konfiguracja pppd dla połączenia GPRS IDEA.

Obie karty PCMCIA są standardowo wykrywane. Jeśli nasz modem nie jest wykrywany, powinniśmy się upewnić czy nasze jądro jest odpowiednio skonfigurowane. Przykład poprawnej konfiguracji jądra.

I tak dla:

Przy tak skonfigurowanym jądrze po wsunięciu karty PCMCIA do slotu powinniśmy zobaczyć komunikat wyglądający mniej więcej tak:

ttyS0 at I/O 0x3f8 (irq = 3) is a 16550A
Jeśli korzystamy z X'ów możemy skorzystać z polecenia dmesg. Jeśli nasz modem zostanie wykryty np. jako ttyS14, a w /dev nie ma takiego urządzenia należy je utworzyć np.
# mknod /dev/ttyS14 c 4 78

WAŻNE: W przypadku gdy nasz modem to GC89, musimy wykonać następujące czynności.

Musimy zainstalować setserial, w przypadku Debiana możemy posłużyć się apt-get.

# apt-get install setserial
Nasza karta jest "dość wybredna" jeśli chodzi o prędkość z jaką będzie chciała z nami rozmawiać. Mamy dwie możliwości:

Pamiętajmy o wpisaniu poprawnej prędkości do plików konfiguracyjnych pppd.

Aby uruchomić moduł wlan, musimy skorzystać z ndiswrapper'a. Dokładny opis instalacji ndiswrappera znajdziemy w Sekcja 7.14.2. Nasze drivery znajdziemy na dołączonej płycie do SE GC89 (Wlan-2k/semwl5.inf).

W tym momencie nasz modem PCMCIA jest gotowy do pracy. Została nam jeszcze konfiguracja pppd.

Jeśli jesteśmy użytkownikami Debiana, możemy pominąć następne rozdziały i zainstalować paczkę edge-gprs udostępnianą przez PRATERM S.A. Konfiguracja jest bardzo prosta i na pewno każdy sobie poradzi, wystarczy odpowiedzieć na kilka pytań.

7.15.14.4. Instalacja OptionGlobeTrotter Fusion+

Modem korzysta ze sterowników nozomi, które są obecne w nowszych jądrach (na pewno 2.6.26). Jeśli mamy starszy modem, musimy ściągnąć sterowniki ze strony http://www.pharscape.org/3G/nozomi_060209.tar.gz, a następnie je skompilować. Aby tego dokonać, powinniśmy zaopatrzyć się w źródła/nagłówki jądra.

Następnie standardowo make i powinniśmy otrzymać plik nozomi.ko. W przypadku problemów ze znalezieniem katalogu ze źródłami, możemy użyć opcji -I/path/to/kernel. Po załadowaniu modułu nasz modem jest dostępny jako /dev/noz0 ... /dev/noz3. Jeśli urządzenia nie zostały automatycznie stworzone, musimy zrobić to ręcznie:

mknod /dev/noz0 c 241 0
mknod /dev/noz1 c 241 1
mknod /dev/noz2 c 241 2
mknod /dev/noz3 c 241 3

Transmisja danych odbywa się na urządzeniu /dev/noz0, jednak w tym samym czasie możemy komunikować się z modemem w /dev/noz2. Jest to pewne udogodnienie, ponieważ teoretycznie pozwala na badanie siły sygnału podczas transmisji (czego nie umożliwiają modemy Sony Ericsson GC8X) oraz np. dostęp do skrzynki sms, spisu telefonów itp.

Ostatnim etapem, opcjonalnym jest umieszczenie nozomi.ko w katalogu z modułami. Robimy to w zależności od posiadanej przez nas dystrybucji, zazwyczaj /lib/modules/2.X.X/...

Jeśli jesteśmy użytkownikami Debiana, możemy pominąć następne rozdziały i zainstalować paczkę edge-gprs udostępnianą przez PRATERM S.A. Konfiguracja jest bardzo prosta i na pewno każdy sobie poradzi, wystarczy odpowiedzieć na kilka pytań.

7.15.14.5. Resetowanie modemów GPRS (GCXX i OGTFusion+)

W przypadku modemów Sony Ericsson GCXX sprawa jest bardzo prosta. Po zaopatrzeniu się w pakiet pcmcia-cs wydajemy po prostu polecenie: cardctl eject a następnie cardctl insert.

Gdy posiadamy OptionGlobeTrotter Fusion+, sprawa nieco się komplikuje. Gdybyśmy użyli metody z GCXX, nastąpiłby kernel panic. Poprawnym rozwiązaniem jest najpierw zabicie pppd, a następnie usunięcie w odpowiedniej kolejności modułów. I tak:

killall pppd
rmmod ppp_async
rmmod ppp_generic
rmmod nozomi
cardctl eject
cardctl insert
modprobe nozomi

7.15.14.6. Logowanie się do sieci GPRS

Aby zalogować się do sieci gprs, musimy w w przypadku Sony Ericsson GCXX podczas komunikacji z modemem wpisać:

AT+CFUN=1,1
AT+CPIN=TWÓJ_PIN

W przypadku OptionGlobeTrotter Fusion+:

AT+CPIN=TWÓJ_PIN

7.15.14.7. Ogólna konfiguracja pppd dla modemów GCXX i OGTFusion+.

Poniżej jest zamieszczony najogólniejszy zestaw plików ppp, który powinien działać zarówno dla GCXX jak i OGTFusion+.

/etc/ppp/peers/edge-gprs

debug

# Max speed
230400

# Do not use hardware flow control
nocrtscts

# Don't keep pppd attached to the terminal:
updetach

# Connection options
nodeflate

lcp-echo-interval 0
# Path to chat script connect/disconnect
connect "/usr/lib/edge-gprs/edge-gprs-connect-chat"

# IP address configuration
:20.0.0.1
noipdefault
usepeerdns

novj
novjccomp
nobsdcomp
defaultroute
# Enter below your path to modem
/dev/ttyS1
/usr/lib/edge-gprs/edge-gprs-connect-chat
/usr/sbin/chat \
TIMEOUT  20 \
ECHO     ON \
ABORT    '\nBUSY\r' \
ABORT    '\nERROR\r' \
ABORT    '\nNO ANSWER\r' \
ABORT    '\nNO CARRIER\r' \
ABORT    '\nNO DIALTONE\r' \
ABORT    '\nRINGING\r\n\r\nRINGING\r' \
SAY      "Press CTRL-C to close the connection at any stage!" \
TIMEOUT  60       \
''       '\rAT'   \
OK       'ATE1'   \
OK       'AT+CGDCONT=1,"IP","AP_OPERATORA"' \
OK       'ATD*99***1#'  \
TIMEOUT  30   \
CONNECT  ""    \
SAY      "\nConnected."  
Teraz tylko pppd call edge-gprs i powinniśmy uzyskać połączenie.

7.15.14.8. Operatorzy GPRS.

7.15.14.9. Modemy GPRS w komputerach UNO

Jeśli zauważymy, że nasz modem działa bardzo wolno, albo że nie działa prawie w ogóle (szczególnie w przypadku komputerów UNO), najprawdopodobniej jest to wina przerwań. W przypadku komputerów UNO, musimy w Bios'ie zmienić ustawienia przerywania IRQ 9 z ISA/PNP na PCI/Legacy. Modem powinien zacząć działać z normalną prędkością. Dotyczy to zarówno modemów GCXX, jak i OGTFusion+.