diff options
| author | tv <tv@krebsco.de> | 2026-10-31 22:00:19 +0100 |
|---|---|---|
| committer | tv <tv@krebsco.de> | 2026-10-31 22:00:19 +0100 |
| commit | b7755803fb69ce7def7bb7eafcdbfa247bed036f (patch) | |
| tree | 2d28382b775e282c17a5f18b8f9744290e5a364e | |
| parent | 189cd36d9e015968b751117688fa4f0fd64bde36 (diff) | |
libp2p: don't keep ignored addresses
| -rw-r--r-- | src/transport/libp2p/book.rs | 7 | ||||
| -rw-r--r-- | src/transport/libp2p/tests.rs | 17 |
2 files changed, 23 insertions, 1 deletions
diff --git a/src/transport/libp2p/book.rs b/src/transport/libp2p/book.rs index b495719..e5bfa9e 100644 --- a/src/transport/libp2p/book.rs +++ b/src/transport/libp2p/book.rs @@ -450,12 +450,17 @@ impl Book { /// `peer` is at `address` (without its `/p2p` part): kept first. Not a direct /// address the peer's identify left out (`identified`): one it no longer has, or - /// one it doesn't publish (`Libp2pConfig::ignore`). + /// one it doesn't publish (`Libp2pConfig::ignore`). Nor one in a range this node + /// leaves out (`ignored`): never dialled, it would only take a place, and be passed + /// on. pub(super) fn remember(&mut self, peer: PeerId, address: Multiaddr) { let address = without_peer(address); if !self.addresses.contains_key(&peer) && self.addresses.len() >= MAX_PEERS { return; } + if ignored(&self.ignored, &address) { + return; + } if self .identified .get(&peer) diff --git a/src/transport/libp2p/tests.rs b/src/transport/libp2p/tests.rs index f3c9374..bf538cd 100644 --- a/src/transport/libp2p/tests.rs +++ b/src/transport/libp2p/tests.rs @@ -669,6 +669,23 @@ fn identified_addresses_preferred_first() { assert_eq!(book.direct(), [lan, bridges[0].clone()]); } +/// A peer's addresses in a range this node leaves out aren't kept: never dialled, they +/// would take a place, and be passed on. +#[test] +fn ignored_addresses_not_kept() { + let mut book = Book { + ignored: vec!["10.244.0.0/16".parse().unwrap()], + ..Book::default() + }; + let them = peer(); + let vpn: Multiaddr = "/ip4/10.244.3.2/tcp/9661".parse().unwrap(); + let lan: Multiaddr = "/ip4/10.23.1.144/tcp/9661".parse().unwrap(); + book.remember(them, vpn.clone()); + book.identified(them, vec![vpn.clone(), lan.clone()]); + assert!(book.knows(them, &[lan])); + assert!(!book.knows(them, &[vpn])); +} + /// Peers nobody mentions any more are forgotten, but connected ones. #[test] fn stale_peers_are_forgotten() { |
