OffloadUtils - simplify netlink socket lifetime

None of this stuff is performance critical enough that we can't afford
to simply create a new clean netlink socket, and this significantly
simplifies things and makes it all much more thread-safe.

Test: builds, atest
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: If1000d3cead66631d524cb48d581c0f6e53f6d50
diff --git a/server/ClatdController.cpp b/server/ClatdController.cpp
index 89bd0f5..294e55b 100644
--- a/server/ClatdController.cpp
+++ b/server/ClatdController.cpp
@@ -72,12 +72,9 @@
 namespace net {
 
 void ClatdController::resetEgressMap() {
-    int netlinkFd = mNetlinkFd.get();
-
-    const auto del = [&netlinkFd](const ClatEgressKey& key,
-                                  const BpfMap<ClatEgressKey, ClatEgressValue>&) {
+    const auto del = [](const ClatEgressKey& key, const BpfMap<ClatEgressKey, ClatEgressValue>&) {
         ALOGW("Removing stale clat config on interface %d.", key.iif);
-        int rv = tcQdiscDelDevClsact(netlinkFd, key.iif);
+        int rv = tcQdiscDelDevClsact(key.iif);
         if (rv < 0) ALOGE("tcQdiscDelDevClsact() failure: %s", strerror(-rv));
         return Result<void>();  // keep on going regardless
     };
@@ -88,12 +85,10 @@
 }
 
 void ClatdController::resetIngressMap() {
-    int netlinkFd = mNetlinkFd.get();
-
-    const auto del = [&netlinkFd](const ClatIngressKey& key,
-                                  const BpfMap<ClatIngressKey, ClatIngressValue>&) {
+    const auto del = [](const ClatIngressKey& key,
+                        const BpfMap<ClatIngressKey, ClatIngressValue>&) {
         ALOGW("Removing stale clat config on interface %d.", key.iif);
-        int rv = tcQdiscDelDevClsact(netlinkFd, key.iif);
+        int rv = tcQdiscDelDevClsact(key.iif);
         if (rv < 0) ALOGE("tcQdiscDelDevClsact() failure: %s", strerror(-rv));
         return Result<void>();  // keep on going regardless
     };
@@ -132,19 +127,10 @@
         mClatEbpfMode = ClatEbpfMaybe;
     }
 
-    int rv = openNetlinkSocket();
-    if (rv < 0) {
-        ALOGE("openNetlinkSocket() failure: %s", strerror(-rv));
-        mClatEbpfMode = ClatEbpfDisabled;
-        return;
-    }
-    mNetlinkFd.reset(rv);
-
-    rv = getClatEgressMapFd();
+    int rv = getClatEgressMapFd();
     if (rv < 0) {
         ALOGE("getClatEgressMapFd() failure: %s", strerror(-rv));
         mClatEbpfMode = ClatEbpfDisabled;
-        mNetlinkFd.reset(-1);
         return;
     }
     mClatEgressMap.reset(rv);
@@ -154,7 +140,6 @@
         ALOGE("getClatIngressMapFd() failure: %s", strerror(-rv));
         mClatEbpfMode = ClatEbpfDisabled;
         mClatEgressMap.reset(-1);
-        mNetlinkFd.reset(-1);
         return;
     }
     mClatIngressMap.reset(rv);
@@ -348,7 +333,7 @@
     // We do tc setup *after* populating the maps, so scanning through them
     // can always be used to tell us what needs cleanup.
 
-    rv = tcQdiscAddDevClsact(mNetlinkFd, tracker.ifIndex);
+    rv = tcQdiscAddDevClsact(tracker.ifIndex);
     if (rv) {
         ALOGE("tcQdiscAddDevClsact(%d[%s]) failure: %s", tracker.ifIndex, tracker.iface,
               strerror(-rv));
@@ -361,11 +346,11 @@
         return;
     }
 
-    rv = tcQdiscAddDevClsact(mNetlinkFd, tracker.v4ifIndex);
+    rv = tcQdiscAddDevClsact(tracker.v4ifIndex);
     if (rv) {
         ALOGE("tcQdiscAddDevClsact(%d[%s]) failure: %s", tracker.v4ifIndex, tracker.v4iface,
               strerror(-rv));
-        rv = tcQdiscDelDevClsact(mNetlinkFd, tracker.ifIndex);
+        rv = tcQdiscDelDevClsact(tracker.ifIndex);
         if (rv < 0) {
             ALOGE("tcQdiscDelDevClsact(%d[%s]) failure: %s", tracker.ifIndex, tracker.iface,
                   strerror(-rv));
@@ -379,7 +364,7 @@
         return;
     }
 
-    rv = tcFilterAddDevEgressBpf(mNetlinkFd, tracker.v4ifIndex, txRawIpProgFd, false);
+    rv = tcFilterAddDevEgressBpf(tracker.v4ifIndex, txRawIpProgFd, false);
     if (rv) {
         if ((rv == -ENOENT) && (mClatEbpfMode == ClatEbpfMaybe)) {
             ALOGI("tcFilterAddDevEgressBpf(%d[%s], false): %s", tracker.v4ifIndex, tracker.v4iface,
@@ -388,12 +373,12 @@
             ALOGE("tcFilterAddDevEgressBpf(%d[%s], false) failure: %s", tracker.v4ifIndex,
                   tracker.v4iface, strerror(-rv));
         }
-        rv = tcQdiscDelDevClsact(mNetlinkFd, tracker.ifIndex);
+        rv = tcQdiscDelDevClsact(tracker.ifIndex);
         if (rv) {
             ALOGE("tcQdiscDelDevClsact(%d[%s]) failure: %s", tracker.ifIndex, tracker.iface,
                   strerror(-rv));
         }
-        rv = tcQdiscDelDevClsact(mNetlinkFd, tracker.v4ifIndex);
+        rv = tcQdiscDelDevClsact(tracker.v4ifIndex);
         if (rv) {
             ALOGE("tcQdiscDelDevClsact(%d[%s]) failure: %s", tracker.v4ifIndex, tracker.v4iface,
                   strerror(-rv));
@@ -407,7 +392,7 @@
         return;
     }
 
-    rv = tcFilterAddDevIngressBpf(mNetlinkFd, tracker.ifIndex, rxProgFd, isEthernet);
+    rv = tcFilterAddDevIngressBpf(tracker.ifIndex, rxProgFd, isEthernet);
     if (rv) {
         if ((rv == -ENOENT) && (mClatEbpfMode == ClatEbpfMaybe)) {
             ALOGI("tcFilterAddDevIngressBpf(%d[%s], %d): %s", tracker.ifIndex, tracker.iface,
@@ -416,17 +401,17 @@
             ALOGE("tcFilterAddDevIngressBpf(%d[%s], %d) failure: %s", tracker.ifIndex,
                   tracker.iface, isEthernet, strerror(-rv));
         }
-        rv = tcQdiscDelDevClsact(mNetlinkFd, tracker.ifIndex);
+        rv = tcQdiscDelDevClsact(tracker.ifIndex);
         if (rv) {
             ALOGE("tcQdiscDelDevClsact(%d[%s]) failure: %s", tracker.ifIndex, tracker.iface,
                   strerror(-rv));
         }
-        rv = tcFilterDelDevEgressClatIpv4(mNetlinkFd, tracker.v4ifIndex);
+        rv = tcFilterDelDevEgressClatIpv4(tracker.v4ifIndex);
         if (rv) {
             ALOGE("tcFilterDelDevEgressClatIpv4(%d[%s]) failure: %s", tracker.v4ifIndex,
                   tracker.v4iface, strerror(-rv));
         }
-        rv = tcQdiscDelDevClsact(mNetlinkFd, tracker.v4ifIndex);
+        rv = tcQdiscDelDevClsact(tracker.v4ifIndex);
         if (rv) {
             ALOGE("tcQdiscDelDevClsact(%d[%s]) failure: %s", tracker.v4ifIndex, tracker.v4iface,
                   strerror(-rv));
@@ -457,25 +442,25 @@
 void ClatdController::maybeStopBpf(const ClatdTracker& tracker) {
     if (mClatEbpfMode == ClatEbpfDisabled) return;
 
-    int rv = tcFilterDelDevIngressClatIpv6(mNetlinkFd, tracker.ifIndex);
+    int rv = tcFilterDelDevIngressClatIpv6(tracker.ifIndex);
     if (rv < 0) {
         ALOGE("tcFilterDelDevIngressClatIpv6(%d[%s]) failure: %s", tracker.ifIndex, tracker.iface,
               strerror(-rv));
     }
 
-    rv = tcQdiscDelDevClsact(mNetlinkFd, tracker.ifIndex);
+    rv = tcQdiscDelDevClsact(tracker.ifIndex);
     if (rv < 0) {
         ALOGE("tcQdiscDelDevClsact(%d[%s]) failure: %s", tracker.ifIndex, tracker.iface,
               strerror(-rv));
     }
 
-    rv = tcFilterDelDevEgressClatIpv4(mNetlinkFd, tracker.v4ifIndex);
+    rv = tcFilterDelDevEgressClatIpv4(tracker.v4ifIndex);
     if (rv < 0) {
         ALOGE("tcFilterDelDevEgressClatIpv4(%d[%s]) failure: %s", tracker.v4ifIndex,
               tracker.v4iface, strerror(-rv));
     }
 
-    rv = tcQdiscDelDevClsact(mNetlinkFd, tracker.v4ifIndex);
+    rv = tcQdiscDelDevClsact(tracker.v4ifIndex);
     if (rv < 0) {
         ALOGE("tcQdiscDelDevClsact(%d[%s]) failure: %s", tracker.v4ifIndex, tracker.v4iface,
               strerror(-rv));