Merge "Add an icmpv6Checksum utility to IpUtils" am: 67c35de1e8
Original change: https://android-review.googlesource.com/c/platform/frameworks/libs/net/+/1448335
Change-Id: If4f9421fcb7fc967e954f09c89e91f50281efeab
diff --git a/staticlibs/framework/com/android/net/module/util/IpUtils.java b/staticlibs/framework/com/android/net/module/util/IpUtils.java
index 54b4cdf..dbc2285 100644
--- a/staticlibs/framework/com/android/net/module/util/IpUtils.java
+++ b/staticlibs/framework/com/android/net/module/util/IpUtils.java
@@ -16,16 +16,15 @@
package com.android.net.module.util;
-import java.net.Inet6Address;
-import java.net.InetAddress;
-import java.nio.BufferOverflowException;
-import java.nio.BufferUnderflowException;
-import java.nio.ByteBuffer;
-import java.nio.ShortBuffer;
-
+import static android.system.OsConstants.IPPROTO_ICMPV6;
import static android.system.OsConstants.IPPROTO_TCP;
import static android.system.OsConstants.IPPROTO_UDP;
+import java.net.Inet6Address;
+import java.net.InetAddress;
+import java.nio.ByteBuffer;
+import java.nio.ShortBuffer;
+
/**
* @hide
*/
@@ -129,16 +128,30 @@
return (short) sum;
}
+ /**
+ * Calculate the UDP checksum for an UDP packet.
+ */
public static short udpChecksum(ByteBuffer buf, int ipOffset, int transportOffset) {
int transportLen = intAbs(buf.getShort(transportOffset + 4));
return transportChecksum(buf, IPPROTO_UDP, ipOffset, transportOffset, transportLen);
}
+ /**
+ * Calculate the TCP checksum for a TCP packet.
+ */
public static short tcpChecksum(ByteBuffer buf, int ipOffset, int transportOffset,
int transportLen) {
return transportChecksum(buf, IPPROTO_TCP, ipOffset, transportOffset, transportLen);
}
+ /**
+ * Calculate the ICMPv6 checksum for an ICMPv6 packet.
+ */
+ public static short icmpv6Checksum(ByteBuffer buf, int ipOffset, int transportOffset,
+ int transportLen) {
+ return transportChecksum(buf, IPPROTO_ICMPV6, ipOffset, transportOffset, transportLen);
+ }
+
public static String addressAndPortToString(InetAddress address, int port) {
return String.format(
(address instanceof Inet6Address) ? "[%s]:%d" : "%s:%d",