summaryrefslogtreecommitdiff
path: root/server/BandwidthControllerTest.cpp
diff options
context:
space:
mode:
authorLorenzo Colitti <lorenzo@google.com>2016-03-25 13:38:19 +0900
committerLorenzo Colitti <lorenzo@google.com>2016-03-27 21:43:44 +0900
commit464eabecf1174154b8f61845610c3f4f0ca294b3 (patch)
tree33fbbaf5d9c2a3931e7b76a82198f208ba1fb087 /server/BandwidthControllerTest.cpp
parent94a7b43ecb13094313d5f1bdc2515be760a0b6be (diff)
Attempt to make data saver mode work for real.
The data saver refactoring change was incorrect in >= two ways: 1. It relied on the bw_costly_shared chain, which is currently unused. NetworkManagementService just has a "TODO: support quota shared across interfaces" comment about it. What actually happens when setting quota is that each costly interface chain (e.g., bw_costly_rmnet_data0) directly hooks in the bw_penalty box chain. 2. Implementing app whitelisting using "RETURN" inside bw_happy_box was pointless because if data saver was enabled, there was a REJECT at the end of the bw_costly_shared chain that it was returning to. Instead, go back to the previous approach which hooked bw_happy_box at the end of bw_penalty_box. Also, add an additional bw_data_saver rule at the end of bw_happy_box. bw_data_saver only contains one rule: RETURN if data saver is enabled or REJECT if data saver is disabled. That way: 1. If the app is blacklisted, bw_penalty_box REJECTs. If not: 2. If the app is whitelisted (system apps are always whitelisted) bw_happy_box RETURNs to bw_costly_rmnet_data0, skipping bw_data_saver. 3. If an app is neither blacklisted nor whitelisted, bw_happy_box jumps to bw_data_saver. If data saver is enabled, it REJECTs the packet, and if not, it RETURNs to bw_costly_rmnet_data0. 4. When we RETURN to bw_costly_rmnet_data0, either because the app is whitelisted, or because data saver is off, bw_costly_rmnet_data0 applies mobile data usage limits, and then RETURNs to bw_OUTPUT, which calls xt_qtaguid, etc. Bug: 26685616 Bug: 27506285 Change-Id: If15397afde6862d95827a1fdd30f60efd7fab66a
Diffstat (limited to 'server/BandwidthControllerTest.cpp')
-rw-r--r--server/BandwidthControllerTest.cpp14
1 files changed, 8 insertions, 6 deletions
diff --git a/server/BandwidthControllerTest.cpp b/server/BandwidthControllerTest.cpp
index 4a59883a..82518302 100644
--- a/server/BandwidthControllerTest.cpp
+++ b/server/BandwidthControllerTest.cpp
@@ -26,7 +26,7 @@
std::vector<std::string> gCmds = {};
-extern "C" int fake_android_fork_exec(int argc, char* argv[], int *status, bool, bool) {
+int fake_android_fork_exec(int argc, char* argv[], int *status, bool, bool) {
std::string cmd = argv[0];
for (int i = 1; i < argc; i++) {
cmd += " ";
@@ -72,6 +72,7 @@ TEST_F(BandwidthControllerTest, TestEnableBandwidthControl) {
"-F bw_FORWARD",
"-F bw_happy_box",
"-F bw_penalty_box",
+ "-F bw_data_saver",
"-F bw_costly_shared",
"-t raw -F bw_raw_PREROUTING",
"-t mangle -F bw_mangle_POSTROUTING",
@@ -80,9 +81,10 @@ TEST_F(BandwidthControllerTest, TestEnableBandwidthControl) {
"-t raw -A bw_raw_PREROUTING -m owner --socket-exists",
"-t mangle -A bw_mangle_POSTROUTING -m owner --socket-exists",
"-A bw_costly_shared --jump bw_penalty_box",
- "-A bw_costly_shared --jump bw_happy_box",
- "-A bw_costly_shared --jump RETURN",
- "-A bw_happy_box -m owner --uid-owner 0-9999 --jump RETURN",
+ "-A bw_penalty_box --jump bw_happy_box",
+ "-A bw_happy_box --jump bw_data_saver",
+ "-A bw_data_saver -j RETURN",
+ "-I bw_happy_box -m owner --uid-owner 0-9999 --jump RETURN",
};
expectIptablesCommands(expected);
}
@@ -90,13 +92,13 @@ TEST_F(BandwidthControllerTest, TestEnableBandwidthControl) {
TEST_F(BandwidthControllerTest, TestEnableDataSaver) {
mBw.enableDataSaver(true);
std::vector<std::string> expected = {
- "-R bw_costly_shared 3 --jump REJECT",
+ "-R bw_data_saver 1 --jump REJECT",
};
expectIptablesCommands(expected);
mBw.enableDataSaver(false);
expected = {
- "-R bw_costly_shared 3 --jump RETURN",
+ "-R bw_data_saver 1 --jump RETURN",
};
expectIptablesCommands(expected);
}