From 1cb86200344b823ad08eb7a2f1e1b1666632fda3 Mon Sep 17 00:00:00 2001 From: Eric Tu Date: Tue, 10 Dec 2019 15:03:13 -0500 Subject: [PATCH 1/3] add Ping behaviour --- node/ferret-libp2p/src/behaviour.rs | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/node/ferret-libp2p/src/behaviour.rs b/node/ferret-libp2p/src/behaviour.rs index 0ad2c81e69c0..148f7ecb86fb 100644 --- a/node/ferret-libp2p/src/behaviour.rs +++ b/node/ferret-libp2p/src/behaviour.rs @@ -3,6 +3,7 @@ use libp2p::core::identity::Keypair; use libp2p::core::PeerId; use libp2p::gossipsub::{Gossipsub, GossipsubConfig, GossipsubEvent, Topic, TopicHash}; use libp2p::mdns::{Mdns, MdnsEvent}; +use libp2p::ping::{Ping, PingEvent}; use libp2p::swarm::{NetworkBehaviourAction, NetworkBehaviourEventProcess}; use libp2p::tokio_io::{AsyncRead, AsyncWrite}; use libp2p::NetworkBehaviour; @@ -12,6 +13,7 @@ use libp2p::NetworkBehaviour; pub struct MyBehaviour { pub gossipsub: Gossipsub, pub mdns: Mdns, + pub ping: Ping, #[behaviour(ignore)] events: Vec, } @@ -61,6 +63,13 @@ impl NetworkBehaviourEventProcess NetworkBehaviourEventProcess + for MyBehaviour +{ + fn inject_event(&mut self, event: PingEvent) { + } +} + impl MyBehaviour { /// Consumes the events list when polled. fn poll( @@ -80,6 +89,7 @@ impl MyBehaviour { MyBehaviour { gossipsub: Gossipsub::new(local_peer_id, gossipsub_config), mdns: Mdns::new().expect("Failed to create mDNS service"), + ping: Ping::default(), events: vec![], } } From d72bee5f57ac5af33400b7ffa8388e904936b84b Mon Sep 17 00:00:00 2001 From: Eric Tu Date: Tue, 10 Dec 2019 15:26:19 -0500 Subject: [PATCH 2/3] log ping events --- node/ferret-libp2p/src/behaviour.rs | 48 +++++++++++++++++++++++++++-- node/ferret-libp2p/src/service.rs | 4 +-- 2 files changed, 48 insertions(+), 4 deletions(-) diff --git a/node/ferret-libp2p/src/behaviour.rs b/node/ferret-libp2p/src/behaviour.rs index 148f7ecb86fb..d6eac8c2d1a2 100644 --- a/node/ferret-libp2p/src/behaviour.rs +++ b/node/ferret-libp2p/src/behaviour.rs @@ -3,10 +3,15 @@ use libp2p::core::identity::Keypair; use libp2p::core::PeerId; use libp2p::gossipsub::{Gossipsub, GossipsubConfig, GossipsubEvent, Topic, TopicHash}; use libp2p::mdns::{Mdns, MdnsEvent}; -use libp2p::ping::{Ping, PingEvent}; +use libp2p::ping::{ + handler::{PingFailure, PingSuccess}, + Ping, PingEvent, +}; use libp2p::swarm::{NetworkBehaviourAction, NetworkBehaviourEventProcess}; use libp2p::tokio_io::{AsyncRead, AsyncWrite}; use libp2p::NetworkBehaviour; +use slog::debug; +use slog::Logger; #[derive(NetworkBehaviour)] #[behaviour(out_event = "MyBehaviourEvent", poll_method = "poll")] @@ -16,6 +21,8 @@ pub struct MyBehaviour { pub ping: Ping, #[behaviour(ignore)] events: Vec, + #[behaviour(ignore)] + log: Logger, } pub enum MyBehaviourEvent { @@ -67,6 +74,42 @@ impl NetworkBehaviourEventProcess for MyBehaviour { fn inject_event(&mut self, event: PingEvent) { + match event { + PingEvent { + peer, + result: Result::Ok(PingSuccess::Ping { rtt }), + } => { + debug!( + self.log, + "PingSuccess::Ping rtt to {} is {} ms", + peer.to_base58(), + rtt.as_millis() + ); + } + PingEvent { + peer, + result: Result::Ok(PingSuccess::Pong), + } => { + debug!(self.log, "PingSuccess::Pong from {}", peer.to_base58()); + } + PingEvent { + peer, + result: Result::Err(PingFailure::Timeout), + } => { + debug!(self.log, "PingFailure::Timeout {}", peer.to_base58()); + } + PingEvent { + peer, + result: Result::Err(PingFailure::Other { error }), + } => { + debug!( + self.log, + "PingFailure::Other {}: {}", + peer.to_base58(), + error + ); + } + } } } @@ -83,13 +126,14 @@ impl MyBehaviour { } impl MyBehaviour { - pub fn new(local_key: &Keypair) -> Self { + pub fn new(local_key: &Keypair, log: Logger) -> Self { let local_peer_id = local_key.public().into_peer_id(); let gossipsub_config = GossipsubConfig::default(); MyBehaviour { gossipsub: Gossipsub::new(local_peer_id, gossipsub_config), mdns: Mdns::new().expect("Failed to create mDNS service"), ping: Ping::default(), + log, events: vec![], } } diff --git a/node/ferret-libp2p/src/service.rs b/node/ferret-libp2p/src/service.rs index 4e8aeb2919a7..19fd442ad10e 100644 --- a/node/ferret-libp2p/src/service.rs +++ b/node/ferret-libp2p/src/service.rs @@ -27,7 +27,7 @@ impl Libp2pService { let transport = build_transport(local_key.clone()); let mut swarm = { - let be = MyBehaviour::new(&local_key); + let be = MyBehaviour::new(&local_key, log.clone()); Swarm::new(transport, be, local_peer_id) }; @@ -102,7 +102,7 @@ pub enum NetworkEvent { }, } -fn build_transport(local_key: identity::Keypair) -> Boxed<(PeerId, StreamMuxerBox), Error> { +pub fn build_transport(local_key: identity::Keypair) -> Boxed<(PeerId, StreamMuxerBox), Error> { let transport = libp2p::tcp::TcpConfig::new().nodelay(true); let transport = libp2p::dns::DnsConfig::new(transport); From 72321395eaa9405a0edafee40e60b2a2bf64f3b1 Mon Sep 17 00:00:00 2001 From: Eric Tu Date: Tue, 10 Dec 2019 16:03:34 -0500 Subject: [PATCH 3/3] suggestions --- node/ferret-libp2p/src/behaviour.rs | 39 +++++++++++------------------ node/ferret-libp2p/src/service.rs | 2 +- 2 files changed, 16 insertions(+), 25 deletions(-) diff --git a/node/ferret-libp2p/src/behaviour.rs b/node/ferret-libp2p/src/behaviour.rs index d6eac8c2d1a2..73ad16db9a8e 100644 --- a/node/ferret-libp2p/src/behaviour.rs +++ b/node/ferret-libp2p/src/behaviour.rs @@ -10,8 +10,7 @@ use libp2p::ping::{ use libp2p::swarm::{NetworkBehaviourAction, NetworkBehaviourEventProcess}; use libp2p::tokio_io::{AsyncRead, AsyncWrite}; use libp2p::NetworkBehaviour; -use slog::debug; -use slog::Logger; +use slog::{debug, Logger}; #[derive(NetworkBehaviour)] #[behaviour(out_event = "MyBehaviourEvent", poll_method = "poll")] @@ -74,38 +73,30 @@ impl NetworkBehaviourEventProcess for MyBehaviour { fn inject_event(&mut self, event: PingEvent) { - match event { - PingEvent { - peer, - result: Result::Ok(PingSuccess::Ping { rtt }), - } => { + match event.result { + Result::Ok(PingSuccess::Ping { rtt }) => { debug!( self.log, "PingSuccess::Ping rtt to {} is {} ms", - peer.to_base58(), + event.peer.to_base58(), rtt.as_millis() ); } - PingEvent { - peer, - result: Result::Ok(PingSuccess::Pong), - } => { - debug!(self.log, "PingSuccess::Pong from {}", peer.to_base58()); + Result::Ok(PingSuccess::Pong) => { + debug!( + self.log, + "PingSuccess::Pong from {}", + event.peer.to_base58() + ); } - PingEvent { - peer, - result: Result::Err(PingFailure::Timeout), - } => { - debug!(self.log, "PingFailure::Timeout {}", peer.to_base58()); + Result::Err(PingFailure::Timeout) => { + debug!(self.log, "PingFailure::Timeout {}", event.peer.to_base58()); } - PingEvent { - peer, - result: Result::Err(PingFailure::Other { error }), - } => { + Result::Err(PingFailure::Other { error }) => { debug!( self.log, "PingFailure::Other {}: {}", - peer.to_base58(), + event.peer.to_base58(), error ); } @@ -126,7 +117,7 @@ impl MyBehaviour { } impl MyBehaviour { - pub fn new(local_key: &Keypair, log: Logger) -> Self { + pub fn new(log: Logger, local_key: &Keypair) -> Self { let local_peer_id = local_key.public().into_peer_id(); let gossipsub_config = GossipsubConfig::default(); MyBehaviour { diff --git a/node/ferret-libp2p/src/service.rs b/node/ferret-libp2p/src/service.rs index 19fd442ad10e..b45b467dffd1 100644 --- a/node/ferret-libp2p/src/service.rs +++ b/node/ferret-libp2p/src/service.rs @@ -27,7 +27,7 @@ impl Libp2pService { let transport = build_transport(local_key.clone()); let mut swarm = { - let be = MyBehaviour::new(&local_key, log.clone()); + let be = MyBehaviour::new(log.clone(), &local_key); Swarm::new(transport, be, local_peer_id) };