Commit 6cec2f16 authored by Brickner_cp's avatar Brickner_cp

VLanTaggedFrame

parent f2a2a4e6
...@@ -184,7 +184,7 @@ namespace PcapDotNet.Core.Test ...@@ -184,7 +184,7 @@ namespace PcapDotNet.Core.Test
TestReceivePacketsEnumerable(NumPacketsToSend, NumPacketsToSend + 1, int.MaxValue, 2, PacketSize, NumPacketsToSend, 2, 2.13); TestReceivePacketsEnumerable(NumPacketsToSend, NumPacketsToSend + 1, int.MaxValue, 2, PacketSize, NumPacketsToSend, 2, 2.13);
// Break loop // 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); TestReceivePacketsEnumerable(NumPacketsToSend, NumPacketsToSend, NumPacketsToSend / 2, 2, PacketSize, NumPacketsToSend / 2, 0, 0.1);
} }
......
...@@ -84,6 +84,7 @@ namespace PcapDotNet.Packets.Test ...@@ -84,6 +84,7 @@ namespace PcapDotNet.Packets.Test
Assert.AreEqual(ethernetLayer, packet.Ethernet.ExtractLayer()); Assert.AreEqual(ethernetLayer, packet.Ethernet.ExtractLayer());
Assert.AreEqual(EthernetType.IpV4, packet.Ethernet.VLanTaggedFrame.EtherType); Assert.AreEqual(EthernetType.IpV4, packet.Ethernet.VLanTaggedFrame.EtherType);
Assert.AreEqual(vLanTaggedFrameLayer, packet.Ethernet.VLanTaggedFrame.ExtractLayer()); Assert.AreEqual(vLanTaggedFrameLayer, packet.Ethernet.VLanTaggedFrame.ExtractLayer());
ipV4Layer.HeaderChecksum = packet.Ethernet.VLanTaggedFrame.IpV4.HeaderChecksum;
Assert.AreEqual(ipV4Layer, packet.Ethernet.VLanTaggedFrame.IpV4.ExtractLayer()); Assert.AreEqual(ipV4Layer, packet.Ethernet.VLanTaggedFrame.IpV4.ExtractLayer());
} }
} }
......
...@@ -4,11 +4,46 @@ using PcapDotNet.Packets.Arp; ...@@ -4,11 +4,46 @@ using PcapDotNet.Packets.Arp;
namespace PcapDotNet.Packets.Ethernet 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> /// <summary>
/// Represents an Ethernet layer. /// Represents an Ethernet layer.
/// <seealso cref="EthernetDatagram"/> /// <seealso cref="EthernetDatagram"/>
/// </summary> /// </summary>
public sealed class EthernetLayer : Layer, IArpPreviousLayer public sealed class EthernetLayer : EthernetBaseLayer
{ {
/// <summary> /// <summary>
/// Creates an instance with zero values. /// Creates an instance with zero values.
...@@ -17,7 +52,6 @@ namespace PcapDotNet.Packets.Ethernet ...@@ -17,7 +52,6 @@ namespace PcapDotNet.Packets.Ethernet
{ {
Source = MacAddress.Zero; Source = MacAddress.Zero;
Destination = MacAddress.Zero; Destination = MacAddress.Zero;
EtherType = EthernetType.None;
} }
/// <summary> /// <summary>
...@@ -30,11 +64,6 @@ namespace PcapDotNet.Packets.Ethernet ...@@ -30,11 +64,6 @@ namespace PcapDotNet.Packets.Ethernet
/// </summary> /// </summary>
public MacAddress Destination { get; set; } public MacAddress Destination { get; set; }
/// <summary>
/// Ethernet type (next protocol).
/// </summary>
public EthernetType EtherType { get; set; }
/// <summary> /// <summary>
/// The number of bytes this layer will take. /// The number of bytes this layer will take.
/// </summary> /// </summary>
...@@ -75,14 +104,6 @@ namespace PcapDotNet.Packets.Ethernet ...@@ -75,14 +104,6 @@ namespace PcapDotNet.Packets.Ethernet
get { return DataLinkKind.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> /// <summary>
/// Two Ethernet layers are equal if they have the same source, destination and ethernet type. /// Two Ethernet layers are equal if they have the same source, destination and ethernet type.
/// </summary> /// </summary>
......
...@@ -70,19 +70,5 @@ namespace PcapDotNet.Packets ...@@ -70,19 +70,5 @@ namespace PcapDotNet.Packets
{ {
return Length.GetHashCode() ^ DataLink.GetHashCode(); 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; ...@@ -4,7 +4,7 @@ using PcapDotNet.Packets.Ethernet;
namespace PcapDotNet.Packets.VLanTaggedFrame namespace PcapDotNet.Packets.VLanTaggedFrame
{ {
public sealed class VLanTaggedFrameLayer : Layer, IEquatable<VLanTaggedFrameLayer>, IEthernetNextLayer public sealed class VLanTaggedFrameLayer : EthernetBaseLayer, IEquatable<VLanTaggedFrameLayer>, IEthernetNextLayer
{ {
public VLanTaggedFrameLayer() public VLanTaggedFrameLayer()
{ {
...@@ -21,8 +21,6 @@ namespace PcapDotNet.Packets.VLanTaggedFrame ...@@ -21,8 +21,6 @@ namespace PcapDotNet.Packets.VLanTaggedFrame
get { return VLanTaggedFrameDatagram.CalculateTagControlInformation(PriorityCodePoint, CanonicalFormatIndicator, VLanIdentifier); } get { return VLanTaggedFrameDatagram.CalculateTagControlInformation(PriorityCodePoint, CanonicalFormatIndicator, VLanIdentifier); }
} }
public EthernetType EtherType { get; set; }
/// <summary> /// <summary>
/// The number of bytes this layer will take. /// The number of bytes this layer will take.
/// </summary> /// </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