diff --git a/staticlibs/device/com/android/net/module/util/arp/ArpPacket.java b/staticlibs/device/com/android/net/module/util/arp/ArpPacket.java index dab9694b25..bf447d3d1b 100644 --- a/staticlibs/device/com/android/net/module/util/arp/ArpPacket.java +++ b/staticlibs/device/com/android/net/module/util/arp/ArpPacket.java @@ -45,14 +45,18 @@ import java.nio.ByteBuffer; public class ArpPacket { private static final String TAG = "ArpPacket"; + public final MacAddress destination; + public final MacAddress source; public final short opCode; public final Inet4Address senderIp; public final Inet4Address targetIp; public final MacAddress senderHwAddress; public final MacAddress targetHwAddress; - ArpPacket(short opCode, MacAddress senderHwAddress, Inet4Address senderIp, - MacAddress targetHwAddress, Inet4Address targetIp) { + ArpPacket(MacAddress destination, MacAddress source, short opCode, MacAddress senderHwAddress, + Inet4Address senderIp, MacAddress targetHwAddress, Inet4Address targetIp) { + this.destination = destination; + this.source = source; this.opCode = opCode; this.senderHwAddress = senderHwAddress; this.senderIp = senderIp; @@ -145,7 +149,9 @@ public class ArpPacket { buffer.get(targetHwAddress); buffer.get(targetIp); - return new ArpPacket(opCode, MacAddress.fromBytes(senderHwAddress), + return new ArpPacket(MacAddress.fromBytes(l2dst), + MacAddress.fromBytes(l2src), opCode, + MacAddress.fromBytes(senderHwAddress), (Inet4Address) InetAddress.getByAddress(senderIp), MacAddress.fromBytes(targetHwAddress), (Inet4Address) InetAddress.getByAddress(targetIp)); diff --git a/staticlibs/tests/unit/src/com/android/net/module/util/ArpPacketTest.java b/staticlibs/tests/unit/src/com/android/net/module/util/ArpPacketTest.java index e25d554892..29e84c99ee 100644 --- a/staticlibs/tests/unit/src/com/android/net/module/util/ArpPacketTest.java +++ b/staticlibs/tests/unit/src/com/android/net/module/util/ArpPacketTest.java @@ -50,6 +50,8 @@ public final class ArpPacketTest { 0x00, 0x1a, 0x11, 0x22, 0x33, 0x33 }; private static final byte[] TEST_TARGET_MAC_ADDR = new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; + private static final MacAddress TEST_DESTINATION_MAC = MacAddress.fromBytes(ETHER_BROADCAST); + private static final MacAddress TEST_SOURCE_MAC = MacAddress.fromBytes(TEST_SENDER_MAC_ADDR); private static final byte[] TEST_ARP_PROBE = new byte[] { // dst mac address (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, @@ -163,6 +165,8 @@ public final class ArpPacketTest { @Test public void testParseArpProbePacket() throws Exception { final ArpPacket packet = ArpPacket.parseArpPacket(TEST_ARP_PROBE, TEST_ARP_PROBE.length); + assertEquals(packet.destination, TEST_DESTINATION_MAC); + assertEquals(packet.source, TEST_SOURCE_MAC); assertEquals(packet.opCode, ARP_REQUEST); assertEquals(packet.senderHwAddress, MacAddress.fromBytes(TEST_SENDER_MAC_ADDR)); assertEquals(packet.targetHwAddress, MacAddress.fromBytes(TEST_TARGET_MAC_ADDR)); @@ -174,6 +178,8 @@ public final class ArpPacketTest { public void testParseArpAnnouncePacket() throws Exception { final ArpPacket packet = ArpPacket.parseArpPacket(TEST_ARP_ANNOUNCE, TEST_ARP_ANNOUNCE.length); + assertEquals(packet.destination, TEST_DESTINATION_MAC); + assertEquals(packet.source, TEST_SOURCE_MAC); assertEquals(packet.opCode, ARP_REQUEST); assertEquals(packet.senderHwAddress, MacAddress.fromBytes(TEST_SENDER_MAC_ADDR)); assertEquals(packet.targetHwAddress, MacAddress.fromBytes(TEST_TARGET_MAC_ADDR));