/** * @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 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_ */