mirror of
https://github.com/fluencelabs/rust-libp2p
synced 2025-07-04 12:11:35 +00:00
feat(swarm): replace address scoring with explicit candidates
Previously, a `NetworkBehaviour` could report an `AddressScore` for an external address. This score was a `u32` and addresses would be ranked amongst those. In reality, an address is either confirmed to be publicly reachable (via a protocol such as AutoNAT) or merely represents a candidate that might be an external address. In a way, addresses are guilty (private) until proven innocent (publicly reachable). When a `NetworkBehaviour` reports an address candidate, we perform address translation on it to potentially correct for ephemeral ports of TCP. These candidates are then injected back into the `NetworkBehaviour`. Protocols such as AutoNAT can use these addresses as a source for probing their NAT status. Once confirmed, they can emit a `ToSwarm::ExternalAddrConfirmed` event which again will be passed to all `NetworkBehaviour`s. This simplified approach will allow us implement Kademlia's client-mode (https://github.com/libp2p/rust-libp2p/issues/2032) without additional configuration options: As soon as an address is reported as publicly reachable, we can activate server-mode for that connection. Related: https://github.com/libp2p/rust-libp2p/pull/3877. Related: https://github.com/libp2p/rust-libp2p/issues/3953. Related: https://github.com/libp2p/rust-libp2p/issues/2032. Related: https://github.com/libp2p/go-libp2p/issues/2229. Co-authored-by: Max Inden <mail@max-inden.de> Pull-Request: #3954.
This commit is contained in:
@ -243,8 +243,9 @@ where
|
||||
FromSwarm::ExpiredListenAddr(_) => {}
|
||||
FromSwarm::ListenerError(_) => {}
|
||||
FromSwarm::ListenerClosed(_) => {}
|
||||
FromSwarm::NewExternalAddr(_) => {}
|
||||
FromSwarm::ExpiredExternalAddr(_) => {}
|
||||
FromSwarm::NewExternalAddrCandidate(_) => {}
|
||||
FromSwarm::ExternalAddrExpired(_) => {}
|
||||
FromSwarm::ExternalAddrConfirmed(_) => {}
|
||||
}
|
||||
}
|
||||
|
||||
@ -410,13 +411,7 @@ mod tests {
|
||||
dialer
|
||||
.dial(
|
||||
DialOpts::unknown_peer_id()
|
||||
.address(
|
||||
listener
|
||||
.external_addresses()
|
||||
.map(|a| a.addr.clone())
|
||||
.next()
|
||||
.unwrap(),
|
||||
)
|
||||
.address(listener.external_addresses().next().cloned().unwrap())
|
||||
.build(),
|
||||
)
|
||||
.unwrap();
|
||||
@ -470,12 +465,7 @@ mod tests {
|
||||
{
|
||||
dialer.dial(
|
||||
DialOpts::peer_id(*listener.local_peer_id())
|
||||
.addresses(
|
||||
listener
|
||||
.external_addresses()
|
||||
.map(|a| a.addr.clone())
|
||||
.collect(),
|
||||
)
|
||||
.addresses(listener.external_addresses().cloned().collect())
|
||||
.build(),
|
||||
)
|
||||
}
|
||||
|
Reference in New Issue
Block a user