From f38a564a2ae4550fccce6ffa9007478135ebaaff Mon Sep 17 00:00:00 2001 From: Remi NGUYEN VAN Date: Fri, 5 Apr 2019 04:44:45 -0700 Subject: Move attach*Filter() and addArpEntry() methods to NetworkStack The SocketUtils.attach*Filter and SocketUtils.addArpEntry methods were added there because they could not be added as JNI inside the NetworkStack. This was not possible because on Go devices, the NetworkStack was a jar library. But now, Go also uses an APK. Hence, move these methods to the NetworkStack. Fixes: 129433183 Merged-In: I66d7b3e4fbfa32bb0bc853e8cf9399031daff8a9 (cherry picked from commit fe71be2b04a3213828dc0347a1dd4a3675d20562) Change-Id: Ice433a41469e784385f19498c154345d7b9c69b5 --- src/android/net/util/NetworkStackUtils.java | 41 ++++++++++++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) (limited to 'src/android/net/util/NetworkStackUtils.java') diff --git a/src/android/net/util/NetworkStackUtils.java b/src/android/net/util/NetworkStackUtils.java index 9d2df57..dada61c 100644 --- a/src/android/net/util/NetworkStackUtils.java +++ b/src/android/net/util/NetworkStackUtils.java @@ -23,14 +23,18 @@ import android.util.SparseArray; import java.io.FileDescriptor; import java.io.IOException; +import java.net.Inet4Address; +import java.net.SocketException; import java.util.List; import java.util.function.Predicate; - /** * Collection of utilities for the network stack. */ public class NetworkStackUtils { + static { + System.loadLibrary("networkstackutilsjni"); + } /** * @return True if the array is null or 0-length. @@ -98,4 +102,39 @@ public class NetworkStackUtils { String value = DeviceConfig.getProperty(namespace, name); return value != null ? value : defaultValue; } + + /** + * Attaches a socket filter that accepts DHCP packets to the given socket. + */ + public static native void attachDhcpFilter(FileDescriptor fd) throws SocketException; + + /** + * Attaches a socket filter that accepts ICMPv6 router advertisements to the given socket. + * @param fd the socket's {@link FileDescriptor}. + * @param packetType the hardware address type, one of ARPHRD_*. + */ + public static native void attachRaFilter(FileDescriptor fd, int packetType) + throws SocketException; + + /** + * Attaches a socket filter that accepts L2-L4 signaling traffic required for IP connectivity. + * + * This includes: all ARP, ICMPv6 RS/RA/NS/NA messages, and DHCPv4 exchanges. + * + * @param fd the socket's {@link FileDescriptor}. + * @param packetType the hardware address type, one of ARPHRD_*. + */ + public static native void attachControlPacketFilter(FileDescriptor fd, int packetType) + throws SocketException; + + /** + * Add an entry into the ARP cache. + */ + public static void addArpEntry(Inet4Address ipv4Addr, android.net.MacAddress ethAddr, + String ifname, FileDescriptor fd) throws IOException { + addArpEntry(ethAddr.toByteArray(), ipv4Addr.getAddress(), ifname, fd); + } + + private static native void addArpEntry(byte[] ethAddr, byte[] netAddr, String ifname, + FileDescriptor fd) throws IOException; } -- cgit v1.2.3