[android-porting] Data connection via cell modem (GPRS)

377 views
Skip to first unread message

ms12

unread,
May 9, 2010, 10:53:02 PM5/9/10
to android-porting
We are trying to implement a demo of a mobile industrial sensor via
android. One of the goals of the demonstration is to send data to a
web site. The cell modem is working for SMS messages via the
reference RIL just fine. We would like to use GPRS to allow somewhat
more data. We currently have the gsm0710muxd working, with one
channel connected to the RIL, the other connected via chat/pppd such
that ping works from the Linux console. What we can't seem to figure
out is how to get Android to use the default route that is set up via
pppd. Can anybody give me some pointers on what needs to be done to
get Android to use the connection? Thanks much in advance.

Mike

--
unsubscribe: android-porti...@googlegroups.com
website: http://groups.google.com/group/android-porting

Daniel Baeyens

unread,
May 10, 2010, 4:22:51 AM5/10/10
to msti...@gmail.com, android-porting
Hi,

On Mon, May 10, 2010 at 4:53 AM, ms12 <msti...@gmail.com> wrote:
> We are trying to implement a demo of a mobile industrial sensor via
> android.  One of the goals of the demonstration is to send data to a
> web site.  The cell modem is working for SMS messages via  the
> reference RIL just fine.  We would like to use GPRS to allow somewhat
> more data.  We currently have the gsm0710muxd working, with one
> channel connected to the RIL, the other connected via chat/pppd such
> that ping works from the Linux console.  What we can't seem to figure
> out is how to get Android to use the default route that is set up via
> pppd. Can anybody give me some pointers on what needs to be done to
> get Android to use the connection?  Thanks much in advance.

Which is the full command you are using for setting the route?

Can you explain a little bit more your process?

KR
--
Daniel Baeyens
Warp Networks S.L. - http://www.warp.es

Uhrenfeldt Henrik

unread,
May 10, 2010, 4:58:06 AM5/10/10
to dbae...@warp.es, msti...@gmail.com, android-porting
Hi ms12,

We created a setup where a 3G mobile broadband dongle works as telephony backend for Android Eclaire (without voice calls of course). It sounds similar to what you guys are doing.

I believe that implementing an ip-up script in /system/etc/ppp will make things work:

/system/etc/ppp/ip-up should contain something like this:

/system/bin/setprop "net.interfaces.defaultroute" "gprs"
/system/bin/setprop "net.gprs.dns1" "$DNS1"
/system/bin/setprop "net.gprs.dns2" "$DNS2"
/system/bin/setprop "net.gprs.local-ip" "$IPLOCAL"
/system/bin/setprop "net.gprs.remote-ip" "$IPREMOTE"
/system/bin/setprop "net.gprs.gw" "$IPREMOTE"

This script will run every time PPP sets up a connection and provide Android with the correct gateway, dns, etc. To check that it actually ran, I added the following:

/system/bin/log -t pppd "IP-UP TRACE for gprs"
/system/bin/log -t pppd "DNS1 $DNS1"
/system/bin/log -t pppd "DNS2 $DNS2"
/system/bin/log -t pppd "local-ip $IPLOCAL"
/system/bin/log -t pppd "remote-ip $IPREMOTE"
/system/bin/log -t pppd "gw $IPREMOTE"

..which will throw useful information into logcat output.

You can also make a /system/etc/ip-down script to change things back the way they were (if you have multiple ways of connecting to the internet).

But how do you initiate the PPP connection? Via Android RIL or just via init? I am unsure of whether Android will understand that it has a GPRS packet data connection without proper handling in the RIL (I don't know if setting the above properties is sufficient)...

You should be aware that in later Android releases you need some security hacks to allow the RIL to spawn the PPP process (which must run as root), and you need some tweaky plumbing to ensure proper interaction between RIL & PPP during handling of RIL_REQUEST_SETUP_DATA_CALL...

Let me know how you get along with this.

- Henrik

ms12

unread,
May 10, 2010, 12:44:03 PM5/10/10
to android-porting
Thanks much for the pointers, we are certainly missing some of the
setprop's. I will try those. However, we are using Donut (1.6) and I
wonder if they will work there.

More detail:
I've not been able to see my way clear to setting up the data call via
the RIL. I think I could spawn ppp (via system(pppd ...) ??) and
connect it to the second CMUX channel when REQUEST_SETUP_DATA_CALL
happened, but I would still need to tell Android to use that channel,
not the original command connection, and I can't see how to do that.

So what I did was run pppd (with scripts and chat to dial the "ISP"
and using the alternate mux channel on /dev/pts/0) outside of the RIL
from the console. This works, the connection is established, and I
do a setprop net.dns1 manually. (I believe the scripts are doing a
"defaultroute" when pppd starts, the equivalent of route add default
gw xx.xx.xx.xx dev ppp0 I do not need to run route explicitly). At
this point I can ping www.google.com, but any attempt to start the web
browser from Android touchscreen just hangs or gives an error.

Thanks again for the help.
Mike
On May 10, 3:58 am, Uhrenfeldt Henrik <henrik.uhrenfe...@ixonos.com>
wrote:
> On Mon, May 10, 2010 at 4:53 AM, ms12 <mstic...@gmail.com> wrote:
> > We are trying to implement a demo of a mobile industrial sensor via
> > android.  One of the goals of the demonstration is to send data to a
> > web site.  The cell modem is working for SMS messages via  the
> > reference RIL just fine.  We would like to use GPRS to allow somewhat
> > more data.  We currently have the gsm0710muxd working, with one
> > channel connected to the RIL, the other connected via chat/pppd such
> > that ping works from the Linux console.  What we can't seem to figure
> > out is how to get Android to use the default route that is set up via
> > pppd. Can anybody give me some pointers on what needs to be done to
> > get Android to use the connection?  Thanks much in advance.
>
> Which is the full command you are using for setting the route?
>
> Can you explain a little bit more your process?
>
> KR
> --
> Daniel Baeyens
> Warp Networks S.L. -http://www.warp.es

Robert Greenwalt

unread,
May 10, 2010, 1:03:20 PM5/10/10
to msti...@gmail.com, android-porting
When the browser hangs/errors, can you take a bugreport or capture the logs?  That may shed light on the issue.

R

ms12

unread,
May 10, 2010, 2:36:55 PM5/10/10
to android-porting
Here is a copy of the console log. I did the setprop's suggested
above, checked the ping, cleared the logs, the pressed the browser
icon. Then did a logcat which resulted in this. (Thanks!) Mike

# setprop net.interface.defaultrout gprs
# setprop net.gprs.dns1 172.16.7.167
# setprop net.gprs.dns2 172.16.7.167
# setprop net.gpro.local-ip 10.137.183.65
# setprop net.gprs.remote-ip 192.168.202.0
# setprop net.gprs.gw 192.1689.202.0
#
# netcfg
lo UP 127.0.0.1 255.0.0.0 0x00000049
ppp0 UP 10.137.183.65 255.255.255.255 0x000010d1
# cat /proc/net/route
Iface Destination Gateway Flags RefCnt Use
Metric Mask MTU Window
IRTT
ppp0 00CAA8C0 00000000 0005 0 0
0 FFFFFFFF 0 0
0
ppp0 00000000 00CAA8C0 0003 0 0
0 00000000 0 0
0
# ping -c 4 www.google.com
PING www.l.google.com (74.125.65.147) 56(84) bytes of data.
64 bytes from gx-in-f147.1e100.net (74.125.65.147): icmp_seq=1 ttl=48
time=599 ms
64 bytes from gx-in-f147.1e100.net (74.125.65.147): icmp_seq=2 ttl=48
time=506 ms
64 bytes from gx-in-f147.1e100.net (74.125.65.147): icmp_seq=3 ttl=48
time=502 ms
64 bytes from gx-in-f147.1e100.net (74.125.65.147): icmp_seq=4 ttl=48
time=544 ms

--- www.l.google.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3087ms
rtt min/avg/max/mdev = 502.289/538.169/599.762/39.175 ms
#
#
# logcat -c
# logcat -c -b radio
-------------------------------- pressed browser icon here
----------------------
# logcat
D/dalvikvm( 890): GC freed 16238 objects / 771992 bytes in 63ms
D/KeyguardViewMediator( 890): wakeWhenReadyLocked(82)
D/KeyguardViewMediator( 890): handleWakeWhenReady(82)
D/KeyguardViewMediator( 890): pokeWakelock(5000)
E/power ( 890): Failed setting last user activity: g_error=0
D/KeyguardViewMediator( 890): pokeWakelock(5000)
I/ActivityManager( 890): Start proc com.android.inputmethod.latin for
service com.android.inputmethod.latin/.LatinIME: pid=10050 uid=10004
gids={3003, 1015}
D/dalvikvm(10050): Trying to load lib /system/lib/libjni_latinime.so
0x49ba6990
D/dalvikvm(10050): Added shared lib /system/lib/libjni_latinime.so
0x49ba6990
I/WindowManager( 890): Checking dispatch to: Window{49cbb808 Keyguard
paused=false}
I/WindowManager( 890): Not visible!
I/WindowManager( 890): Checking dispatch to: Window{49cb4fd8
StatusBar paused=false}
I/WindowManager( 890): Checking dispatch to: Window{49d53e60
StatusBarExpanded paused=false}
I/WindowManager( 890): Not visible!
I/WindowManager( 890): Checking dispatch to: Window{49bd8b18
TrackingView paused=false}
I/WindowManager( 890): Not visible!
I/WindowManager( 890): Checking dispatch to: Window{49cb9e38
com.android.launcher/com.android.launcher.Launcher paused=false}
I/ActivityManager( 890): Starting activity: Intent
{ act=android.intent.action.MAIN
cat=[android.intent.category.LAUNCHER] flg=0x10200000
cmp=com.android.browser/.BrowserActivity }
D/ ( 890): unable to unlink '/data/system/usagestats/
usage-20100510.bak': No such file or directory (errno=2)
I/ActivityManager( 890): Start proc com.android.browser for activity
com.android.browser/.BrowserActivity: pid=10062 uid=10003 gids={3003}
D/installd( 867): DexInv: --- BEGIN '/system/app/Browser.apk' ---
D/dalvikvm(10074): DexOpt: load 217ms, verify 395ms, opt 7ms
D/installd( 867): DexInv: --- END '/system/app/Browser.apk' (success)
---
I/ActivityThread(10062): Publishing provider browser:
com.android.browser.BrowserProvider
E/ActivityThread(10062): Failed to find provider info for
com.google.settings
D/ (10062): unable to unlink '/data/data/com.android.browser/
shared_prefs/com.android.browser_preferences.xml.bak': No such file or
directory (errno=2)
W/ActivityManager( 890): Unable to start service Intent
{ cmp=com.google.android.googleapps/.GoogleLoginService }: not found
I/ActivityManager( 890): Displayed activity
com.android.browser/.BrowserActivity: 7617 ms (total 7617 ms)
I/ARMAssembler( 890): generated
scanline__00000077:03515104_00000000_00000000 [ 27 ipp] (41 ins) at
[0x283068:0x28310c] in 488281 ns
D/dalvikvm(10062): GC freed 3108 objects / 273656 bytes in 85ms
I/ARMAssembler( 890): generated
scanline__00000077:03515104_00001001_00000000 [ 64 ipp] (84 ins) at
[0x285718:0x285868] in 213623 ns
D/dalvikvm( 958): GC freed 1647 objects / 86136 bytes in 41ms
D/dalvikvm( 890): GC freed 15264 objects / 721272 bytes in 65ms
E/ActivityThread( 945): Failed to find provider info for
android.server.checkin
W/Checkin ( 945): Can't update stat PHONE_RADIO_RESETS:
java.lang.IllegalArgumentException: Unknown URL content://android.server.checkin/stats
I/ActivityManager( 890): Stopping service:
com.android.mms/.transaction.SmsReceiverService
D/dalvikvm( 987): GC freed 2760 objects / 171632 bytes in 45ms
I/ActivityManager( 890): Stopping service:
com.android.mms/.transaction.SmsReceiverService
I/ActivityManager( 890): Stopping service:
com.android.mms/.transaction.SmsReceiverService
I/ActivityManager( 890): Stopping service:
com.android.mms/.transaction.SmsReceiverService
I/ActivityManager( 890): Stopping service:
com.android.mms/.transaction.SmsReceiverService
D/dalvikvm( 945): GC freed 10828 objects / 526224 bytes in 53ms
D/dalvikvm( 890): GC freed 17042 objects / 786792 bytes in 67ms
D/SystemClock( 945): Setting time of day to sec=1273514162
D/SystemClock( 945): Setting time of day to sec=1273514162
I/ActivityManager( 890): Stopping service:
com.android.calendar/.AlertService
D/SystemClock( 945): Setting time of day to sec=1273514163
D/SystemClock( 945): Setting time of day to sec=1273514163
I/ActivityManager( 890): Stopping service:
com.android.calendar/.AlertService
D/SystemClock( 945): Setting time of day to sec=1273514164
D/SystemClock( 945): Setting time of day to sec=1273514164
E/ActivityThread( 945): Failed to find provider info for
android.server.checkin
W/Checkin ( 945): Can't update stat PHONE_GSM_REGISTERED:
java.lang.IllegalArgumentException: Unknown URL content://android.server.checkin/stats
I/ActivityManager( 890): Stopping service:
com.android.calendar/.AlertService
D/AlarmManagerService( 890): Kernel timezone updated to 300 minutes
west of GMT
I/ActivityManager( 890): Stopping service:
com.android.calendar/.AlertService
I/ActivityManager( 890): Stopping service:
com.android.calendar/.AlertService
I/ActivityManager( 890): Stopping service:
com.android.calendar/.AlertService
I/ActivityManager( 890): Stopping service:
com.android.mms/.transaction.SmsReceiverService
E/TelephonyProvider( 945): Failed setting numeric '310410' to the
current operator
D/dalvikvm( 1024): GC freed 834 objects / 41504 bytes in 47ms
D/dalvikvm( 1037): GC freed 1624 objects / 102584 bytes in 40ms
D/dalvikvm( 890): GC freed 16347 objects / 760184 bytes in 77ms
E/power ( 890): Failed setting last user activity: g_error=0
W/ActivityManager( 890): Unable to start service Intent
{ act=android.accounts.IAccountsService
cmp=com.google.android.googleapps/.GoogleLoginService }: not found
E/LockPatternKeyguardView( 890): Failed to bind to GLS while checking
for account
D/dalvikvm( 890): GC freed 1190 objects / 55264 bytes in 53ms
D/dalvikvm( 890): GC freed 15362 objects / 732864 bytes in 63ms
E/ActivityThread( 945): Failed to find provider info for
android.server.checkin
W/Checkin ( 945): Can't update stat PHONE_RADIO_RESETS:
java.lang.IllegalArgumentException: Unknown URL content://android.server.checkin/stats
I/ActivityManager( 890): Stopping service:
com.android.mms/.transaction.SmsReceiverService
D/KeyguardViewMediator( 890): wakeWhenReadyLocked(82)
D/KeyguardViewMediator( 890): handleWakeWhenReady(82)
D/KeyguardViewMediator( 890): pokeWakelock(5000)
E/power ( 890): Failed setting last user activity: g_error=0
W/KeyCharacterMap( 890): No keyboard for id 0
W/KeyCharacterMap( 890): Using default keymap: /system/usr/keychars/
qwerty.kcm.bin
D/KeyguardViewMediator( 890): pokeWakelock(5000)
W/InputManagerService( 890): Window already focused, ignoring focus
gain of: com.android.internal.view.IInputMethodClient$Stub
$Proxy@49bd6530
I/ActivityManager( 890): Stopping service:
com.android.mms/.transaction.SmsReceiverService
I/ActivityManager( 890): Stopping service:
com.android.mms/.transaction.SmsReceiverService
D/dalvikvm( 987): GC freed 2477 objects / 121992 bytes in 35ms
I/ActivityManager( 890): Stopping service:
com.android.mms/.transaction.SmsReceiverService
I/ActivityManager( 890): Stopping service:
com.android.mms/.transaction.SmsReceiverService
I/ActivityManager( 890): Stopping service:
com.android.mms/.transaction.SmsReceiverService
I/ActivityManager( 890): Stopping service:
com.android.mms/.transaction.SmsReceiverService
D/SystemClock( 945): Setting time of day to sec=1273514227
D/SystemClock( 945): Setting time of day to sec=1273514227
I/ActivityManager( 890): Stopping service:
com.android.calendar/.AlertService
D/SystemClock( 945): Setting time of day to sec=1273514227
I/ActivityManager( 890): Stopping service:
com.android.calendar/.AlertService
D/SystemClock( 945): Setting time of day to sec=1273514227
I/ActivityManager( 890): Stopping service:
com.android.calendar/.AlertService
I/ActivityManager( 890): Stopping service:
com.android.calendar/.AlertService
D/dalvikvm( 945): GC freed 9707 objects / 523960 bytes in 52ms
D/SystemClock( 945): Setting time of day to sec=1273514228
D/SystemClock( 945): Setting time of day to sec=1273514228
E/ActivityThread( 945): Failed to find provider info for
android.server.checkin
W/Checkin ( 945): Can't update stat PHONE_GSM_REGISTERED:
java.lang.IllegalArgumentException: Unknown URL content://android.server.checkin/stats
D/AlarmManagerService( 890): Kernel timezone updated to 300 minutes
west of GMT
I/ActivityManager( 890): Stopping service:
com.android.calendar/.AlertService
I/ActivityManager( 890): Stopping service:
com.android.calendar/.AlertService
I/ActivityManager( 890): Stopping service:
com.android.mms/.transaction.SmsReceiverService
E/TelephonyProvider( 945): Failed setting numeric '310410' to the
current operator
D/dalvikvm( 890): GC freed 23543 objects / 1068632 bytes in 80ms
E/browser (10062): onReceivedError -7 http://www.google.com/m?client=ms-android-google
The server failed to communicate. Try again later.
D/dalvikvm( 890): GC freed 19086 objects / 1113184 bytes in 71ms
E/OpenSSLSocketImpl(10062): Unknown error 5 during connect
E/Gears-J (10062): Connection IO exception
E/Gears-J (10062): java.io.IOException: SSL handshake failure: I/O
error during system call, Unknown error: 0
E/Gears-J (10062): at
org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.nativeconnect(Native
Method)
E/Gears-J (10062): at
org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:
305)
E/Gears-J (10062): at
org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:
92)
E/Gears-J (10062): at
org.apache.http.conn.ssl.SSLSocketFactory.connectSocket(SSLSocketFactory.java:
321)
E/Gears-J (10062): at
org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:
129)
E/Gears-J (10062): at
org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:
164)
E/Gears-J (10062): at
org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:
119)
E/Gears-J (10062): at
org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:
348)
E/Gears-J (10062): at
org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:
555)
E/Gears-J (10062): at
org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:
487)
E/Gears-J (10062): at
org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:
465)
E/Gears-J (10062): at
android.webkit.gears.ApacheHttpRequestAndroid
$Connection.run(ApacheHttpRequestAndroid.java:180)
E/Gears-J (10062): at java.lang.Thread.run(Thread.java:1060)
E/power ( 890): Failed setting last user activity: g_error=0
W/ActivityManager( 890): Unable to start service Intent
{ act=android.accounts.IAccountsService
cmp=com.google.android.googleapps/.GoogleLoginService }: not found
E/LockPatternKeyguardView( 890): Failed to bind to GLS while checking
for account
D/dalvikvm( 890): GC freed 6191 objects / 295664 bytes in 69ms
E/ActivityThread( 945): Failed to find provider info for
android.server.checkin
W/Checkin ( 945): Can't update stat PHONE_RADIO_RESETS:
java.lang.IllegalArgumentException: Unknown URL content://android.server.checkin/stats
I/ActivityManager( 890): Stopping service:
com.android.mms/.transaction.SmsReceiverService
I/ActivityManager( 890): Stopping service:
com.android.mms/.transaction.SmsReceiverService
^C

On May 10, 12:03 pm, Robert Greenwalt <rgreenw...@google.com> wrote:
> When the browser hangs/errors, can you take a bugreport or capture the logs?
>  That may shed light on the issue.
>
> R
>
>
>
> On Mon, May 10, 2010 at 9:44 AM, ms12 <mstic...@gmail.com> wrote:
> > Thanks much for the pointers, we are certainly missing some of the
> > setprop's.  I will try those.  However, we are using Donut (1.6) and I
> > wonder if they will work there.
>
> > More detail:
> > I've not been able to see my way clear to setting up the data call via
> > the RIL.  I think I could spawn ppp (via system(pppd ...) ??)  and
> > connect it to the second CMUX channel when REQUEST_SETUP_DATA_CALL
> > happened, but I would still need to tell Android to use that channel,
> > not the original command connection, and I can't see how to do that.
>
> > So what I did was run pppd (with scripts and chat to dial the "ISP"
> > and using the alternate mux channel on /dev/pts/0) outside of the RIL
> > from the console.  This works, the connection is established, and  I
> > do a setprop net.dns1 manually.  (I believe the scripts are doing a
> > "defaultroute" when pppd starts, the equivalent of route add default
> > gw xx.xx.xx.xx dev ppp0   I do not need to run route explicitly).  At
> > this point I can pingwww.google.com, but any attempt to start the web
> > > unsubscribe: android-porti...@googlegroups.com<android-porting%2Bunsu...@googlegroups.com>
> > > website:http://groups.google.com/group/android-porting
>
> > > --
> > > unsubscribe: android-porti...@googlegroups.com<android-porting%2Bunsu...@googlegroups.com>
> > > website:http://groups.google.com/group/android-porting
>
> > --
> > unsubscribe: android-porti...@googlegroups.com<android-porting%2Bunsu...@googlegroups.com>

Daniel Baeyens

unread,
May 10, 2010, 3:08:24 PM5/10/10
to msti...@gmail.com, android-porting
Hi,

On Mon, May 10, 2010 at 6:44 PM, ms12 <msti...@gmail.com> wrote:
> Thanks much for the pointers, we are certainly missing some of the
> setprop's.  I will try those.  However, we are using Donut (1.6) and I
> wonder if they will work there.
>
> More detail:
> I've not been able to see my way clear to setting up the data call via
> the RIL.  I think I could spawn ppp (via system(pppd ...) ??)  and
> connect it to the second CMUX channel when REQUEST_SETUP_DATA_CALL
> happened, but I would still need to tell Android to use that channel,
> not the original command connection, and I can't see how to do that.
>
> So what I did was run pppd (with scripts and chat to dial the "ISP"
> and using the alternate mux channel on /dev/pts/0) outside of the RIL
> from the console.  This works, the connection is established, and  I
> do a setprop net.dns1 manually.  (I believe the scripts are doing a
> "defaultroute" when pppd starts, the equivalent of route add default
> gw xx.xx.xx.xx dev ppp0   I do not need to run route explicitly).  At
> this point I can ping www.google.com, but any attempt to start the web
> browser from Android touchscreen just hangs or gives an error.

In case you use route command, check this. It may help you

https://review.source.android.com/#change,9761

Kind regards,
Warp Networks S.L. - http://www.warp.es

Uhrenfeldt Henrik

unread,
May 11, 2010, 2:43:39 AM5/11/10
to msti...@gmail.com, android-porting
Hello Mstich12,

I do think those settings should work with Donut (we were inspired by a Donut setup), but as I said, maybe they're insufficient. I never figured out from your reply if you tested these properties and if it brought you any further?

What we did to setup PPP was to create a service "pppd_gprs" inside init.rc. This service runs a script that:

1. Sets a custom property to let us know that PPP is starting
2. Runs pppd as:
/system/bin/pppd $* connect 'chat -v -s -f /system/etc/chatscript' nodetach debug defaultroute ipcp-accept-remote ipcp-accept-local usepeerdns
3. Sets another customer property in which we set the exit code of ppp

Then this service is started from inside the RIL during handling of REQUEST_SETUP_DATA_CALL, by setting the property "ctl.start" to "pppd_gprs". This is the point that needs a security hack (at least in Éclair release), or the service does not start at all. Let me know if you need this hack, and I can send a patch...

Once the service is started and PPP is running (this is in fact not trivial to figure out), we read the "net.gprs.local-ip" set by the ip-up script and passes this back in the reply to REQUEST_SETUP_DATA_CALL.

Since PPP connectivity is handled by a script in its own service, you have the freedom to choose exactly which tty it should connect to (in the setup above it takes it from the service parameter stated in init.rc). That being said, you may have to tweak a little to make sure that the needed AT commands to set up everything is sent on the right channel. For example we setup the PDP context using one channel (the AT+CGDCONT=1,"ip","internet" stuff) and PPP connection via another one (the ATDT*99***1# and PPP stuff). Requirements may be different for your modem...

Try running a "logcat -b radio" - this will give some useful log information from Android's radio & connectivity layer...

Best regards,
---
Henrik Uhrenfeldt
Chief Software Engineer
Ixonos Denmark ApS
Niels Jernes Vej 10,
DK-9220 Aalborg Ø, Denmark
mobile +45 4030 2607
email: henrik.u...@ixonos.com
http://www.ixonos.com

Uhrenfeldt Henrik

unread,
May 11, 2010, 11:00:55 AM5/11/10
to M&M stich, android...@googlegroups.com
Hi!

I think you're totally right - this is the last part you need to figure out.

We have the following code to start the service (and yes - it starts the service in init.rc):

err = property_set("ctl.start", "pppd_gprs");
LOGD("starting service pppd_gprs...");
if (err < 0) {
LOGD("### error in starting service pppd_gprs: err %d", err);
goto error;
};

BUT for this to work, you have to hack system/core (see attached patch), or RIL won't have permissions to start the service. Whether this is the right way to go, I don't know; there may be better and more secure ways of getting the job done, and it seems Google wants to tighten security in this area. And maybe you don't even need the hack on Donut...

When you need to stop the service - just set the property "ctl.stop" - you get the idea :-)

Regarding ip-up & ip-down: Yes - these are started by pppd and supplies the various variables such as $IPLOCAL.

I cannot share all the code, since I am unsure of what our company policy says about it. That being said I think you're almost there. Just make sure that you send a properly formatted reply to the REQUEST_SETUP_DATA_CALL with the obtained IP inside (hint: use property_get("net.gprs.local-ip", address_ip ,"") to retrieve the ip set by ip-up).

If we need to go deeper here, please post output of 'logcat -b radio' :-)

Best,

Henrik Uhrenfeldt
Chief Software Engineer
Ixonos Denmark ApS
Niels Jernes Vej 10,
DK-9220 Aalborg Ø, Denmark
mobile +45 4030 2607
email: henrik.u...@ixonos.com
http://www.ixonos.com-----Original Message-----


From: M&M stich [mailto:msti...@gmail.com]
Sent: 11. maj 2010 16:40
To: Uhrenfeldt Henrik
Subject: Re: [android-porting] Re: Data connection via cell modem (GPRS)

Hello Henrik,
The settings did not make it work. I start the ppp session from the console manually, and it connects properly as evidenced by ping working. My problem I think is related to not understanding how to start the ppp session inside of REQUEST_SETUP_DATA_CALL and then get Android Telephony to use it for data.

The property ctl.start is new to me, how is that set in RIL? Does that trigger the service from init.rc somehow?

I'm also not sure how ip-up knows what the local and remote IP's are. Does the call to pppd call ip-up automatically with $IPLOCAL?

If it is not too much to ask, could you send some example code? Things like your REQUEST_SETUP_DATA_CALL and the associated close data call, any germane ppp scripts (ip-up, ip-dn ?), the service pppd_gprs section of init.rc, and the permission hack patch.

I think I have all the bits working, I'm just not sure how to hook them all together. Thanks much for your help
Mike
> unsubscribe: android-porti...@googlegroups.com <mailto:android-porting%2Bunsu...@googlegroups.com>
> website:http://groups.google.com/group/android-porting
>

> --

> unsubscribe: android-porti...@googlegroups.com <mailto:android-porting%2Bunsu...@googlegroups.com>
> website:http://groups.google.com/group/android-porting

--
unsubscribe: android-porti...@googlegroups.com <mailto:android-porting%2Bunsu...@googlegroups.com>
pppd-hack.patch
Reply all
Reply to author
Forward
0 new messages