ClatCoordinator: use Java class BpfMap to remove clat rule
This a preparation to replace duplicated native functions with the
existing Java class.
Bug: 221213090
Test: atest FrameworksNetTests
Test: manual check
Steps:
1. Connect wlan and check map content {iface index, v4addr, v6addr, pfx96} manually
after clat started.
$ adb shell dumpsys netd
ClatdController
BPF ingress map: iif(iface) nat64Prefix v6Addr -> v4Addr oif(iface)
47(wlan0) 64:ff9b::/96 2a00:79e1:abc:6f02:2479:2f51:25a9:28f1 -> 192.0.0.4 53(v4-wlan0)
BPF egress map: iif(iface) v4Addr -> v6Addr nat64Prefix oif(iface)
53(v4-wlan0) 192.0.0.4 -> 2a00:79e1:abc:6f02:2479:2f51:25a9:28f1 64:ff9b::/96 47(wlan0) ether
2. Disconnect wlan and check the bpf map is removed.
$ adb shell dumpsys netd
ClatdController
BPF ingress map: iif(iface) nat64Prefix v6Addr -> v4Addr oif(iface)
BPF egress map: iif(iface) v4Addr -> v6Addr nat64Prefix oif(iface)
Change-Id: Ia0c90c7104c4a42d34a28a5ddf3cf13a289f8c76
This commit is contained in:
parent
07fcf9ca49
commit
bd85f8903e
3 changed files with 24 additions and 20 deletions
|
|
@ -139,26 +139,6 @@ void maybeStopBpf(const ClatdTracker& tracker) {
|
|||
ALOGE("tcFilterDelDevEgressClatIpv4(%d[%s]) failure: %s", tracker.v4ifIndex,
|
||||
tracker.v4iface, strerror(-rv));
|
||||
}
|
||||
|
||||
// We cleanup the maps last, so scanning through them can be used to
|
||||
// determine what still needs cleanup.
|
||||
|
||||
ClatEgress4Key txKey = {
|
||||
.iif = tracker.v4ifIndex,
|
||||
.local4 = tracker.v4,
|
||||
};
|
||||
|
||||
auto ret = mClatEgress4Map.deleteValue(txKey);
|
||||
if (!ret.ok()) ALOGE("mClatEgress4Map.deleteValue failure: %s", strerror(ret.error().code()));
|
||||
|
||||
ClatIngress6Key rxKey = {
|
||||
.iif = tracker.ifIndex,
|
||||
.pfx96 = tracker.pfx96,
|
||||
.local6 = tracker.v6,
|
||||
};
|
||||
|
||||
ret = mClatIngress6Map.deleteValue(rxKey);
|
||||
if (!ret.ok()) ALOGE("mClatIngress6Map.deleteValue failure: %s", strerror(ret.error().code()));
|
||||
}
|
||||
|
||||
} // namespace clat
|
||||
|
|
|
|||
|
|
@ -563,6 +563,27 @@ public class ClatCoordinator {
|
|||
return v6Str;
|
||||
}
|
||||
|
||||
private void maybeStopBpf(final ClatdTracker tracker) {
|
||||
if (mIngressMap == null || mEgressMap == null) return;
|
||||
|
||||
final ClatEgress4Key txKey = new ClatEgress4Key(tracker.v4ifIndex, tracker.v4);
|
||||
try {
|
||||
mEgressMap.deleteEntry(txKey);
|
||||
} catch (ErrnoException | IllegalStateException e) {
|
||||
Log.e(TAG, "Could not delete entry (" + txKey + "): " + e);
|
||||
}
|
||||
|
||||
final ClatIngress6Key rxKey = new ClatIngress6Key(tracker.ifIndex, tracker.pfx96,
|
||||
tracker.v6);
|
||||
try {
|
||||
mIngressMap.deleteEntry(rxKey);
|
||||
} catch (ErrnoException | IllegalStateException e) {
|
||||
Log.e(TAG, "Could not delete entry (" + rxKey + "): " + e);
|
||||
}
|
||||
|
||||
// TODO: dettach program.
|
||||
}
|
||||
|
||||
/**
|
||||
* Stop clatd
|
||||
*/
|
||||
|
|
@ -572,6 +593,7 @@ public class ClatCoordinator {
|
|||
}
|
||||
Log.i(TAG, "Stopping clatd pid=" + mClatdTracker.pid + " on " + mClatdTracker.iface);
|
||||
|
||||
maybeStopBpf(mClatdTracker);
|
||||
mDeps.stopClatd(mClatdTracker.iface, mClatdTracker.pfx96.getHostAddress(),
|
||||
mClatdTracker.v4.getHostAddress(), mClatdTracker.v6.getHostAddress(),
|
||||
mClatdTracker.pid);
|
||||
|
|
|
|||
|
|
@ -426,6 +426,8 @@ public class ClatCoordinatorTest {
|
|||
|
||||
// [3] Expect clatd to stop successfully.
|
||||
coordinator.clatStop();
|
||||
inOrder.verify(mEgressMap).deleteEntry(eq(EGRESS_KEY));
|
||||
inOrder.verify(mIngressMap).deleteEntry(eq(INGRESS_KEY));
|
||||
inOrder.verify(mDeps).stopClatd(eq(BASE_IFACE), eq(NAT64_PREFIX_STRING),
|
||||
eq(XLAT_LOCAL_IPV4ADDR_STRING), eq(XLAT_LOCAL_IPV6ADDR_STRING), eq(CLATD_PID));
|
||||
inOrder.verify(mDeps).untagSocket(eq(RAW_SOCK_COOKIE));
|
||||
|
|
|
|||
Loading…
Reference in a new issue