mirror of
https://github.com/fluencelabs/rust-libp2p
synced 2025-06-26 00:01:33 +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:
@ -34,7 +34,7 @@ use libp2p_identity::PublicKey;
|
||||
use libp2p_ping as ping;
|
||||
use libp2p_plaintext::PlainText2Config;
|
||||
use libp2p_relay as relay;
|
||||
use libp2p_swarm::{AddressScore, NetworkBehaviour, Swarm, SwarmBuilder, SwarmEvent};
|
||||
use libp2p_swarm::{NetworkBehaviour, Swarm, SwarmBuilder, SwarmEvent};
|
||||
use std::time::Duration;
|
||||
|
||||
#[test]
|
||||
@ -47,7 +47,7 @@ fn reservation() {
|
||||
let relay_peer_id = *relay.local_peer_id();
|
||||
|
||||
relay.listen_on(relay_addr.clone()).unwrap();
|
||||
relay.add_external_address(relay_addr.clone(), AddressScore::Infinite);
|
||||
relay.add_external_address(relay_addr.clone());
|
||||
spawn_swarm_on_pool(&pool, relay);
|
||||
|
||||
let client_addr = relay_addr
|
||||
@ -90,7 +90,7 @@ fn new_reservation_to_same_relay_replaces_old() {
|
||||
let relay_peer_id = *relay.local_peer_id();
|
||||
|
||||
relay.listen_on(relay_addr.clone()).unwrap();
|
||||
relay.add_external_address(relay_addr.clone(), AddressScore::Infinite);
|
||||
relay.add_external_address(relay_addr.clone());
|
||||
spawn_swarm_on_pool(&pool, relay);
|
||||
|
||||
let mut client = build_client();
|
||||
@ -183,7 +183,7 @@ fn connect() {
|
||||
let relay_peer_id = *relay.local_peer_id();
|
||||
|
||||
relay.listen_on(relay_addr.clone()).unwrap();
|
||||
relay.add_external_address(relay_addr.clone(), AddressScore::Infinite);
|
||||
relay.add_external_address(relay_addr.clone());
|
||||
spawn_swarm_on_pool(&pool, relay);
|
||||
|
||||
let mut dst = build_client();
|
||||
@ -281,7 +281,7 @@ fn reuse_connection() {
|
||||
let relay_peer_id = *relay.local_peer_id();
|
||||
|
||||
relay.listen_on(relay_addr.clone()).unwrap();
|
||||
relay.add_external_address(relay_addr.clone(), AddressScore::Infinite);
|
||||
relay.add_external_address(relay_addr.clone());
|
||||
spawn_swarm_on_pool(&pool, relay);
|
||||
|
||||
let client_addr = relay_addr
|
||||
|
Reference in New Issue
Block a user