mirror of https://github.com/oxen-io/lokinet
ShouldCreateDefaultHiddenService(), auto mode for defaultIfAddr & defaultIfName, favor llarp::Addr, guards, NAT with no bindings fix, actually name ifname set ifname
This commit is contained in:
parent
832e1849b2
commit
57fccaf2e6
|
@ -135,6 +135,11 @@ bool
|
|||
llarp_router::HandleRecvLinkMessageBuffer(llarp::ILinkSession *session,
|
||||
llarp_buffer_t buf)
|
||||
{
|
||||
if(!session)
|
||||
{
|
||||
llarp::LogWarn("no link session");
|
||||
return false;
|
||||
}
|
||||
return inbound_link_msg_parser.ProcessFrom(session, buf);
|
||||
}
|
||||
|
||||
|
@ -646,6 +651,7 @@ llarp_router::Run()
|
|||
// zero out router contact
|
||||
sockaddr *dest = (sockaddr *)&this->ip4addr;
|
||||
llarp::Addr publicAddr(*dest);
|
||||
|
||||
if(this->publicOverride)
|
||||
{
|
||||
if(publicAddr)
|
||||
|
@ -681,14 +687,20 @@ llarp_router::Run()
|
|||
}
|
||||
else
|
||||
{
|
||||
if(!inboundLinks.size())
|
||||
if(inboundLinks.size())
|
||||
{
|
||||
llarp::LogError("No inbound links found, aborting");
|
||||
return;
|
||||
link = inboundLinks[0].get();
|
||||
}
|
||||
else
|
||||
{
|
||||
llarp::LogWarn(
|
||||
"No need to set public ipv4 and port if no external interface "
|
||||
"binds, turning off public override");
|
||||
this->publicOverride = false;
|
||||
link = nullptr;
|
||||
}
|
||||
link = inboundLinks[0].get();
|
||||
}
|
||||
if(link->GetOurAddressInfo(this->addrInfo))
|
||||
if(link && link->GetOurAddressInfo(this->addrInfo))
|
||||
{
|
||||
// override ip and port
|
||||
this->addrInfo.ip = *publicAddr.addr6();
|
||||
|
@ -760,9 +772,13 @@ llarp_router::Run()
|
|||
return;
|
||||
}
|
||||
|
||||
// generate default hidden service
|
||||
if(!CreateDefaultHiddenService())
|
||||
return;
|
||||
// don't create default if we already have some defined
|
||||
if(this->ShouldCreateDefaultHiddenService())
|
||||
{
|
||||
// generate default hidden service
|
||||
if(!CreateDefaultHiddenService())
|
||||
return;
|
||||
}
|
||||
// delayed connect all for clients
|
||||
uint64_t delay = ((llarp_randint() % 10) * 500) + 500;
|
||||
llarp_logic_call_later(logic, {delay, this, &ConnectAll});
|
||||
|
@ -775,6 +791,54 @@ llarp_router::Run()
|
|||
ScheduleTicker(1000);
|
||||
}
|
||||
|
||||
bool
|
||||
llarp_router::ShouldCreateDefaultHiddenService()
|
||||
{
|
||||
// llarp::LogInfo("IfName: ", this->defaultIfName, " defaultIfName: ",
|
||||
// this->defaultIfName);
|
||||
if(this->defaultIfName == "auto" || this->defaultIfName == "auto")
|
||||
{
|
||||
// auto detect if we have any pre-defined endpoints
|
||||
// no if we have a endpoints
|
||||
llarp::LogInfo("Auto mode detected, hasEndpoints: ",
|
||||
std::to_string(this->hiddenServiceContext.hasEndpoints()));
|
||||
if(this->hiddenServiceContext.hasEndpoints())
|
||||
return false;
|
||||
// we don't have any endpoints, auto configure settings
|
||||
|
||||
// set a default IP range
|
||||
this->defaultIfAddr = llarp::findFreePrivateRange();
|
||||
if(this->defaultIfAddr == "")
|
||||
{
|
||||
llarp::LogError(
|
||||
"Could not find any free lokitun interface names, can't auto set up "
|
||||
"default HS context for client");
|
||||
this->defaultIfAddr = "no";
|
||||
return false;
|
||||
}
|
||||
|
||||
// pick an ifName
|
||||
this->defaultIfName = llarp::findFreeLokiTunIfName();
|
||||
if(this->defaultIfName == "")
|
||||
{
|
||||
llarp::LogError(
|
||||
"Could not find any free private ip ranges, can't auto set up "
|
||||
"default HS context for client");
|
||||
this->defaultIfName = "no";
|
||||
return false;
|
||||
}
|
||||
// auto config'd, go ahead and create it
|
||||
return true;
|
||||
}
|
||||
// not auto mode then just check to make sure it's explicitly disabled
|
||||
if(this->defaultIfAddr != "" && this->defaultIfAddr != "no"
|
||||
&& this->defaultIfName != "" && this->defaultIfName != "no")
|
||||
{
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void
|
||||
llarp_router::InitServiceNode()
|
||||
{
|
||||
|
@ -1072,7 +1136,7 @@ namespace llarp
|
|||
}
|
||||
if(StrEq(key, "ifname"))
|
||||
{
|
||||
self->defaultIfAddr = val;
|
||||
self->defaultIfName = val;
|
||||
}
|
||||
if(StrEq(key, "enabled"))
|
||||
{
|
||||
|
@ -1141,10 +1205,10 @@ namespace llarp
|
|||
if(strlen(val) < 17)
|
||||
{
|
||||
// assume IPv4
|
||||
inet_pton(AF_INET, val, &self->ip4addr.sin_addr);
|
||||
// inet_pton(AF_INET, val, &self->ip4addr.sin_addr);
|
||||
// struct sockaddr dest;
|
||||
sockaddr *dest = (sockaddr *)&self->ip4addr;
|
||||
llarp::Addr a(*dest);
|
||||
// sockaddr *dest = (sockaddr *)&self->ip4addr;
|
||||
llarp::Addr a(val);
|
||||
llarp::LogInfo("setting public ipv4 ", a);
|
||||
self->addrInfo.ip = *a.addr6();
|
||||
self->publicOverride = true;
|
||||
|
|
|
@ -93,9 +93,8 @@ struct llarp_router
|
|||
|
||||
llarp::service::Context hiddenServiceContext;
|
||||
|
||||
std::string defaultIfAddr = "auto";
|
||||
std::string defaultIfName = "auto";
|
||||
bool disableDefaultEndpoint = false;
|
||||
std::string defaultIfAddr = "auto";
|
||||
std::string defaultIfName = "auto";
|
||||
|
||||
bool
|
||||
CreateDefaultHiddenService();
|
||||
|
|
Loading…
Reference in New Issue