ShouldCreateDefaultHiddenService(), auto mode for defaultIfAddr & defaultIfName, favor llarp::Addr, guards, NAT with no bindings fix, actually name ifname set ifname

pull/19/head 0.2.3-neuro0
Ryan Tharp 6 years ago
parent cc42e8e623
commit bcbaf47adf

@ -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);
}
@ -643,9 +648,7 @@ void
llarp_router::Run()
{
routerProfiling.Load(routerProfilesFile.string().c_str());
// zero out router contact
sockaddr *dest = (sockaddr *)&this->ip4addr;
llarp::Addr publicAddr(*dest);
llarp::Addr publicAddr(this->ip4addr);
if(this->publicOverride)
{
if(publicAddr)
@ -681,14 +684,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 +769,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 +788,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()
{
@ -1071,7 +1132,7 @@ namespace llarp
}
if(StrEq(key, "ifname"))
{
self->defaultIfAddr = val;
self->defaultIfName = val;
}
}
else if(StrEq(section, "services"))
@ -1134,10 +1195,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,13 +93,15 @@ struct llarp_router
llarp::service::Context hiddenServiceContext;
std::string defaultIfAddr = "10.200.0.1/24";
std::string defaultIfName = "lokitun0";
std::string defaultIfAddr = "auto";
std::string defaultIfName = "auto";
bool
CreateDefaultHiddenService();
bool
ShouldCreateDefaultHiddenService();
std::unique_ptr< llarp::ILinkLayer > outboundLink;
std::vector< std::unique_ptr< llarp::ILinkLayer > > inboundLinks;

Loading…
Cancel
Save