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

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_bytestx_bytesの値が、転送されたインターネット レイヤー ( IP ) バイトを正確に返すという事実に依存しています。ただし、他のデバイスではそうではない可能性があることを理解しています.今のところ、この機能はこの特性に依存しています。新しいドライバーもそのプロパティを持つ必要があり、 dev_get_stats()値には、下位ネットワーク層 (イーサネットヘッダーなど) のカプセル化オーバーヘッドを含めてはならず、無視できる場合を除き、他のトラフィック (ARP など) を含めないでください。

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