先看一下wifi打开流程图:
图中注意三个重要模块:1.WifiService(framework层) 2.netd(处于Framework与kernel之间library层,system/netd目录下) 3.wpa_supplicant与hostapd(由于wpa_supplicant是一个开源软件项目,所以存放在了external/wpa_supplicant_8下)。
netd中的CommandListener调用iptables(与kernel的netfilter模块配合工作,获取数据包统计流量,流量防护,portal页面跳转。。。),tc(流量控制,限速),ip(可代替ifconfig,route,arp等命令)等命令进行对kernel的操作。
三种网络:rmnet(高通 modem),wlan(无线),eth(有线)。
流量上报流程:
1:用户空间新增一个件/external/iptables/extensions/libxt_wifistat.c
2:内核新增一个设备节点,存放及读取流量skb。
3:内核新增一个match模块,match函数存放流量进skb。
路径(/kernel/net/netfilter/xt_uc_stat.c)
4:拨号成功下发iptables策略。
5:mainserver读取skb的内容统计。
6:根据阀值定时上传到服务器。