From 728c6005a3dd2e1ffe8d2687107cc76efba9bdfd Mon Sep 17 00:00:00 2001 From: Jeff Becker Date: Mon, 6 May 2019 08:42:21 -0400 Subject: [PATCH] propagate strict-connect to tun handler for hooks --- llarp/handlers/tun.cpp | 29 +++++++++++++++++++++++++++++ llarp/handlers/tun.hpp | 2 ++ llarp/router/router.cpp | 3 +++ 3 files changed, 34 insertions(+) diff --git a/llarp/handlers/tun.cpp b/llarp/handlers/tun.cpp index ad4f95119..c19f31b54 100644 --- a/llarp/handlers/tun.cpp +++ b/llarp/handlers/tun.cpp @@ -13,6 +13,7 @@ #include #include #include +#include namespace llarp { @@ -92,6 +93,30 @@ namespace llarp bool TunEndpoint::SetOption(const std::string &k, const std::string &v) { + if(k == "strict-connect") + { + RouterID connect; + if(!connect.FromString(v)) + { + LogError(Name(), " invalid snode for strict-connect: ", v); + return false; + } + + RouterContact rc; + if(!router->nodedb()->Get(connect, rc)) + { + LogError(Name(), " we don't have the RC for ", v, + " so we can't use it in strict-connect"); + return false; + } + for(const auto &ai : rc.addrs) + { + m_StrictConnectAddrs.emplace_back(ai); + LogInfo(Name(), " added ", m_StrictConnectAddrs.back(), + " to strict connect"); + } + return true; + } // Name won't be set because we need to read the config before we can read // the keyfile if(k == "exit-node") @@ -554,6 +579,10 @@ namespace llarp env.emplace("IP_ADDR", m_OurIP.ToString()); env.emplace("IF_ADDR", m_OurRange.ToString()); env.emplace("IF_NAME", tunif.ifname); + std::string strictConnect; + for(const auto &addr : m_StrictConnectAddrs) + strictConnect += addr.ToString() + " "; + env.emplace("STRICT_CONNECT_ADDRS", strictConnect); return env; } diff --git a/llarp/handlers/tun.hpp b/llarp/handlers/tun.hpp index 93683c051..676003081 100644 --- a/llarp/handlers/tun.hpp +++ b/llarp/handlers/tun.hpp @@ -244,6 +244,8 @@ namespace llarp std::vector< llarp::Addr > m_UpstreamResolvers; /// local dns llarp::Addr m_LocalResolverAddr; + /// list of strict connect addresses for hooks + std::vector< llarp::Addr > m_StrictConnectAddrs; }; } // namespace handlers } // namespace llarp diff --git a/llarp/router/router.cpp b/llarp/router/router.cpp index ce66791b8..38886b05a 100644 --- a/llarp/router/router.cpp +++ b/llarp/router/router.cpp @@ -856,7 +856,10 @@ namespace llarp else if(snode.FromString(val)) { if(strictConnectPubkeys.insert(snode).second) + { llarp::LogInfo("added ", snode, " to strict connect list"); + netConfig.emplace(key, val); + } else llarp::LogWarn("duplicate key for strict connect: ", snode); }