Panoramica

La funzionalità di monitoraggio e tracciamento dell'utilizzo dei dati per applicazione/delegati 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 alla 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 di quota, il modulo quota2 elimina tutto il traffico di rete successivo. Il framework può anche specificare regole aggiuntive per limitare il traffico 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. Esistono due componenti di tag associati a qualsiasi socket nel sistema. Il primo è l'UID che identifica in modo univoco l'applicazione responsabile del trasferimento dei dati (Linux consente di attribuire la proprietà di ogni socket di rete all'UID dell'applicazione chiamante). Il secondo componente tag viene utilizzato per supportare una caratterizzazione aggiuntiva del traffico nelle categorie specificate dagli sviluppatori di applicazioni. Utilizzando questi tag a livello di applicazione, un'applicazione può profilare il traffico in diverse sottocategorie.

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