diff options
author | moneromooo-monero <moneromooo-monero@users.noreply.github.com> | 2019-06-06 10:28:02 +0000 |
---|---|---|
committer | moneromooo-monero <moneromooo-monero@users.noreply.github.com> | 2019-06-06 10:33:02 +0000 |
commit | 068fa1ca5c0bea39576d750ee92406b31af6ef38 (patch) | |
tree | 9615e5e8b36f06472360dc96a6581b4aefe73091 /src/p2p/net_node.inl | |
parent | Merge pull request #5583 (diff) | |
download | monero-068fa1ca5c0bea39576d750ee92406b31af6ef38.tar.xz |
p2p: delay IGP probing on startup
We might have external access without having to do this
Diffstat (limited to 'src/p2p/net_node.inl')
-rw-r--r-- | src/p2p/net_node.inl | 48 |
1 files changed, 43 insertions, 5 deletions
diff --git a/src/p2p/net_node.inl b/src/p2p/net_node.inl index ba29d92c9..f3d6264a9 100644 --- a/src/p2p/net_node.inl +++ b/src/p2p/net_node.inl @@ -105,6 +105,7 @@ namespace nodetool command_line::add_arg(desc, arg_p2p_hide_my_port); command_line::add_arg(desc, arg_no_sync); command_line::add_arg(desc, arg_no_igd); + command_line::add_arg(desc, arg_igd); command_line::add_arg(desc, arg_out_peers); command_line::add_arg(desc, arg_in_peers); command_line::add_arg(desc, arg_tos_flag); @@ -257,7 +258,35 @@ namespace nodetool public_zone.m_can_pingback = true; m_external_port = command_line::get_arg(vm, arg_p2p_external_port); m_allow_local_ip = command_line::get_arg(vm, arg_p2p_allow_local_ip); - m_no_igd = command_line::get_arg(vm, arg_no_igd); + const bool has_no_igd = command_line::get_arg(vm, arg_no_igd); + const std::string sigd = command_line::get_arg(vm, arg_igd); + if (sigd == "enabled") + { + if (has_no_igd) + { + MFATAL("Cannot have both --" << arg_no_igd.name << " and --" << arg_igd.name << " enabled"); + return false; + } + m_igd = igd; + } + else if (sigd == "disabled") + { + m_igd = no_igd; + } + else if (sigd == "delayed") + { + if (has_no_igd && !command_line::is_arg_defaulted(vm, arg_igd)) + { + MFATAL("Cannot have both --" << arg_no_igd.name << " and --" << arg_igd.name << " delayed"); + return false; + } + m_igd = has_no_igd ? no_igd : delayed_igd; + } + else + { + MFATAL("Invalid value for --" << arg_igd.name << ", expected enabled, disabled or delayed"); + return false; + } m_offline = command_line::get_arg(vm, cryptonote::arg_offline); if (command_line::has_arg(vm, arg_p2p_add_peer)) @@ -682,7 +711,7 @@ namespace nodetool MDEBUG("External port defined as " << m_external_port); // add UPnP port mapping - if(!m_no_igd) + if(m_igd == igd) add_upnp_port_mapping(m_listening_port); return res; @@ -776,7 +805,7 @@ namespace nodetool for(auto& zone : m_network_zones) zone.second.m_net_server.deinit_server(); // remove UPnP port mapping - if(!m_no_igd) + if(m_igd == igd) delete_upnp_port_mapping(m_listening_port); } return store_config(); @@ -1581,8 +1610,17 @@ namespace nodetool } else { - const el::Level level = el::Level::Warning; - MCLOG_RED(level, "global", "No incoming connections - check firewalls/routers allow port " << get_this_peer_port()); + if (m_igd == delayed_igd) + { + MWARNING("No incoming connections, trying to setup IGD"); + add_upnp_port_mapping(m_listening_port); + m_igd = igd; + } + else + { + const el::Level level = el::Level::Warning; + MCLOG_RED(level, "global", "No incoming connections - check firewalls/routers allow port " << get_this_peer_port()); + } } } return true; |