- /**
- * @file NATRouter.h
- *
- * Created on: 11-01-2017
- * @author Piotr Dergun
- */
-
- #ifndef NATROUTER_H_
- #define NATROUTER_H_
-
- #include "common.h"
- #include "Node.h"
- #include "NATItem.h"
-
- class NATRouter : public Node
- {
- /** tablica z zaalokowanymi portami na zewnątrz (indeksy to numery portów po stronie WAN) */
- NATItem *natTable = NULL;
- /**
- * mapa do numerów portów, które wykorzystuje dana para zza NAT (IP, port)
- * potrzebne do szybkiego przeszukiwania zaalokowanego portu w NAT
- */
- map<string, int> natHelper;
- /** konfiguracja interfejsu WAN routera */
- NetConf netWanConf;
- /** zachowuje ostatnio zaalokowany numer portu, aby zaalokować kolejny (o ile możliwe) */
- int lastUsedPort;
- /**
- * inicjalizuje tablicę NAT
- */
- void initalizeNatTable();
- /**
- * zwraca pierwszy wolny numer portu w tablicy NAT
- */
- int getFreePort();
- /**
- * szuka aktywnego zaalokowanego portu (aktywna
- * transmisja) w tablicy NAT dla pary (srcIp:srcPort)
- */
- int getAllocatedPort(string srcIp, int srcPort);
- /**
- * zapisuje w tablicy NAT numer portu źródłowego komputera z LAN oraz jego IP
- * i przekształca pakiet, zmieniając zródłowy IP na IP zewnętrzny routera
- * oraz wolny port z tablicy NAT. Jeżeli portu nie ma to funkcja czeka, aż sie zwolni
- * @param packet wskaźnik do przetwarzanego pakietu
- */
- void sNAT(Packet *packet);
- /**
- * ma za zadanie znaleźć w tablicy NAT port i adres IP węzła na który ma wrócić
- * odpowiedź z sieci Internet (z zewnątrz), a także przedlużyć czas życia tego portu
- * @param packet wskaźnik do przetwarzanego pakietu
- */
- void dNAT(Packet *packet);
- /**
- * przelicza adres sieci dla połączenia WAN
- */
- void setWanNetwork();
-
- public:
- NATRouter();
- NATRouter(string hostname);
- NATRouter(string hostname, string ip, string mask);
- NATRouter(string hostname, string ip, string mask, string gatewayIp);
- ~NATRouter();
- /**
- * obsługuje całą logikę routera/NAT/switcha w momencie nadejścia pakietu
- */
- virtual void onRecv();
- /**
- * wyświetla statystyki zajętości tablicy NAT
- */
- void freePorts();
-
- /* mutuatory */
- void setWanIp(string wanIp);
- void setWanMask(string wanMask);
- void setWanGatewayIp(string wanGatewayIp);
- string getWanIp();
- string getWanMask();
- string getWanNetwork();
- string getWanGatewayIp();
- };
-
- #define NAT_TABLE_LEN 65536
-
- #endif /* NATROUTER_H_ */
|