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

@@ -3,11 +3,13 @@
#include <tins/ip.h>
#include <tins/ipv6.h>
#include "INetworkInterfaceCard.h"
#include "IpPacketFragmentation.h"
IpVersionRouter::IpVersionRouter(SPtrINetworkInterfaceCard netv4Card, SPtrINetworkInterfaceCard netv6Card)
{
ipv4Card = netv4Card;
ipv6Card = netv6Card;
ipv6Fragmentation = std::make_unique<IpPacketFragmentation>(ipv6Card->getMtu());
}
IpVersionRouter::~IpVersionRouter()
@@ -19,8 +21,13 @@ bool IpVersionRouter::handle(IN const Tins::PDU & pdu, IN IPacketHandler * /* ca
const Tins::IPv6 * ipv6Pdu = pdu.find_pdu<Tins::IPv6>();
if(ipv6Pdu != nullptr)
{
ipv6Card->sendPacket(pdu);
return true;
if (pdu.size() < ipv6Card->getMtu())
{
ipv6Card->sendPacket(pdu);
return true;
}
return ipv6Fragmentation->handle(pdu, this);
}
const Tins::IP * ipv4Pdu = pdu.find_pdu<Tins::IP>();