Commit Graph

757 Commits

Author SHA1 Message Date
0bb8ee98d5 protocols/: Implement Direct Connection Upgrade through Relay (DCUtR) (#2438)
Enables two peers to coordinate a hole punch (direct connection upgrade)
via a relayed connection.

See https://github.com/libp2p/specs/blob/master/relay/DCUtR.md for
specification.
2022-02-08 15:56:35 +01:00
bd41e0461e protocols/kad: Require owned key in get_record (#2477)
Co-authored-by: Max Inden <mail@max-inden.de>
2022-02-07 22:56:30 +01:00
78f5981856 protocols/gossipsub: Emit gossip of all non empty topics (#2481)
Co-authored-by: Max Inden <mail@max-inden.de>
2022-02-07 20:00:46 +01:00
a2c93fc766 *: Update multihash and multiaddr (#2469)
Co-authored-by: Max Inden <mail@max-inden.de>
2022-02-03 17:38:41 +01:00
3f4dbb1717 {misc,protocols/gossipsub}: Move to prometheus-client (#2442)
`open-metrics-client` has been accepted as the official Prometheus Rust
client and thus renamed to `prometheus-client`.

See https://groups.google.com/g/prometheus-developers/c/E67ByGmVQKM
2022-02-03 11:31:41 +01:00
ea180aa3a8 *: Prepare v0.42.1 (#2467) 2022-02-02 15:59:32 +01:00
6338b25e4b protocols/relay/src/v2: Remove empty peer entries in self.reservations (#2464)
When a peer disconnects, reservations associated with that peer are removed from
the set of reservations of the peer. In case the set of reservations for the
peer is now empty, remove the entire peer.

Same when a reservation times out.
2022-02-01 19:32:58 +01:00
13ded7f6a8 protocols/autonat/tests: Ignore irrelevant events (#2450)
Ignore `SwarmEvent::ExpiredListenAddr` in tests.
Print swarm event on panic.

Co-authored-by: Max Inden <mail@max-inden.de>
2022-01-29 12:33:15 +01:00
73c103e694 protocols/autonat/Cargo.toml: Add description field (#2452)
Without one can not publish the crate to crates.io.
2022-01-27 12:17:02 +01:00
e6ccfbc4e7 *: Prepare v0.42.0 (#2440) 2022-01-27 11:29:09 +01:00
320a1cde00 protocols/kad: Add Kademlia::get_closest_local_peers (#2436)
Co-authored-by: Max Inden <mail@max-inden.de>
2022-01-22 11:43:07 +01:00
a26b6ab7f0 protocols/autonat: Add changelog and start version at v0.1.0 (#2444)
The `libp2p-autonat` crate has never been released, thus it should start at
`v0.1.0`.
2022-01-20 13:18:05 +01:00
fad99808ac *: Update tokio, lru and prost (#2443) 2022-01-20 09:43:32 +01:00
4001b565b6 *: Rework reporting of invalid and wrong PeerIds (#2441)
Previously, the negotiated PeerId was included in the swarm event and
inject_dial_failure’s arguments while the expected one was absent. This
patch adds the negotiated PeerId to the DialError and includes the expected
one in the notifications.

Co-authored-by: Roland Kuhn <rk@rkuhn.info>
2022-01-18 21:21:11 +01:00
30fc882037 protocols/gossipsub: Implement unsub backoff spec changes (#2403)
Implements the changes specified by
https://github.com/libp2p/specs/pull/383.

Co-authored-by: Max Inden <mail@max-inden.de>
2022-01-17 18:08:34 +01:00
96dbfcd1ad core/src/transport: Add Transport::dial_as_listener (#2363)
Allows `NetworkBehaviour` implementations to dial a peer, but instruct
the dialed connection to be upgraded as if it were the listening
endpoint.

This is needed when establishing direct connections through NATs and/or
Firewalls (hole punching). When hole punching via TCP (QUIC is different
but similar) both ends dial the other at the same time resulting in a
simultaneously opened TCP connection. To disambiguate who is the dialer
and who the listener there are two options:

1. Use the Simultaneous Open Extension of Multistream Select. See
   [sim-open] specification and [sim-open-rust] Rust implementation.

2. Disambiguate the role (dialer or listener) based on the role within
   the DCUtR [dcutr] protocol. More specifically the node initiating the
   DCUtR process will act as a listener and the other as a dialer.

This commit enables (2), i.e. enables the DCUtR protocol to specify the
role used once the connection is established.

While on the positive side (2) requires one round trip less than (1), on
the negative side (2) only works for coordinated simultaneous dials.
I.e. when a simultaneous dial happens by chance, and not coordinated via
DCUtR, the connection attempt fails when only (2) is in place.

[sim-open]: https://github.com/libp2p/specs/blob/master/connections/simopen.md
[sim-open-rust]: https://github.com/libp2p/rust-libp2p/pull/2066
[dcutr]: https://github.com/libp2p/specs/blob/master/relay/DCUtR.md
2022-01-17 16:35:14 +01:00
17ee5047e3 protocols/relay: Implement circuit relay v2 protocol (#2059)
This commit adds an implementation for the circuit relay v2 protocol to be used
as a relay server, i.e. it supports incoming HOP requests and outgoing STOP
requests and used as a relay clients, i.e. outgoing HOP requests and incoming
STOP requests.

The existing circuit relay v1 protocol implementation is moved to
protocols/relay/src/v1.

Co-authored-by: ronzigelman <ronzigelman@gmail.com>
Co-authored-by: Marco Munizaga <git@marcopolo.io>
Co-authored-by: Thomas Eizinger <thomas@eizinger.io>
Co-authored-by: Elena Frank <57632201+elenaf9@users.noreply.github.com>
2022-01-14 19:58:28 +01:00
c61ea6ad29 protocols/: Add basic AutoNAT implementation (#2262)
This commit adds a behaviour protocol that implements the AutoNAT specification.
It enables users to detect whether they are behind a NAT. The Autonat Protocol
implements a Codec for the Request-Response protocol, and wraps it in a new
Network Behaviour with some additional functionality.

Co-authored-by: David Craven <david@craven.ch>
Co-authored-by: Max Inden <mail@max-inden.de>
2022-01-14 10:27:28 +01:00
ddc035170d protocols/: Fix clippy and fmt warnings (#2433)
* protocols/mdns: fix clippy::to-string-in-format-args

* protocols/gossipsub: fix rustfmt error
2022-01-13 19:35:20 +01:00
446fcaad3d build(deps): Update if-watch requirement from 0.3.0 to 1.0.0 (#2431)
Updates the requirements on [if-watch](https://github.com/dvc94ch/if-watch) to permit the latest version.
- [Release notes](https://github.com/dvc94ch/if-watch/releases)
- [Commits](https://github.com/dvc94ch/if-watch/commits)

---
updated-dependencies:
- dependency-name: if-watch
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-01-13 17:30:31 +01:00
5617481e56 *: Add Serialize and Deserialize to PeerId gossipsub MessageId and kad Key (#2408)
Co-authored-by: Max Inden <mail@max-inden.de>
2022-01-11 21:38:51 +01:00
71a54d8227 protocols/kad: Implement Error and Clone for error types (#2414) 2022-01-07 12:54:01 +11:00
3749dd56f1 protocols/gossipsub: Fix elided lifetime on gossipsub config builder (#2409)
Co-authored-by: Max Inden <mail@max-inden.de>
2021-12-30 20:23:41 +01:00
b4468d7500 protocols/kad: Derive Clone for KademliaEvent (#2411) 2021-12-30 19:54:12 +01:00
41826adb48 build(deps): Update open-metrics-client requirement (#2412)
Updates the requirements on [open-metrics-client](https://github.com/mxinden/rust-open-metrics-client) to permit the latest version.
- [Release notes](https://github.com/mxinden/rust-open-metrics-client/releases)
- [Changelog](https://github.com/mxinden/rust-open-metrics-client/blob/master/CHANGELOG.md)
- [Commits](https://github.com/mxinden/rust-open-metrics-client/compare/v0.13.0...v0.14.0)

---
updated-dependencies:
- dependency-name: open-metrics-client
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Max Inden <mail@max-inden.de>
2021-12-30 15:50:00 +01:00
df2e5a591e protocols/mdns: Support multiple network interfaces (#2383)
Handling multiple interfaces in mdns. The socket logic was moved into an
instance while the mdns behaviour watches for interface changes and creates new
instances with a dedicated send/recv socket.

Co-authored-by: Max Inden <mail@max-inden.de>
2021-12-29 19:02:20 +01:00
23f6b00b66 protocols/rendezvous: Fix wasm32 compatibility (#2401)
Fixes #2399.
2021-12-24 09:13:36 +11:00
5435539d05 protocols/gossipsub/src/config: Document peer exchange not supported (#2397) 2021-12-22 11:55:23 +01:00
17861d9cac add performance metrics to gossipsub (#2346)
* add performance metrics to gossipsub

* add changelog entry

* Re-export open-client-metrics crate

* Added some extra metrics

* More metrics

* Additional metrics

* Correct topic encoding

* More manual encoding of metric labels

* Clean up metric labelling

* Improve heartbeat duration buckets

* Remove re-export

Co-authored-by: Age Manning <Age@AgeManning.com>
2021-12-22 09:31:19 +11:00
379001a1d0 protocols/gossipsub: Improve bandwidth (#2327)
This PR adds some bandwidth improvements to gossipsub.

After a bit of inspection on live networks a number of improvements have been
made that can help reduce unnecessary bandwidth on gossipsub networks. This PR
introduces the following:

- A 1:1 tracking of all in-flight IWANT requests. This not only ensures that all
  IWANT requests are answered and peers penalized accordingly, but gossipsub
  will no no longer create multiple IWANT requests for multiple peers.
  Previously, gossipsub sampled the in-flight IWANT requests in order to
  penalize peers for not responding with a high probability that we would detect
  non-responsive nodes. Futher, it was possible to re-request IWANT messages
  that are already being requested causing added duplication in messages and
  wasted unnecessary IWANT control messages. This PR shifts this logic to only
  request message ids that we are not currently requesting from peers.

- Triangle routing naturally gives rise to unnecessary duplicates. Consider a
  mesh of 4 peers that are interconnected. Peer 1 sends a new message to 2,3,4.
  2 propagates to 3,4 and 3 propagates to 2,4 and 4 propagates to 2,3. In this
  case 3 has received the message 3 times. If we keep track of peers that send
  us messages, when publishing or forwarding we no longer send to peers that
  have sent us a duplicate, we can eliminate one of the sends in the scenario
  above. This only occurs when message validation is async however. This PR adds
  this logic to remove some elements of triangle-routing duplicates.

Co-authored-by: Divma <26765164+divagant-martian@users.noreply.github.com>
Co-authored-by: Max Inden <mail@max-inden.de>
Co-authored-by: Diva M <divma@protonmail.com>
2021-12-21 12:09:15 +01:00
e15dad5f45 build(deps): Update if-watch requirement from 0.2.0 to 0.3.0 (#2387)
Updates the requirements on [if-watch](https://github.com/dvc94ch/if-watch) to permit the latest version.
- [Release notes](https://github.com/dvc94ch/if-watch/releases)
- [Commits](https://github.com/dvc94ch/if-watch/commits)

---
updated-dependencies:
- dependency-name: if-watch
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Max Inden <mail@max-inden.de>
2021-12-19 15:48:19 +01:00
3d9ff58ff2 build(deps): Update sha2 requirement from 0.9.1 to 0.10.0 (#2371)
Updates the requirements on [sha2](https://github.com/RustCrypto/hashes) to permit the latest version.
- [Release notes](https://github.com/RustCrypto/hashes/releases)
- [Commits](https://github.com/RustCrypto/hashes/compare/streebog-v0.9.1...sha2-v0.10.0)

---
updated-dependencies:
- dependency-name: sha2
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-12-08 15:07:29 +01:00
75ae7b0461 protocols/floodsub: Propagate messages only to target peers (#2360)
Propagate messages only to the target peers and not all connected peers.

Co-authored-by: Victor Ermolaev <victorermolaev@gmail.com>
Co-authored-by: Max Inden <mail@max-inden.de>
2021-12-06 17:08:29 +01:00
4401ffa8b3 protocols/mdns/: Generate peer expiry and fix IPv6 support (#2359)
Co-authored-by: Victor Ermolaev <victorermolaev@gmail.com>
Co-authored-by: Max Inden <mail@max-inden.de>
2021-12-06 16:52:31 +01:00
2d61fe296f *: Fix clippy errors from upgrade to Rust 1.57 (#2365)
* core: Mark "unused" field with "_"

We need to keep this marker type to ensure that the type continues
to be required to be pinned.

* tranports/noise: Derive `Default` for `Config`

`false` is the default for `bool`, we can derive this.

* protocols/request-response: Remove unused fields

These are already included the `RequestResponseMessage::Request`
variant.

* *: Allow clippy's large-enum-variant lint

Tackling these suggestions would require performance measurement
which we don't want to do at this stage.

Co-authored-by: Max Inden <mail@max-inden.de>
2021-12-06 16:13:42 +01:00
2370b5ef74 build(deps): Update lru requirement from 0.6 to 0.7 (#2364)
Updates the requirements on [lru](https://github.com/jeromefroe/lru-rs) to permit the latest version.
- [Release notes](https://github.com/jeromefroe/lru-rs/releases)
- [Changelog](https://github.com/jeromefroe/lru-rs/blob/master/CHANGELOG.md)
- [Commits](https://github.com/jeromefroe/lru-rs/compare/0.6.0...0.7.0)

---
updated-dependencies:
- dependency-name: lru
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Max Inden <mail@max-inden.de>
2021-11-29 19:15:20 +01:00
29e91c7338 protocols/request-response: Handle address change on connection (#2362) 2021-11-29 18:59:44 +01:00
16ce66272a protocols/request-response: Remove unused crate lru (#2358) 2021-11-26 18:08:16 +01:00
a7ed1d6b6e *: Migrate to Rust 2021 edition (#2339)
Co-authored-by: Max Inden <mail@max-inden.de>
2021-11-26 17:34:58 +01:00
fd417517ca swarm/: Patch reporting on banned peer connections (#2350)
Don't report events of a connection to the `NetworkBehaviour`, if connection has
been established while the remote peer was banned. Among other guarantees this
upholds that `NetworkBehaviour::inject_event` is never called without a previous
`NetworkBehaviour::inject_connection_established` for said connection.

Co-authored-by: Max Inden <mail@max-inden.de>
2021-11-26 16:48:12 +01:00
f0000d56cd protocols/mdns: Use a random alphanumeric string for peer name (#2311)
With https://github.com/libp2p/specs/pull/368 the definition of the _peer name_
changed in the mDNS specification.

> peer-name is the case-insensitive unique identifier of the peer, and is less
> than 64 characters.
>
> As the this field doesn't carry any meaning, it is sufficient to ensure the
> uniqueness of this identifier. Peers SHOULD generate a random, lower-case
> alphanumeric string of least 32 characters in length when booting up their
> node. Peers SHOULD NOT use their Peer ID here because a future Peer ID could
> exceed the DNS label limit of 63 characters.

https://github.com/libp2p/specs/blob/master/discovery/mdns.md

This commit adjusts `libp2p-mdns` accordingly.

Also see https://github.com/libp2p/go-libp2p/pull/1222 for the corresponding
change on the Golang side.

Co-authored-by: Max Inden <mail@max-inden.de>
2021-11-25 20:15:00 +01:00
4d688329a3 build(deps): Update open-metrics-client requirement from 0.12.0 to 0.13.0 (#2355)
* build(deps): Update open-metrics-client requirement

Updates the requirements on [open-metrics-client](https://github.com/mxinden/rust-open-metrics-client) to permit the latest version.
- [Release notes](https://github.com/mxinden/rust-open-metrics-client/releases)
- [Changelog](https://github.com/mxinden/rust-open-metrics-client/blob/master/CHANGELOG.md)
- [Commits](https://github.com/mxinden/rust-open-metrics-client/compare/v0.12.0...v0.13.0)

---
updated-dependencies:
- dependency-name: open-metrics-client
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Max Inden <mail@max-inden.de>
2021-11-24 17:26:03 +01:00
4bd44c812a *: Prepare v0.41.0 (#2342) 2021-11-16 16:39:42 +01:00
2066a192ad protocols/gossipsub: Add mesh metrics (#2316)
Enable instrumenting mesh through metrics and add gossipsub to
misc/metrics.

Co-authored-by: Max Inden <mail@max-inden.de>
2021-11-16 14:59:39 +01:00
c4f7877853 protocols/identify: Check multiaddr has valid peer id component prior to caching (#2338)
Check multiaddr has valid peer id component or none at all. We don't want to
cache a multiaddr with a purposely wrong multiaddr. e.g. something that ends
with .../p2p/some-other-peer. While this should fail to dial because we [check
this before
dialing](https://github.com/libp2p/rust-libp2p/blob/master/core/src/connection/pool/concurrent_dial.rs#L144),
it's better to not cache this in the first place.
2021-11-16 13:05:47 +01:00
220f84a97f swarm/: Enable advanced dialing requests (#2317)
Enable advanced dialing requests both on `Swarm` and via
`NetworkBehaviourAction`. Users can now trigger a dial with a specific
set of addresses, optionally extended via
`NetworkBehaviour::addresses_of_peer`. In addition the whole process is
now modelled in a type safe way via the builder pattern.

Example of a `NetworkBehaviour` requesting a dial to a specific peer
with a set of addresses additionally extended through
`NetworkBehaviour::addresses_of_peer`:

```rust
NetworkBehaviourAction::Dial {
    opts: DialOpts::peer_id(peer_id)
              .condition(PeerCondition::Always)
              .addresses(addresses)
              .extend_addresses_through_behaviour()
              .build(),
    handler,
}
```

Example of a user requesting a dial to an unknown peer with a single
address via `Swarm`:

```rust
swarm1.dial(
    DialOpts::unknown_peer_id()
        .address(addr2.clone())
        .build()
)
```
2021-11-15 14:17:23 +01:00
82730f8a92 protocols/rendezvous/tests/harness: Use module name instead of mod.rs (#2335)
To be consistent with the rest of the codebase, use harness.rs instead
of mod.rs.

See also https://github.com/libp2p/rust-libp2p/pull/1400
2021-11-13 22:53:03 +01:00
8b68026bb0 protocols/gossipsub: Update topic_peers (#2325)
Co-authored-by: Max Inden <mail@max-inden.de>
2021-11-04 00:21:51 +01:00
012287ad1e Merge branch 'libp2p/v0.40' into master (#2324)
* *: Prepare v0.40.0 release (#2323)

* Cargo.toml: Remove rc suffix
2021-11-02 20:40:48 +01:00
7c2253d89d protocols/kad: Populate the key field to fix go-libp2p interop (#2309)
populate the `key` field when converting `kadrequestmsg::putvalue` to
`proto::message`.

Co-authored-by: Max Inden <mail@max-inden.de>
2021-10-30 16:30:17 +02:00