Restore ANDROID_NO_USE_FWMARK_CLIENT for kernel tests
This was removed in aosp/856089, but kernel tests still depend on it.
Bug: 130199266
Change-Id: I30a69c30a60cfb979702540a274ff0770f398c45
Merged-In: I30a69c30a60cfb979702540a274ff0770f398c45
(cherry picked from commit bc2996c04025993f5a665937870a12f34fe87c61)
diff --git a/client/FwmarkClient.cpp b/client/FwmarkClient.cpp
index 8593740..cc4893d 100644
--- a/client/FwmarkClient.cpp
+++ b/client/FwmarkClient.cpp
@@ -30,8 +30,22 @@
namespace {
+// Env flag to control whether FwmarkClient sends sockets to netd for marking.
+// This can only be disabled in debuggable builds and is meant for kernel testing.
+inline constexpr char ANDROID_NO_USE_FWMARK_CLIENT[] = "ANDROID_NO_USE_FWMARK_CLIENT";
+
const sockaddr_un FWMARK_SERVER_PATH = {AF_UNIX, "/dev/socket/fwmarkd"};
+#if defined(NETD_CLIENT_DEBUGGABLE_BUILD)
+constexpr bool isBuildDebuggable = true;
+#else
+constexpr bool isBuildDebuggable = false;
+#endif
+
+bool isOverriddenBy(const char *name) {
+ return isBuildDebuggable && getenv(name);
+}
+
bool commandHasFd(int cmdId) {
return (cmdId != FwmarkCommand::QUERY_USER_ACCESS) &&
(cmdId != FwmarkCommand::SET_COUNTERSET) &&
@@ -41,10 +55,12 @@
} // namespace
bool FwmarkClient::shouldSetFwmark(int family) {
+ if (isOverriddenBy(ANDROID_NO_USE_FWMARK_CLIENT)) return false;
return FwmarkCommand::isSupportedFamily(family);
}
bool FwmarkClient::shouldReportConnectComplete(int family) {
+ if (isOverriddenBy(ANDROID_NO_USE_FWMARK_CLIENT)) return false;
return shouldSetFwmark(family);
}