Merge "Parse destination and source mac address of ARP packet." into main

This commit is contained in:
Xiao Ma 2024-01-22 06:22:46 +00:00 • committed by Gerrit Code Review
commit 94192b136b
2 changed files with 15 additions and 3 deletions

View file

@ -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));

View file

@ -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));