finish ipv6 fragmentation

This commit is contained in:
stubbfel
2017-06-16 15:23:28 +02:00
parent 5185c025d8
commit 225fd3870f
14 changed files with 99 additions and 36 deletions

View File

@@ -1,3 +1,4 @@
#include <algorithm>
#include <fakeit.hpp>
#include <tins/ethernetII.h>
#include <tins/ipv6.h>
@@ -42,14 +43,15 @@ namespace TestIp6PacketFragmentation
FragmentionHeaderUnion fragmentionHeaderUnion;
FragmentionHeaderStruct * ptrFragmentionHeaderStruct = &fragmentionHeaderUnion.Structed;
std::memcpy(&fragmentionHeaderUnion.Bytes[1], fragmentHeader->data_ptr(), fragmentHeader->data_size());
std::memcpy(&fragmentionHeaderUnion.Bytes[2], fragmentHeader->data_ptr(), fragmentHeader->data_size());
std::swap(fragmentionHeaderUnion.Bytes[2],fragmentionHeaderUnion.Bytes[3]);
uint16_t mFlag = fragmentationCount > 1 ? 1 : 0;
if (firstFragment)
{
firstFragment = false;
id = ptrFragmentionHeaderStruct->Identification;
}
REQUIRE(fragmentHeader->option() == Tins::IPv6::FRAGMENT);
REQUIRE(fragmentHeader->option() == Tins::Constants::IP::PROTO_TCP);
REQUIRE(ptrFragmentionHeaderStruct->Reserved == 0);
REQUIRE(ptrFragmentionHeaderStruct->Res == 0);
REQUIRE(ptrFragmentionHeaderStruct->MFlag == mFlag);
@@ -81,7 +83,7 @@ TEST_CASE( "test Ip6PacketFragmentation", "[Ip6PacketFragmentation]" ) {
Tins::EthernetII pkt = Tins::EthernetII("11:22:33:44:55:66", "66:55:44:33:22:11") / mtuPayload;
TestIp6PacketFragmentation::currentInputPdu = &pkt;
TestIp6PacketFragmentation::fragmentationCount = 2;
TestIp6PacketFragmentation::fragmentationCount = 3;
TestIp6PacketFragmentation::maxfragmentationSize = mtu/2;
REQUIRE(handler.handle(pkt, nullptr) == false);
@@ -93,7 +95,7 @@ TEST_CASE( "test Ip6PacketFragmentation", "[Ip6PacketFragmentation]" ) {
REQUIRE(handler.handle(pkt, &mockHandler.get()) == false);
pkt = Tins::EthernetII("11:22:33:44:55:66", "66:55:44:33:22:11") / Tins::IPv6("::1", "::2") / mtuPayload;
pkt = Tins::EthernetII("11:22:33:44:55:66", "66:55:44:33:22:11") / Tins::IPv6("::1", "::2") / Tins::TCP(1,1) /mtuPayload;
REQUIRE(handler.handle(pkt, &mockHandler.get()) == true);
Verify(Method(mockHandler, handle)).Twice();
Verify(Method(mockHandler, handle)).Exactly(3);
}

View File

@@ -26,6 +26,7 @@ TEST_CASE( "test main setup", "[test_main]" )
SPtrIPacketHandlerList routerList;
std::vector<std::thread *> threadPool;
int mtuCount = 0;
for (Json::Value natpair : natpairs)
{
const std::string pairname = natpair["name"].asString();
@@ -48,6 +49,11 @@ TEST_CASE( "test main setup", "[test_main]" )
const std::string netcardName = natPairItem["nic-name"].asString();
SPtrTinsNetworkInterfaceCard netcard = std::make_shared<TinsNetworkInterfaceCard>(netcardName);
if(natPairItem.isMember("mtu"))
{
mtuCount++;
REQUIRE(natPairItem["mtu"].asInt() == 1000);
}
switch (itemtype)
{
case 4:
@@ -62,6 +68,7 @@ TEST_CASE( "test main setup", "[test_main]" )
}
}
REQUIRE(mtuCount ==1);
SPtrIPacketHandler ip4ToIp6Handler = std::make_shared<Ip4ToIp6PacketHandler>(prefix);
SPtrIPacketHandler ip6ToIp4Handler = std::make_shared<Ip6ToIp4PacketHandler>();
SPtrIPacketHandler icmp4ToIcmp6Handler = std::make_shared<Icmp4ToIcmp6PacketHandler>(prefix);

View File

@@ -10,6 +10,7 @@
{
"nic-name": "lo",
"type": 6,
"mtu": 1000,
"prefix": "42::"
}
]