diff options
-rw-r--r-- | Makefile | 8 | ||||
-rw-r--r-- | router.h | 2 | ||||
-rw-r--r-- | routingTable.cpp | 83 | ||||
-rw-r--r-- | routingTable.h | 62 | ||||
-rw-r--r-- | routingTableEntry.cpp | 39 | ||||
-rw-r--r-- | routingTableEntry.h | 57 |
6 files changed, 251 insertions, 0 deletions
@@ -64,6 +64,8 @@ OBJS = anytun.o \ networkAddress.o \ PracticalSocket.o \ router.o \ + routingTable.o \ + routingTableEntry.o \ signalController.o \ syncSocket.o \ syncSocketHandler.o \ @@ -121,6 +123,12 @@ cipherFactory.o: cipherFactory.cpp cipherFactory.h cipher.h authAlgoFactory.o: authAlgoFactory.cpp authAlgoFactory.h authAlgo.h $(C++) $(CCFLAGS) $< -c +routingTable.o: routingTable.cpp routingTable.h + $(C++) $(CCFLAGS) $< -c + +routingTableEntry.o: routingTableEntry.cpp routingTableEntry.h + $(C++) $(CCFLAGS) $< -c + syncSocket.o: syncSocket.cpp syncSocket.h $(C++) $(CCFLAGS) $< -c @@ -35,6 +35,7 @@ #include "datatypes.h" #include "connectionParam.h" #include "connectionList.h" +#include "routingTable.h" class Router { @@ -48,6 +49,7 @@ private: Router(const Router &s); void operator=(const Router &s); ConnectionList& con_list_; + RoutingTable rt_; Mutex mutex_; }; diff --git a/routingTable.cpp b/routingTable.cpp new file mode 100644 index 0000000..24ac106 --- /dev/null +++ b/routingTable.cpp @@ -0,0 +1,83 @@ +/* + * anytun + * + * The secure anycast tunneling protocol (satp) defines a protocol used + * for communication between any combination of unicast and anycast + * tunnel endpoints. It has less protocol overhead than IPSec in Tunnel + * mode and allows tunneling of every ETHER TYPE protocol (e.g. + * ethernet, ip, arp ...). satp directly includes cryptography and + * message authentication based on the methodes used by SRTP. It is + * intended to deliver a generic, scaleable and secure solution for + * tunneling and relaying of packets of any protocol. + * + * + * Copyright (C) 2007 anytun.org <satp@wirdorange.org> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program (see the file COPYING included with this + * distribution); if not, write to the Free Software Foundation, Inc., + * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include "threadUtils.hpp" +#include "datatypes.h" + +#include "routingTable.h" + +RoutingTable::RoutingTable() +{ +} + +RoutingTable::~RoutingTable() +{ +} + +void RoutingTable::addRoute(const RoutingTableEntry &route ) +{ + Lock lock(mutex_); + +// std::pair<ConnectionMap::iterator, bool> ret = connections_.insert(ConnectionMap::value_type(mux, conn)); +// if(!ret.second) +// { +// connections_.erase(ret.first); +// connections_.insert(ConnectionMap::value_type(mux, conn)); +// } +} + +const RoutingMap::iterator RoutingTable::getEnd() +{ + return routes_.end(); +} + +const RoutingMap::iterator RoutingTable::getRoute() +{ + Lock lock(mutex_); + RoutingMap::iterator it = routes_.begin(); + return it; +} + +void RoutingTable::clear() +{ + Lock lock(mutex_); + routes_.clear(); +} + +bool RoutingTable::empty() +{ + Lock lock(mutex_); + return routes_.empty(); +} + +Mutex& RoutingTable::getMutex() +{ + return mutex_; +} diff --git a/routingTable.h b/routingTable.h new file mode 100644 index 0000000..9a4ffae --- /dev/null +++ b/routingTable.h @@ -0,0 +1,62 @@ +/* + * anytun + * + * The secure anycast tunneling protocol (satp) defines a protocol used + * for communication between any combination of unicast and anycast + * tunnel endpoints. It has less protocol overhead than IPSec in Tunnel + * mode and allows tunneling of every ETHER TYPE protocol (e.g. + * ethernet, ip, arp ...). satp directly includes cryptography and + * message authentication based on the methodes used by SRTP. It is + * intended to deliver a generic, scaleable and secure solution for + * tunneling and relaying of packets of any protocol. + * + * + * Copyright (C) 2007 anytun.org <satp@wirdorange.org> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program (see the file COPYING included with this + * distribution); if not, write to the Free Software Foundation, Inc., + * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#ifndef _ROUTINGTABLE_H +#define _ROUTINGTABLE_H + +#include <map> +#include <deque> + +#include "threadUtils.hpp" +#include "datatypes.h" +#include "routingTableEntry.h" +#include "networkAddress.h" +typedef std::map<u_int16_t, RoutingTableEntry> RoutingMap; + +class RoutingTable +{ +public: + RoutingTable(); + ~RoutingTable(); + void addRoute(const RoutingTableEntry &route); + const RoutingMap::iterator getRoute(); + const RoutingMap::iterator getEnd(); + bool empty(); + void clear(); + Mutex& getMutex(); + +private: + RoutingTable(const RoutingTable &s); + void operator=(const RoutingTable &s); + RoutingMap routes_; + Mutex mutex_; +}; + +#endif diff --git a/routingTableEntry.cpp b/routingTableEntry.cpp new file mode 100644 index 0000000..b94ba08 --- /dev/null +++ b/routingTableEntry.cpp @@ -0,0 +1,39 @@ +/* + * anytun + * + * The secure anycast tunneling protocol (satp) defines a protocol used + * for communication between any combination of unicast and anycast + * tunnel endpoints. It has less protocol overhead than IPSec in Tunnel + * mode and allows tunneling of every ETHER TYPE protocol (e.g. + * ethernet, ip, arp ...). satp directly includes cryptography and + * message authentication based on the methodes used by SRTP. It is + * intended to deliver a generic, scaleable and secure solution for + * tunneling and relaying of packets of any protocol. + * + * + * Copyright (C) 2007 anytun.org <satp@wirdorange.org> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program (see the file COPYING included with this + * distribution); if not, write to the Free Software Foundation, Inc., + * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include "routingTableEntry.h" + +RoutingTableEntry::RoutingTableEntry() : mutex_() +{ +} + +RoutingTableEntry::RoutingTableEntry(const RoutingTableEntry & src) : mutex_() +{ +} diff --git a/routingTableEntry.h b/routingTableEntry.h new file mode 100644 index 0000000..2b7d565 --- /dev/null +++ b/routingTableEntry.h @@ -0,0 +1,57 @@ +/* + * anytun + * + * The secure anycast tunneling protocol (satp) defines a protocol used + * for communication between any combination of unicast and anycast + * tunnel endpoints. It has less protocol overhead than IPSec in Tunnel + * mode and allows tunneling of every ETHER TYPE protocol (e.g. + * ethernet, ip, arp ...). satp directly includes cryptography and + * message authentication based on the methodes used by SRTP. It is + * intended to deliver a generic, scaleable and secure solution for + * tunneling and relaying of packets of any protocol. + * + * + * Copyright (C) 2007 anytun.org <satp@wirdorange.org> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program (see the file COPYING included with this + * distribution); if not, write to the Free Software Foundation, Inc., + * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#ifndef _ROUTINGTABLEENTRY_H_ +#define _ROUTINGTABLEENTRY_H_ + +#include "options.h" +#include "threadUtils.hpp" + +#include <boost/archive/text_oarchive.hpp> +#include <boost/archive/text_iarchive.hpp> + +class RoutingTableEntry +{ +public: + RoutingTableEntry(const RoutingTableEntry & src); + RoutingTableEntry(); + +private: + //TODO: check if this is ok + Mutex mutex_; + friend class boost::serialization::access; + template<class Archive> + void serialize(Archive & ar, const unsigned int version) + { + Lock lock(mutex_); + } +}; + +#endif |