Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

swarm/: Patch reporting on banned peer connections #2350

Merged
merged 25 commits into from
Nov 26, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
2e73f1d
patch reporting on banned peer connections
divagant-martian Nov 18, 2021
ba4df01
unelegant test
divagant-martian Nov 18, 2021
43edaa0
move banned connections logic to the swarm
divagant-martian Nov 19, 2021
7aebe91
Fix existing ban test.
divagant-martian Nov 19, 2021
f8ab8e0
checkpoint
divagant-martian Nov 19, 2021
eefc25d
remove log init
divagant-martian Nov 19, 2021
2643b6c
Deal with edge case and fix test
divagant-martian Nov 20, 2021
c92dff2
code improvements
divagant-martian Nov 20, 2021
fd0dd48
remove race condition from test
divagant-martian Nov 20, 2021
bdf0ff1
address some clippy lints
divagant-martian Nov 20, 2021
3ccad98
remove debug code
divagant-martian Nov 20, 2021
5e7750f
self review updates
divagant-martian Nov 21, 2021
48a993b
review suggestions for clarity
divagant-martian Nov 22, 2021
8997997
last review suggestion
divagant-martian Nov 22, 2021
10f7c18
*: Bump libp2p-core to v0.31.0
mxinden Nov 22, 2021
8b2aa9b
remove established_ids everywhere
divagant-martian Nov 22, 2021
e80cfff
add explanatory note to Swarm::ban_peer_id
divagant-martian Nov 22, 2021
f824064
Merge commit '10f7c188813da20147e6c84f114352f7170b8e19' into banned-p…
divagant-martian Nov 22, 2021
891a88b
add swarm's Changelog entry
divagant-martian Nov 22, 2021
7c317c0
CHANGELOG: Move v0.42.0 section down replacing v0.41.1
mxinden Nov 24, 2021
83b1743
Merge branch 'libp2p/master' into banned-peer-connections
mxinden Nov 24, 2021
18888d9
fix merge conflicts
divagant-martian Nov 24, 2021
1c1ab66
DeMorgan is hard
divagant-martian Nov 24, 2021
b43a169
address yet another lovely race condition
divagant-martian Nov 25, 2021
66c4c1d
Merge branch 'master' into banned-peer-connections
divagant-martian Nov 26, 2021
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 23 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,10 +42,32 @@

# `libp2p` facade crate

## Version 0.41.1 [unreleased]
## Version 0.42.0 [unreleased]

- Update individual crates.
- `libp2p-core`
- `libp2p-deflate`
- `libp2p-dns`
- `libp2p-floodsub`
- `libp2p-gossipsub`
- `libp2p-identify`
- `libp2p-kad`
- `libp2p-mdns`
- `libp2p-metrics`
- `libp2p-mplex`
- `libp2p-noise`
- `libp2p-ping`
- `libp2p-plaintext`
- `libp2p-relay`
- `libp2p-rendezvous`
- `libp2p-request-response`
- `libp2p-swarm-derive`
- `libp2p-swarm`
- `libp2p-tcp`
- `libp2p-uds`
- `libp2p-wasm-ext`
- `libp2p-websocket`
- `libp2p-yamux`
- `libp2p-mdns` (breaking compatibility with previous versions)

## Version 0.41.0 [2021-11-16]
Expand Down
38 changes: 19 additions & 19 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
name = "libp2p"
edition = "2018"
description = "Peer-to-peer networking library"
version = "0.41.1"
version = "0.42.0"
authors = ["Parity Technologies <admin@parity.io>"]
license = "MIT"
repository = "https://github.com/libp2p/rust-libp2p"
Expand Down Expand Up @@ -71,37 +71,37 @@ futures-timer = "3.0.2" # Explicit dependency to be used in `wasm-bindgen` featu
getrandom = "0.2.3" # Explicit dependency to be used in `wasm-bindgen` feature
instant = "0.1.11" # Explicit dependency to be used in `wasm-bindgen` feature
lazy_static = "1.2"
libp2p-core = { version = "0.30.0", path = "core", default-features = false }
libp2p-floodsub = { version = "0.32.0", path = "protocols/floodsub", optional = true }
libp2p-core = { version = "0.31.0", path = "core", default-features = false }
libp2p-floodsub = { version = "0.33.0", path = "protocols/floodsub", optional = true }
libp2p-gossipsub = { version = "0.35.0", path = "./protocols/gossipsub", optional = true }
libp2p-identify = { version = "0.32.0", path = "protocols/identify", optional = true }
libp2p-kad = { version = "0.33.0", path = "protocols/kad", optional = true }
libp2p-identify = { version = "0.33.0", path = "protocols/identify", optional = true }
libp2p-kad = { version = "0.34.0", path = "protocols/kad", optional = true }
libp2p-metrics = { version = "0.3.0", path = "misc/metrics", optional = true }
libp2p-mplex = { version = "0.30.1", path = "muxers/mplex", optional = true }
libp2p-noise = { version = "0.33.0", path = "transports/noise", optional = true }
libp2p-ping = { version = "0.32.0", path = "protocols/ping", optional = true }
libp2p-plaintext = { version = "0.30.0", path = "transports/plaintext", optional = true }
libp2p-mplex = { version = "0.31.0", path = "muxers/mplex", optional = true }
libp2p-noise = { version = "0.34.0", path = "transports/noise", optional = true }
libp2p-ping = { version = "0.33.0", path = "protocols/ping", optional = true }
libp2p-plaintext = { version = "0.31.0", path = "transports/plaintext", optional = true }
libp2p-pnet = { version = "0.22.0", path = "transports/pnet", optional = true }
libp2p-relay = { version = "0.5.0", path = "protocols/relay", optional = true }
libp2p-rendezvous = { version = "0.2.0", path = "protocols/rendezvous", optional = true }
libp2p-request-response = { version = "0.14.0", path = "protocols/request-response", optional = true }
libp2p-swarm = { version = "0.32.0", path = "swarm" }
libp2p-relay = { version = "0.6.0", path = "protocols/relay", optional = true }
libp2p-rendezvous = { version = "0.3.0", path = "protocols/rendezvous", optional = true }
libp2p-request-response = { version = "0.15.0", path = "protocols/request-response", optional = true }
libp2p-swarm = { version = "0.33.0", path = "swarm" }
libp2p-swarm-derive = { version = "0.26.1", path = "swarm-derive" }
libp2p-uds = { version = "0.30.0", path = "transports/uds", optional = true }
libp2p-wasm-ext = { version = "0.30.0", path = "transports/wasm-ext", default-features = false, optional = true }
libp2p-yamux = { version = "0.34.0", path = "muxers/yamux", optional = true }
libp2p-wasm-ext = { version = "0.31.0", path = "transports/wasm-ext", default-features = false, optional = true }
libp2p-yamux = { version = "0.35.0", path = "muxers/yamux", optional = true }
multiaddr = { version = "0.13.0" }
parking_lot = "0.11.0"
pin-project = "1.0.0"
rand = "0.7.3" # Explicit dependency to be used in `wasm-bindgen` feature
smallvec = "1.6.1"

[target.'cfg(not(any(target_os = "emscripten", target_os = "wasi", target_os = "unknown")))'.dependencies]
libp2p-deflate = { version = "0.30.0", path = "transports/deflate", optional = true }
libp2p-dns = { version = "0.30.0", path = "transports/dns", optional = true, default-features = false }
libp2p-deflate = { version = "0.31.0", path = "transports/deflate", optional = true }
libp2p-dns = { version = "0.31.0", path = "transports/dns", optional = true, default-features = false }
libp2p-mdns = { version = "0.34.0", path = "protocols/mdns", optional = true }
libp2p-tcp = { version = "0.30.0", path = "transports/tcp", default-features = false, optional = true }
libp2p-websocket = { version = "0.32.0", path = "transports/websocket", optional = true }
libp2p-tcp = { version = "0.31.0", path = "transports/tcp", default-features = false, optional = true }
libp2p-websocket = { version = "0.33.0", path = "transports/websocket", optional = true }

[dev-dependencies]
async-std = { version = "1.6.2", features = ["attributes"] }
Expand Down
7 changes: 7 additions & 0 deletions core/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,10 @@
# 0.31.0 [unreleased]

- Report concrete connection IDs in `NetworkEvent::ConnectionEstablished` and
`NetworkEvent::ConnectionClosed` (see [PR 2350]).

[PR 2350]: https://github.com/libp2p/rust-libp2p/pull/2350/

# 0.30.1 [2021-11-16]

- Use `instant` instead of `wasm-timer` (see [PR 2245]).
Expand Down
2 changes: 1 addition & 1 deletion core/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
name = "libp2p-core"
edition = "2018"
description = "Core traits and structs of libp2p"
version = "0.30.1"
version = "0.31.0"
authors = ["Parity Technologies <admin@parity.io>"]
license = "MIT"
repository = "https://github.com/libp2p/rust-libp2p"
Expand Down
23 changes: 13 additions & 10 deletions core/src/connection/pool.rs
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ use std::{
collections::{hash_map, HashMap},
convert::TryFrom as _,
fmt,
num::{NonZeroU32, NonZeroU8},
num::NonZeroU8,
pin::Pin,
task::Context,
task::Poll,
Expand Down Expand Up @@ -156,7 +156,10 @@ where
/// A new connection has been established.
ConnectionEstablished {
connection: EstablishedConnection<'a, THandlerInEvent<THandler>>,
num_established: NonZeroU32,
/// List of other connections to the same peer.
///
/// Note: Does not include the connection reported through this event.
other_established_connection_ids: Vec<ConnectionId>,
/// [`Some`] when the new connection is an outgoing connection.
/// Addresses are dialed in parallel. Contains the addresses and errors
/// of dial attempts that failed before the one successful dial.
Expand All @@ -183,8 +186,8 @@ where
error: Option<ConnectionError<THandlerError<THandler>>>,
/// A reference to the pool that used to manage the connection.
pool: &'a mut Pool<THandler, TTrans>,
/// The remaining number of established connections to the same peer.
num_established: u32,
/// The remaining established connections to the same peer.
remaining_established_connection_ids: Vec<ConnectionId>,
handler: THandler::Handler,
},

Expand Down Expand Up @@ -693,15 +696,16 @@ where
let EstablishedConnectionInfo { endpoint, .. } =
connections.remove(&id).expect("Connection to be present");
self.counters.dec_established(&endpoint);
let num_established = u32::try_from(connections.len()).unwrap();
if num_established == 0 {
let remaining_established_connection_ids: Vec<ConnectionId> =
connections.keys().cloned().collect();
if remaining_established_connection_ids.is_empty() {
self.established.remove(&peer_id);
}
return Poll::Ready(PoolEvent::ConnectionClosed {
id,
connected: Connected { endpoint, peer_id },
error,
num_established,
remaining_established_connection_ids,
pool: self,
handler,
});
Expand Down Expand Up @@ -849,8 +853,7 @@ where

// Add the connection to the pool.
let conns = self.established.entry(peer_id).or_default();
let num_established = NonZeroU32::new(u32::try_from(conns.len() + 1).unwrap())
.expect("n + 1 is always non-zero; qed");
let other_established_connection_ids = conns.keys().cloned().collect();
self.counters.inc_established(&endpoint);

let (command_sender, command_receiver) =
Expand Down Expand Up @@ -883,7 +886,7 @@ where
Some(PoolConnection::Established(connection)) => {
return Poll::Ready(PoolEvent::ConnectionEstablished {
connection,
num_established,
other_established_connection_ids,
concurrent_dial_errors,
})
}
Expand Down
8 changes: 4 additions & 4 deletions core/src/network.rs
Original file line number Diff line number Diff line change
Expand Up @@ -396,11 +396,11 @@ where
Poll::Pending => return Poll::Pending,
Poll::Ready(PoolEvent::ConnectionEstablished {
connection,
num_established,
other_established_connection_ids,
concurrent_dial_errors,
}) => NetworkEvent::ConnectionEstablished {
connection,
num_established,
other_established_connection_ids,
concurrent_dial_errors,
},
Poll::Ready(PoolEvent::PendingOutboundConnectionError {
Expand Down Expand Up @@ -435,13 +435,13 @@ where
id,
connected,
error,
num_established,
remaining_established_connection_ids,
handler,
..
}) => NetworkEvent::ConnectionClosed {
id,
connected,
num_established,
remaining_established_connection_ids,
error,
handler,
},
Expand Down
13 changes: 7 additions & 6 deletions core/src/network/event.rs
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ use crate::{
transport::{Transport, TransportError},
Multiaddr, PeerId,
};
use std::{fmt, num::NonZeroU32};
use std::fmt;

/// Event that can happen on the `Network`.
pub enum NetworkEvent<'a, TTrans, TInEvent, TOutEvent, THandler>
Expand Down Expand Up @@ -100,9 +100,10 @@ where
ConnectionEstablished {
/// The newly established connection.
connection: EstablishedConnection<'a, TInEvent>,
/// The total number of established connections to the same peer,
/// including the one that has just been opened.
num_established: NonZeroU32,
/// List of other connections to the same peer.
///
/// Note: Does not include the connection reported through this event.
other_established_connection_ids: Vec<ConnectionId>,
/// [`Some`] when the new connection is an outgoing connection.
/// Addresses are dialed in parallel. Contains the addresses and errors
/// of dial attempts that failed before the one successful dial.
Expand All @@ -128,8 +129,8 @@ where
connected: Connected,
/// The error that occurred.
error: Option<ConnectionError<<THandler::Handler as ConnectionHandler>::Error>>,
/// The remaining number of established connections to the same peer.
num_established: u32,
/// List of remaining established connections to the same peer.
remaining_established_connection_ids: Vec<ConnectionId>,
handler: THandler::Handler,
},

Expand Down
10 changes: 5 additions & 5 deletions misc/metrics/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,12 @@ kad = ["libp2p-kad"]
ping = ["libp2p-ping"]

[dependencies]
libp2p-core = { version = "0.30.0", path = "../../core" }
libp2p-core = { version = "0.31.0", path = "../../core" }
libp2p-gossipsub = { version = "0.35.0", path = "../../protocols/gossipsub", optional = true }
libp2p-identify = { version = "0.32.0", path = "../../protocols/identify", optional = true }
libp2p-kad = { version = "0.33.0", path = "../../protocols/kad", optional = true }
libp2p-ping = { version = "0.32.0", path = "../../protocols/ping", optional = true }
libp2p-swarm = { version = "0.32.0", path = "../../swarm" }
libp2p-identify = { version = "0.33.0", path = "../../protocols/identify", optional = true }
libp2p-kad = { version = "0.34.0", path = "../../protocols/kad", optional = true }
libp2p-ping = { version = "0.33.0", path = "../../protocols/ping", optional = true }
libp2p-swarm = { version = "0.33.0", path = "../../swarm" }
open-metrics-client = "0.13.0"

[dev-dependencies]
Expand Down
2 changes: 1 addition & 1 deletion misc/peer-id-generator/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -11,5 +11,5 @@ categories = ["network-programming", "asynchronous"]
publish = false

[dependencies]
libp2p-core = { path = "../../core", default-features = false }
libp2p-core = { path = "../../core", default-features = false, version = "0.31.0"}
num_cpus = "1.8"
4 changes: 3 additions & 1 deletion muxers/mplex/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
# 0.30.1 [unreleased]
# 0.31.0 [unreleased]

- Update dependencies.

- Add `fn set_protocol_name(&mut self, protocol_name: &'static [u8])` to MplexConfig

Expand Down
4 changes: 2 additions & 2 deletions muxers/mplex/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
name = "libp2p-mplex"
edition = "2018"
description = "Mplex multiplexing protocol for libp2p"
version = "0.30.1"
version = "0.31.0"
authors = ["Parity Technologies <admin@parity.io>"]
license = "MIT"
repository = "https://github.com/libp2p/rust-libp2p"
Expand All @@ -13,7 +13,7 @@ categories = ["network-programming", "asynchronous"]
bytes = "1"
futures = "0.3.1"
asynchronous-codec = "0.6"
libp2p-core = { version = "0.30.0", path = "../../core", default-features = false }
libp2p-core = { version = "0.31.0", path = "../../core", default-features = false }
log = "0.4"
nohash-hasher = "0.2"
parking_lot = "0.11"
Expand Down
4 changes: 4 additions & 0 deletions muxers/yamux/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
# 0.35.0 [unreleased]

- Update dependencies.

# 0.34.0 [2021-11-01]

- Make default features of `libp2p-core` optional.
Expand Down
4 changes: 2 additions & 2 deletions muxers/yamux/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
name = "libp2p-yamux"
edition = "2018"
description = "Yamux multiplexing protocol for libp2p"
version = "0.34.0"
version = "0.35.0"
authors = ["Parity Technologies <admin@parity.io>"]
license = "MIT"
repository = "https://github.com/libp2p/rust-libp2p"
Expand All @@ -11,7 +11,7 @@ categories = ["network-programming", "asynchronous"]

[dependencies]
futures = "0.3.1"
libp2p-core = { version = "0.30.0", path = "../../core", default-features = false }
libp2p-core = { version = "0.31.0", path = "../../core", default-features = false }
parking_lot = "0.11"
thiserror = "1.0"
yamux = "0.9.0"
4 changes: 4 additions & 0 deletions protocols/floodsub/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
# 0.33.0 [unreleased]

- Update dependencies.

# 0.32.0 [2021-11-16]

- Update dependencies.
Expand Down
6 changes: 3 additions & 3 deletions protocols/floodsub/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
name = "libp2p-floodsub"
edition = "2018"
description = "Floodsub protocol for libp2p"
version = "0.32.0"
version = "0.33.0"
authors = ["Parity Technologies <admin@parity.io>"]
license = "MIT"
repository = "https://github.com/libp2p/rust-libp2p"
Expand All @@ -13,8 +13,8 @@ categories = ["network-programming", "asynchronous"]
cuckoofilter = "0.5.0"
fnv = "1.0"
futures = "0.3.1"
libp2p-core = { version = "0.30.0", path = "../../core", default-features = false }
libp2p-swarm = { version = "0.32.0", path = "../../swarm" }
libp2p-core = { version = "0.31.0", path = "../../core", default-features = false }
libp2p-swarm = { version = "0.33.0", path = "../../swarm" }
log = "0.4"
prost = "0.9"
rand = "0.7"
Expand Down
4 changes: 2 additions & 2 deletions protocols/gossipsub/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@ keywords = ["peer-to-peer", "libp2p", "networking"]
categories = ["network-programming", "asynchronous"]

[dependencies]
libp2p-swarm = { version = "0.32.0", path = "../../swarm" }
libp2p-core = { version = "0.30.0", path = "../../core", default-features = false }
libp2p-swarm = { version = "0.33.0", path = "../../swarm" }
libp2p-core = { version = "0.31.0", path = "../../core", default-features = false }
bytes = "1.0"
byteorder = "1.3.4"
fnv = "1.0.7"
Expand Down
4 changes: 4 additions & 0 deletions protocols/identify/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
# 0.33.0 [unreleased]

- Update dependencies.

# 0.32.0 [2021-11-16]

- Use `futures-timer` instead of `wasm-timer` (see [PR 2245]).
Expand Down
6 changes: 3 additions & 3 deletions protocols/identify/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
name = "libp2p-identify"
edition = "2018"
description = "Nodes identifcation protocol for libp2p"
version = "0.32.0"
version = "0.33.0"
authors = ["Parity Technologies <admin@parity.io>"]
license = "MIT"
repository = "https://github.com/libp2p/rust-libp2p"
Expand All @@ -12,8 +12,8 @@ categories = ["network-programming", "asynchronous"]
[dependencies]
futures = "0.3.1"
futures-timer = "3.0.2"
libp2p-core = { version = "0.30.0", path = "../../core", default-features = false }
libp2p-swarm = { version = "0.32.0", path = "../../swarm" }
libp2p-core = { version = "0.31.0", path = "../../core", default-features = false }
libp2p-swarm = { version = "0.33.0", path = "../../swarm" }
log = "0.4.1"
lru = "0.6"
prost = "0.9"
Expand Down
Loading