Panoramica

La funzionalità di monitoraggio e tracciamento dell'utilizzo dei dati per applicazione/delegato si basa sul modulo xt_qtaguid nel kernel Linux Android-3.0 ( kernel/net/netfilter/xt_qtaguid ). La funzionalità di tagging dei socket nel framework ( system/core/libcutils/qtaguid.c ) si basa principalmente sull'esistenza dell'interfaccia /proc/net/xt_qtaguid/ctrl esportata dal modulo del kernel xt_qtaguid .

Il modulo quota2 netfilter (originariamente parte di xtables-addons ) consente la funzionalità di impostare limiti di quota denominati ed è stato esteso per supportare la notifica dello spazio utente quando vengono raggiunti determinati limiti. Una volta raggiunto il limite della quota, il modulo quota2 scarta tutto il traffico di rete successivo. Il framework può anche specificare regole aggiuntive per limitare il traffico di dati in background per un'applicazione (fare riferimento a com.android.server.NetworkManagementSocketTagger.setKernelCounterSet e android.net.NetworkPolicyManager.POLICY_REJECT_METERED_BACKGROUND ).

Come funziona?

Il modulo qtaguid netfilter tiene traccia del traffico di rete in base al socket per ogni applicazione utilizzando l'UID univoco dell'applicazione proprietaria. Sono presenti due componenti tag associati a qualsiasi presa nel sistema. Il primo è l'UID che identifica univocamente l'applicazione responsabile del trasferimento dei dati (Linux consente la possibilità di attribuire la proprietà di ciascun socket di rete all'UID dell'applicazione chiamante). Il secondo componente tag viene utilizzato per supportare un'ulteriore caratterizzazione del traffico nelle categorie specificate dallo sviluppatore dell'applicazione. Utilizzando questi tag a livello di applicazione, un'applicazione può profilare il traffico in diverse sottocategorie.

Nel caso di applicazioni che forniscono il trasferimento dati di rete come servizio, come il download manager, il servizio di streaming multimediale, ecc., è possibile attribuire la proprietà del trasferimento dati di rete all'UID dell'applicazione richiedente utilizzando TrafficStats.setThreadStatsUid() chiamata di funzione. Il chiamante deve disporre dell'autorizzazione " android.permission.MODIFY_NETWORK_ACCOUNTING " per riassegnare la proprietà del traffico di rete.