最近在Android4.1.1上调试时logcat信息里有qtaguid相关内容,不了解这个服务的功能,上网搜索了一圈,相关资料太少了,但最终还是发现了一些有价值的资料:
1、在
android-3.0 Linux kernel (
kernel/net/netfilter/xt_qtaguid
)里有相关的处理,编译时需把
qtaguid和
netfilter的
filter配置项打开;
2、
在Android里有net.qtaguid_enabled变量,设置为1。在源码的
system/core/libcutils/qtaguid.c
文件里有相关处理。
3、qtaguid的工作原理主要是上层应用的UID提供给kernel来建立tag,使用红黑树来处理,上层可通过/proc/net/xt_qtaguid/stats读取来获取状态,而android源码里libcutils里有qtaguid的接口,用于与kernel连接,打通整个通路,也为其他JAVA和C程序等提供相应的接口,而在上层应用则可以使用NetworkManagementSocketT
agger和
TrafficStats.setThreadStatsUid()等类及函数来调用处理
。