Commit 8cb72b80 authored by Brickner_cp's avatar Brickner_cp

IPv6

Code Coverage 95.77%
parent caa898ce
...@@ -41,7 +41,7 @@ namespace PcapDotNet.Core.Test ...@@ -41,7 +41,7 @@ namespace PcapDotNet.Core.Test
case "vlan.trailer": case "vlan.trailer":
if (!new[] if (!new[]
{ {
(EthernetType)1, (EthernetType)5, (EthernetType)17, (EthernetType)29, (EthernetType)30, (EthernetType)43, (EthernetType)50 (EthernetType)1, (EthernetType)5, (EthernetType)17, (EthernetType)29, (EthernetType)30, (EthernetType)43, (EthernetType)50, EthernetType.ReverseArp,
}.Contains( }.Contains(
vLanTaggedFrameDatagram.EtherType)) vLanTaggedFrameDatagram.EtherType))
field.AssertValue(vLanTaggedFrameDatagram.TrailerWithFrameCheckSequence); field.AssertValue(vLanTaggedFrameDatagram.TrailerWithFrameCheckSequence);
......
...@@ -181,6 +181,16 @@ namespace PcapDotNet.Packets.Test ...@@ -181,6 +181,16 @@ namespace PcapDotNet.Packets.Test
IpV6MobilityOptionCareOfTest optionCareOfTest = (IpV6MobilityOptionCareOfTest)option; IpV6MobilityOptionCareOfTest optionCareOfTest = (IpV6MobilityOptionCareOfTest)option;
Assert.IsInstanceOfType(optionCareOfTest.CareOfKeygenToken, typeof(ulong)); Assert.IsInstanceOfType(optionCareOfTest.CareOfKeygenToken, typeof(ulong));
break; break;
case IpV6MobilityOptionType.IpV4CareOfAddress:
IpV6MobilityOptionIpV4CareOfAddress optionIpV4CareOfAddress = (IpV6MobilityOptionIpV4CareOfAddress)option;
Assert.IsNotNull(optionIpV4CareOfAddress.CareOfAddress);
break;
case IpV6MobilityOptionType.ReplayProtection:
IpV6MobilityOptionReplayProtection optionReplayProtection = (IpV6MobilityOptionReplayProtection)option;
Assert.IsNotNull(optionReplayProtection.Timestamp);
break;
} }
} }
} }
...@@ -1205,5 +1215,47 @@ namespace PcapDotNet.Packets.Test ...@@ -1205,5 +1215,47 @@ namespace PcapDotNet.Packets.Test
Packet invalidPacket = new Packet(packet.Buffer, DateTime.Now, DataLinkKind.Ethernet); Packet invalidPacket = new Packet(packet.Buffer, DateTime.Now, DataLinkKind.Ethernet);
Assert.IsFalse(invalidPacket.IsValid); Assert.IsFalse(invalidPacket.IsValid);
} }
[TestMethod]
public void IpV6MobilityOptionIpV4CareOfAddressDataTooShort()
{
Packet packet = PacketBuilder.Build(
DateTime.Now,
new EthernetLayer(),
new IpV6Layer
{
ExtensionHeaders =
new IpV6ExtensionHeaders(
new IpV6ExtensionHeaderMobilityBindingError(
IpV4Protocol.Skip, 0, IpV6BindingErrorStatus.UnrecognizedMhTypeValue, IpV6Address.Zero,
new IpV6MobilityOptions(new IpV6MobilityOptionIpV4CareOfAddress(IpV4Address.Zero))))
});
Assert.IsTrue(packet.IsValid);
--packet.Buffer[14 + 40 + 24 + 1];
Packet invalidPacket = new Packet(packet.Buffer, DateTime.Now, DataLinkKind.Ethernet);
Assert.IsFalse(invalidPacket.IsValid);
}
[TestMethod]
public void IpV6MobilityOptionReplayProtectionDataTooShort()
{
Packet packet = PacketBuilder.Build(
DateTime.Now,
new EthernetLayer(),
new IpV6Layer
{
ExtensionHeaders =
new IpV6ExtensionHeaders(
new IpV6ExtensionHeaderMobilityBindingError(
IpV4Protocol.Skip, 0, IpV6BindingErrorStatus.UnrecognizedMhTypeValue, IpV6Address.Zero,
new IpV6MobilityOptions(new IpV6MobilityOptionReplayProtection(0))))
});
Assert.IsTrue(packet.IsValid);
--packet.Buffer[14 + 40 + 24 + 1];
Packet invalidPacket = new Packet(packet.Buffer, DateTime.Now, DataLinkKind.Ethernet);
Assert.IsFalse(invalidPacket.IsValid);
}
} }
} }
...@@ -43,9 +43,6 @@ namespace PcapDotNet.Packets.IpV6 ...@@ -43,9 +43,6 @@ namespace PcapDotNet.Packets.IpV6
internal override void Write(byte[] buffer, ref int offset) internal override void Write(byte[] buffer, ref int offset)
{ {
buffer[offset++] = (byte)OptionType; buffer[offset++] = (byte)OptionType;
// TODO: Remove this check.
if (DataLength > byte.MaxValue)
throw new InvalidOperationException("Option length is too long.");
buffer[offset++] = (byte)DataLength; buffer[offset++] = (byte)DataLength;
WriteData(buffer, ref offset); WriteData(buffer, ref offset);
} }
......
...@@ -32,9 +32,6 @@ namespace PcapDotNet.Packets.IpV6 ...@@ -32,9 +32,6 @@ namespace PcapDotNet.Packets.IpV6
internal override sealed void Write(byte[] buffer, ref int offset) internal override sealed void Write(byte[] buffer, ref int offset)
{ {
base.Write(buffer, ref offset); base.Write(buffer, ref offset);
// TODO: Get rid of this.
if (DataLength > byte.MaxValue)
throw new InvalidOperationException("DataLength is " + DataLength);
buffer[offset++] = (byte)DataLength; buffer[offset++] = (byte)DataLength;
WriteData(buffer, ref offset); WriteData(buffer, ref offset);
} }
......
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