Use iptables pipes when fetching tether counters.
Tested using:
adb shell ndc bandwidth gettetherstats
adb shell iptables -nvx -L natctrl_tether_counters
adb shell ip6tables -nvx -L natctrl_tether_counters
Results:
114 0 wlan0 rmnet_data0 272883 2976 8624804 6032
200 0 Tethering stats list completed
Chain natctrl_tether_counters (2 references)
pkts bytes target prot opt in out source destination
2688 179096 RETURN all -- wlan0 rmnet_data0 0.0.0.0/0 0.0.0.0/0
5713 8351999 RETURN all -- rmnet_data0 wlan0 0.0.0.0/0 0.0.0.0/0
Chain natctrl_tether_counters (1 references)
pkts bytes target prot opt in out source destination
288 93787 RETURN all wlan0 rmnet_data0 ::/0 ::/0
319 272805 RETURN all rmnet_data0 wlan0 ::/0 ::/0
Test: manual test described above
Test: data usage increases by 10MB when downloading 10MB file
Test: netd_unit_test passes
Bug: 34873832
Change-Id: I32c4e750a4d3c379074cc13ab1302d51421860d2
diff --git a/server/BandwidthController.h b/server/BandwidthController.h
index 66fdeee..0398ce9 100644
--- a/server/BandwidthController.h
+++ b/server/BandwidthController.h
@@ -171,11 +171,6 @@
static void addStats(TetherStatsList& statsList, const TetherStats& stats);
- static int addForwardChainStats(const TetherStats& filter,
- TetherStatsList& statsList, FILE *fp,
- std::string &extraProcessingInfo);
-
-
/*
* stats should never have only intIface initialized. Other 3 combos are ok.
* fp should be a file to the apropriate FORWARD chain of iptables rules.
@@ -185,8 +180,9 @@
* in:extIface out:intIface
* and the rules are grouped in pairs when more that one tethering was setup.
*/
- static int parseForwardChainStats(SocketClient *cli, const TetherStats filter, FILE *fp,
- std::string &extraProcessingInfo);
+ static int addForwardChainStats(const TetherStats& filter,
+ TetherStatsList& statsList, const std::string& iptOutput,
+ std::string &extraProcessingInfo);
/*
* Attempt to find the bw_costly_* tables that need flushing,