mirror of
https://github.com/danbulant/Cosmos
synced 2026-05-19 20:39:01 +00:00
90 lines
2.4 KiB
C#
90 lines
2.4 KiB
C#
using System;
|
|
using HW = Cosmos.Hardware2;
|
|
using Cosmos.Kernel;
|
|
|
|
namespace Cosmos.Sys.Network.TCPIP
|
|
{
|
|
internal class EthernetPacket
|
|
{
|
|
protected byte[] mRawData;
|
|
protected HW.Network.MACAddress srcMAC;
|
|
protected HW.Network.MACAddress destMAC;
|
|
protected UInt16 aEtherType;
|
|
|
|
internal EthernetPacket(byte[] rawData)
|
|
{
|
|
mRawData = rawData;
|
|
initFields();
|
|
}
|
|
|
|
protected virtual void initFields()
|
|
{
|
|
destMAC = new HW.Network.MACAddress(mRawData, 0);
|
|
srcMAC = new HW.Network.MACAddress(mRawData, 6);
|
|
aEtherType = (UInt16)((mRawData[12] << 8) | mRawData[13]);
|
|
}
|
|
|
|
protected EthernetPacket(UInt16 type, int packet_size)
|
|
: this(HW.Network.MACAddress.None, HW.Network.MACAddress.None, type, packet_size)
|
|
{
|
|
}
|
|
|
|
protected EthernetPacket(HW.Network.MACAddress dest, HW.Network.MACAddress src, UInt16 type, int packet_size)
|
|
{
|
|
mRawData = new byte[packet_size];
|
|
for (int i = 0; i < 6; i++)
|
|
{
|
|
mRawData[i] = dest.bytes[i];
|
|
mRawData[6 + i] = src.bytes[i];
|
|
}
|
|
|
|
mRawData[12] = (byte)(type >> 8);
|
|
mRawData[13] = (byte)(type >> 0);
|
|
initFields();
|
|
}
|
|
|
|
internal HW.Network.MACAddress SourceMAC
|
|
{
|
|
get { return this.srcMAC; }
|
|
set
|
|
{
|
|
for (int i = 0; i < 6; i++)
|
|
{
|
|
mRawData[6+i] = value.bytes[i];
|
|
}
|
|
initFields();
|
|
}
|
|
}
|
|
internal HW.Network.MACAddress DestinationMAC
|
|
{
|
|
get { return this.destMAC; }
|
|
set
|
|
{
|
|
for (int i = 0; i < 6; i++)
|
|
{
|
|
mRawData[i] = value.bytes[i];
|
|
}
|
|
initFields();
|
|
}
|
|
}
|
|
internal UInt16 EthernetType
|
|
{
|
|
get { return this.aEtherType; }
|
|
}
|
|
|
|
internal byte[] GetBytes()
|
|
{
|
|
return this.mRawData;
|
|
}
|
|
|
|
internal byte[] RawData
|
|
{
|
|
get { return this.mRawData; }
|
|
}
|
|
|
|
public override string ToString()
|
|
{
|
|
return ""; // "Ethernet Packet : Src=" + srcMAC + ", Dest=" + destMAC + ", Type=" + aEtherType.ToHex(4);
|
|
}
|
|
}
|
|
}
|