summaryrefslogtreecommitdiff
path: root/common
diff options
context:
space:
mode:
authorXiao Ma <xiaom@google.com>2021-04-09 13:15:18 +0900
committerXiao Ma <xiaom@google.com>2021-04-09 18:57:00 +0900
commit657b2e866044750a714c08d2a2cd0e1eb837d640 (patch)
treea1c7cba490bae8a5e5f5d3864b5b6d89744b6ecd /common
parenta2d81a0e979d07ed08db46e37f86a7e4bf1b9cbe (diff)
downloadnet-657b2e866044750a714c08d2a2cd0e1eb837d640.tar.gz
Add build ICMPv6 echo request packet helper function in Ipv6Utils.
Bug: 168868607 Test: atest NetworkStaticLibTests Change-Id: Ibd3c8348996c8b55767956b03978a69593ec29e7
Diffstat (limited to 'common')
-rw-r--r--common/device/com/android/net/module/util/Ipv6Utils.java11
-rw-r--r--common/tests/unit/src/com/android/net/module/util/Ipv6UtilsTest.java19
2 files changed, 30 insertions, 0 deletions
diff --git a/common/device/com/android/net/module/util/Ipv6Utils.java b/common/device/com/android/net/module/util/Ipv6Utils.java
index ee43ae99..fe7c89bc 100644
--- a/common/device/com/android/net/module/util/Ipv6Utils.java
+++ b/common/device/com/android/net/module/util/Ipv6Utils.java
@@ -20,6 +20,7 @@ import static android.system.OsConstants.IPPROTO_ICMPV6;
import static com.android.net.module.util.IpUtils.icmpv6Checksum;
import static com.android.net.module.util.NetworkStackConstants.ETHER_TYPE_IPV6;
+import static com.android.net.module.util.NetworkStackConstants.ICMPV6_ECHO_REQUEST_TYPE;
import static com.android.net.module.util.NetworkStackConstants.ICMPV6_NEIGHBOR_ADVERTISEMENT;
import static com.android.net.module.util.NetworkStackConstants.ICMPV6_NEIGHBOR_SOLICITATION;
import static com.android.net.module.util.NetworkStackConstants.ICMPV6_ROUTER_ADVERTISEMENT;
@@ -148,4 +149,14 @@ public class Ipv6Utils {
return buildIcmpv6Packet(srcMac, dstMac, srcIp, dstIp,
(byte) ICMPV6_ROUTER_SOLICITATION /* type */, (byte) 0 /* code */, payload);
}
+
+ /**
+ * Build an ICMPv6 Echo Request packet from the required specified parameters.
+ */
+ public static ByteBuffer buildEchoRequestPacket(final MacAddress srcMac,
+ final MacAddress dstMac, final Inet6Address srcIp, final Inet6Address dstIp) {
+ final ByteBuffer payload = ByteBuffer.allocate(4); // ID and Sequence number may be zero.
+ return buildIcmpv6Packet(srcMac, dstMac, srcIp, dstIp,
+ (byte) ICMPV6_ECHO_REQUEST_TYPE /* type */, (byte) 0 /* code */, payload);
+ }
}
diff --git a/common/tests/unit/src/com/android/net/module/util/Ipv6UtilsTest.java b/common/tests/unit/src/com/android/net/module/util/Ipv6UtilsTest.java
index 37278b3d..03a1ec9f 100644
--- a/common/tests/unit/src/com/android/net/module/util/Ipv6UtilsTest.java
+++ b/common/tests/unit/src/com/android/net/module/util/Ipv6UtilsTest.java
@@ -112,6 +112,25 @@ public class Ipv6UtilsTest {
assertPioEquals(pio, "fdcd:a17f:6502:1::/64", pioFlags, 86400, 86400);
}
+ @Test
+ public void testBuildEchoRequestPacket() {
+ final ByteBuffer b = Ipv6Utils.buildEchoRequestPacket(MAC2, MAC1, LINK_LOCAL, ALL_NODES);
+
+ EthernetHeader eth = Struct.parse(EthernetHeader.class, b);
+ assertEquals(MAC2, eth.srcMac);
+ assertEquals(MAC1, eth.dstMac);
+
+ Ipv6Header ipv6 = Struct.parse(Ipv6Header.class, b);
+ assertEquals(255, ipv6.hopLimit);
+ assertEquals(OsConstants.IPPROTO_ICMPV6, ipv6.nextHeader);
+ assertEquals(LINK_LOCAL, ipv6.srcIp);
+ assertEquals(ALL_NODES, ipv6.dstIp);
+
+ Icmpv6Header icmpv6 = Struct.parse(Icmpv6Header.class, b);
+ assertEquals(NetworkStackConstants.ICMPV6_ECHO_REQUEST_TYPE, icmpv6.type);
+ assertEquals(0, icmpv6.code);
+ }
+
private void assertPioEquals(PrefixInformationOption pio, String prefix, byte flags,
long valid, long preferred) {
assertEquals(NetworkStackConstants.ICMPV6_ND_OPTION_PIO, pio.type);