diff --git a/src/iface.cc b/src/iface.cc index 1639a67..b2df7b7 100644 --- a/src/iface.cc +++ b/src/iface.cc @@ -564,7 +564,7 @@ int iface::poll_all() continue; } - if (!saddr.is_unicast() || !daddr.is_multicast()) { + if (!saddr.is_unicast()/* || !daddr.is_multicast()*/) { continue; } diff --git a/src/proxy.cc b/src/proxy.cc index 2e0be92..8bbc2e6 100644 --- a/src/proxy.cc +++ b/src/proxy.cc @@ -98,6 +98,10 @@ void proxy::handle_solicit(const address& saddr, const address& daddr, logger::debug() << "checking " << ru->addr() << " against " << taddr; + if (!daddr.is_multicast() && ru->addr() != daddr) { + continue; + } + if (ru->addr() == taddr) { if (!se) { se = session::create(_ptr, saddr, daddr, taddr); diff --git a/src/route.cc b/src/route.cc index 62154e9..32e475f 100644 --- a/src/route.cc +++ b/src/route.cc @@ -81,6 +81,8 @@ std::string route::token(const char* str) void route::load(const std::string& path) { + // Hack to make sure the interfaces are not freed prematurely. + std::list > tmp_routes(_routes); _routes.clear(); logger::debug() << "reading routes";