Add an icmpv6Checksum utility to IpUtils

The utility is similar to the existing udpChecksum and tcpChecksum
methods, but for ICMPv6 messages.

Bug: 168868607
Test: m, followup tests using this utility
Change-Id: I41f478af89260a0225f597e672bd798932f1b5eb
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",