ClatdController - implement resetEgressMap()

Test: compiles, atest
Bug: 139396664
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: Ie5f969cf94d9571a0ee5a2847c87e397132f46f1
diff --git a/server/ClatdController.cpp b/server/ClatdController.cpp
index da8f5da..a29962c 100644
--- a/server/ClatdController.cpp
+++ b/server/ClatdController.cpp
@@ -70,6 +70,22 @@
 namespace android {
 namespace net {
 
+void ClatdController::resetEgressMap() {
+    int netlinkFd = mNetlinkFd.get();
+
+    const auto del = [&netlinkFd](const ClatEgressKey& key,
+                                  const BpfMap<ClatEgressKey, ClatEgressValue>&) {
+        ALOGW("Removing stale clat config on interface %d.", key.iif);
+        int rv = tcQdiscDelDevClsact(netlinkFd, key.iif);
+        if (rv < 0) ALOGE("tcQdiscDelDevClsact() failure: %s", strerror(-rv));
+        return netdutils::status::ok;  // keep on going regardless
+    };
+    auto ret = mClatEgressMap.iterate(del);
+    if (!isOk(ret)) ALOGE("mClatEgressMap.iterate() failure: %s", strerror(ret.code()));
+    ret = mClatEgressMap.clear();
+    if (!isOk(ret)) ALOGE("mClatEgressMap.clear() failure: %s", strerror(ret.code()));
+}
+
 void ClatdController::resetIngressMap() {
     int netlinkFd = mNetlinkFd.get();
 
@@ -142,6 +158,7 @@
     }
     mClatIngressMap.reset(rv);
 
+    resetEgressMap();
     resetIngressMap();
 }