diff --git a/osdep/LinuxNetLink.cpp b/osdep/LinuxNetLink.cpp index f9defdcb3..8ee477278 100644 --- a/osdep/LinuxNetLink.cpp +++ b/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 &rs = _routes[target]; - for(std::set::const_iterator ri(rs.begin());ri!=rs.end();++ri) { + const std::set &rs = _routes[target]; + for(std::set::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 { diff --git a/osdep/LinuxNetLink.hpp b/osdep/LinuxNetLink.hpp index 7f49fd2ed..c5e08c232 100644 --- a/osdep/LinuxNetLink.hpp +++ b/osdep/LinuxNetLink.hpp @@ -19,6 +19,8 @@ #ifdef __LINUX__ #include +#include +#include #include #include @@ -123,7 +125,7 @@ private: uint32_t _seq; - std::map< InetAddress,std::set > _routes; + std::map< InetAddress,std::set > _routes; Mutex _routes_m; struct iface_entry { diff --git a/osdep/ManagedRoute.cpp b/osdep/ManagedRoute.cpp index d0a892617..a91f9f6da 100644 --- a/osdep/ManagedRoute.cpp +++ b/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); }