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 )の方が適切な場所かと思いま
す。)
以上です。
ご指摘通り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を呼び出して低レベルの制御を行えないか試してみようと思います。
ありがとうございました。