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:
*
Plik /etc/ppp/peers/gprs o zawartości:
# File: gprs
#
# Description:
# Serial cable, IrDA, Bluetooth and USB pppd options for GPRS phones.
# Keep pppd attached to the terminal:
# Comment this to get daemon mode pppd
#nodetach
updetach
# Opcja updatach oznacza, ze pppd odlaczy się od terminala dopiero
# gdy zostanie nawiazane polaczenie.
# Debug info from pppd:
# Comment this off, if you don't need more info
debug
# Show password in debug messages
show-password
# Connect/Disconnect scripts:
connect "/usr/sbin/chat -v -f /etc/chatscripts/gprs-connect-chat"
disconnect "/usr/sbin/chat -v -f /etc/chatscripts/gprs-disconnect-chat"
# Serial device to which the GPRS phone is connected:
# /dev/ttyS0 for serial port (COM1 in Windows),
/dev/ircomm0
# /dev/ircomm0 for IrDA,
# /dev/ttyUB0 for Bluetooth (Bluez with rfcomm running) and
# /dev/ttyUSB0 for USB
#/dev/ttyS0 # serial port one
#/dev/ttyS1 # serial port two
#/dev/ircomm0 # IrDA serial port one
#/dev/rfcomm0 # Bluetooth serial port one
#/dev/ttyUSB0 # USB serial device, for example Orange SPV
# Serial port line speed
#115200 # fast enough
57600 # perhaps usefull with IrDA
# Hardware flow control:
# Use hardware flow control with cable, Bluetooth and USB but not with IrDA.
#crtscts # serial cable, Bluetooth and USB
nocrtscts # IrDA
# Ignore carrier detect signal from the modem:
local
# IP addresses:
# - accept peers idea of our local address and set address peer as 10.0.0.1
# (any address would do, since IPCP gives 0.0.0.0 to it)
# - if you use the 10. network at home or something and pppd rejects it,
# change the address to something else
:10.0.0.1
# pppd must not propose any IP address to the peer!
noipdefault
# Accept peers idea of our local address
ipcp-accept-local
# Add the ppp interface as default route to the IP routing table
defaultroute
# DNS servers from the phone:
# some phones support this, some don't.
usepeerdns
novj
nobsdcomp
novjccomp
nopcomp
noaccomp
# The phone is not required to authenticate:
noauth
# Username and password:
# If username and password are required by the APN, put here the username
# and put the username-password combination to the secrets file:
# /etc/ppp/pap-secrets for PAP and /etc/ppp/chap-secrets for CHAP
# authentication. See pppd man pages for details.
# Example, Radiolinja operator pap-secrets:
# "rlnet" * "internet" *
user "erainternet"
# Asyncmap:
# some phones may require this option.
#asyncmap 0xa0000
# No magic:
# some phones may require this option.
#nomagic
# Require PAP authentication:
# some phones may require this option.
#require-pap
*
Plik /etc/chatscripts/gprs-connect-chat o następującej treści:
Uwaga! Pod treścią skryptu jest kilka słów wyjaśnienia. Przeczytać koniecznie!
Zawartość pliku:
# File: gprs-connect-chat
#
# Description:
#
# Set PDP context CID=1, protocol=IP, APN=internet:
# AT+CGDCONT=1,"IP","internet","",0,0
#
# Set CID=1 QoS requirements from the network, not supported by Nokia:
# AT+CGQREQ=1,0,0,0,0,0
#
# Set CID=1 minimum acceptable QoS parameters, not supported by Nokia:
# AT+CGQMIN=1,0,0,0,0,0
#
# 'Call' CID=1 (activate PDP context one, perform GPRS attach):
# ATD*99***1#
#
# Some phones like the Orange SPV (yes, the Microsoft Smartphone) use this
# dial string to start GPRS connection:
# ATD*99#
#
# The actual chat script:
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 12
SAY "Press CTRL-C to close the connection at any stage!"
SAY "\ndefining PDP context...\n"
OK ATH
OK ATE1
OK 'AT+CGDCONT=1,"IP","erainternet"'
OK ATD*99***1#
TIMEOUT 22
SAY "\nwaiting for connect...\n"
CONNECT ""
SAY "\nConnected."
SAY "\nIf the following ppp negotiations fail,\n"
SAY "try restarting the phone.\n"
Uwaga! W skrypcie powyżej występuje następująca linia:
OK 'AT+CGDCONT=1,"IP","erainternet"'
Jest ona specyficzna tylko dla operatora ERA (nazwa APN to "erainternet"). Należy ją zmienić w przypadku innych operatorów. Ustawienia dla polskich operatorów są następujące:
o
Play APN: "internet" (bez użytkownika i hasła "")
o
Plus APN: "
www.plusgsm.pl" (użytkownik: brak, hasło: brak).
o
Idea APN: "
www.idea.pl" (użytkownik: ppp, hasło: ppp).
o
Era APN: "erainternet" (użytkownik: erainternet, hasło: erainternet).
Poniższa linia to wywołanie odpowiedniego numeru GPRS:
OK ATD*99***1#
Ogólna składnia polecenia wygląda następująco:
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ć nigdy - domyślne "PPP" jest jak najbardziej OK. Składnia minimalna wygląda następująco:
ATD*99#
Jest to jednak składnia niezalecana przez niektórych producentów telefonów, szczególnie tych, które wspierają możliwość wpisania więcej niż jednego aktywnego punktu dostępu (APN-a). Każdy taki punkt jest wpisany w telefonie pod określoną pozycją (1, 2, ..) - ta pozycja to jest właśnie CID (connection ID). Niektórzy operatorzy wpisują swoje ustawienia w sprzedawanych telefonach, zwykle trzeba to jednak zrobić ręcznie. Najbezpieczniejszą składnią jest taka, jak zaproponowano w pliku powyżej:
OK ATD*99***1#
czyli domyślny (lub ustawiony wcześniej komendą AT+CGDCONT) APN, protokół PPP i CID o numerze 1. Czasami jednak CID=1 może być zarezerwowany dla np. WAP-u po GPRS-ie (a nie pełnego, modemowego dostępu po Internetu). Wówczas może być konieczne ustawienie CID=2 lub CID=3, np.
OK ATD*99***2#
*
Plik /etc/chatscripts/gprs-disconnect-chat o zawartości:
# File: gprs-disconnect-chat
#
# send break
exec /usr/sbin/chat -V -s -S
ABORT "BUSY"
ABORT "ERROR"
ABORT "NO DIALTONE"
SAY "\nSending break to the modem\n"
"" "\K"
"" "+++ATH"
SAY "\nPDP context detached\n"
*
Plik /etc/ppp/chap-secrets o zawartości:
# Secrets for authentication using PAP
# client server secret IP addresses
"erainternet" * "erainternet" *
Warto również stworzyć 2 skrypty (z flagą wykonywalności), które automatycznie ustawią nam przekazane prze Erę adresy DNS-ów:
*
Plik /etc/ppp/ip-up.local o zawartości:
mv /etc/resolv.conf /etc/resolv.conf-pppbackup
cp -f /etc/ppp/resolv.conf /etc/resolv.conf
chmod a+r /etc/resolv.conf
*
Plik /etc/ppp/ip-down.local o zawartości:
mv /etc/resolv.conf-pppbackup /etc/resolv.conf
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!).
http://www.szarp.com.pl/howto/howto/html/gprs.html
http://quote.republika.pl/