mirror of
https://github.com/danbulant/Cosmos
synced 2026-05-19 12:30:32 +00:00
63 lines
2 KiB
C#
63 lines
2 KiB
C#
using System;
|
|
using HW = Cosmos.Hardware2;
|
|
|
|
namespace Cosmos.Sys.Network.TCPIP.ARP
|
|
{
|
|
internal class ARPPacket : EthernetPacket
|
|
{
|
|
protected UInt16 aHardwareType;
|
|
protected UInt16 aProtocolType;
|
|
protected byte aHardwareLen;
|
|
protected byte aProtocolLen;
|
|
protected UInt16 aOperation;
|
|
|
|
internal ARPPacket(byte[] rawData)
|
|
: base(rawData)
|
|
{}
|
|
|
|
protected override void initFields()
|
|
{
|
|
base.initFields();
|
|
aHardwareType = (UInt16)((mRawData[14] << 8) | mRawData[15]);
|
|
aProtocolType = (UInt16)((mRawData[16] << 8) | mRawData[17]);
|
|
aHardwareLen = mRawData[18];
|
|
aProtocolLen = mRawData[19];
|
|
aOperation = (UInt16)((mRawData[20] << 8) | mRawData[21]);
|
|
}
|
|
|
|
protected ARPPacket(HW.Network.MACAddress dest, HW.Network.MACAddress src, UInt16 hwType, UInt16 protoType,
|
|
byte hwLen, byte protoLen, UInt16 operation, int packet_size)
|
|
: base(dest, src, 0x0806, packet_size)
|
|
{
|
|
mRawData[14] = (byte)(hwType >> 8);
|
|
mRawData[15] = (byte)(hwType >> 0);
|
|
mRawData[16] = (byte)(protoType >> 8);
|
|
mRawData[17] = (byte)(protoType >> 0);
|
|
mRawData[18] = hwLen;
|
|
mRawData[19] = protoLen;
|
|
mRawData[20] = (byte)(operation >> 8);
|
|
mRawData[21] = (byte)(operation >> 0);
|
|
|
|
initFields();
|
|
}
|
|
|
|
internal UInt16 Operation
|
|
{
|
|
get { return this.aOperation; }
|
|
}
|
|
internal UInt16 HardwareType
|
|
{
|
|
get { return this.aHardwareType; }
|
|
}
|
|
internal UInt16 ProtocolType
|
|
{
|
|
get { return this.aProtocolType; }
|
|
}
|
|
|
|
public override string ToString()
|
|
{
|
|
return "ARP Packet Src=" + srcMAC + ", Dest=" + destMAC + ", HWType=" + aHardwareType + ", Protocol=" + aProtocolType +
|
|
", Operation=" + Operation;
|
|
}
|
|
}
|
|
}
|