ClatdController: handle {in, e}gress filter cleanup in maybe{Start, Stop}Bpf()

Preparation for moving qdisc clsact control plane to RouteController.cpp

Currently, both ingress and egress filter removing are relied on
qdisc removing which removes any filters attached to. After moving
qdisc clsact control plane out, ClatdController have to handle filter
removing.

Test: manual clatd test
1. Connect to IPv6-Only WiFi hotspot
2. ping 8.8.8.8 successfully
3. Disconnect from WiFi
Repeat the above steps three times and check if any error in logcat.

Change-Id: I3009994d9a336e9c40ba06d08bed1fac17c1f4ce
diff --git a/server/ClatdController.cpp b/server/ClatdController.cpp
index ed183d9..b9a6075 100644
--- a/server/ClatdController.cpp
+++ b/server/ClatdController.cpp
@@ -421,6 +421,11 @@
             ALOGE("tcQdiscDelDevClsact(%d[%s]) failure: %s", tracker.ifIndex, tracker.iface,
                   strerror(-rv));
         }
+        rv = tcFilterDelDevEgressClatIpv4(mNetlinkFd, tracker.v4ifIndex);
+        if (rv) {
+            ALOGE("tcFilterDelDevEgressClatIpv4(%d[%s]) failure: %s", tracker.v4ifIndex,
+                  tracker.v4iface, strerror(-rv));
+        }
         rv = tcQdiscDelDevClsact(mNetlinkFd, tracker.v4ifIndex);
         if (rv) {
             ALOGE("tcQdiscDelDevClsact(%d[%s]) failure: %s", tracker.v4ifIndex, tracker.v4iface,
@@ -452,14 +457,24 @@
 void ClatdController::maybeStopBpf(const ClatdTracker& tracker) {
     if (mClatEbpfMode == ClatEbpfDisabled) return;
 
-    // No need to remove filters, since we remove qdiscs they are attached to,
-    // which automatically removes everything attached to the qdisc.
-    int rv = tcQdiscDelDevClsact(mNetlinkFd, tracker.ifIndex);
+    int rv = tcFilterDelDevIngressClatIpv6(mNetlinkFd, tracker.ifIndex);
+    if (rv < 0) {
+        ALOGE("tcFilterDelDevIngressClatIpv6(%d[%s]) failure: %s", tracker.ifIndex, tracker.iface,
+              strerror(-rv));
+    }
+
+    rv = tcQdiscDelDevClsact(mNetlinkFd, tracker.ifIndex);
     if (rv < 0) {
         ALOGE("tcQdiscDelDevClsact(%d[%s]) failure: %s", tracker.ifIndex, tracker.iface,
               strerror(-rv));
     }
 
+    rv = tcFilterDelDevEgressClatIpv4(mNetlinkFd, tracker.v4ifIndex);
+    if (rv < 0) {
+        ALOGE("tcFilterDelDevEgressClatIpv4(%d[%s]) failure: %s", tracker.v4ifIndex,
+              tracker.v4iface, strerror(-rv));
+    }
+
     rv = tcQdiscDelDevClsact(mNetlinkFd, tracker.v4ifIndex);
     if (rv < 0) {
         ALOGE("tcQdiscDelDevClsact(%d[%s]) failure: %s", tracker.v4ifIndex, tracker.v4iface,