Browse Source

Linux build fixes, and new route code seems to work.

Adam Ierymenko 4 years ago
parent
commit
4aab9121d9
3 changed files with 10 additions and 8 deletions
  1. 6 6
      osdep/LinuxNetLink.cpp
  2. 3 1
      osdep/LinuxNetLink.hpp
  3. 1 1
      osdep/ManagedRoute.cpp

+ 6 - 6
osdep/LinuxNetLink.cpp

@@ -13,7 +13,7 @@
 
 #include "../node/Constants.hpp"
 
-#define ZT_NETLINK_TRACE
+//#define ZT_NETLINK_TRACE
 
 #ifdef __LINUX__
 
@@ -357,7 +357,7 @@ void LinuxNetLink::_routeAdded(struct nlmsghdr *nlp)
 
 	if (wecare) {
 		Mutex::Lock rl(_routes_m);
-		_routes[target].insert(r);
+		_routes[r.target].insert(r);
 	}
 
 #ifdef ZT_NETLINK_TRACE
@@ -445,7 +445,7 @@ void LinuxNetLink::_routeDeleted(struct nlmsghdr *nlp)
 
 	if (wecare) {
 		Mutex::Lock rl(_routes_m);
-		_routes[target].erase(r);
+		_routes[r.target].erase(r);
 	}
 
 #ifdef ZT_NETLINK_TRACE
@@ -1145,12 +1145,12 @@ void LinuxNetLink::removeAddress(const InetAddress &addr, const char *iface)
 bool LinuxNetLink::routeIsSet(const InetAddress &target, const InetAddress &via, const InetAddress &src, const char *ifname)
 {
 	Mutex::Lock rl(_routes_m);
-	const std::set<Route> &rs = _routes[target];
-	for(std::set<Route>::const_iterator ri(rs.begin());ri!=rs.end();++ri) {
+	const std::set<LinuxNetLink::Route> &rs = _routes[target];
+	for(std::set<LinuxNetLink::Route>::const_iterator ri(rs.begin());ri!=rs.end();++ri) {
 		if ((ri->via == via)&&(ri->src == src)) {
 			if (ifname) {
 				Mutex::Lock ifl(_if_m);
-				const iface_entry *ife = _interfaces.get(rs->ifidx);
+				const iface_entry *ife = _interfaces.get(ri->ifidx);
 				if ((ife)&&(!strncmp(ife->ifacename,ifname,IFNAMSIZ)))
 					return true;
 			} else {

+ 3 - 1
osdep/LinuxNetLink.hpp

@@ -19,6 +19,8 @@
 #ifdef __LINUX__
 
 #include <vector>
+#include <map>
+#include <set>
 
 #include <sys/socket.h>
 #include <asm/types.h>
@@ -123,7 +125,7 @@ private:
 
 	uint32_t _seq;
 
-	std::map< InetAddress,std::set<Route> > _routes;
+	std::map< InetAddress,std::set<LinuxNetLink::Route> > _routes;
 	Mutex _routes_m;
 
 	struct iface_entry {

+ 1 - 1
osdep/ManagedRoute.cpp

@@ -519,7 +519,7 @@ bool ManagedRoute::sync()
 #ifdef __LINUX__ // ----------------------------------------------------------
 
 	const char *const devptr = (_via) ? (const char *)0 : _device;
-	if (!LinuxNetLink::getInstance().routeIsSet(leftt,_via,_src,devptr)) {
+	if ((leftt)&&(!LinuxNetLink::getInstance().routeIsSet(leftt,_via,_src,devptr))) {
 		_applied[leftt] = false; // boolean unused
 		LinuxNetLink::getInstance().addRoute(leftt, _via, _src, devptr);
 	}