Merge "Parse destination and source mac address of ARP packet." into main
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 dab9694..bf447d3 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 @@
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 @@
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 e25d554..29e84c9 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 @@
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 @@
@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 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));