Manually using GPRS
From Openmoko
(→Some APN names for reference) |
Cheetah100 (Talk | contribs) |
||
Line 185: | Line 185: | ||
|- | |- | ||
| Germany || Vodafone || Any, behind NAT || web.vodafone.de || || | | Germany || Vodafone || Any, behind NAT || web.vodafone.de || || | ||
+ | |- | ||
+ | | New Zealand || Vodafone || Any || live.vodafone.com || phone number = *99***2# || | ||
|- | |- | ||
| Norway || Netcom || Any || internet.netcom.no || || | | Norway || Netcom || Any || internet.netcom.no || || |
Revision as of 05:34, 12 March 2008
You need to have GSM parts already initialized, with modem logged in to the network, for this to work. It is best to test it by doing test call. The GPRS connection is made using the PPP protocol to a server identified by an "APN" at the network operator.
The program that implements PPP on Linux is pppd, which we need to configure and run to get a connection. When that is working, we can configure pppd to wait until it's needed before it connects, and to disconnect if the connection becomes idle. Further, we can start pppd in the background during the boot process.
Contents |
Configuring pppd for manual connections
You'll need /etc/ppp/peers/gprs:
/dev/ttySAC0 115200 connect /etc/ppp/gprs-connect-chat crtscts lock hide-password defaultroute usepeerdns disconnect /etc/ppp/gprs-disconnect-chat holdoff 3 ipcp-accept-local lcp-echo-failure 8 lcp-echo-interval 3 noauth noipdefault novj novjccomp replacedefaultroute persist lcp-echo-interval 3 lcp-echo-failure 12
This options where mentioned before with that strange comment. Mine worked fine for me without those.
# very long timeouts (unwise?) lcp-echo-interval 300 lcp-echo-failure 40000
Depending on the APN, you may need password authentication using CHAP or PAP. You can add the following default line for "password-less" connections:
# client server secret IP addresses * * "" *
For CHAP, lines in /etc/ppp/chap-secrets are used. For PAP, the lines are in /etc/ppp/pap-secrets. The client should match the "user" option in pppd the config file (below). You can use * to mean any here, but the option user "" doesn't mean empty!
For example:
# Secrets for authentication using CHAP # client server secret IP addresses "user" * "password" *
For this you need the following options in /etc/ppp/peers/gprs:
# username to use for authentication, should match "client" in /etc/ppp/{chap,pap}-secrets user "user"
And you'll need /etc/ppp/gprs-connect-chat (needs "chmod +x"):
#!/bin/sh -e exec chat -v\ ABORT BUSY\ ABORT DELAYED\ ABORT "NO ANSWER"\ ABORT "NO DIALTONE"\ ABORT VOICE\ ABORT ERROR\ ABORT RINGING\ TIMEOUT 3\ "" ATZ\ OK-\\k\\k\\k\\d+++ATH-OK ATE1\ OK AT+CFUN=0\ OK \\dAT+CFUN=1\ ERROR AT+CPIN\?\ "+CPIN: READY-AT+CPIN=\"2222\"-OK" AT\ TIMEOUT 60\ OK AT+COPS\ OK AT+CGDCONT=1,\"IP\",\"internet\"\ OK ATD*99#\ CONNECT \d\c
You will need to adjust the APN name "internet" in at+cgdcont line to match what your network operator provides. See below in the table "Some APN names for reference" for the right settings for your operator.
Also good to have is /etc/ppp/gprs-disconnect-chat (needs "chmod +x"):
#!/bin/sh -e /usr/sbin/chat -v\ ABORT OK\ ABORT BUSY\ ABORT DELAYED\ ABORT "NO ANSWER"\ ABORT "NO CARRIER"\ ABORT "NO DIALTONE"\ ABORT VOICE\ ABORT ERROR\ ABORT RINGING\ TIMEOUT 12\ "" \\k\\k\\k\\d+++ATH\ "NO CARRIER-AT-OK" ""
You need a proper /etc/resolv.conf:
ln -sf /var/run/resolv.conf /etc
If needed put your nameserver for usb-net into /var/run/resolv.conf, not in /etc.
Required fixes
The image does not set a correct resolv.conf. i do so with an
echo nameserver 192.168.0.201 > /var/run/resolv.conf
in the right place. because a post-up in /etc/network/interfaces is not supported i do that in /etc/network/if-up.d/08setupdns
another problem is pppd's /etc/ppp/ip-down.d/92removedns which does not properly remove the link when shuting down ppp. my fix is this script:
#!/bin/sh ACTUALCONF=/var/run/resolv.conf PPPCONF=/var/run/ppp/resolv.conf if [ -f $PPPCONF ] ; then if [ -f $ACTUALCONF ] ; then if [ ! -h $ACTUALCONF -o ! "`readlink $ACTUALCONF 2>&1`" = "$PPPCONF" ] ; then mv $ACTUALCONF $ACTUALCONF.ppporig fi fi ln -sf $PPPCONF $ACTUALCONF fi
Starting pppd
Then, after initializing GSM, you should be able to initialize GPRS by `pppd call gprs`. Good luck!
To dial in - and get verbose output on the terminal - use pppd
pppd debug nodetach call gprs
The config above will establish a 'persist'ant link over gprs. The battery will run low in less than an hour. See an example for an on-demand config below.
Some APN names for reference
Country | Carrier | Plan | APN | user/password if required | Working pppd scripts |
---|---|---|---|---|---|
Estonia | Elisa | Any, behind NAT | internet | ||
Estonia | EMT | Any, behind NAT | internet.emt.ee | ||
Finland | Saunalahti | Any | internet.saunalahti | ||
Finland | Sonera | Any, behind NAT | internet | ||
Finland | Sonera | Any, public IP | prointernet | ||
France | SFR | 10.x.x.x? | websfr | under tests | |
France | SFR | 10.x.x.x? | wapsfr[1] | under tests | |
France | Orange | ??? | orange.fr | under tests | |
Germany | E-Plus | BASE (and others?) | internet.eplus.de | eplus gprs | |
Germany | T-Mobile | internet.t-mobile | |||
Germany | Vodafone | Any, behind NAT | web.vodafone.de | ||
New Zealand | Vodafone | Any | live.vodafone.com | phone number = *99***2# | |
Norway | Netcom | Any | internet.netcom.no | ||
Norway | Telenor | Any | telenor | ||
Switzerland | Swisscom | e.g. Natel Basic Liberty, behind NAT | gprs.swisscom.ch | ||
UK | T-Mobile | general.t-mobile.uk | |||
UK | Virgin | goto.virginmobile.uk | user | ||
UK | other providers | ||||
USA | Cingular (AT&T) | Less than full internet | wap.cingular | ||
USA | T-mobile | Anything less than full internet | wap.voicestream.com | ||
USA | T-mobile | Regular internet plan | internet2.voicestream.com | T-Mobile pppd scripts | |
USA | T-mobile | "VPN" internet plan | internet3.voicestream.com |
[1] connected through a WAP proxy (slower, but the only way to access Vodafone live! and SFR portal)
Starting pppd automatically
Once you have finished debugging your gprs-connect-chat and gprs options files, you may wish to automatically connect whenever needed and hang up when finished. Make sure you understand the impact of this change to your carrier plan billing. This is not recommended unless you have a large-use or unlimited data plan. These scripts do NOT prompt you before connecting.
On-demand connection settings
Additional settings are needed if you want the actual connection to be up only while there is traffic. In the 'gprs' file above, insert the following, making sure 'nodetach' is commented out. If 'nodetach' is on, the boot process will stop when it starts pppd. Also remove the option 'persist' mentioned above.
# Wait until needed before connecting demand # Disconnect if idle for given amount of seconds idle 20
Start on boot (method 1)
Add the following definition to /etc/network/interfaces:
auto ppp0 iface ppp0 inet ppp provider gprs
That should be it. Now you can use 'ifup ppp0' and 'ifdown ppp0' manually too.
Start on boot (method 2)
Create the following file as /etc/ppp/ppp_on_boot (needs chmod +x). The /etc/init.d/ppp script will call it to set up the daemon.
#!/bin/sh # # Rename this file to ppp_on_boot and pppd will be fired up as # soon as the system comes up, connecting to `provider'. # # If you also make this file executable, and replace the first line # with just "#!/bin/sh", the commands below will be executed instead. # # The location of the ppp daemon itself (shouldn't need to be changed) PPPD=/usr/sbin/pppd # The default provider to connect to $PPPD call gprs # Additional connections, which would just use settings from # /etc/ppp/options.<tty> #$PPPD ttyS0 #$PPPD ttyS1 #$PPPD ttyS2 #$PPPD ttyS3
Finally, you need to add the /etc/init.d/ppp script to the init process by creating symbolic links from the appropriate directories. I chose the following:
/etc/rc0.d/K25ppp /etc/rc1.d/K45ppp /etc/rc2.d/S45ppp /etc/rc3.d/S45ppp /etc/rc4.d/S45ppp /etc/rc5.d/S45ppp /etc/rc6.d/K25ppp
See also
Languages: |
English • العربية • Български • Česky • Dansk • Deutsch • Esperanto • Eesti • Español • فارسی • Suomi • Français • עברית • Magyar • Italiano • 한국어 • Nederlands • Norsk (bokmål) • Polski • Português • Română • Русский • Svenska • Slovenčina • Українська • 中文(中国大陆) • 中文(台灣) • Euskara • Català |