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();
}