finish ipv6 fragmentation
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
{
|
||||
"nic-name": "lo",
|
||||
"type": 6,
|
||||
"mtu": 1000,
|
||||
"prefix": "42::"
|
||||
}
|
||||
]
|
||||
|
||||
Reference in New Issue
Block a user