Przegląd statystyk interfejsu sieciowego

W systemie Android 4.0 statystyki raportowane przez interfejsy sieciowe systemu Linux są rejestrowane w czasie i są używane do wymuszania limitów przydziału sieci, renderowania wykresów widocznych dla użytkownika i nie tylko.

Każdy sterownik urządzenia sieciowego (w tym Wi-Fi) musi przestrzegać standardowego cyklu życia urządzenia jądra i zwracać poprawne statystyki poprzez dev_get_stats() . W szczególności zwracane statystyki muszą pozostać monotoniczne, gdy interfejs jest aktywny. Sterowniki mogą zresetować statystyki tylko po pomyślnym zakończeniu unregister_netdev() lub równoważnej, która generuje zdarzenie NETDEV_UNREGISTER dla wywołań zwrotnych zarejestrowanych za pomocą register_netdevice_notifier() / register_inetaddr_notifier() / register_inet6addr_notifier() .

Operatorzy komórkowi zazwyczaj mierzą wykorzystanie danych w warstwie internetowej (IP). Aby dopasować to podejście w Androidzie 4.0, polegamy na tym, że dla urządzeń jądra zależy nam na wartościach rx_bytes i tx_bytes zwracanych przez dev_get_stats() zwracają dokładnie przesłane bajty warstwy internetowej ( IP ). Ale rozumiemy, że w przypadku innych urządzeń może tak nie być. Na razie funkcja opiera się na tej osobliwości. Nowe sterowniki również powinny mieć tę właściwość, a wartości dev_get_stats() nie mogą zawierać żadnego narzutu enkapsulacji niższych warstw sieci (takich jak nagłówki Ethernet) i najlepiej nie powinny zawierać innego ruchu (takiego jak ARP), chyba że jest on nieistotny.

Struktura systemu Android zbiera tylko statystyki z interfejsów sieciowych skojarzonych z NetworkStateTracker w ConnectivityService . Umożliwia to ramom konkretną identyfikację każdego interfejsu sieciowego, w tym jego typu (takiego jak TYPE_MOBILE lub TYPE_WIFI ) i tożsamości subskrybenta (takiego jak IMSI). Wszystkie interfejsy sieciowe używane do trasowania danych powinny być reprezentowane przez NetworkStateTracker , aby statystyki mogły być poprawnie rozliczane.