4 * The secure anycast tunneling protocol (satp) defines a protocol used
5 * for communication between any combination of unicast and anycast
6 * tunnel endpoints. It has less protocol overhead than IPSec in Tunnel
7 * mode and allows tunneling of every ETHER TYPE protocol (e.g.
8 * ethernet, ip, arp ...). satp directly includes cryptography and
9 * message authentication based on the methodes used by SRTP. It is
10 * intended to deliver a generic, scaleable and secure solution for
11 * tunneling and relaying of packets of any protocol.
14 * Copyright (C) 2007-2008 Othmar Gsenger, Erwin Nindl,
15 * Christian Pointner <satp@wirdorange.org>
17 * This file is part of Anytun.
19 * Anytun is free software: you can redistribute it and/or modify
20 * it under the terms of the GNU General Public License version 3 as
21 * published by the Free Software Foundation.
23 * Anytun is distributed in the hope that it will be useful,
24 * but WITHOUT ANY WARRANTY; without even the implied warranty of
25 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
26 * GNU General Public License for more details.
28 * You should have received a copy of the GNU General Public License
29 * along with anytun. If not, see <http://www.gnu.org/licenses/>.
31 #include "networkPrefix.h"
32 #include "threadUtils.hpp"
33 #include "datatypes.h"
35 #include "routingTable.h"
37 RoutingTable
* RoutingTable::inst
= NULL
;
38 Mutex
RoutingTable::instMutex
;
39 RoutingTable
& gRoutingTable
= RoutingTable::instance();
42 RoutingTable
& RoutingTable::instance()
45 static instanceCleaner c
;
47 inst
= new RoutingTable();
52 RoutingTable::RoutingTable()
56 RoutingTable::~RoutingTable()
60 void RoutingTable::addRoute(const NetworkPrefix
& pref
,u_int16_t mux
)
65 std::pair
<RoutingMap::iterator
, bool> ret
= routes_
.insert(RoutingMap::value_type(pref
,mux
));
68 routes_
.erase(ret
.first
);
69 routes_
.insert(RoutingMap::value_type(pref
,mux
));
74 void RoutingTable::delRoute(const NetworkPrefix
& pref
)
78 routes_
.erase(routes_
.find(pref
));
81 u_int16_t
RoutingTable::getRoute(const NetworkAddress
& addr
)
86 NetworkPrefix
prefix(addr
,32);
87 //TODO Routing algorithem isnt working!!!
88 RoutingMap::iterator it
= routes_
.lower_bound(prefix
);
90 if (it
!=routes_
.end())
96 u_int16_t
* RoutingTable::getOrNewRoutingTEUnlocked(const NetworkPrefix
& addr
)
98 RoutingMap::iterator it
= routes_
.find(addr
);
100 return &(it
->second
);
102 routes_
.insert(RoutingMap::value_type(addr
, 1));
103 it
= routes_
.find(addr
);
104 return &(it
->second
);
107 uint16_t RoutingTable::getCountUnlocked()
109 RoutingMap::iterator it
= routes_
.begin();
111 for (;it
!=routes_
.end();++it
)
116 RoutingMap::iterator
RoutingTable::getBeginUnlocked()
118 return routes_
.begin();
121 RoutingMap::iterator
RoutingTable::getEndUnlocked()
123 return routes_
.end();
126 void RoutingTable::clear()
132 bool RoutingTable::empty()
135 return routes_
.empty();
138 Mutex
& RoutingTable::getMutex()