Commit 6cec2f16 authored by Brickner_cp's avatar Brickner_cp

VLanTaggedFrame

parent f2a2a4e6
......@@ -184,7 +184,7 @@ namespace PcapDotNet.Core.Test
TestReceivePacketsEnumerable(NumPacketsToSend, NumPacketsToSend + 1, int.MaxValue, 2, PacketSize, NumPacketsToSend, 2, 2.13);
// Break loop
TestReceivePacketsEnumerable(NumPacketsToSend, NumPacketsToSend, 0, 2, PacketSize, 0, 0, 0.032);
TestReceivePacketsEnumerable(NumPacketsToSend, NumPacketsToSend, 0, 2, PacketSize, 0, 0, 0.051);
TestReceivePacketsEnumerable(NumPacketsToSend, NumPacketsToSend, NumPacketsToSend / 2, 2, PacketSize, NumPacketsToSend / 2, 0, 0.1);
}
......
......@@ -84,6 +84,7 @@ namespace PcapDotNet.Packets.Test
Assert.AreEqual(ethernetLayer, packet.Ethernet.ExtractLayer());
Assert.AreEqual(EthernetType.IpV4, packet.Ethernet.VLanTaggedFrame.EtherType);
Assert.AreEqual(vLanTaggedFrameLayer, packet.Ethernet.VLanTaggedFrame.ExtractLayer());
ipV4Layer.HeaderChecksum = packet.Ethernet.VLanTaggedFrame.IpV4.HeaderChecksum;
Assert.AreEqual(ipV4Layer, packet.Ethernet.VLanTaggedFrame.IpV4.ExtractLayer());
}
}
......
......@@ -4,11 +4,46 @@ using PcapDotNet.Packets.Arp;
namespace PcapDotNet.Packets.Ethernet
{
public abstract class EthernetBaseLayer : Layer, IArpPreviousLayer
{
public EthernetBaseLayer()
{
EtherType = EthernetType.None;
}
/// <summary>
/// Ethernet type (next protocol).
/// </summary>
public EthernetType EtherType { get; set; }
/// <summary>
/// The ARP Hardware Type of the layer before the ARP layer.
/// </summary>
public ArpHardwareType PreviousLayerHardwareType
{
get { return ArpHardwareType.Ethernet; }
}
internal static EthernetType GetEthernetType(EthernetType ethernetType, ILayer nextLayer)
{
if (ethernetType != EthernetType.None)
return ethernetType;
if (nextLayer == null)
throw new ArgumentException("Can't determine ether type automatically from next layer because there is not next layer");
IEthernetNextLayer ethernetNextLayer = nextLayer as IEthernetNextLayer;
if (ethernetNextLayer == null)
throw new ArgumentException("Can't determine ether type automatically from next layer (" + nextLayer.GetType() + ")");
return ethernetNextLayer.PreviousLayerEtherType;
}
}
/// <summary>
/// Represents an Ethernet layer.
/// <seealso cref="EthernetDatagram"/>
/// </summary>
public sealed class EthernetLayer : Layer, IArpPreviousLayer
public sealed class EthernetLayer : EthernetBaseLayer
{
/// <summary>
/// Creates an instance with zero values.
......@@ -17,7 +52,6 @@ namespace PcapDotNet.Packets.Ethernet
{
Source = MacAddress.Zero;
Destination = MacAddress.Zero;
EtherType = EthernetType.None;
}
/// <summary>
......@@ -30,11 +64,6 @@ namespace PcapDotNet.Packets.Ethernet
/// </summary>
public MacAddress Destination { get; set; }
/// <summary>
/// Ethernet type (next protocol).
/// </summary>
public EthernetType EtherType { get; set; }
/// <summary>
/// The number of bytes this layer will take.
/// </summary>
......@@ -75,14 +104,6 @@ namespace PcapDotNet.Packets.Ethernet
get { return DataLinkKind.Ethernet; }
}
/// <summary>
/// The ARP Hardware Type of the layer before the ARP layer.
/// </summary>
public ArpHardwareType PreviousLayerHardwareType
{
get { return ArpHardwareType.Ethernet; }
}
/// <summary>
/// Two Ethernet layers are equal if they have the same source, destination and ethernet type.
/// </summary>
......
......@@ -70,19 +70,5 @@ namespace PcapDotNet.Packets
{
return Length.GetHashCode() ^ DataLink.GetHashCode();
}
internal static EthernetType GetEthernetType(EthernetType ethernetType, ILayer nextLayer)
{
if (ethernetType != EthernetType.None)
return ethernetType;
if (nextLayer == null)
throw new ArgumentException("Can't determine ether type automatically from next layer because there is not next layer");
IEthernetNextLayer ethernetNextLayer = nextLayer as IEthernetNextLayer;
if (ethernetNextLayer == null)
throw new ArgumentException("Can't determine ether type automatically from next layer (" + nextLayer.GetType() + ")");
return ethernetNextLayer.PreviousLayerEtherType;
}
}
}
\ No newline at end of file
......@@ -4,7 +4,7 @@ using PcapDotNet.Packets.Ethernet;
namespace PcapDotNet.Packets.VLanTaggedFrame
{
public sealed class VLanTaggedFrameLayer : Layer, IEquatable<VLanTaggedFrameLayer>, IEthernetNextLayer
public sealed class VLanTaggedFrameLayer : EthernetBaseLayer, IEquatable<VLanTaggedFrameLayer>, IEthernetNextLayer
{
public VLanTaggedFrameLayer()
{
......@@ -21,8 +21,6 @@ namespace PcapDotNet.Packets.VLanTaggedFrame
get { return VLanTaggedFrameDatagram.CalculateTagControlInformation(PriorityCodePoint, CanonicalFormatIndicator, VLanIdentifier); }
}
public EthernetType EtherType { get; set; }
/// <summary>
/// The number of bytes this layer will take.
/// </summary>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment