Close sockets from ConnectivityService#setFirewallChainEnabled
And replace netd.socketDestroy by Java implementation
Bug: 270298713
Test: atest FrameworksNetTests CtsNetTestCases
Change-Id: I744b98ac1be04a1aede9d96787305e5a1a9d9ae6
diff --git a/staticlibs/device/com/android/net/module/util/netlink/InetDiagMessage.java b/staticlibs/device/com/android/net/module/util/netlink/InetDiagMessage.java
index d462c53..e69a844 100644
--- a/staticlibs/device/com/android/net/module/util/netlink/InetDiagMessage.java
+++ b/staticlibs/device/com/android/net/module/util/netlink/InetDiagMessage.java
@@ -468,6 +468,23 @@
&& !isAdbSocket(diagMsg));
}
+ /**
+ * Close tcp sockets that match the following condition
+ * 1. TCP status is one of TCP_ESTABLISHED, TCP_SYN_SENT, and TCP_SYN_RECV
+ * 2. Owner uid of socket is in the targetUids
+ * 3. Socket is not loopback
+ * 4. Socket is not adb socket
+ *
+ * @param ownerUids target uids to close sockets
+ */
+ public static void destroyLiveTcpSocketsByOwnerUids(Set<Integer> ownerUids)
+ throws SocketException, InterruptedIOException, ErrnoException {
+ destroySockets(IPPROTO_TCP, TCP_ALIVE_STATE_FILTER,
+ (diagMsg) -> ownerUids.contains(diagMsg.inetDiagMsg.idiag_uid)
+ && !isLoopback(diagMsg)
+ && !isAdbSocket(diagMsg));
+ }
+
@Override
public String toString() {
return "InetDiagMessage{ "