40
IIJ 堂前 清隆 (@IIJ_doumae) IIJmio meeting #1 最近のAndroidMVNO SIMの関係 公開用に加筆版

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

Embed Size (px)

DESCRIPTION

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

Citation preview

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

IIJ 堂前 清隆 (@IIJ_doumae)

IIJmio meeting #1

最近のAndroidとMVNO SIMの関係

公開用に加筆版

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

‐ 2 ‐

Android+MVNOと言えば……

http://techlog.iij.ad.jp/archives/487 2012年8月8日公開

アンテナピクト問題・セルスタンバイ問題とは何か

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

‐ 3 ‐

一般に言われている現象

アンテナピクト非表示 • データ通信ができているのにアンテナピクトが表示

されない

• データ通信ピクトも表示されない

セルスタンバイ 圏外時間100%表示 • データ通信ができているのに「圏外」と

判定される

バッテリー過剰消費 • バッテリーの持ちが悪いような気がする

すべての端末で 現象が発生するわけではない

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

‐ 4 ‐

3G (W-CDMA網) について

CS: 回線交換サービス • 音声通話・SMS

PS: パケット交換サービス • データ通信

Android端末は、両方のサービスに

登録(Registration)を行う

日本のMVNOのデータ通信サービス

では、PSのみの提供が多かった

※docomoのサービスメニューの都合上

※CSを使ったデータ通信もありますが、Androidでは使わないので割愛

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

‐ 5 ‐

各社のSIMのCS/PS対応

PS:○ CS:× PS:○ CS:○ PS:○ CS:○ PS:○ CS:○ PS:○ CS:×

アンテナピクト表示・圏外時間0% アンテナピクト非表示

CSに登録ができないと、各種現象が発生すると言うことが実験的に確かめられた。

※IIJmioでもSMS対応SIMを使うことでアンテナピクトが表示されることを確認。

アンテナピクト非表示

詳しくは冒頭で紹介したblogの記事を参照して下さい

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

‐ 6 ‐

バッテリー過剰消費はなぜ発生するのか?

バッテリーの消費が過剰になる原因 (推測)

1. 端末が、基地局に対して、位置情報を登録する (≒電波を探す) 動作は、 待機時より消費電力が多いと言うことが知られている

2. もし、端末が位置情報の登録を繰り返しているならば、 通常より消費電力が多くなると思われる

3. CSの位置情報登録に失敗して、リトライを繰り返している からバッテリーを消費するのでは?

状況証拠からの判断でしかない • 状況をつなぎ合わせると、これが原因としか考えられないのだが、

きちんとした裏が取れていない

• blog執筆時はAndroidのソースコードから原因を読み解こうとしたが、 結局肝心の部分を突き止めるには至らなかった

本当にリトライしているのか証拠が見つけ

られていない

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

‐ 7 ‐

別アプローチ

実機のログ採取 • adb logcatしています

Nexus 4 国内版

Android 4.3

IIJmio SIM (SMS非対応)

以下の操作を行う

機内モードON (無線OFF)

→機内モードOFF (無線ON)

オフィスの机の上で放置

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

‐ 8 ‐

Android内部構造

超ざっくり

Radio Interface

Layer Base Band

(通信ハードウェア)

GSM

Service Status

Tracker

W-CDMA系の機種はGSM Service Status Tracker CDMA EV-DO系の機種ではCDMA Service Status Tracker

ここの出力ログに注目

GsmSST RIL

Android (OS) 内で 通信の状態を監視している

Android (OS) と ハードウェアの仲介

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

‐ 9 ‐

このあたりに注目

11:24:57

(無線ON)

SMS非対応SIM

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

‐ 10 ‐

ポイント

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

VOICE → CS DATA → PS

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

‐ 11 ‐

そのまま放置 (2時間後)

13:22:23 VOICEは”2”のまま

2時間ずっと消費電力”大”のまま

SMS非対応SIM

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

‐ 12 ‐

さらに別のログにも注目

“UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED”

「VOICE NETWORK(CS)の状態が変化した」というBaseBandからの通知

BaseBandが電波の状況を監視していて、何か変化があった場合に、Android(OS)へ通知するという動作。 2時間の間、高頻度で発生し続けている。(約90回)

SMS非対応SIM

unsolicited: 請求していない

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

‐ 13 ‐

誰がトリガを引いているのか?

処理の流れは UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED ↓ VOICE_REGISTRATION_STATE

Android(OS)がトリガを引いているわけではない。BaseBandからの通知が先。

SMS非対応SIM

一回分

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

‐ 14 ‐

SMS対応SIMではどうなるか?

18:44:32

(無線ON)

※先ほどと同じように2時間分のログを切り出しています

SMS対応SIM

DATAもVOICEも速やかに”1”に遷移

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

‐ 15 ‐

そのまま放置 (2時間後)

“UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED”

は、ほとんど発生していない。

無線ON直後に連続して発生し、以後2時間記録無し。

SMS対応SIM

さらに長時間放置すると、極まれに通知が発生する様子が確認された このログの直後から、翌朝10時まで(約15時間)で7回 ※深夜で付近の端末の出入りが極端に少なかったことの影響も考えられるが、 午前9事前後の出社ラッシュの時間帯でも通知は発生していないため、周辺の 端末の影響は極めて少なかったと推測される

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

‐ 16 ‐

ここまでのまとめ

SMS非対応(CS無し)SIMでの挙動 • CSにRegistrationしようとして、「searching a new operator」状態を

継続している

• Registrationの繰り返しは、Android(OS)が要求しているのではなく、BaseBandが自発的に行っている

SMS対応(CS有り)SIMでの挙動 • CSへのRegistrationは速やかに成功する

• 登録に成功してしまうと、BaseBandからの通知は止む

予想通り、CS無しの場合のみリトライが発生していた

リトライの挙動はBaseBandが主導している

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

‐ 17 ‐

現象が発生する端末・発生しない端末

端末によって、発生する現象が異なるのは何故か? • アンテナピクト非表示

• セルスタンバイ 圏外時間100%表示

• バッテリー過剰消費

Android端末は、メーカー毎に改造が行われている • Googleが公開しているのは、あくまで「基本」

• 実際には製品毎に修正が行われている

• RIL(Radio Interface Layer)は各機種固有(Googleのものはサンプルでしかない)

• Nexusシリーズですら、オリジナルAndroidからカスタマイズが入っている

• 修正方法によって、挙動が違ってくるのはしかたが無い

• 修正後のソースコードは原則公開されていない

端末によって、発生する現象がばらばら

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

‐ 18 ‐

修正方法

想像その1

Radio Interface

Layer Base Band

(通信ハードウェア)

GSM

Service Status

Tracker

CSへの登録動作を抑止する (電力消費問題解決)

• バッテリーの持ちは改善しそう • 上位レイヤーから見ると「CS利用不可」 • アンテナピクトやセルスタンバイの表示は改善しない

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

‐ 19 ‐

修正方法

想像その2

Radio Interface

Layer Base Band

(通信ハードウェア)

GSM

Service Status

Tracker

Base Bandからの応答を読み替え、 CSに登録成功したことにする

(上位レイヤーからはCSが使えるように見える)

• アンテナピクト・セルスタンバイの表示は改善しそう • BaseBandの挙動は変らないので、バッテリ消費大 • OS上は「CS利用可」と認識されているので、アプリが誤

動作する可能性がありそう

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

‐ 20 ‐

修正方法

想像その3

Radio Interface

Layer Base Band

(通信ハードウェア)

GSM

Service Status

Tracker

Signal Strengs

アンテナピクトを表示している部分を書き換える (CSの登録ができていなくても、ピクトを表示する) Phone State

Lisner

• 画面表示する部分だけを書き換えるので、 アンテナピクトは表示される

• OS上は「CS利用不可」なので誤動作は起こりにくい? • BaseBandの挙動は変らないので、バッテリ消費大

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

‐ 21 ‐

あくまで想像ですが

修正する箇所によっては、画面表示だけが改善し、バッテ

リー消費問題は改善しないケースも考えられる

バッテリー過剰消費に対応するためには、BaseBand部の

修正が欠かせない

非公式に存在するパッチ • Android (OS) レイヤーを修正している

• 肝心のBaseBandの挙動は修正できていない

• 画面表示は改善するが、おそらく、バッテリー過剰消費の問題は解決できていないと思われる

バッテリー過剰消費を改善するには、

やはりCS(SMS対応SIM)が必要 • BaseBandが修正済みの端末であればそもそも問題は起きないが

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

‐ 22 ‐

どうしてこうなった

そもそも想定外

• PS onlyのサービスのことが考慮されていない

• 日本以外ではPS onlyなサービスはない?(らしい)

• Googleは日本のMVNOの事を考慮してくれないのか!

……その後、ちょっと事情が変ってきました

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

‐ 23 ‐

Android 4.2

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

‐ 24 ‐

こんな修正が

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

‐ 25 ‐

修正内容

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); }

author Junichi Monma <[email protected]> Fri Oct 26 10:22:01 2012 +0900

committer Wink Saville <[email protected]> Fri Oct 26 10:29:01 2012 -0700

最新のコードでは別のclassで実装されています ※GPRS: GSM(2G)におけるデータ通信規格 Android内では2G用語が今でも幅をきかしています

CSの状態を管理する変数 PSの状態を管理する変数

CSの状態をPSの状態で上書きする

もし、PSが利用可能であれば

config_voice_capable

の値がfalseの時

上書き

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

‐ 26 ‐

効能

実際のCSの状態にかかわらず、PSの状態を優先 • 割と強引な修正のような……

• ともかく、アンテナピクトは表示されるようになる

バッテリーの消費に影響が出るか? • GsmServiceTrackerレベルでの書き換えであり、

Radio Interface Layer以下の挙動は今まで通りでは?

config_voice_capableは副作用が大きい • 電話関係のアプリが無効になるなど (Android4.3では調整されている模様?)

Radio Interface

Layer Base Band

(通信ハードウェア)

GSM

Service Status

Tracker

ここの挙動が変るだけ

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

‐ 27 ‐

残念ながら

この設定は、一般ユーザが変更できる部分ではない

• ファームの書き換え、Root権限での作業が必要

• おそらくタブレットとスマートフォンの切り替えようとして準備された

(発見当初は) 対応端末がなかった

• Android4.2端末はNexus4ぐらい

• 日本国内では販売されず・技適も未取得

blogでも触れないまま……

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

‐ 28 ‐

実際に変更してみたところ (Nexus4で実験)

SMS未対応SIMでもアンテナピクトが表示される!

ただし、ログを見るとBaseBandの挙動は以前のまま

バッテリーの消費問題は改善していないと推定!

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

‐ 29 ‐

Android 4.3

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

‐ 30 ‐

Twitterなどで驚きの声

APNの設定していないのにIIJmioに繋がった!

Nexus7 (2012, 2013), Nexus4で確認 • いずれも Android 4.3

我々も驚きました

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

‐ 31 ‐

こんな修正が

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

‐ 32 ‐

修正内容

Added Japanese MVNO APN settings.

author Junichi Monma <[email protected]> Wed Feb 06 09:55:19 2013 +0900

committer Junichi Monma <[email protected]> Wed Feb 06 11:33:52 2013 +0900

• mopera U • b-mobile 3G・4G 1GB/Fair • b-mobile 3G・4G U300 • b-mobile スマホ電話 • b-mobile 4G カメレオンSIM • IIJmio

android/device/sample/etc/

apns-full-conf.xml

これはあくまで「サンプルファイル」扱い。 Nexusはサンプルをそのまま利用しているので、市販端末にもこれらのAPNが含まれている。 今後キャリアが販売するAndroid4.3端末にMVNOのAPNが含まれるかは未知数。

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

‐ 33 ‐

APN自動設定の仕組みを追いかける

いつの間にかこんな項目が

Android4.3以前には

なかったような?

もしかしてこれがAPN自動設定

の仕組みなのか?

GoogleのMVNOへ対する

アプローチか?

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

‐ 34 ‐

AndroidのAPN選択 (1)

SIMカードからIMSI

(MCC/MNC)を取得

apns-conf.xmlから

MCC/MNCに

マッチするAPNを抽出

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

‐ 35 ‐

AndroidのAPN選択 (2)

MVNO条件にマッチする

APNがあれば、

候補APNリストに追加

※Android 4.3で追加された部分

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

‐ 36 ‐

AndroidのAPN選択 (3)

SIMカードの情報が

APNの条件にマッチするか

判定

SIMカード内の以下の情報を読み取ることで、

apns-conf.xmlの中から適切なAPNを自動選択可能に

• Service Provider Name (完全一致)

• IMSI (部分マッチ可能)

• Group Identifier Level 1 (前方一致)

同じキャリア(同じMCC/MNC)を使っているMVNOでも、

識別可能な仕組みになっている

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

‐ 37 ‐

あれ?

サンプルのAPNリスト、iijmio.jpの条件がどれも登録さ

れてないんだけど…… • そもそもIIJから情報提供した覚えもないし

どうしてIIJmioのAPNが自動的に選択されてるんだ? • MCC/MNCだけでは、他のMVNO(docomo通信網利用)と区別がつかない

はず

• Service Provider Name

• IMSI

• Group Identifier Level 1

特に何も書いてない→

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

‐ 38 ‐

実は総当たりしてるだけでした……

mopera U

認証失敗

b-mobile

認証失敗

IIJmio

接続成功

途中省略してます。実際にはMCC/MNCが合致するAPNを、ファイルの上から順番にすべて試しているようです。

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

‐ 39 ‐

(^^;

とはいえ、動いているようです。

(初回の接続まで時間かかりますが……)

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

‐ 40 ‐

Googleやるじゃん

「APN設定」は、初心者には難関 • 問い合せ多いです

利用者がAPN設定を意識する事なく、

SIMカードを挿すだけで自動的に通信が可能になる • 端末内のAPNリストに列挙されている必要はあるが

SIMフリー端末でこの仕組みが有効に活用されるのでは?

MVNOを含め、多様な通信環境のことも考慮されるように

なってきている