ネットワーク インターフェース統計情報の概要

Android 4.0 では、Linux ネットワーク インターフェースから報告された統計情報が経時的に記録され、ネットワークの割り当て量上限の適用や、ユーザーに表示されるグラフのレンダリングなどに使用されます。

各ネットワーク デバイス ドライバ(Wi-Fi 込み)は、標準的なカーネル デバイスのライフサイクルに従い、dev_get_stats() を通じて正しい統計情報を返す必要があります。特に、インターフェースがアクティブである間、返される統計情報は厳密に単調でなければなりません。ドライバは、unregister_netdev()、または register_netdevice_notifier() / register_inetaddr_notifier() / register_inet6addr_notifier() で登録されたコールバックの NETDEV_UNREGISTER イベントを生成する同等の処理が正常に完了した後にのみ、統計情報をリセットできます。

携帯通信会社は通常、インターネット層(IP)でのデータ使用量を測定します。Android 4.0 ではこのアプローチに合わせるために、カーネル デバイスについて、dev_get_stats() が返す rx_bytes 値と tx_bytes 値が、転送されたインターネット層(IP)のバイト数を正確に返すという事実に依存しています。しかし、他のデバイスではそうならない可能性があります。現在のところ、この機能はこうした特性に依存しています。新しいドライバにもそのプロパティが必要であり、また dev_get_stats() 値には下位ネットワーク層のカプセル化オーバーヘッド(イーサネット ヘッダーなど)を含めてはなりません。無視できる場合を除き、好ましくは他のトラフィック(ARP など)を含めるべきではありません。

Android フレームワークは、ConnectivityServiceNetworkStateTracker に関連付けられたネットワーク インターフェースからのみ、統計情報を収集します。これによりフレームワークは、タイプ(TYPE_MOBILETYPE_WIFI など)とサブスクライバー ID(IMSI など)を含め、各ネットワーク インターフェースを具体的に識別できます。データのルーティングに使用されるすべてのネットワーク インターフェースは、統計情報を正しく反映できるように、NetworkStateTracker で表す必要があります。