add natrange

This commit is contained in:
stubbfel
2015-08-22 01:00:52 +02:00
parent 614f02146a
commit 411dcbcc12
11 changed files with 305 additions and 84 deletions

View File

@@ -5,44 +5,45 @@
#include <map>
#include <queue>
#include <tins/tins.h>
#include "NatRange.h"
namespace otonat {
namespace otonat
{
class NatMap
{
public:
typedef std::vector<Tins::NetworkInterface> NetworkInterfaceList;
typedef std::queue<const Tins::PDU *> PduQueue;
typedef std::pair<Tins::IPv4Address,Tins::IPv4Address> IPv4AddressEntry;
typedef std::map<Tins::IPv4Address, Tins::HWAddress<6>> IpAdressMacMap;
typedef std::map<Tins::IPv4Address, Tins::IPv4Address> IpAdressMap;
class NatMap {
public:
typedef std::vector<NatRange> NatRangeList;
typedef std::queue<const Tins::PDU *> PduQueue;
typedef std::pair<Tins::IPv4Address, Tins::IPv4Address> IPv4AddressEntry;
typedef std::map<Tins::IPv4Address, Tins::HWAddress < 6 >> IpAdressMacMap;
typedef std::map<Tins::IPv4Address, Tins::IPv4Address> IpAdressMap;
NatMap() {
}
NatMap();
NatMap(NetworkInterfaceList interfaceList);
virtual ~NatMap();
NatMap(const NatMap& other);
NatMap& operator=(const NatMap& other);
NetworkInterfaceList interfaces;
IpAdressMacMap arpMap;
IpAdressMap transMap;
PduQueue incommingPduQueue;
PduQueue outgoingPduQueue;
void handlePdu(const Tins::PDU * pdu);
static const Tins::IPv4Address mapIPv4Address(const Tins::IPv4Address & ip, const Tins::NetworkInterface::Info & interfaceInfo);
static const Tins::IPv4Range calcIpRange(const Tins::NetworkInterface::Info & interfaceInfo);
NatMap(NatRangeList rangeList);
virtual ~NatMap();
NatMap(const NatMap& other);
NatMap& operator=(const NatMap& other);
NatRangeList ranges;
IpAdressMacMap arpMap;
IpAdressMap transMap;
PduQueue incommingPduQueue;
PduQueue outgoingPduQueue;
void handlePdu(const Tins::PDU * pdu);
protected:
protected:
private:
bool handleIp(Tins::IP * ip);
bool handleArp(Tins::ARP * arp);
Tins::IPv4Address InsertOrUdpateTranslateIpAddress(const Tins::IPv4Address & originIp, const Tins::NetworkInterface::Info & interfaceInfo);
Tins::IPv4Address InsertOrUdpateTranslateIpAddress(const Tins::IPv4Address & originIp, const Tins::IPv4Address & transIp, NetworkInterfaceList & interfaceList);
void TranslateIpPacket(Tins::IP * ip, const Tins::IPv4Address & transIp);
Tins::IPv4Address zeroIp;
bool isForMeOrFromMeIp(const Tins::IP * ip);
};
private:
bool handleIp(Tins::IP * ip);
bool handleArp(Tins::ARP * arp);
Tins::IPv4Address InsertOrUdpateTranslateIpAddress(const Tins::IPv4Address & originIp, const NatRange & range);
Tins::IPv4Address InsertOrUdpateTranslateIpAddress(const Tins::IPv4Address & originIp, const Tins::IPv4Address & transIp, NatRangeList & rangeList);
void TranslateIpPacket(Tins::IP * ip, const Tins::IPv4Address & transIp);
Tins::IPv4Address zeroIp;
bool isForMeOrFromMeIp(const Tins::IP * ip);
static bool isForMeOrFromMeIp(const Tins::IP * ip, const NatRangeList & rangeList);
bool isIpInMyRanges(const Tins::IPv4Address & ipAddr);
static bool isIpInMyRanges(const Tins::IPv4Address & ipAddr, const NatRangeList & rangeList);
};
}