#include "IpVersionRouter.h" #include #include #include #include "INetworkInterfaceCard.h" #include "IpPacketFragmentation.h" IpVersionRouter::IpVersionRouter(SPtrINetworkInterfaceCard netv4Card, SPtrINetworkInterfaceCard netv6Card) { ipv4Card = netv4Card; ipv6Card = netv6Card; ipv6Fragmentation = std::make_unique(ipv6Card->getMtu()); } IpVersionRouter::~IpVersionRouter() { } bool IpVersionRouter::handle(IN const Tins::PDU & pdu, IN IPacketHandler * /* callBackHandler*/) { const Tins::IPv6 * ipv6Pdu = pdu.find_pdu(); if(ipv6Pdu != nullptr) { if (pdu.size() < ipv6Card->getMtu()) { ipv6Card->sendPacket(pdu); return true; } return ipv6Fragmentation->handle(pdu, this); } const Tins::IP * ipv4Pdu = pdu.find_pdu(); if(ipv4Pdu == nullptr) { const Tins::ARP * arpPdu = pdu.find_pdu(); if(arpPdu == nullptr) { return false; } } ipv4Card->sendPacket(pdu); return true; } INetworkInterfaceCard & IpVersionRouter::getIpv4Card() const { return *ipv4Card; } INetworkInterfaceCard & IpVersionRouter::getIpv6Card() const { return *ipv6Card; }