トランスポート層の自前の制御

710 views
Skip to first unread message

nullnull33

unread,
Feb 16, 2010, 3:15:58 AM2/16/10
to Android-SDK-Japan
Androidでandroid.netやCのsocket等のAPIで、普通に3Gネットワークに接続しようとすると、
恐らくトランスポート層にTCP/IPが使われると思うのですが、
このネットワーク接続のトランスポート層における制御を自前で行い、オリジナルの
プロトコルで通信する方法は何かありませんでしょうか?
よろしくお願いします

l.b.

unread,
Feb 17, 2010, 9:50:38 AM2/17/10
to Android-SDK-Japan

 村上です。

 http://pdk.android.com/online-pdk/guide/telephony.html にあるように、3G通信の場合
RILDを通してLinuxのIPスタックを通るので、bionicのlibcにあるsocketを(例えばSOCK_RAWなどで)使う分には特別な
ことをせずにJNI経由で通信できると思います。
 ソースツリーのexternal/pingのようにICMPを実装している例もありますし。

 さらにその下の層から自前で作る場合には、カーネルドライバから作る必要がありそうなので、Androidプラットフォームの改造が必要になるのでは
ないでしょうか。
 (その場合はAndroid-SDK-JapanグループよりはAndroid-Embedded-Japanグループ(
http://groups.google.co.jp/group/android-embedded-japan )の方が適切な場所かと思いま
す。)

 以上です。

nullnull33

unread,
Feb 19, 2010, 8:05:35 AM2/19/10
to Android-SDK-Japan
情報ありがとう御座います。

ご指摘通りNDKでRaw socketを開こうとしてみたのですが、エラーが返ってくるので調べてみたところ、
どうやらRaw socketを扱うためにはRootまたはCAP_NET_RAWの権限を持っている必要があるようです。
http://groups.google.co.jp/group/android-ndk/browse_thread/thread/ec564228dc2e9f62

Pingはどうやらrootにsetuidされている?から、Raw socketが扱えるそうです。
http://www.geekpage.jp/programming/linux-network/simple-ping.php

AndroidのRoot化等の必要はない様にしたいので、Androidプラットフォームの改造はなるべく避けたいのですが、
教えていただいたリンクが非常に興味深く、
直接Vendor RILを呼び出して低レベルの制御を行えないか試してみようと思います。

ありがとうございました。

Reply all
Reply to author
Forward
0 new messages