Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

IIJmio meeting #1 最近のAndroidとMVNO SIMの関係

95,116 views

Published on

この資料はIIJmio meeting #1で発表されたものです。詳細は下記blogをご覧下さい。
http://techlog.iij.ad.jp/archives/797

Published in: Technology
  • Be the first to comment

IIJmio meeting #1 最近のAndroidとMVNO SIMの関係

  1. 1. 公開用に加筆版 IIJmio meeting #1 最近のAndroidとMVNO SIMの関係 IIJ 堂前 清隆 (@IIJ_doumae)
  2. 2. Android+MVNOと言えば…… アンテナピクト問題・セルスタンバイ問題とは何か http://techlog.iij.ad.jp/archives/487 2012年8月8日公開 ‐2‐
  3. 3. 一般に言われている現象  アンテナピクト非表示 • データ通信ができているのにアンテナピクトが表示 されない • データ通信ピクトも表示されない  セルスタンバイ 圏外時間100%表示 • データ通信ができているのに「圏外」と 判定される  バッテリー過剰消費 • バッテリーの持ちが悪いような気がする すべての端末で 現象が発生するわけではない ‐3‐
  4. 4. 3G (W-CDMA網) について  CS: 回線交換サービス • 音声通話・SMS  PS: パケット交換サービス • データ通信  Android端末は、両方のサービスに 登録(Registration)を行う  日本のMVNOのデータ通信サービス では、PSのみの提供が多かった ※docomoのサービスメニューの都合上 ※CSを使ったデータ通信もありますが、Androidでは使わないので割愛 ‐4‐
  5. 5. 各社のSIMのCS/PS対応 詳しくは冒頭で紹介したblogの記事を参照して下さい PS:○ CS:× アンテナピクト非表示 PS:○ CS:○ PS:○ CS:○ PS:○ CS:○ アンテナピクト表示・圏外時間0% PS:○ CS:× アンテナピクト非表示 CSに登録ができないと、各種現象が発生すると言うことが実験的に確かめられた。 ※IIJmioでもSMS対応SIMを使うことでアンテナピクトが表示されることを確認。 ‐5‐
  6. 6. バッテリー過剰消費はなぜ発生するのか?  バッテリーの消費が過剰になる原因 (推測) 1. 端末が、基地局に対して、位置情報を登録する (≒電波を探す) 動作は、 待機時より消費電力が多いと言うことが知られている 2. もし、端末が位置情報の登録を繰り返しているならば、 通常より消費電力が多くなると思われる 3. CSの位置情報登録に失敗して、リトライを繰り返している からバッテリーを消費するのでは?  状況証拠からの判断でしかない 本当にリトライしてい るのか証拠が見つけ られていない • 状況をつなぎ合わせると、これが原因としか考えられないのだが、 きちんとした裏が取れていない • blog執筆時はAndroidのソースコードから原因を読み解こうとしたが、 結局肝心の部分を突き止めるには至らなかった ‐6‐
  7. 7. 別アプローチ  実機のログ採取 • adb logcatしています  Nexus 4 国内版  Android 4.3  IIJmio SIM (SMS非対応)  以下の操作を行う 機内モードON (無線OFF) →機内モードOFF (無線ON)  オフィスの机の上で放置 ‐7‐
  8. 8. Android内部構造  超ざっくり Android (OS) 内で 通信の状態を監視している GSM Service Status Tracker Android (OS) と ハードウェアの仲介 Radio Interface Layer Base Band (通信ハードウェア) RIL GsmSST ここの出力ログに注目 W-CDMA系の機種はGSM Service Status Tracker CDMA EV-DO系の機種ではCDMA Service Status Tracker ‐8‐
  9. 9. このあたりに注目 SMS非対応SIM 11:24:57 (無線ON) ‐9‐
  10. 10. ポイント VOICE DATA → CS → PS DATA_REGISTRATION_STATE {0, null, null, null, 0, 20} VOICE_REGISTRATION_STATE {2, null, null, 0, null, null, null, null, null, null, null, null, null, 0, 0} DATA_REGISTRATION_STATE {1, 00ec, 0449c0d8, 11, null, 20} VOICE_REGISTRATION_STATE {2, null, null, 0, null, null, null, null, null, null, 1, null, null, 0, 0} 0 - Not registered, MT is not currently searching a new operator to register 未登録だよ・電波は探してないよ 1 - Registered, home network 登録済みだよ 2 - Not registered, but MT is currently searching a new operator to register 未登録だよ・電波を探してるよ →電力消費が大きい MT: Mobile Terminal (移動端末 = Android端末のこと) home network: ローミングではないネットワーク (MVNOであってもローミングでない場合はhome network) https://android.googlesource.com/platform/hardware/ril/+/jb-mr2.0.0-release/include/telephony/ril.h ‐ 10 ‐
  11. 11. そのまま放置 (2時間後) 13:22:23 SMS非対応SIM VOICEは”2”のまま 2時間ずっと消費電力”大”のまま ‐ 11 ‐
  12. 12. さらに別のログにも注目 SMS非対応SIM “UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED” unsolicited: 請求していない 「VOICE NETWORK(CS)の状態が変化した」というBaseBandからの通知 BaseBandが電波の状況を監 視していて、何か変化があっ た場合に、Android(OS)へ通 知するという動作。 2時間の間、高頻度で発生し 続けている。(約90回) ‐ 12 ‐
  13. 13. 誰がトリガを引いているのか? SMS非対応SIM 処理の流れは UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED ↓ VOICE_REGISTRATION_STATE Android(OS)がトリガを引いているわけではない。BaseBandからの通知が先。 一回分 ‐ 13 ‐
  14. 14. SMS対応SIMではどうなるか? SMS対応SIM 18:44:32 (無線ON) DATAもVOICEも速やかに”1”に遷移 ※先ほどと同じように2時間分のログを切り出しています ‐ 14 ‐
  15. 15. そのまま放置 (2時間後) SMS対応SIM  “UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED” は、ほとんど発生していない。  無線ON直後に連続して発生し、以後2時間記録無し。 さらに長時間放置すると、極まれに通知が発生する様子が確認された このログの直後から、翌朝10時まで(約15時間)で7回 ※深夜で付近の端末の出入りが極端に少なかったことの影響も考えられるが、 午前9事前後の出社ラッシュの時間帯でも通知は発生していないため、周辺の 端末の影響は極めて少なかったと推測される ‐ 15 ‐
  16. 16. ここまでのまとめ  SMS非対応(CS無し)SIMでの挙動 • CSにRegistrationしようとして、「searching a new operator」状態を 継続している • Registrationの繰り返しは、Android(OS)が要求しているのではなく、 BaseBandが自発的に行っている  SMS対応(CS有り)SIMでの挙動 • CSへのRegistrationは速やかに成功する • 登録に成功してしまうと、BaseBandからの通知は止む  予想通り、CS無しの場合のみリトライが発生していた  リトライの挙動はBaseBandが主導している ‐ 16 ‐
  17. 17. 現象が発生する端末・発生しない端末  端末によって、発生する現象が異なるのは何故か? • アンテナピクト非表示 • セルスタンバイ 圏外時間100%表示 • バッテリー過剰消費 端末によって、発生する現象がばらばら  Android端末は、メーカー毎に改造が行われている • Googleが公開しているのは、あくまで「基本」 • 実際には製品毎に修正が行われている • RIL(Radio Interface Layer)は各機種固有(Googleのものはサンプルでしかない) • Nexusシリーズですら、オリジナルAndroidからカスタマイズが入っている • 修正方法によって、挙動が違ってくるのはしかたが無い • 修正後のソースコードは原則公開されていない ‐ 17 ‐
  18. 18. 修正方法  想像その1 CSへの登録動作を抑止する (電力消費問題解決) GSM Service Status Tracker Radio Interface Layer Base Band (通信ハードウェア) • バッテリーの持ちは改善しそう • 上位レイヤーから見ると「CS利用不可」 • アンテナピクトやセルスタンバイの表示は改善しない ‐ 18 ‐
  19. 19. 修正方法  想像その2 Base Bandからの応答を読み替え、 CSに登録成功したことにする (上位レイヤーからはCSが使えるように見える) GSM Service Status Tracker Radio Interface Layer Base Band (通信ハードウェア) • アンテナピクト・セルスタンバイの表示は改善しそう • BaseBandの挙動は変らないので、バッテリ消費大 • OS上は「CS利用可」と認識されているので、アプリが誤 動作する可能性がありそう ‐ 19 ‐
  20. 20. 修正方法  想像その3 Phone State Lisner アンテナピクトを表示している部分を書き換える (CSの登録ができていなくても、ピクトを表示する) Signal Strengs GSM Service Status Tracker Radio Interface Layer Base Band (通信ハードウェア) • 画面表示する部分だけを書き換えるので、 アンテナピクトは表示される • OS上は「CS利用不可」なので誤動作は起こりにくい? • BaseBandの挙動は変らないので、バッテリ消費大 ‐ 20 ‐
  21. 21. あくまで想像ですが  修正する箇所によっては、画面表示だけが改善し、バッテ リー消費問題は改善しないケースも考えられる  バッテリー過剰消費に対応するためには、BaseBand部の 修正が欠かせない  非公式に存在するパッチ • Android (OS) レイヤーを修正している • 肝心のBaseBandの挙動は修正できていない • 画面表示は改善するが、おそらく、バッテリー過剰消費の問題は解決でき ていないと思われる  バッテリー過剰消費を改善するには、 やはりCS(SMS対応SIM)が必要 • BaseBandが修正済みの端末であればそもそも問題は起きないが ‐ 21 ‐
  22. 22. どうしてこうなった  そもそも想定外 • PS onlyのサービスのことが考慮されていない • 日本以外ではPS onlyなサービスはない?(らしい) • Googleは日本のMVNOの事を考慮してくれないのか! ……その後、ちょっと事情が変ってきました ‐ 22 ‐
  23. 23. Android 4.2 ‐ 23 ‐
  24. 24. こんな修正が ‐ 24 ‐
  25. 25. 修正内容 author Junichi Monma <monma@google.com> Fri Oct 26 10:22:01 2012 +0900 committer Wink Saville <wink@google.com> Fri Oct 26 10:29:01 2012 -0700 Allowing to change the poll state even if only PS is avairable on the network. There are some MVNO operators are shipping the data only SIM. It isn't connectable with CS, but wroks for PS. If the poll is not shown on the system bar when network registration returns STATE_OUT_OF_SERVICE for CS, user doesn't notice whether or not they can use PS. In addition, PS might works while CS restriction. final boolean voice_capable = phone.getContext().getResources().getBoolean( com.android.internal.R.bool.config_voice_capable); if (!voice_capable && newGPRSState == ServiceState.STATE_IN_SERVICE) { newSS.setState (newGPRSState); } 上書き config_voice_capable の値がfalseの時 もし、PSが利用可能であれば CSの状態を管理する変数 PSの状態を管理する変数 最新のコードでは別のclassで実装されています ※GPRS: GSM(2G)におけるデータ通信規格 Android内では2G用語が今でも幅をきかしています CSの状態をPSの状態で上書きする ‐ 25 ‐
  26. 26. 効能  実際のCSの状態にかかわらず、PSの状態を優先 • 割と強引な修正のような…… • ともかく、アンテナピクトは表示されるようになる  バッテリーの消費に影響が出るか? • GsmServiceTrackerレベルでの書き換えであり、 Radio Interface Layer以下の挙動は今まで通りでは?  config_voice_capableは副作用が大きい • 電話関係のアプリが無効になるなど (Android4.3では調整されている模様?) ここの挙動が変るだけ GSM Service Status Tracker Radio Interface Layer ‐ 26 ‐ Base Band (通信ハードウェア)
  27. 27. 残念ながら  この設定は、一般ユーザが変更できる部分ではない • ファームの書き換え、Root権限での作業が必要 • おそらくタブレットとスマートフォンの切り替えようとして準備された  (発見当初は) 対応端末がなかった • Android4.2端末はNexus4ぐらい • 日本国内では販売されず・技適も未取得  blogでも触れないまま…… ‐ 27 ‐
  28. 28. 実際に変更してみたところ (Nexus4で実験)  SMS未対応SIMでもアンテナピクトが表示される!  ただし、ログを見るとBaseBandの挙動は以前のまま バッテリーの消費問題は改善していないと推定! ‐ 28 ‐
  29. 29. Android 4.3 ‐ 29 ‐
  30. 30. Twitterなどで驚きの声  APNの設定していないのにIIJmioに繋がった!  Nexus7 (2012, 2013), Nexus4で確認 • いずれも Android 4.3  我々も驚きました ‐ 30 ‐
  31. 31. こんな修正が ‐ 31 ‐
  32. 32. 修正内容 author Junichi Monma <monma@google.com> Wed Feb 06 09:55:19 2013 +0900 committer Junichi Monma <monma@google.com> Wed Feb 06 11:33:52 2013 +0900 • • • • • • Added Japanese MVNO APN settings. android/device/sample/etc/ apns-full-conf.xml mopera U b-mobile 3G・4G 1GB/Fair b-mobile 3G・4G U300 b-mobile スマホ電話 b-mobile 4G カメレオンSIM IIJmio これはあくまで「サンプルファイル」扱い。 Nexusはサンプルをそのまま利用しているので、市販端末にもこれ らのAPNが含まれている。 今後キャリアが販売するAndroid4.3端末にMVNOのAPNが含まれる かは未知数。 ‐ 32 ‐
  33. 33. APN自動設定の仕組みを追いかける  いつの間にかこんな項目が  Android4.3以前には なかったような?  もしかしてこれがAPN自動設定 の仕組みなのか?  GoogleのMVNOへ対する アプローチか? ‐ 33 ‐
  34. 34. AndroidのAPN選択 (1) SIMカードからIMSI (MCC/MNC)を取得 apns-conf.xmlから MCC/MNCに マッチするAPNを抽出 ‐ 34 ‐
  35. 35. AndroidのAPN選択 (2) MVNO条件にマッチする APNがあれば、 候補APNリストに追加 ※Android 4.3で追加された部分 ‐ 35 ‐
  36. 36. AndroidのAPN選択 (3) SIMカードの情報が APNの条件にマッチするか 判定 SIMカード内の以下の情報を読み取ることで、 apns-conf.xmlの中から適切なAPNを自動選択可能に • Service Provider Name (完全一致) • IMSI (部分マッチ可能) • Group Identifier Level 1 (前方一致) 同じキャリア(同じMCC/MNC)を使っているMVNOでも、 識別可能な仕組みになっている ‐ 36 ‐
  37. 37. あれ?  サンプルのAPNリスト、iijmio.jpの条件がどれも登録さ れてないんだけど…… • そもそもIIJから情報提供した覚えもないし • Service Provider Name • IMSI • Group Identifier Level 1 特に何も書いてない→  どうしてIIJmioのAPNが自動的に選択されてるんだ? • MCC/MNCだけでは、他のMVNO(docomo通信網利用)と区別がつかない はず ‐ 37 ‐
  38. 38. 実は総当たりしてるだけでした…… mopera U 認証失敗 b-mobile 認証失敗 IIJmio 接続成功 途中省略してます。実際にはMCC/MNCが合致するAPNを、ファイルの上から順番にすべて試しているようです。 ‐ 38 ‐
  39. 39. (^^; とはいえ、動いているようです。 (初回の接続まで時間かかりますが……) ‐ 39 ‐
  40. 40. Googleやるじゃん  「APN設定」は、初心者には難関 • 問い合せ多いです  利用者がAPN設定を意識する事なく、 SIMカードを挿すだけで自動的に通信が可能になる • 端末内のAPNリストに列挙されている必要はあるが  SIMフリー端末でこの仕組みが有効に活用されるのでは?  MVNOを含め、多様な通信環境のことも考慮されるように なってきている ‐ 40 ‐

×