Modem EDGE Comander w usłudze iPlus

Witam.

W ofercie PlusGSM jest całkiem rozsądna oferta stałego dostępu do internetu o nazwie iPlus. Oferowane tempo transmisji nie jest zbyt wysokie (u mnie waha się między 80 a 120 kbit/s), ale “internet pod każdym krzakiem” jest całkiem obiecujący.

Opiszę tutaj, w jaki sposób skonfigurować iPlusa na modemie Comander USB. Konfiguracja jest robiona pod kątem Gentoo, ale powinna działać na każdym współczesnym systemie Linux. Nietypowość rozwiązania polega na tym, że modem łączy się automagicznie po wpięciu go do USB.

Przygotowanie kernela

Ze stron http://www.comander.pl można ściągnąć łatki na kernel. Można albo założyć wymienioną łatkę, albo zrobić to na piechotę: W pliku /drivers/usb/serial/ftdi_sio.c dodać wskazane linijki

static struct usb_device_id id_table_combined [] = {
 { USB_DEVICE(FTDI_VID, FTDI_IRTRANS_PID) },
 { USB_DEVICE(FTDI_VID, FTDI_IPLUS1_PID) },   /* Dodaj tą linijkę */
 { USB_DEVICE(FTDI_VID, FTDI_IPLUS2_PID) },   /* Dodaj tą linijkę */
 { USB_DEVICE(FTDI_VID, FTDI_SIO_PID) },
 { USB_DEVICE(FTDI_VID, FTDI_8U232AM_PID) },
 { USB_DEVICE(FTDI_VID, FTDI_8U232AM_ALT_PID) },

W pliku /drivers/usb/serial/ftdi_sio.h dodać wskazane linijki

/* www.irtrans.de device */
#define FTDI_IRTRANS_PID 0xFC60 /* Product Id */

/* comandrer iPLUS device - dodaj poniższe 2 linijki */
#define FTDI_IPLUS1_PID 0xCF58 /* Product Id */
#define FTDI_IPLUS2_PID 0xD070 /* Product Id */

/* www.crystalfontz.com devices - thanx for providing free devices for evaluation! */
/* they use the ftdi chipset for the USB interface and the vendor id is the same */
#define FTDI_XF_632_PID 0xFC08 /* 632: 16x2 Character Display */

Po dodaniu wpisów należy w konfiguracji kernela włączyć pozycję Device Drivers-> USB Support-> USB Serial Converter Support->USB FTDI Single Port Serial Driver.

Po skompilowaniu, zainstalowaniu i załadowaniu modułu ftdi_sio, po podłączeniu modemu powinno pojawić się urządzenie /dev/usb/tts/0 lub /dev/ttyUSB0.

Konfiguracja systemu

O ile zakładanie łatki producent zaprezentował dobrze, o tyle konfiguracja systemu po prostu nie działa. Zapomniano po prostu wysyłać PIN do modemu…

Na początek mój plik /etc/chatscripts/plus. Pamiętaj wpisać swój PIN w zaznaczonym miejscu!

# (C) 2006 Paweł Kraszewski http://www.kraszewscy.net
# Błędy - <b>następne dwie linijki powinny być w jednej</b>!
ABORT BUSY ABORT 'NO CARRIER' ABORT VOICE ABORT 'NO DIALTONE'
ABORT 'NO DIAL TONE&rsquo; ABORT 'NO ANSWER' ABORT DELAYED
# Inicjalizacja
'' AT+CFUN=1
'OK' AT
'OK' AT
'OK' AT+CPIN?
TIMEOUT 5
'+CPIN: READY-AT+CPIN=&quot;<b>Tw&oacute;j PIN</b>&quot;-OK' AT
'OK' AT
'OK' AT
'OK' AT
'OK' AT
'OK' AT
'OK' AT
'OK' AT
'OK' AT
'OK' AT+cgdcont=1,&quot;ip&quot;,&quot;www.plusgsm.pl&quot;
'OK' AT
'TIMEOUT-AT-OK&rsquo; AT
'OK' AT
TIMEOUT 60
'OK' 'ATD*99#'
CONNECT dc

Powtórzenia są konieczne, gdyż modem odpowiada 'OK' zanim tak naprawdę skończy daną operację. Najbardziej jest to istotne dla komendy AT+cgdcont, dlatego po niej jest myk z timeoutem.

Następny jest plik /etc/ppp/peers/plus. Zaznaczony fragment wypełnij urządzeniem modemu w Twoim systemie.

# (C) 2006 Paweł Kraszewski http://www.kraszewscy.net
hide-password
noauth
connect "/usr/sbin/chat -v -t 5 -f /etc/chatscripts/plus"
debug
/dev/ttyUSB0
115200
defaultroute
noipdefault
user "ppp"
remotename plus
ipparam plus

usepeerdns

Następny jest plik /etc/ppp/resolv/plus. Ma mieć postać jednej linijki z pojedynczym znakiem #.

Następny jest plik /etc/ppp/ip-up:

#!/bin/bash
 
 REALRESOLVCONF='/etc/resolv.conf'
 
 {
    grep --invert-match '^nameserver[[:space:]]' $REALRESOLVCONF
    cat /etc/ppp/resolv.conf
 } > $REALRESOLVCONF.tmp
 
 cp -dpP $REALRESOLVCONF $REALRESOLVCONF.pppd-backup
 mv $REALRESOLVCONF.tmp $REALRESOLVCONF
 chmod 0644 /etc/resolv.conf
 chown root:root /etc/resolv.conf

Następny jest plik '/etc/ppp/ip-down':

#!/bin/bash

REALRESOLVCONF='/etc/resolv.conf'

if [ -e $REALRESOLVCONF.pppd-backup ]; then
    mv -f $REALRESOLVCONF.pppd-backup $REALRESOLVCONF
fi

Jeżeli wszystko jest dobrze, to komenda pppd call plus powinna zestawić połączenie.

Automatyczne łączenie po podpięciu modemu

Automatyzację łączenia uzyskałem stosując następujące programy:

  • ivman - program umożliwiający reagowanie na zmiany konfiguracji, dodawanie i usuwanie urządzeń peryferyjnych
  • HAL - biblioteka obsługująca monitorowanie i zarządzanie urządzeniami peryferyjnymi. Nowe Linuksy mają to zainstalowane.
  • DBUS - biblioteka umożliwiająca wymianę komunikatów między aplikacjami. Nowe Linuksy mają to zainstalowane.

Do zestawienia połączenia używam następującego skryptu /usr/local/bin/comander:

#!/bin/bash

# 5 sekund przerwy na zainicjalizowanie modemu
# po podłączeniu zasilania
sleep 5

# Start sieci
pppd call plus

Konfiguracje programu ivman w pliku /etc/ivman/IvmConfigActions.xml należy uzupełnić przed tagiem kończącym o następujący wpis:

<ivm:Match name="hal.info.product" value="comander M EDGE USB">
 <ivm:Option name="exec" value="/usr/local/bin/comander" />
</ivm>

Po ponownym uruchomieniu ivmana skrypt startowy modemu powinien uruchamiać się automatycznie po podłączeniu modemu do portu USB. Nie robiłem skryptu rozłączającego — po prostu odłączam modem od laptopa i pppd grzecznie się zamyka.

Miłego buszowania po Internecie!