Use iptables-restore to set the incoming packet mark rule.
This speeds up network switching because one rule needs to be
added/removed per interface.
Bug: 28362720
Test: bullhead builds, boots
Test: netd_{unit,integration}_test pass
Test: watch -n1 "adb shell iptables -v -n -t mangle -L INPUT" while switching networks
Change-Id: Ie536db6a50d018c88bb03c5f069965e99e0d162e
diff --git a/server/NetdConstants.cpp b/server/NetdConstants.cpp
index ff3fc2c..99f4bf9 100644
--- a/server/NetdConstants.cpp
+++ b/server/NetdConstants.cpp
@@ -26,6 +26,7 @@
#define LOG_TAG "Netd"
+#include <android-base/stringprintf.h>
#include <cutils/log.h>
#include <logwrap/logwrap.h>
@@ -128,6 +129,13 @@
return execIptablesRestoreWithOutput(target, commands, nullptr);
}
+int execIptablesRestoreCommand(IptablesTarget target, const std::string& table,
+ const std::string& command, std::string *output) {
+ std::string fullCmd = android::base::StringPrintf("*%s\n%s\nCOMMIT\n", table.c_str(),
+ command.c_str());
+ return execIptablesRestoreWithOutput(target, fullCmd, output);
+}
+
/*
* Check an interface name for plausibility. This should e.g. help against
* directory traversal.