Browse Source

meshnets.yggaddress added

pull/1634/head
orignal 4 years ago
parent
commit
ace80c29e7
  1. 13
      daemon/Daemon.cpp
  2. 1
      libi2pd/Config.cpp
  3. 3
      libi2pd/RouterInfo.cpp
  4. 4
      libi2pd/util.cpp
  5. 2
      libi2pd/util.h

13
daemon/Daemon.cpp

@ -147,6 +147,18 @@ namespace i2p
bool ygg; i2p::config::GetOption("meshnets.yggdrasil", ygg); bool ygg; i2p::config::GetOption("meshnets.yggdrasil", ygg);
boost::asio::ip::address_v6 yggaddr; boost::asio::ip::address_v6 yggaddr;
if (ygg) if (ygg)
{
std::string yggaddress; i2p::config::GetOption ("meshnets.yggaddress", yggaddress);
if (!yggaddress.empty ())
{
yggaddr = boost::asio::ip::address_v6::from_string (yggaddress);
if (yggaddr.is_unspecified () || i2p::util::net::GetMTU (yggaddr) != 0xFFFF) // ygg's MTU is always 65535
{
LogPrint(eLogWarning, "Daemon: Can't find Yggdrasil address ", yggaddress);
ygg = false;
}
}
else
{ {
yggaddr = i2p::util::net::GetYggdrasilAddress (); yggaddr = i2p::util::net::GetYggdrasilAddress ();
if (yggaddr.is_unspecified ()) if (yggaddr.is_unspecified ())
@ -155,6 +167,7 @@ namespace i2p
ygg = false; ygg = false;
} }
} }
}
uint16_t port; i2p::config::GetOption("port", port); uint16_t port; i2p::config::GetOption("port", port);
if (!i2p::config::IsDefault("port")) if (!i2p::config::IsDefault("port"))

1
libi2pd/Config.cpp

@ -279,6 +279,7 @@ namespace config {
options_description meshnets("Meshnet transports options"); options_description meshnets("Meshnet transports options");
meshnets.add_options() meshnets.add_options()
("meshnets.yggdrasil", bool_switch()->default_value(false), "Support transports through the Yggdrasil (deafult: false)") ("meshnets.yggdrasil", bool_switch()->default_value(false), "Support transports through the Yggdrasil (deafult: false)")
("meshnets.yggaddress", value<std::string>()->default_value(""), "Yggdrasil address to publish")
; ;
m_OptionsDesc m_OptionsDesc

3
libi2pd/RouterInfo.cpp

@ -980,7 +980,8 @@ namespace data
return GetAddress ( return GetAddress (
[](std::shared_ptr<const RouterInfo::Address> address)->bool [](std::shared_ptr<const RouterInfo::Address> address)->bool
{ {
return address->IsPublishedNTCP2 () && address->host.is_v6 (); return address->IsPublishedNTCP2 () && address->host.is_v6 () &&
!i2p::util::net::IsYggdrasilAddress (address->host);
}); });
} }

4
libi2pd/util.cpp

@ -461,7 +461,7 @@ namespace net
#endif #endif
} }
bool IsInReservedRange (const boost::asio::ip::address& host, bool checkYggdrasil) bool IsInReservedRange (const boost::asio::ip::address& host)
{ {
// https://en.wikipedia.org/wiki/Reserved_IP_addresses // https://en.wikipedia.org/wiki/Reserved_IP_addresses
if(host.is_v4()) if(host.is_v4())
@ -502,7 +502,7 @@ namespace net
if (ipv6_address >= it.first && ipv6_address <= it.second) if (ipv6_address >= it.first && ipv6_address <= it.second)
return true; return true;
} }
if (checkYggdrasil && IsYggdrasilAddress (ipv6_address.data ())) // yggdrasil? if (IsYggdrasilAddress (ipv6_address.data ())) // yggdrasil?
return true; return true;
} }
return false; return false;

2
libi2pd/util.h

@ -189,7 +189,7 @@ namespace util
int GetMTU (const boost::asio::ip::address& localAddress); int GetMTU (const boost::asio::ip::address& localAddress);
const boost::asio::ip::address GetInterfaceAddress (const std::string & ifname, bool ipv6=false); const boost::asio::ip::address GetInterfaceAddress (const std::string & ifname, bool ipv6=false);
boost::asio::ip::address_v6 GetYggdrasilAddress (); boost::asio::ip::address_v6 GetYggdrasilAddress ();
bool IsInReservedRange (const boost::asio::ip::address& host, bool checkYggdrasil = true); bool IsInReservedRange (const boost::asio::ip::address& host);
bool IsYggdrasilAddress (const boost::asio::ip::address& addr); bool IsYggdrasilAddress (const boost::asio::ip::address& addr);
} }
} }

Loading…
Cancel
Save