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();
}
diff --git a/server/ClatdController.h b/server/ClatdController.h
index 9efa8ae..8794e80 100644
--- a/server/ClatdController.h
+++ b/server/ClatdController.h
@@ -82,6 +82,7 @@
std::map<std::string, ClatdTracker> mClatdTrackers GUARDED_BY(mutex);
ClatdTracker* getClatdTracker(const std::string& interface) REQUIRES(mutex);
+ void resetEgressMap() REQUIRES(mutex);
void resetIngressMap() REQUIRES(mutex);
void dumpEgress(netdutils::DumpWriter& dw) REQUIRES(mutex);