obsluga adresu sieci interfejsu WAN na NATRouter
This commit is contained in:
@@ -59,7 +59,6 @@ void NATRouter::onRecv()
|
||||
{
|
||||
Packet p = this->recv();
|
||||
|
||||
// TODO: jako ze router jest tez switchem, zaimplementowac wysylanie wiadomosci po sieci lokalnej
|
||||
if (p.getSrcPort() != 0)
|
||||
{
|
||||
// jezeli pakiet idzie z jednego wezla do drugiego w danej possieci to odeslij mu "jak switch"
|
||||
@@ -85,11 +84,13 @@ void NATRouter::onRecv()
|
||||
void NATRouter::setWanIp(string wanIp)
|
||||
{
|
||||
this->netWanConf.ip = wanIp;
|
||||
this->setWanNetwork();
|
||||
}
|
||||
|
||||
void NATRouter::setWanMask(string wanMask)
|
||||
{
|
||||
this->netWanConf.mask = wanMask;
|
||||
this->setWanNetwork();
|
||||
}
|
||||
|
||||
void NATRouter::setWanGatewayIp(string wanGatewayIp)
|
||||
@@ -107,6 +108,14 @@ string NATRouter::getWanMask()
|
||||
return this->netWanConf.mask;
|
||||
}
|
||||
|
||||
/*
|
||||
* funkcja SNAT zapisuje w tablicy NAT
|
||||
* numer portu zrodlowego komputera z LAN
|
||||
* oraz jego IP i przeksztalca pakiet, zmieniajac
|
||||
* zrodlowy IP na IP zewn. routera oraz wolny
|
||||
* port z tablicy NAT. Jezeli portu nie ma to funkcja
|
||||
* czeka, az sie zwolni
|
||||
*/
|
||||
void NATRouter::sNAT(Packet *packet)
|
||||
{
|
||||
int port;
|
||||
@@ -133,6 +142,12 @@ void NATRouter::sNAT(Packet *packet)
|
||||
natItem = NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
* funkcja DNAT ma za zadanie znalezc w tablicy NAT
|
||||
* port i adres IP wezla na ktory ma wrocic odpowiedz
|
||||
* z sieci Internet (z zewnatrz), a takze zwolnic ten
|
||||
* port
|
||||
*/
|
||||
void NATRouter::dNAT(Packet* packet)
|
||||
{
|
||||
NATItem *natItem = &this->natTable[packet->getDstPort()];
|
||||
@@ -146,6 +161,16 @@ void NATRouter::dNAT(Packet* packet)
|
||||
natItem = NULL;
|
||||
}
|
||||
|
||||
void NATRouter::setWanNetwork()
|
||||
{
|
||||
this->netWanConf.network = this->calculateNetwork(this->getWanIp(), this->getWanMask());
|
||||
}
|
||||
|
||||
string NATRouter::getWanNetwork()
|
||||
{
|
||||
return this->netWanConf.network;
|
||||
}
|
||||
|
||||
string NATRouter::getWanGatewayIp()
|
||||
{
|
||||
return this->netWanConf.gatewayIp;
|
||||
|
||||
@@ -20,6 +20,7 @@ class NATRouter : public Node
|
||||
int getFreePort();
|
||||
void sNAT(Packet *packet);
|
||||
void dNAT(Packet *packet);
|
||||
void setWanNetwork();
|
||||
|
||||
public:
|
||||
NATRouter();
|
||||
@@ -37,6 +38,7 @@ public:
|
||||
// gettery
|
||||
string getWanIp();
|
||||
string getWanMask();
|
||||
string getWanNetwork();
|
||||
string getWanGatewayIp();
|
||||
};
|
||||
#endif /* NATROUTER_H_ */
|
||||
|
||||
4
Node.cpp
4
Node.cpp
@@ -137,7 +137,6 @@ bool Node::connectNode(Node *node, bool firstConnected)
|
||||
/*
|
||||
* funkcja wysyla, czyli przekazuje kopie pakietu kolejnemu wezlowi - docelowemu lub bramie domyslnej
|
||||
* o ile jest skonfigurowana i istnieje do niej sciezka
|
||||
* TODO zaimplementowac porownywanie z maska - jezeli dstIp z maska nie gra, wysylac na ruter
|
||||
*/
|
||||
bool Node::send(Packet packet, bool isRouter)
|
||||
{
|
||||
@@ -182,7 +181,6 @@ void Node::setHostname(string hostname)
|
||||
void Node::setIp(string ip)
|
||||
{
|
||||
this->netConf.ip = ip;
|
||||
|
||||
this->setNetwork();
|
||||
}
|
||||
|
||||
@@ -240,7 +238,7 @@ void Node::onRecv()
|
||||
|
||||
void Node::setNetwork()
|
||||
{
|
||||
this->netConf.network = this->calculateNetwork(this->netConf.ip, this->netConf.mask);
|
||||
this->netConf.network = this->calculateNetwork(this->getIp(), this->getMask());
|
||||
}
|
||||
|
||||
string Node::getNetwork()
|
||||
|
||||
Reference in New Issue
Block a user