mirror of
https://github.com/sigp/lighthouse.git
synced 2026-03-09 11:41:51 +00:00
remove nat module and use libp2p upnp (#4840)
* remove nat module and use libp2p upnp * update Cargo.lock * remove no longer used dependencies * restore nat module refactored * log successful mapping * only activate upnp if config enabled reduce logs to debug! * Merge branch 'unstable' of https://github.com/sigp/lighthouse into libp2p-nat * Merge branch 'unstable' of https://github.com/sigp/lighthouse into libp2p-nat * Merge branch 'unstable' of https://github.com/sigp/lighthouse into libp2p-nat * address review * Merge branch 'unstable' of https://github.com/sigp/lighthouse into libp2p-nat * Merge branch 'unstable' of https://github.com/sigp/lighthouse into libp2p-nat * Merge branch 'unstable' of https://github.com/sigp/lighthouse into libp2p-nat * address review
This commit is contained in:
@@ -28,10 +28,9 @@ use crate::{error, metrics, Enr, NetworkGlobals, PubsubMessage, TopicHash};
|
||||
use api_types::{PeerRequestId, Request, RequestId, Response};
|
||||
use futures::stream::StreamExt;
|
||||
use gossipsub_scoring_parameters::{lighthouse_gossip_thresholds, PeerScoreSettings};
|
||||
use libp2p::multiaddr::{Multiaddr, Protocol as MProtocol};
|
||||
use libp2p::multiaddr::{self, Multiaddr, Protocol as MProtocol};
|
||||
use libp2p::swarm::{Swarm, SwarmEvent};
|
||||
use libp2p::PeerId;
|
||||
use libp2p::{identify, SwarmBuilder};
|
||||
use libp2p::{identify, PeerId, SwarmBuilder};
|
||||
use slog::{crit, debug, info, o, trace, warn};
|
||||
use std::path::PathBuf;
|
||||
use std::pin::Pin;
|
||||
@@ -363,6 +362,7 @@ impl<AppReqId: ReqId, TSpec: EthSpec> Network<AppReqId, TSpec> {
|
||||
identify,
|
||||
peer_manager,
|
||||
connection_limits,
|
||||
upnp: Default::default(),
|
||||
}
|
||||
};
|
||||
|
||||
@@ -1601,6 +1601,47 @@ impl<AppReqId: ReqId, TSpec: EthSpec> Network<AppReqId, TSpec> {
|
||||
}
|
||||
}
|
||||
|
||||
fn inject_upnp_event(&mut self, event: libp2p::upnp::Event) {
|
||||
match event {
|
||||
libp2p::upnp::Event::NewExternalAddr(addr) => {
|
||||
info!(self.log, "UPnP route established"; "addr" => %addr);
|
||||
let mut iter = addr.iter();
|
||||
// Skip Ip address.
|
||||
iter.next();
|
||||
match iter.next() {
|
||||
Some(multiaddr::Protocol::Udp(udp_port)) => match iter.next() {
|
||||
Some(multiaddr::Protocol::QuicV1) => {
|
||||
if let Err(e) = self.discovery_mut().update_enr_quic_port(udp_port) {
|
||||
warn!(self.log, "Failed to update ENR"; "error" => e);
|
||||
}
|
||||
}
|
||||
_ => {
|
||||
trace!(self.log, "UPnP address mapped multiaddr from unknown transport"; "addr" => %addr)
|
||||
}
|
||||
},
|
||||
Some(multiaddr::Protocol::Tcp(tcp_port)) => {
|
||||
if let Err(e) = self.discovery_mut().update_enr_tcp_port(tcp_port) {
|
||||
warn!(self.log, "Failed to update ENR"; "error" => e);
|
||||
}
|
||||
}
|
||||
_ => {
|
||||
trace!(self.log, "UPnP address mapped multiaddr from unknown transport"; "addr" => %addr);
|
||||
}
|
||||
}
|
||||
}
|
||||
libp2p::upnp::Event::ExpiredExternalAddr(_) => {}
|
||||
libp2p::upnp::Event::GatewayNotFound => {
|
||||
info!(self.log, "UPnP not available");
|
||||
}
|
||||
libp2p::upnp::Event::NonRoutableGateway => {
|
||||
info!(
|
||||
self.log,
|
||||
"UPnP is available but gateway is not exposed to public network"
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Networking polling */
|
||||
|
||||
/// Poll the p2p networking stack.
|
||||
@@ -1623,6 +1664,10 @@ impl<AppReqId: ReqId, TSpec: EthSpec> Network<AppReqId, TSpec> {
|
||||
}
|
||||
BehaviourEvent::Identify(ie) => self.inject_identify_event(ie),
|
||||
BehaviourEvent::PeerManager(pe) => self.inject_pm_event(pe),
|
||||
BehaviourEvent::Upnp(e) => {
|
||||
self.inject_upnp_event(e);
|
||||
None
|
||||
}
|
||||
BehaviourEvent::ConnectionLimits(le) => void::unreachable(le),
|
||||
},
|
||||
SwarmEvent::ConnectionEstablished { .. } => None,
|
||||
|
||||
Reference in New Issue
Block a user