diff options
Diffstat (limited to 'common')
-rw-r--r-- | common/device/com/android/net/module/util/Ipv6Utils.java | 11 | ||||
-rw-r--r-- | common/tests/unit/src/com/android/net/module/util/Ipv6UtilsTest.java | 19 |
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); |