finish wiring up config for #1595

pull/1576/head
Jeff Becker 3 years ago
parent 0be62f0ad4
commit b721b8d65b
No known key found for this signature in database
GPG Key ID: F357B3B42F6F9B05

@ -415,6 +415,22 @@ namespace llarp
"on the server and may pose liability concerns. Enable at your own risk.", "on the server and may pose liability concerns. Enable at your own risk.",
}); });
conf.defineOption<std::string>(
"network",
"owned-range",
MultiValue,
Comment{
"When in exit mode announce we allow a private range in our introset"
"exmaple:",
"owned-range=10.0.0.0/24",
},
[this](std::string arg) {
IPRange range;
if (not range.FromString(arg))
throw std::invalid_argument{"bad ip range: '" + arg + "'"};
m_OwnedRanges.insert(range);
});
conf.defineOption<std::string>( conf.defineOption<std::string>(
"network", "network",
"traffic-whitelist", "traffic-whitelist",

@ -122,7 +122,7 @@ namespace llarp
std::optional<huint128_t> m_baseV6Address; std::optional<huint128_t> m_baseV6Address;
std::set<IPRange> m_AdvertisedRanges; std::set<IPRange> m_OwnedRanges;
std::optional<net::TrafficPolicy> m_TrafficPolicy; std::optional<net::TrafficPolicy> m_TrafficPolicy;
// TODO: // TODO:

@ -158,6 +158,9 @@ namespace llarp
m_AuthPolicy = std::move(auth); m_AuthPolicy = std::move(auth);
} }
m_TrafficPolicy = conf.m_TrafficPolicy;
m_OwnedRanges = conf.m_OwnedRanges;
m_LocalResolverAddr = dnsConf.m_bind; m_LocalResolverAddr = dnsConf.m_bind;
m_UpstreamResolvers = dnsConf.m_upstreamDNS; m_UpstreamResolvers = dnsConf.m_upstreamDNS;

@ -126,7 +126,13 @@ namespace llarp
std::optional<net::TrafficPolicy> std::optional<net::TrafficPolicy>
GetExitPolicy() const override GetExitPolicy() const override
{ {
return m_ExitPolicy; return m_TrafficPolicy;
}
std::set<IPRange>
GetOwnedRanges() const override
{
return m_OwnedRanges;
} }
/// ip packet against any exit policies we have /// ip packet against any exit policies we have
@ -258,7 +264,9 @@ namespace llarp
std::unique_ptr<vpn::PacketRouter> m_PacketRouter; std::unique_ptr<vpn::PacketRouter> m_PacketRouter;
std::optional<net::TrafficPolicy> m_ExitPolicy; std::optional<net::TrafficPolicy> m_TrafficPolicy;
/// ranges we advetise as reachable
std::set<IPRange> m_OwnedRanges;
}; };
} // namespace handlers } // namespace handlers

@ -114,6 +114,8 @@ namespace llarp
return; return;
} }
introSet().supportedProtocols.clear();
// add supported ethertypes // add supported ethertypes
if (HasIfAddr()) if (HasIfAddr())
{ {
@ -215,14 +217,17 @@ namespace llarp
std::function<void(std::vector<dns::SRVData>)> resultHandler) std::function<void(std::vector<dns::SRVData>)> resultHandler)
{ {
auto fail = [resultHandler]() { resultHandler({}); }; auto fail = [resultHandler]() { resultHandler({}); };
auto lookupByAddress = [resultHandler](auto address) {
auto lookupByAddress = [service, fail, resultHandler](auto address) {
// TODO: remove me after implementing the rest
fail();
if (auto* ptr = std::get_if<RouterID>(&address)) if (auto* ptr = std::get_if<RouterID>(&address))
{} {}
else if (auto* ptr = std::get_if<Address>(&address)) else if (auto* ptr = std::get_if<Address>(&address))
{} {}
else else
{ {
resultHandler({}); fail();
} }
}; };
if (auto maybe = ParseAddress(name)) if (auto maybe = ParseAddress(name))
@ -1096,15 +1101,6 @@ namespace llarp
return m_Identity.pub.Addr(); return m_Identity.pub.Addr();
} }
inline void
AccumulateStats(const Session& session, EndpointBase::SendStat& stats)
{}
inline void
AccumulateStats(
const std::shared_ptr<exit::BaseSession>& session, EndpointBase::SendStat& stats)
{}
std::optional<EndpointBase::SendStat> Endpoint::GetStatFor(AddressVariant_t) const std::optional<EndpointBase::SendStat> Endpoint::GetStatFor(AddressVariant_t) const
{ {
// TODO: implement me // TODO: implement me

@ -123,7 +123,7 @@ namespace llarp
/// get the ip ranges we claim to own /// get the ip ranges we claim to own
/// override me /// override me
virtual std::vector<IPRange> virtual std::set<IPRange>
GetOwnedRanges() const GetOwnedRanges() const
{ {
return {}; return {};

@ -219,7 +219,7 @@ namespace llarp::service
if (key == "r") if (key == "r")
{ {
return BEncodeReadList(ownedRanges, buf); return BEncodeReadSet(ownedRanges, buf);
} }
if (key == "s") if (key == "s")
@ -308,6 +308,16 @@ namespace llarp::service
return false; return false;
} }
// owned ranges
if (not ownedRanges.empty())
{
if (not bencode_write_bytestring(buf, "r", 1))
return false;
if (not BEncodeWriteSet(ownedRanges, buf))
return false;
}
// srv records // srv records
if (not SRVs.empty()) if (not SRVs.empty())
{ {
@ -318,13 +328,6 @@ namespace llarp::service
return false; return false;
} }
// owned ranges
if (not ownedRanges.empty())
{
if (not BEncodeWriteDictArray("r", ownedRanges, buf))
return false;
}
// timestamp // timestamp
if (!BEncodeWriteDictInt("t", timestampSignedAt.count(), buf)) if (!BEncodeWriteDictInt("t", timestampSignedAt.count(), buf))
return false; return false;

@ -41,7 +41,7 @@ namespace llarp
std::vector<ProtocolType> supportedProtocols; std::vector<ProtocolType> supportedProtocols;
/// aonnuce that these ranges are reachable via our endpoint /// aonnuce that these ranges are reachable via our endpoint
/// only set when we support exit traffic ethertype is supported /// only set when we support exit traffic ethertype is supported
std::vector<IPRange> ownedRanges; std::set<IPRange> ownedRanges;
/// policies about traffic that we are willing to carry /// policies about traffic that we are willing to carry
/// a protocol/range whitelist or blacklist /// a protocol/range whitelist or blacklist

@ -291,31 +291,28 @@ namespace llarp
if (not item.BDecode(buf)) if (not item.BDecode(buf))
return false; return false;
// deny duplicates // deny duplicates
return set.emplace(std::move(item)).second; return set.emplace(item).second;
} }
return true; return true;
}, },
buffer); buffer);
} }
/// read a std::set of decodable entities and deny duplicates /// write an iterable container as a list
template <typename Set_t> template <typename Set_t>
bool bool
BEncodeWriteSet(Set_t& set, llarp_buffer_t* buffer) BEncodeWriteSet(const Set_t& set, llarp_buffer_t* buffer)
{ {
return bencode_read_list( if (not bencode_start_list(buffer))
[&set](llarp_buffer_t* buf, bool more) { return false;
if (more)
{ for (const auto& item : set)
typename Set_t::value_type item; {
if (not item.BDecode(buf)) if (not item.BEncode(buffer))
return false; return false;
// deny duplicates }
return set.emplace(std::move(item)).second;
} return bencode_end(buffer);
return true;
},
buffer);
} }
template <typename List_t> template <typename List_t>

Loading…
Cancel
Save