Po┼é─ůczenie PPP z wykorzystaniem sieci GSM przy pomocy Bluetooth, IRDA, RS232C/USB lub kart pcmcia
Ostatnia zmiana: 2013-11-26 18:43


"Internet bez granic" i "Mobilno┼Ť─ç bez ogranicze┼ä" to ostatnio modne terminy przy promocjach bezprzewodowego dost─Öpu do internetu. Niestety rzeczywisto┼Ť─ç nie jest ju┼╝ tak r├│┼╝owa; bardzo du┼╝e op├│┼║nienia (do 2000ms), zrywanie po┼é─ůcze┼ä, brak zasi─Ögu/sygna┼éu, brak sensownego QoS, ograniczenia ilo┼Ťci nawi─ůzanych po┼é─ůcze┼ä, limity transferu czy w ko┼äcu problemy techniczne po stronie operator├│w mog─ů do┼Ť─ç skutecznie odstraszy─ç od tego typu rowi─ůza┼ä. Ale gdy si─Ö nie ma co si─Ö lubi...
Przy tego typu po┼é─ůczniu mo┼╝na wyr├│zni─ç dwa etapy: skonfigurowanie modemu (przy pomocy kabla, bluteooth, IrDA) i po┼é─ůczenie przy pomocy ppp (tu ju┼╝ standardowo jak przy po┼é─ůczniu ppp np. z TPSA - zminia si─Ö tylko numer i par─Ö opcji dla pppd. Generlanie po┼é─ůczenie wygl─ůda nast─Öpuj─ůco (ASCII art rulez)



                    ---- Bluetooth ---- 
                /			\	      
    Komputer 	- kabel (USB, RS232C) - GSM (telefon, PCMCIA) - internet
                \ 			/	
                    ----- IrDA -------- 


Przyk┼éadowe rozwi─ůzania wykonano na systemie Debian SID i kernel > 2.6.12.

Bluetooth

Specyfikacja Bluetooth obejmuje szybko┼Ť─ç po┼é─ůcze┼ä do 723kbps (z kompresj─ů danych do 1.2Mb). Mo┼╝liwe s─ů interfejsy bluetooth wyst─Öpuj─ůce jako dongle USB (bardzo popularne ostatnio) lub widoczne jako port szeregowy (UART, w przypadku niekt├│rych wbudowanych w notebooki lub kart PCMCIA)
Po┼é─ůczenie wykonuje si─Ö bardzo prosto; w sumie prawie wszystko ju┼╝ jest w systemie. Ja u┼╝y┼éem Bluetooth Dongle USB Dlinka DBT-120 oraz Nokii 6310i.

Przygotowania

W telefonie: w┼é─ůczy─ç bluetootha oraz identyfikacje przez inne urz─ůdzenia (uwaga do nokii - firmware w wersji V5.52. W przypadku starszych wersji softu mog─ů by─ç problemy z po┼é─ůczeniem poprzez bluetooth - w takim przypadku nale┼╝y wykona─ç upgrade firmware). Trzeba przekompilowa─ç jajko z w┼é─ůczeniem blutetooth'a, ppp no i oczywi┼Ťcie USB. Moja przyk┼éadowa konfiguracja:


    CONFIG_BT=m
    CONFIG_BT_L2CAP=m
    CONFIG_BT_SCO=m
    CONFIG_BT_RFCOMM=m
    CONFIG_BT_RFCOMM_TTY=y
    CONFIG_BT_BNEP=m
    CONFIG_BT_BNEP_MC_FILTER=y
    CONFIG_BT_BNEP_PROTO_FILTER=y
    CONFIG_BT_HIDP=m
    CONFIG_BT_HCIUSB=m
    CONFIG_BT_HCIUSB_SCO=y
    # CONFIG_BT_HCIUART is not set
    CONFIG_BT_HCIBCM203X=m
    CONFIG_BT_HCIBPA10X=m
    CONFIG_BT_HCIBFUSB=m
    CONFIG_BT_HCIDTL1=m
    CONFIG_BT_HCIBT3C=m
    CONFIG_BT_HCIBLUECARD=m
    CONFIG_BT_HCIBTUART=m
    CONFIG_BT_HCIVHCI=m

    CONFIG_PPP=m
    # CONFIG_PPP_MULTILINK is not set
    CONFIG_PPP_FILTER=y
    CONFIG_PPP_ASYNC=m
    CONFIG_PPP_SYNC_TTY=m
    CONFIG_PPP_DEFLATE=m
    CONFIG_PPP_BSDCOMP=m
    CONFIG_PPPOE=m
    CONFIG_PPPOATM=m 

Po pod┼é─ůczeniu bluetootha system powinien go wykry─ç. W debianie instalujemy pakiety bluez-utils, bluez-pin, ppp.

Uruchomienie

Sprawdzamy czy w og├│le bluetooth jest widoczny:


    # hciconfig -a
    hci0:   Type: USB
        BD Address: XX:XX:XX:XX:XX:XX ACL MTU: 192:8 SCO MTU: 64:8
        UP RUNNING PSCAN ISCAN
        RX bytes:5046 acl:147 sco:0 events:212 errors:0
        TX bytes:3835 acl:127 sco:0 commands:52 errors:0
        Features: 0xff 0xff 0x0f 0x00 0x00 0x00 0x00 0x00
        Packet type: DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV2 HV3
        Link policy: RSWITCH HOLD SNIFF PARK
        Link mode: SLAVE ACCEPT
        Name: 'localhost-0'
        Class: 0x3e0100
        Service Classes: Networking, Rendering, Capturing
        Device Class: Computer, Uncategorized
        HCI Ver: 1.1 (0x1) HCI Rev: 0x20d LMP Ver: 1.1 (0x1) LMP Subver: 0x20d
        Manufacturer: Cambridge Silicon Radio (10)

XX:XX:XX:XX:XX:XX to mac adres naszego bluetootha. Nazwa to nazwa naszego hosta + numer interfejsu (mo┼╝na j─ů zmieni─ç w pliku konfiguracyjnym).
Nast─Öpnie:


    # hcitool scan
        Scanning ...
            YY:YY:YY:YY:YY:YY Nokia 6310i

YY:YY:YY:YY:YY:YY to mac adres naszego telefonu. Nazwa jest taka jak ustawiona w telefonie. Je┼╝eli widoczne jest wi─Öcej urz─ůdze┼ä to ca┼ékiem mo┼╝liwe, ┼╝e kto┼Ť w okolicy ma w┼é─ůczony bluetooth w telefonie :). W pliku /etc/bluetooth/rfcomm.conf zaszywamy na sta┼ée ten mac adres ┼╝eby specjalnie nie robi─ç ustawie┼ä z ka┼╝dym razem:


    rfcomm0 {
        bind yes;
        device YY:YY:YY:YY:YY:YY;
        channel     1;
        comment "Nokia 6310i";
    }    

Zapis YY:YY:YY:YY:YY:YY trzeba zamienić na mac adres telefonu. Następnie restartujemy usługę bluetooth.
W innych dystrybucjach mo┼╝na te┼╝ zrobi─ç to "r─Öcznie":


    # rfcomm bind rfcomm0 YY:YY:YY:YY:YY:YY

W tym momencie telefon powinien poprosi─ç o has┼éo; to samo has┼éo powinno zosta─ç wprowadzone w komputerze. Pytanie o has┼éo nie nast─ůpi, je┼╝eli urz─ůdzenia zosta┼éy ju┼╝ sparowane.

Numer kana┼éu do us┼éugi "Dial-up Networking" mo┼╝na uzyska─ç wydaj─ůc polecenie:


    # spdtool search DUN
    Inquiring ...
    Searching for DUN on YY:YY:YY:YY:YY:YY ...
    Service Name: Dial-up networking
    Service RecHandle: 0x10002
    Service Class ID List:
        "Dialup Networking" (0x1103)
        "Generic Networking" (0x1201)
    Protocol Descriptor List:
        "L2CAP" (0x0100)
        "RFCOMM" (0x0003)
            Channel: 1
    Language Base Attr List:
        code_ISO639: 0x656e
        encoding:    0x6a
        base_offset: 0x100
    Profile Descriptor List:
        "Dialup Networking" (0x1103)
            Version: 0x0100

Zwykle jest to kanał numer 1.

To wszystko. Modem powinien by─ç widoczny pod /dev/rfcomm0 (lub /dev/bluetooth/rfcomm/0 - Radio Frequency COMM). Mo┼╝na wykona─ç dowi─ůzanie symboliczne:


    # ln -s /dev/rfcomm0 /dev/modem
    lub
    # ln -s /dev/bluetooth/rfcomm/0 /dev/modem

Nokia 6310i jest do┼Ť─ç prostym telefonem. O wiele bardziej skompilowanym jest Sony Ericsson P910i. To komentarz nades┼éany przez Szymona Madeja:

"Moduł BT, który używam to karta" PCMCIA Xircom Credit Card Bluetooth". Jest troche bardziej problematyczny niż wyżej opisany moduł USB.

Pierwszy problem to fakt ┼╝e konieczne jest zainstalowanie paczki (Debian) bluez-pcmcia-support albo za ka┼╝dym razem trzeba b─Ödzie spina─ç modem (u mnie ttyS2) ze sterownikiem xircom za pomoc─ů hciattach bo inaczej nie powstanie urz─ůdzenie hci0.

Druga sprawa to fakt ┼╝e ten modu┼é BT Xircoma u┼╝ywa sterownika hci-uart (ma "Type: UART" nie jak powy┼╝szy "Type: USB"). Du┼╝o czasu mi zaje┼éo, doj┼Ťcie do tego dlaczego urz─ůdzenie hci0 mi powstaje ale jest DOWN bo umiera na inicjalizacji. A problem rozwi─ůza┼éo resetowanie modu┼éu BT przed jego inicjalizacj─ů (parametr reset=1 modu┼éu hci-uart).

I ostatnia i najwa┼╝niejsza sprawa to konfiguracja RFCOMM. Urz─ůdzenie rfcomm0 tworzy┼éo si─Ö ale ppp umiera┼éo z dziwnymi b┼é─Ödami I/O. Dogoogla┼éem si─Ö w ko┼äcu do faktu, ┼╝e przyczyna tkwi w moim telefonie, kt├│rego u┼╝ywa┼éem do zestawiania GPRS. Mianowicie Sony-Ericsson P910i (jak i pewnie wi─Ökszo┼Ť─ç jak nie wszystkie telefony ze stajni S-E) nie daje mo┼╝liwo┼Ťci zestawienia po┼é─ůczenia GPRS (a precyzyjnie to DUN - Dial-Up Networking) na dowolnym kanale. Najpierw trzeba sprawdzi─ç na jakim kanale BT mo┼╝na zestawia─ç po┼é─ůczenia BT:
Skanowanie w poszukiwaniu sprz─Ötu sinoz─Öbego:


    # hcitool scan
    Scanning ...
            XX:XX:XX:XX:XX:XX P910i

Jak widać znalazł telefon. Kolejny etap to znaleźć kanał na którym w naszym telefonie pracuje DUN (Dial-Up Networking):


    # sdptool search DUN --bdaddr XX:XX:XX:XX:XX:XX
    Inquiring ...
    Searching for DUN on XX:XX:XX:XX:XX:XX ...
    Service Name: Dial-up networking
    Service RecHandle: 0x10000
    Service Class ID List:
        "Dialup Networking" (0x1103)
        "Generic Networking" (0x1201)
    Protocol Descriptor List:
        "L2CAP" (0x0100)
        "RFCOMM" (0x0003)
            Channel: 1
    Language Base Attr List:
        code_ISO639: 0x656e
        encoding:    0x6a
        base_offset: 0x100
    Profile Descriptor List:
        "Dialup Networking" (0x1103)
            Version: 0x0100
    
    Searching for DUN on XX:XX:XX:XX:XX:XX ...
    Service Name: Dial-up Networking
    Service Description: Dial-up Networking
    Service Provider: Sony Ericsson
    Service RecHandle: 0x10007
    Service Class ID List:
        "Dialup Networking" (0x1103)
    Protocol Descriptor List:
        "L2CAP" (0x0100)
        "RFCOMM" (0x0003)
            Channel: 7
    Language Base Attr List:
        code_ISO639: 0x656e
        encoding:    0x6a
        base_offset: 0x100
    Profile Descriptor List:
        "Dialup Networking" (0x1103)
            Version: 0x0100

Jak wida─ç niby oba znalezione kana┼éy 1 i 7 umo┼╝liwiaj─ů zestawienie DUN, ale w przypadku kana┼éu 1 jest to niemo┼╝liwe - pewnie zosta┼é wylistowany z racji tego ┼╝e kana┼é 1 jest przede wszystkim "Generic Networking" w co pewnie wpada i DUN. W tym przypadku jest to kana┼é 7. W pliku /etc/bluetooth/rfcomm.conf dopisujemy wi─Öc tak─ů konfiguracj─Ö naszego urz─ůdzenia:


    rfcomm0 {
        bind yes;
        device XX:XX:XX:XX:XX:XX;
        channel 7;
        comment "P910i";
    }

I dopiero wtedy po poprawnym skonfigurowaniu ppp uda┼éo mi si─Ö zestawi─ç po┼é─ůczenie GPRS."

IrDA

Specyfikacja IrDA obejmuje dwie szybko┼Ťci przesy┼éu danych: SIR (do 115200bps) i FIR (do 4Mbps). W pierwszym przypadku IrDA jest zwyk┼éym portem szeregowym (nawet takim samodzielnego monta┼╝u). Mo┼╝na tak┼╝e kupi─ç odpowiednie przej┼Ťci├│wki z RS232C lub wpinane bezpo┼Ťrednio w p┼éyt─Ö g┼é├│wn─ů. W drugim przypadku na p┼éycie niezb─Ödny jest odpowiedni chip.

Uzyskanie po┼é─ůczenia poprzez IrDA jest stosunkowo proste: nale┼╝y za┼éadowa─ç modu┼é SIR lub FIR oraz uruchomi─ç polecenie irattach.

Do przykładu wykorzystano telefon Nokia 6310i oraz notebooka wyposażonego w w IrDA FIR (ThinkPad 600, moduł nsc-ircc)
Konfiguracja j─ůdra:


    CONFIG_IRDA=m
    CONFIG_IRLAN=m
    CONFIG_IRNET=m
    CONFIG_IRCOMM=m
    # CONFIG_IRDA_ULTRA is not set
    CONFIG_IRDA_CACHE_LAST_LSAP=y
    CONFIG_IRDA_FAST_RR=y
    # CONFIG_IRDA_DEBUG is not set
    CONFIG_IRTTY_SIR=m
    # CONFIG_DONGLE is not set
    CONFIG_IRPORT_SIR=m
    # CONFIG_DONGLE_OLD is not set
    # CONFIG_USB_IRDA is not set
    # CONFIG_SIGMATEL_FIR is not set
    CONFIG_NSC_FIR=m
    # CONFIG_WINBOND_FIR is not set
    # CONFIG_TOSHIBA_FIR is not set
    # CONFIG_SMC_IRCC_FIR is not set
    # CONFIG_ALI_FIR is not set
    # CONFIG_VLSI_FIR is not set
    # CONFIG_VIA_FIR is not set

Konfiguracja przystosowana jest do mojego FIR'a. Nale┼╝y pami─Öta─ç o skompilowaniu odpowiedniego drivera. W przypadku dongle USB b─Ödzie to CONFIG_USB_IRDA.
W pliku /etc/modules.conf (/etc/modprobe.d/*) powinny si─Ö znale┼║─ç wpisy:


    alias tty-ldisc-11 irtty
    alias char-major-161 ircomm-tty

Nast─Öpnie nale┼╝y zainstalowa─ç pakiet irda-utils. W debianie wystarczy wyda─ç polecenie


    # aptitude install irda-utils

a nast─Öpnie udzieli─ç odpowiedzi dotycz─ůce konfiguracji interfejsu IrDA. Mo┼╝na to te┼╝ oczywi┼Ťcie wykona─ç "r─Öcznie".

SIR

Aby skonfigurowa─ç interfejs IrDA w trybie SIR wystarczy poda─ç port szeregowy. Je┼╝eli irda do┼é─ůczona jest to portu ttyS1 to nale┼╝y wyda─ç polecenie:


    # irattach /dev/ttyS1 none -s

Opcja -s oznacza w┼é─ůczony tryb discovery (aktywne poszukiwanie urz─ůdze┼ä IrDA - powoduje to zwi─Ökszone zu┼╝ycie energii w laptopie)

FIR

Aby skonfigurować interfejs IrDA w trybie FIR należy załadować moduł sterownika danego chipa. W moim przypadku był to nsc-ircc:


    # modprebe nsc_ircc

W przypadku niewykrycia chipa można podać paramtery do modułu; odsyłam do odpowiedniego manuala. Po załadowaniu modułu należy wydać polecenie irattach:


    # irattach irda0 none -s

irda0 to nazwa interfejsu tworzona przez sterownik FIR.
Należy pamiętać żeby sterownik FIR bezwzględnie załadować przed modułem obsługi portów szeregowych 8250. W przeciwnym przypadku IrDA zostanie zajęta przez zwykły port SIR i sterownik FIR nie będzie w stanie zainicjalizować chipa.

IrDA powinna by─ç uruchomiona. Nale┼╝y uaktywni─ç interfejs IrDA w telefonie a nast─Öpnie przysun─ů─ç go na ok 10cm od interfejsu IrDA w notebooku. Je┼╝eli intefejs zosta┼é uruchomiony i telefon zosta┼é wykryty, to po wydaniu polecenia:


    # cat /proc/net/irda/discovery

powinna pojawi─ç si─Ö informacja o wykrytym telefonie:


    IrLMP: Discovery log:

    nickname: Nokia 6310i, hint: 0xb125, saddr: 0xad550934, daddr: 0x0000f3ea

Przy pomocy minicoma można sprawdzić czy możemy "rozmawiać" z telefonem przy pomocy poleceń AT. Interfejsem kominikacyjnym IrDA jest /dev/ircommX (zwykle 0 - Infared COMM).

Na ko┼äcu mo┼╝na wykona─ç dowi─ůzanie symboliczne:


    # ln -s /dev/ircomm0 /dev/modem

W przypadku problem├│w z wykryciem telefonu nale┼╝y skompiliwa─ç ird─Ö z obs┼éug─ů debug, wy┼é─ůczy─ç tryb FIR i przej┼Ť─ç na SIR (cz─Ö┼Ť─ç telefon├│w na problem z wi─Ökszymi szybko┼Ťciami). Dobrym pomys┼éem jest te┼╝ zupe┼éne wy┼éadowanie modu┼é├│w zwi─ůzanych z IrDA i portami szeregowymi, a nast─Öpnie uruchomienie irattach z odpowiednimi opcjami. Nale┼╝y tez pami─Öta─ç o uaktywnieniu interfejsu IrDA w telefonie jak r├│wnie┼╝ o widoczno┼Ťc optycznej pomi─Ödzy telefonem a okienkiem interfejsu IrDA w komputerze. Nale┼╝y tez sprawdzi─ç czy istnieje /dev/ircommX. Mo┼╝na go za┼éo┼╝yc poleceniem


    # mknod /dev/ircomm0 c 161 0

Problemem mo┼╝e te┼╝ by─ç zbyt stara wersja firmware telefonu - niestety w tym przypadku nale┼╝y uda─ç si─Ö do serwisu i wgra─ç nowe firmware.
Nale┼╝y r├│wniez pami─Öta─ç, ┼╝e w telefonach zwykle IrDA jest typu SIR, czyli 115200bps. Je┼╝eli telefon jest nowszej generacji i posiada np. EDGE, mo┼╝emy zosta─ç ograniczeni w transferze przez IrD─ś do 115200bps - w takim przypadku nale┼╝y kupi─ç kabel lub przej┼Ť─ç na bluetooth'a.

RS232 / USB

W przypadku telefon├│w GSM zwykle istnieje tak┼╝e mo┼╝liwo┼Ť─ç po┼é─ůczenia ich za pomoc─ů odpowiedniego kabelka RS232C (np. Nokia 5110, 7110, 6310 itd.), za pomoc─ů kabla USB (np. Nokia 6230(i)) lub kabla USB/RS (zwyk┼éa przej┼Ťci├│wka z USB na RS232C). Jedyn─ů konfiguracj─ů jak─ů nale┼╝y wykona─ç w systemie to skonfigurowanie portu szeregowego RS232C (ttySX) przy pomocy polecenia setserial lub portu USB (ttyACMX).

Karty PCMCIA GPRS

Popularne ostatnio karty Sony Ericsson GC75, GC75e, GC85 czy BlueConnect s─ů tak prawd─Ö m├│wi─ůc zwyk┼éymi modemami GSM widocznymi w systemie jako port szeregowy.

Konfiguracja karty sprowadza si─Ö do w┼é─ůczenia w konfiguracji j─ůdra obs┼éugi port├│w szeregowych PCMCIA


    Device Drivers  ---> 	  
        Character devices  --->
            Serial drivers     ---> 
                [*] 8250/16550 and compatible serial support
                [M]   8250/16550 PCMCIA device support  

oraz oczywi┼Ťcie obs┼éugi kart PCMCIA.

Po w┼éo┼╝eniu karty w logach powinna by┼Ť widoczna informacja o wykryciu nast─Öpnego portu szeregowego, np:


    ttyS3 at I/O 0x3f8 (irq = 3) is a 16550A

Numer portu (ttyS3) uzale┼╝niony jest od ilo┼Ťci obecnych ju┼╝ port├│w szeregowych w systemie. W przypadku problem├│w nale┼╝y spr├│bowa─ç skonfigurowa─ç port szeregowy przy pomocy polecenia setserial (ustawi─ç odpowiedni─ů szybko┼Ť─ç portu), np:


    # setserial /dev/ttyS3 spd_vhi	ustawia szybko┼Ť─ç 115k zamiast 38.4k
    # setserial /dev/ttyS3 spd_shi	ustawia szybko┼Ť─ç 230k zamiast 38.4k
    # setserial /dev/ttyS3 spd_warp	ustawia szybko┼Ť─ç 460k zamiast 38.4k

Poniewa┼╝ karty PCMCIA s─ů zwykle "szybsze" i cz─Östo wyst─Öpuj─ů w postaci GPRS/EDGE lub GRPS/UMTS zalecane jest ustawienie ich na jak najwi─Öksz─ů szybko┼Ť─ç (najlepiej 460800).
Zwykle, aby mo┼╝na by┼éo nawi─ůza─ç po┼é─ůczenie z modem GSM i wykonywa─ç polecenia AT nale┼╝y wyda─ç do niego odpowiednie polecenia:


    # minicom --noinit /dev/ttyS3 

a po pojawieniu si─Ö okna:


    AT+CFUN=1,1
    AT+CPIN=PIN

Oczywi┼Ťcie w miejsce PIN nale┼╝y poda─ç kod pin do karty SIM. Mo┼╝na tak┼╝e te polecenia wyda─ç w skryptach startowych systemu lub przy po┼é─ůczeniu ppp (uwaga: w niekt├│rych kartach takie polecenie mo┼╝na wyda─ç tylko raz, przy ponownej pr├│bie karta mo┼╝e przesta─ç nawi─ůzywa─ç po┼é─ůczenia).
Po podaniu PINu nale┼╝y odczeka─ç ok 10 - 20 sekund, ┼╝eby terminal GSM zd─ů┼╝y┼é zalogowa─ç si─Ö do sieci. W przypadku skrypt├│w startowych mo┼╝na tak┼╝e doda─ç '\d' powoduj─ůce u┼Ťpienie demona pppd na sekund─Ö. Przyk┼éadowy skrypt dla chat mo┼╝e wygl─ůda─ç nast─Öpuj─ůco:


    # /etc/chatscripts/gprs
    TIMEOUT         5
    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'
    ''              \rAT
    TIMEOUT         30
    OK              'AT+CFUN=1,1'		     
    OK              'AT+CPIN="PIN"'		     
    OK              'ATE1\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d'      
    OK              'AT+CGDCONT=1,"IP","www.plusgsm.pl","",0,0'
    OK              ATD*99***1#
    CONNECT ""

W przypadku posiadania karty GPRS/EDGE lub GPRS/UMTS nie ma potrzeby dodatkowego konfigurowania karty; prze┼é─ůczenie z GPRS na EDGE/UMTS wykonywane jest samoczynnie i "sprz─Ötowo".

Niekiedy warto doda─ç ATZ (zresetowanie modemu) przed ATE1.

Po poprawnym skonfigurowaniu karty nale┼╝y wykona─ç (czysta kosmetyka)


    # ln -s /dev/ttyS3 /dev/modem

UWAGA: niekt├│re karty sprawiaj─ů niekiedy du┼╝o problem├│w: przegrzewaj─ů si─Ö, wymagaj─ů odpowiedniego firmware itd. Warto w takich przypadkach zajrze─ç na forum np. http://www.bez-kabli.pl . W przypadku najnowszych kart GPRS/EDGE/UMTS/HSDPA nale┼╝y te┼╝ zainstalowa─ç odpowiednie sterowniki Nozomi.

Po┼é─ůczenie PPP

Po┼é─ůczenie pakietowe GPRS ma t─ů zalet─Ö, ┼╝e p┼éaci si─Ö za ilo┼Ť─ç przes┼éanych danych a nie za czas po┼é─ůczenia. Operatorzy cz─Östo udost─Öpniaj─ů tez inny numer s┼éu┼╝─ůcy do po┼é─ůcze┼ä internetowych; jednak┼╝e jest on "zwyk┼éym" numerem, koszt naliczany jest za czas po┼é─ůczenia a pr─Ödko┼Ť─ç tylko 9600bps. W przypadku GPRS szyko┼Ť─ç ograniczona jest do 56kbps (dla modem├│w GPRS klasy 10).
W przpadku GPRS teoretycznie mo┼╝na zestawi─ç po┼é─ůczenie i by─ç online ca┼éy dzie┼ä. W praktyczne nast─Öpuje do┼Ť─ç cz─Östo zerwanie lub zawieszenie po┼é─ůczenia.

Skrypty

Maj─ůc ju┼╝ dzia┼éaj─ůce i sprawdzone po┼é─ůczenie /dev/modem mo┼╝emy napisa─ç skrypty startowe do po┼é─ůczenia
Mo┼╝na to wykona─ç przy pomocy pppconfig lub stworzy─ç je r─Öcznie:


    # /etc/chatscripts/gprs
    TIMEOUT         5
    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'
    ''              \rAT
    TIMEOUT         30
    OK              ATZ
    OK              ATE1
    OK              'AT+CGDCONT=1,"IP","www.plusgsm.pl","",0,0'
    OK              ATD*99***1#
    CONNECT ""

Skrypty s─ů dla PlusGSM, dla innego trzeba zmieni─ç linijk─Ö 'AT+CGDCONT=1,"IP","www.plusgsm.pl","",0,0' na tak─ů, jaka powinna by─ç dla danego operatora:

Plus: (użytkownik: brak, hasło: brak): 'AT+CGDCONT=1,"IP","www.plusgsm.pl","",0,0'
Era: (użytkownik: erainternet, hasło: erainternet): 'AT+CGDCONT=1,"IP","erainternet","",0,0'
Heyah: (użytkownik: heyah, hasło: heyah): 'AT+CGDCONT=1,"IP","heyah.pl","",0,0'
Idea: (użytkownik: ppp, hasło: ppp): 'AT+CGDCONT=1,"IP","www.idea.pl","",0,0'

U┼╝ytkownika i has┼éo (o ile jest wymagane) nale┼╝y umie┼Ťci─ç w pliku /etc/ppp/pap-secrets, np:


    ppp * ppp

Linia


    OK	ATD*99***1#

definiuje numer GPRS (jest on identyczny dla wszystkich operator├│w). Og├│lna posta─ç tego numeru to:


    ATD*99[*APN[*Protocol[*CID]]]# 

gdzie zar├│wno "APN", "Protocol" jak i "CID" s─ů opcjonalne (przyjmuj─ů w├│wczas warto┼Ťci domy┼Ťlne). Warto┼Ťci "Protocol" nie nale┼╝y ustawia─ç. CID (ConnectionID) okre┼Ťla numer kolejny punktu dost─Öpowego APN zdefiniowanego w telefonie. Zwykle jest zdefiniowany jeden taki punkt (wpisany na pozycji 1), ale mo┼╝liwe jest zdefiniowanie wielu takich punkt├│w; wtedy nale┼╝y poda─ç odpowiedni─ů cyfr─Ö odpowiadaj─ůc─ů pozycji wpisanego APN.

Niekiedy nale┼╝y jeszcze doda─ç ATZ przed ATE1 w celu zresetowania modemu w telefonie.


    # /etc/ppp/peers/gprs
    /dev/modem 
    115200
    connect '/usr/sbin/chat -v -f /etc/chatscripts/gprs'
    noauth
    defaultroute
    debug
    noipdefault
    local
    ipcp-accept-local
    novj
    novjccomp
    lcp-echo-failure 4
    lcp-echo-interval 65535

Przy za┼éo┼╝eniu, ┼╝e modem jest widoczny pod /dev/modem (dlatego te┼╝ w przyk┼éadach bluetooth czy irda by┼éy robione odpowiednie linki). Nic nie stoi na przeszkodzie, ┼╝eby umie┼Ťci─ç tam /dev/ttyS3, /dev/rfcomm0 czy /dev/ircomm0. Liczba 57600 okre┼Ťla pr─Ödko┼Ť─ç komunikacji z modem (telefonem GSM). Mo┼╝e si─Ö zdarzy─ç, ┼╝e modem b─Ödzie dzia┼éa─ç pod inn─ů szybko┼Ťci─ů (np. 230400 lub 460800); nale┼╝y to dobra─ç w zale┼╝no┼Ťci od posiadanego sprz─Ötu.
W zale┼╝no┼Ťci od operatora (roz┼é─ůczanie si─Ö po┼é─ůcze┼ä) konieczna mo┼╝e si─Ö okaza─ç zmiana parametr├│w niekt├│rych parametr├│w:


    mtu 524
    mru 524
    nocrtscts
    nocdtrcts

W przpadku po┼é─ůczenia wymagaj─ůcego podania u┼╝ytkownika lub has┼éa nale┼╝y doda─ç odpowiedni─ů lini─Ö, np.


    user "ppp"

Uruchomienie pppd

Zostaje tylko wykonanie po┼é─ůczenia. Na spos├│b debianowy jest to:


    # pon gprs

lub standardowo:


    # pppd

W logach powinno zosta─ç mniej wiecej co┼Ť takiego:


Jul 10 10:23:03 localhost pppd[6242]: pppd 2.4.3 started by root, uid 0
Jul 10 10:23:23 localhost chat[6246]: timeout set to 5 seconds
Jul 10 10:23:23 localhost chat[6246]: abort on (\nBUSY\r)
Jul 10 10:23:23 localhost chat[6246]: abort on (\nERROR\r)
Jul 10 10:23:23 localhost chat[6246]: abort on (\nNO ANSWER\r)
Jul 10 10:23:23 localhost chat[6246]: abort on (\nNO CARRIER\r)
Jul 10 10:23:23 localhost chat[6246]: abort on (\nNO DIALTONE\r)
Jul 10 10:23:23 localhost chat[6246]: abort on (\nRINGING\r\n\r\nRINGING\r)
Jul 10 10:23:23 localhost chat[6246]: send (^MAT^M)
Jul 10 10:23:23 localhost chat[6246]: timeout set to 12 seconds
Jul 10 10:23:23 localhost chat[6246]: expect (OK)
Jul 10 10:23:23 localhost chat[6246]: ^MAT^M^M
Jul 10 10:23:23 localhost chat[6246]: OK
Jul 10 10:23:23 localhost chat[6246]:  -- got it
Jul 10 10:23:23 localhost chat[6246]: send (ATE1^M)
Jul 10 10:23:23 localhost chat[6246]: expect (OK)
Jul 10 10:23:23 localhost chat[6246]: ^M
Jul 10 10:23:23 localhost chat[6246]: ATE1^M^M
Jul 10 10:23:23 localhost chat[6246]: OK
Jul 10 10:23:23 localhost chat[6246]:  -- got it
Jul 10 10:23:23 localhost chat[6246]: send (AT+CGDCONT=1,"IP","www.plusgsm.pl","",0,0^M)
Jul 10 10:23:24 localhost chat[6246]: expect (OK)
Jul 10 10:23:24 localhost chat[6246]: ^M
Jul 10 10:23:24 localhost chat[6246]: AT+CGDCONT=1,"IP","www.plusgsm.pl","",0,0^M^M
Jul 10 10:23:24 localhost chat[6246]: OK
Jul 10 10:23:24 localhost chat[6246]:  -- got it
Jul 10 10:23:24 localhost chat[6246]: send (ATD*99***1#^M)
Jul 10 10:23:24 localhost chat[6246]: expect (CONNECT)
Jul 10 10:23:24 localhost chat[6246]: ^M
Jul 10 10:23:27 localhost chat[6246]: ATD*99***1#^M^M
Jul 10 10:23:27 localhost chat[6246]: CONNECT
Jul 10 10:23:27 localhost chat[6246]:  -- got it
Jul 10 10:23:27 localhost chat[6246]: send (^M)
Jul 10 10:23:27 localhost pppd[6242]: Serial connection established.
Jul 10 10:23:27 localhost pppd[6242]: using channel 1
Jul 10 10:23:27 localhost pppd[6242]: Using interface ppp0
Jul 10 10:23:27 localhost pppd[6242]: Connect: ppp0 <--> /dev/modem
Jul 10 10:23:28 localhost pppd[6242]: sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0xa0458d44> <pcomp> <accomp>]
Jul 10 10:23:28 localhost pppd[6242]: rcvd [LCP ConfRej id=0x1 <magic 0xa0458d44> <pcomp> <accomp>]
Jul 10 10:23:28 localhost pppd[6242]: sent [LCP ConfReq id=0x2 <asyncmap 0x0>]
Jul 10 10:23:28 localhost pppd[6242]: rcvd [LCP ConfAck id=0x2 <asyncmap 0x0>]
Jul 10 10:23:30 localhost pppd[6242]: rcvd [LCP ConfReq id=0x0 <auth pap> <mru 1500> <asyncmap 0xa0000>]
Jul 10 10:23:30 localhost pppd[6242]: sent [LCP ConfAck id=0x0 <auth pap> <mru 1500> <asyncmap 0xa0000>]
Jul 10 10:23:30 localhost pppd[6242]: sent [LCP EchoReq id=0x0 magic=0x0]
Jul 10 10:23:30 localhost pppd[6242]: sent [PAP AuthReq id=0x1 user="localhost" password=<hidden>]
Jul 10 10:23:30 localhost pppd[6242]: rcvd [LCP EchoRep id=0x0 00]
Jul 10 10:23:30 localhost pppd[6242]: lcp: received short Echo-Reply, length 1
Jul 10 10:23:30 localhost pppd[6242]: rcvd [PAP AuthAck id=0x1 ""]
Jul 10 10:23:30 localhost pppd[6242]: PAP authentication succeeded
Jul 10 10:23:30 localhost kernel: PPP BSD Compression module registered
Jul 10 10:23:30 localhost kernel: PPP Deflate Compression module registered
Jul 10 10:23:30 localhost pppd[6242]: sent [CCP ConfReq id=0x1 <deflate 15> <deflate(old#) 15> <bsd v1 15>]
Jul 10 10:23:30 localhost pppd[6242]: sent [IPCP ConfReq id=0x1 <addr 0.0.0.0>]
Jul 10 10:23:30 localhost pppd[6242]: rcvd [IPCP ConfReq id=0x0 <addr 10.6.6.6>]
Jul 10 10:23:30 localhost pppd[6242]: sent [IPCP ConfAck id=0x0 <addr 10.6.6.6>]
Jul 10 10:23:30 localhost pppd[6242]: rcvd [LCP ProtRej id=0x0 80 fd 01 01 00 0f 1a 04 78 00 18 04 78 00 15 03 2f]
Jul 10 10:23:30 localhost pppd[6242]: Protocol-Reject for 'Compression Control Protocol' (0x80fd) received
Jul 10 10:23:32 localhost pppd[6242]: rcvd [IPCP ConfNak id=0x1 <addr 172.17.66.153>]
Jul 10 10:23:32 localhost pppd[6242]: sent [IPCP ConfReq id=0x2 <addr 172.17.66.153>]
Jul 10 10:23:32 localhost pppd[6242]: rcvd [IPCP ConfAck id=0x2 <addr 172.17.66.153>]
Jul 10 10:23:32 localhost pppd[6242]: local  IP address 172.17.66.153
Jul 10 10:23:32 localhost pppd[6242]: remote IP address 10.6.6.6
Jul 10 10:23:32 localhost pppd[6242]: Script /etc/ppp/ip-up started (pid 6276)
Jul 10 10:23:32 localhost pppd[6242]: Script /etc/ppp/ip-up finished (pid 6276), status = 0x0

Mo┼╝na jeszcze dla pewno┼Ťci wykona─ç route, ifconfig, sprawdzi─ç czy jest interfejs ppp0 i spr├│bowa─ç wykona─ç np. ping www.google.pl (niestety, czasy s─ů rz─Ödu 700 - 2000ms). Najcz─Östszym problem jest brak ustawionych dns├│w. Je┼╝eli ping 64.233.183.99 zadzia┼éa, a ping www.google.pl ju┼╝ nie, to nale┼╝y w pierszej kolejno┼Ťci sprawdzi─ç ustawienie dns├│w (plik /etc/resolv.conf)!
Je┼╝eli wszystko dzia┼éa to mo┼╝na usun─ů─ç opcje debug z ppp oraz -v z wywo┼éania chat, b─Ödzie mniej informacji w logach.
Roz┼é─ůczenie po┼é─ůczenia nast─Öpuje po wywo┼éaniu polecenia:


    # poff gprs

Zostaje jeszcze par─Ö spraw kosmetycznych - dodanie user├│w do grupy dialup ┼╝eby mogli ze swojego konta uruchamia─ç po┼é─ůczenie oraz ewentualnie skonfigurowanie appletu z GNOME, ┼╝eby mie─ç "┼éadny" graficzny klikany program do po┼é─ůczenia.