Documentation ¶
Index ¶
- Constants
- Variables
- func DisconnectAndWait(source Server, target peer.ID, leaveTimeout time.Duration) error
- func GenerateAndEncodeLibp2pKey() (crypto.PrivKey, []byte, error)
- func GenerateTestLibp2pKey(t *testing.T) (crypto.PrivKey, string)
- func JoinAndWait(t *testing.T, source, destination Server, connectTimeout time.Duration, ...) error
- func JoinAndWaitMultiple(t *testing.T, timeout time.Duration, servers ...Server) error
- func MeshJoin(t *testing.T, servers ...*DefaultServer) []error
- func ParseLibp2pKey(key []byte) (crypto.PrivKey, error)
- func ReadLibp2pKey(manager secrets.SecretsManager) (crypto.PrivKey, error)
- func WaitUntilPeerConnectsTo(ctx context.Context, srv Server, ids ...peer.ID) (bool, error)
- func WaitUntilPeerDisconnectsFrom(ctx context.Context, srv Server, ids ...peer.ID) (bool, error)
- func WaitUntilRoutingTableToBeFilled(ctx context.Context, srv *DefaultServer, size int) (bool, error)
- type Config
- type ConnectionInfo
- func (ci *ConnectionInfo) GetInboundConnCount() int64
- func (ci *ConnectionInfo) GetOutboundConnCount() int64
- func (ci *ConnectionInfo) GetPendingInboundConnCount() int64
- func (ci *ConnectionInfo) GetPendingOutboundConnCount() int64
- func (ci *ConnectionInfo) HasFreeConnectionSlot(direction network.Direction) bool
- func (ci *ConnectionInfo) HasFreeInboundConn() bool
- func (ci *ConnectionInfo) HasFreeOutboundConn() bool
- func (ci *ConnectionInfo) UpdateConnCountByDirection(delta int64, direction network.Direction)
- func (ci *ConnectionInfo) UpdatePendingConnCountByDirection(delta int64, direction network.Direction)
- type CreateServerParams
- type DefaultServer
- func (s *DefaultServer) AddPeer(id peer.ID, direction network.Direction)
- func (s *DefaultServer) AddToPeerStore(peerInfo *peer.AddrInfo)
- func (s *DefaultServer) AddrInfo() *peer.AddrInfo
- func (s *DefaultServer) Close() error
- func (s *DefaultServer) Connect(peerInfo peer.AddrInfo) error
- func (s *DefaultServer) DisconnectFromPeer(peerID peer.ID, reason string)
- func (s *DefaultServer) EmitEvent(ctx context.Context, event *peerEvent.PeerEvent)
- func (s *DefaultServer) ForgetPeer(peer peer.ID, reason string)
- func (s *DefaultServer) GetMetrics() *Metrics
- func (s *DefaultServer) GetPeerDistance(peerID peer.ID) *big.Int
- func (s *DefaultServer) GetPeerInfo(peerID peer.ID) *peer.AddrInfo
- func (s *DefaultServer) GetProtocols(peerID peer.ID) ([]string, error)
- func (s *DefaultServer) GetRandomBootnode() *peer.AddrInfo
- func (s *DefaultServer) GetRandomPeer() *peer.ID
- func (s *DefaultServer) GetTracer() telemetry.Tracer
- func (s *DefaultServer) HasFreeConnectionSlot(direction network.Direction) bool
- func (s *DefaultServer) HasPeer(peerID peer.ID) bool
- func (s *DefaultServer) IsBootnode(peerID peer.ID) bool
- func (s *DefaultServer) IsStaticPeer(peerID peer.ID) bool
- func (s *DefaultServer) JoinPeer(rawPeerMultiaddr string, static bool) error
- func (s *DefaultServer) NewDiscoveryClient(ctx context.Context, peerID peer.ID) (client.DiscoveryClient, error)
- func (s *DefaultServer) NewIdentityClient(ctx context.Context, peerID peer.ID) (client.IdentityClient, error)
- func (s *DefaultServer) NewProtoConnection(ctx context.Context, protocol string, peerID peer.ID) (*rawGrpc.ClientConn, error)
- func (s *DefaultServer) NewStream(ctx context.Context, proto string, id peer.ID) (network.Stream, error)
- func (s *DefaultServer) NewTopic(protoID string, obj proto.Message) (Topic, error)
- func (s *DefaultServer) PeerCount() int64
- func (s *DefaultServer) Peers() []*PeerConnInfo
- func (s *DefaultServer) RegisterProtocol(id string, p Protocol)
- func (s *DefaultServer) RemoveFromPeerStore(peerID peer.ID)
- func (s *DefaultServer) Start() error
- func (s *DefaultServer) SubscribeFn(ctx context.Context, handler func(evnt *peerEvent.PeerEvent)) error
- func (s *DefaultServer) UpdatePendingConnCount(delta int64, direction network.Direction)
- type Metrics
- func (m *Metrics) GetGrpcMetrics() client.Metrics
- func (m *Metrics) NewProtoConnectionCountInc()
- func (m *Metrics) NewProtoConnectionErrorCountInc()
- func (m *Metrics) NewProtoConnectionSecondObserve(v float64)
- func (m *Metrics) SetInboundConnectionsCount(v float64)
- func (m *Metrics) SetOutboundConnectionsCount(v float64)
- func (m *Metrics) SetPendingInboundConnectionsCount(v float64)
- func (m *Metrics) SetPendingOutboundConnectionsCount(v float64)
- func (m *Metrics) SetTotalPeerCount(v float64)
- type Network
- type NonetworkServer
- func (s *NonetworkServer) AddrInfo() *peer.AddrInfo
- func (s *NonetworkServer) Close() error
- func (s *NonetworkServer) DisconnectFromPeer(peer peer.ID, reason string)
- func (s *NonetworkServer) ForgetPeer(peer peer.ID, reason string)
- func (s *NonetworkServer) GetMetrics() *Metrics
- func (s *NonetworkServer) GetPeerInfo(peerID peer.ID) *peer.AddrInfo
- func (s *NonetworkServer) GetProtocols(peerID peer.ID) ([]string, error)
- func (s *NonetworkServer) HasPeer(peerID peer.ID) bool
- func (s *NonetworkServer) IsConnected(peerID peer.ID) bool
- func (s *NonetworkServer) IsStaticPeer(peerID peer.ID) bool
- func (s *NonetworkServer) JoinPeer(rawPeerMultiaddr string, static bool) error
- func (s *NonetworkServer) NewProtoConnection(ctx context.Context, protocol string, peerID peer.ID) (*rawGrpc.ClientConn, error)
- func (s *NonetworkServer) NewTopic(protoID string, obj proto.Message) (Topic, error)
- func (s *NonetworkServer) PeerCount() int64
- func (s *NonetworkServer) Peers() []*PeerConnInfo
- func (s *NonetworkServer) RegisterProtocol(string, Protocol)
- func (s *NonetworkServer) Start() error
- func (s *NonetworkServer) SubscribeFn(context.Context, func(evnt *event.PeerEvent)) error
- type NonetworkTopic
- type PeerConnInfo
- type Protocol
- type Server
- type Topic
Constants ¶
const ( DefaultDialRatio = 0.2 DefaultLibp2pPort int = 1478 MinimumBootNodes int = 1 DefaultDialTimeout = 30 * time.Second DefaultBackgroundTaskSleep = 10 * time.Second )
const (
DefaultLeaveTimeout = 30 * time.Second
)
Variables ¶
var ( ErrNoBootnodes = errors.New("no bootnodes specified") ErrMinBootnodes = errors.New("minimum 1 bootnode is required") )
var ( // Anything below 35s is prone to false timeouts, as seen from empirical test data // Github action runners are very slow, so we need to increase the timeout DefaultJoinTimeout = 100 * time.Second DefaultBufferTimeout = DefaultJoinTimeout + time.Second*30 MaxConnectionTimeout = 5 * time.Minute )
Functions ¶
func DisconnectAndWait ¶ added in v1.2.1
func GenerateAndEncodeLibp2pKey ¶
GenerateAndEncodeLibp2pKey generates a new networking private key, and encodes it into hex
func JoinAndWait ¶
func JoinAndWait( t *testing.T, source, destination Server, connectTimeout time.Duration, joinTimeout time.Duration, static bool, ) error
JoinAndWait is a helper method for joining a destination server and waiting for the connection to be successful (destination node is a peer of source)
func JoinAndWaitMultiple ¶ added in v1.2.1
JoinAndWait is a helper method to make multiple servers connect to corresponding peer
func MeshJoin ¶
func MeshJoin(t *testing.T, servers ...*DefaultServer) []error
MeshJoin is a helper method for joining all the passed in servers into a mesh
func ParseLibp2pKey ¶
ParseLibp2pKey converts a byte array to a private key
func ReadLibp2pKey ¶
func ReadLibp2pKey(manager secrets.SecretsManager) (crypto.PrivKey, error)
ReadLibp2pKey reads the private networking key from the secrets manager
func WaitUntilPeerConnectsTo ¶
func WaitUntilRoutingTableToBeFilled ¶
func WaitUntilRoutingTableToBeFilled(ctx context.Context, srv *DefaultServer, size int) (bool, error)
WaitUntilRoutingTableToBeAdded check routing table has given ids and retry by timeout
Types ¶
type Config ¶
type Config struct { DiscoverIngoreCIDR []*net.IPNet // list of CIDR ranges to ignore when discovering peers NoDiscover bool // flag indicating if the discovery mechanism should be turned on Addr *net.TCPAddr // the base address NatAddr *net.TCPAddr // the NAT address DNS multiaddr.Multiaddr // the DNS address DataDir string // the base data directory for the client MaxPeers int64 // the maximum number of peer connections MaxInboundPeers int64 // the maximum number of inbound peer connections MaxOutboundPeers int64 // the maximum number of outbound peer connections Chain *chain.Chain // the reference to the chain configuration SecretsManager secrets.SecretsManager // the secrets manager used for key storage Metrics *Metrics // the metrics reporting reference }
Config details the params for the base networking server
func DefaultConfig ¶
func DefaultConfig() *Config
type ConnectionInfo ¶
type ConnectionInfo struct {
// contains filtered or unexported fields
}
ConnectionInfo keeps track of current connection information for the networking server
func NewBlankConnectionInfo ¶
func NewBlankConnectionInfo( maxInboundConnCount int64, maxOutboundConnCount int64, ) *ConnectionInfo
NewBlankConnectionInfo returns a cleared ConnectionInfo instance
func (*ConnectionInfo) GetInboundConnCount ¶
func (ci *ConnectionInfo) GetInboundConnCount() int64
GetInboundConnCount returns the number of active inbound connections [Thread safe]
func (*ConnectionInfo) GetOutboundConnCount ¶
func (ci *ConnectionInfo) GetOutboundConnCount() int64
GetOutboundConnCount returns the number of active outbound connections [Thread safe]
func (*ConnectionInfo) GetPendingInboundConnCount ¶
func (ci *ConnectionInfo) GetPendingInboundConnCount() int64
GetPendingInboundConnCount returns the number of pending inbound connections [Thread safe]
func (*ConnectionInfo) GetPendingOutboundConnCount ¶
func (ci *ConnectionInfo) GetPendingOutboundConnCount() int64
GetPendingOutboundConnCount returns the number of pending outbound connections [Thread safe]
func (*ConnectionInfo) HasFreeConnectionSlot ¶
func (ci *ConnectionInfo) HasFreeConnectionSlot(direction network.Direction) bool
HasFreeConnectionSlot checks if there is a free connection slot in the specified direction [Thread safe]
func (*ConnectionInfo) HasFreeInboundConn ¶
func (ci *ConnectionInfo) HasFreeInboundConn() bool
HasFreeInboundConn checks if there are any open inbound connection slots. It takes into account the number of current (active) inbound connections and the number of pending inbound connections [Thread safe]
func (*ConnectionInfo) HasFreeOutboundConn ¶
func (ci *ConnectionInfo) HasFreeOutboundConn() bool
HasFreeOutboundConn checks if there are any open outbound connection slots. It takes into account the number of current (active) outbound connections and the number of pending outbound connections [Thread safe]
func (*ConnectionInfo) UpdateConnCountByDirection ¶
func (ci *ConnectionInfo) UpdateConnCountByDirection( delta int64, direction network.Direction, )
UpdateConnCountByDirection updates the connection count by delta in the specified direction [Thread safe]
func (*ConnectionInfo) UpdatePendingConnCountByDirection ¶
func (ci *ConnectionInfo) UpdatePendingConnCountByDirection( delta int64, direction network.Direction, )
UpdatePendingConnCountByDirection updates the pending connection count by delta in the specified direction [Thread safe]
type CreateServerParams ¶
type CreateServerParams struct { ConfigCallback func(c *Config) // Additional logic that needs to be executed on the configuration ServerCallback func(server *DefaultServer) // Additional logic that needs to be executed on the server before starting Logger hclog.Logger }
type DefaultServer ¶ added in v1.2.2
type DefaultServer struct {
// contains filtered or unexported fields
}
func CreateServer ¶
func CreateServer(params *CreateServerParams) (*DefaultServer, error)
func (*DefaultServer) AddPeer ¶ added in v1.2.2
func (s *DefaultServer) AddPeer(id peer.ID, direction network.Direction)
AddPeer adds a new peer to the networking server's peer list, and updates relevant counters and metrics
func (*DefaultServer) AddToPeerStore ¶ added in v1.2.2
func (s *DefaultServer) AddToPeerStore(peerInfo *peer.AddrInfo)
AddToPeerStore adds peer information to the node's peer store, static node and bootnode addresses are added with permanent TTL
func (*DefaultServer) AddrInfo ¶ added in v1.2.2
func (s *DefaultServer) AddrInfo() *peer.AddrInfo
func (*DefaultServer) Close ¶ added in v1.2.2
func (s *DefaultServer) Close() error
func (*DefaultServer) Connect ¶ added in v1.2.4
func (s *DefaultServer) Connect(peerInfo peer.AddrInfo) error
func (*DefaultServer) DisconnectFromPeer ¶ added in v1.2.2
func (s *DefaultServer) DisconnectFromPeer(peerID peer.ID, reason string)
DisconnectFromPeer disconnects the networking server from the specified peer
func (*DefaultServer) EmitEvent ¶ added in v1.2.2
func (s *DefaultServer) EmitEvent(ctx context.Context, event *peerEvent.PeerEvent)
EmitEvent emits a specified event to the networking server's event bus
func (*DefaultServer) ForgetPeer ¶ added in v1.2.2
func (s *DefaultServer) ForgetPeer(peer peer.ID, reason string)
ForgetPeer disconnects, remove and forget peer to prevent broadcast discovery to other peers
Cauction: take care of using this to ignore peer from store, which may break peer discovery
func (*DefaultServer) GetMetrics ¶ added in v1.2.4
func (s *DefaultServer) GetMetrics() *Metrics
func (*DefaultServer) GetPeerDistance ¶ added in v1.2.2
func (s *DefaultServer) GetPeerDistance(peerID peer.ID) *big.Int
func (*DefaultServer) GetPeerInfo ¶ added in v1.2.2
func (s *DefaultServer) GetPeerInfo(peerID peer.ID) *peer.AddrInfo
GetPeerInfo fetches the information of a peer
func (*DefaultServer) GetProtocols ¶ added in v1.2.2
func (s *DefaultServer) GetProtocols(peerID peer.ID) ([]string, error)
GetProtocols fetches the list of node-supported protocols
func (*DefaultServer) GetRandomBootnode ¶ added in v1.2.2
func (s *DefaultServer) GetRandomBootnode() *peer.AddrInfo
GetRandomBootnode fetches a random bootnode that's currently NOT connected, if any
func (*DefaultServer) GetRandomPeer ¶ added in v1.2.2
func (s *DefaultServer) GetRandomPeer() *peer.ID
GetRandomPeer fetches a random peer from the peers list
func (*DefaultServer) GetTracer ¶ added in v1.2.4
func (s *DefaultServer) GetTracer() telemetry.Tracer
GetTracer returns the tracer instance
func (*DefaultServer) HasFreeConnectionSlot ¶ added in v1.2.2
func (s *DefaultServer) HasFreeConnectionSlot(direction network.Direction) bool
HasFreeConnectionSlot checks if there are free connection slots in the specified direction [Thread safe]
func (*DefaultServer) HasPeer ¶ added in v1.2.2
func (s *DefaultServer) HasPeer(peerID peer.ID) bool
hasPeer checks if the peer is present in the peers list [Thread safe]
func (*DefaultServer) IsBootnode ¶ added in v1.2.4
func (s *DefaultServer) IsBootnode(peerID peer.ID) bool
IsBootnode checks if the peer is a bootnode
func (*DefaultServer) IsStaticPeer ¶ added in v1.2.4
func (s *DefaultServer) IsStaticPeer(peerID peer.ID) bool
IsStaticPeer checks if the peer is a static peer
func (*DefaultServer) JoinPeer ¶ added in v1.2.2
func (s *DefaultServer) JoinPeer(rawPeerMultiaddr string, static bool) error
JoinPeer attempts to add a new peer to the networking server
func (*DefaultServer) NewDiscoveryClient ¶ added in v1.2.2
func (s *DefaultServer) NewDiscoveryClient(ctx context.Context, peerID peer.ID) (client.DiscoveryClient, error)
NewDiscoveryClient returns a new or existing discovery service client connection
func (*DefaultServer) NewIdentityClient ¶ added in v1.2.2
func (s *DefaultServer) NewIdentityClient(ctx context.Context, peerID peer.ID) (client.IdentityClient, error)
NewIdentityClient returns a new identity service client connection
func (*DefaultServer) NewProtoConnection ¶ added in v1.2.2
func (s *DefaultServer) NewProtoConnection( ctx context.Context, protocol string, peerID peer.ID, ) (*rawGrpc.ClientConn, error)
NewProtoConnection opens up a new stream on the set protocol to the peer, and returns a reference to the connection
func (*DefaultServer) PeerCount ¶ added in v1.2.2
func (s *DefaultServer) PeerCount() int64
PeerCount returns the number of connected peers [Thread safe]
func (*DefaultServer) Peers ¶ added in v1.2.2
func (s *DefaultServer) Peers() []*PeerConnInfo
Peers returns a copy of the networking server's peer connection info set. Only one (initial) connection (inbound OR outbound) per peer is contained [Thread safe]
func (*DefaultServer) RegisterProtocol ¶ added in v1.2.2
func (s *DefaultServer) RegisterProtocol(id string, p Protocol)
func (*DefaultServer) RemoveFromPeerStore ¶ added in v1.2.2
func (s *DefaultServer) RemoveFromPeerStore(peerID peer.ID)
RemoveFromPeerStore removes peer information from the node's peer store, ignoring static nodes and bootnodes
func (*DefaultServer) Start ¶ added in v1.2.2
func (s *DefaultServer) Start() error
Start starts the networking services
func (*DefaultServer) SubscribeFn ¶ added in v1.2.2
func (s *DefaultServer) SubscribeFn(ctx context.Context, handler func(evnt *peerEvent.PeerEvent)) error
SubscribeFn is a helper method to run subscription of PeerEvents
func (*DefaultServer) UpdatePendingConnCount ¶ added in v1.2.2
func (s *DefaultServer) UpdatePendingConnCount(delta int64, direction network.Direction)
UpdatePendingConnCount updates the pending connection count in the specified direction [Thread safe]
type Metrics ¶
type Metrics struct {
// contains filtered or unexported fields
}
Metrics represents the network metrics
func GetPrometheusMetrics ¶
GetPrometheusMetrics return the network metrics instance
func (*Metrics) GetGrpcMetrics ¶ added in v1.2.4
func (*Metrics) NewProtoConnectionCountInc ¶ added in v1.2.4
func (m *Metrics) NewProtoConnectionCountInc()
func (*Metrics) NewProtoConnectionErrorCountInc ¶ added in v1.2.4
func (m *Metrics) NewProtoConnectionErrorCountInc()
func (*Metrics) NewProtoConnectionSecondObserve ¶ added in v1.2.4
func (*Metrics) SetInboundConnectionsCount ¶ added in v1.2.2
func (*Metrics) SetOutboundConnectionsCount ¶ added in v1.2.2
func (*Metrics) SetPendingInboundConnectionsCount ¶ added in v1.2.2
func (*Metrics) SetPendingOutboundConnectionsCount ¶ added in v1.2.2
func (*Metrics) SetTotalPeerCount ¶ added in v1.2.2
type Network ¶ added in v1.2.2
type Network interface { // AddrInfo returns Network Info AddrInfo() *peer.AddrInfo // Peers returns current connected peers Peers() []*PeerConnInfo // PeerCount returns the number of connected peers PeerCount() int64 // GetPeerInfo returns the peer info for the given peer ID GetPeerInfo(peerID peer.ID) *peer.AddrInfo // JoinPeer joins a peer to the network JoinPeer(rawPeerMultiaddr string, static bool) error // HasPeer returns true if the peer is connected HasPeer(peerID peer.ID) bool // IsStaticPeer returns true if the peer is a static peer IsStaticPeer(peerID peer.ID) bool // DisconnectFromPeer disconnects the networking server from the specified peer DisconnectFromPeer(peer peer.ID, reason string) // ForgetPeer disconnects, remove and forget peer to prevent broadcast discovery to other peers ForgetPeer(peer peer.ID, reason string) // NewTopic Creates New Topic for gossip NewTopic(protoID string, obj proto.Message) (Topic, error) // SubscribeFn subscribe of peer event SubscribeFn(ctx context.Context, handler func(evnt *event.PeerEvent)) error // RegisterProtocol registers gRPC service RegisterProtocol(string, Protocol) // GetProtocols returns the list of protocols supported by the peer GetProtocols(peerID peer.ID) ([]string, error) // NewProtoConnection opens up a new client connect on the set protocol to the peer, // and returns a reference to the connection NewProtoConnection(ctx context.Context, protocol string, peerID peer.ID) (*rawGrpc.ClientConn, error) // **Metrics** // GetMetrics returns the metrics of the network GetMetrics() *Metrics }
type NonetworkServer ¶ added in v1.2.2
type NonetworkServer struct {
// contains filtered or unexported fields
}
NonetworkServer is a fake server that does nothing only used for testing or offline mode
func (*NonetworkServer) AddrInfo ¶ added in v1.2.2
func (s *NonetworkServer) AddrInfo() *peer.AddrInfo
func (*NonetworkServer) Close ¶ added in v1.2.2
func (s *NonetworkServer) Close() error
func (*NonetworkServer) DisconnectFromPeer ¶ added in v1.2.2
func (s *NonetworkServer) DisconnectFromPeer(peer peer.ID, reason string)
func (*NonetworkServer) ForgetPeer ¶ added in v1.2.2
func (s *NonetworkServer) ForgetPeer(peer peer.ID, reason string)
func (*NonetworkServer) GetMetrics ¶ added in v1.2.4
func (s *NonetworkServer) GetMetrics() *Metrics
func (*NonetworkServer) GetPeerInfo ¶ added in v1.2.2
func (s *NonetworkServer) GetPeerInfo(peerID peer.ID) *peer.AddrInfo
func (*NonetworkServer) GetProtocols ¶ added in v1.2.2
func (s *NonetworkServer) GetProtocols(peerID peer.ID) ([]string, error)
func (*NonetworkServer) HasPeer ¶ added in v1.2.2
func (s *NonetworkServer) HasPeer(peerID peer.ID) bool
func (*NonetworkServer) IsConnected ¶ added in v1.2.2
func (s *NonetworkServer) IsConnected(peerID peer.ID) bool
func (*NonetworkServer) IsStaticPeer ¶ added in v1.2.4
func (s *NonetworkServer) IsStaticPeer(peerID peer.ID) bool
func (*NonetworkServer) JoinPeer ¶ added in v1.2.2
func (s *NonetworkServer) JoinPeer(rawPeerMultiaddr string, static bool) error
func (*NonetworkServer) NewProtoConnection ¶ added in v1.2.2
func (s *NonetworkServer) NewProtoConnection( ctx context.Context, protocol string, peerID peer.ID, ) (*rawGrpc.ClientConn, error)
func (*NonetworkServer) PeerCount ¶ added in v1.2.2
func (s *NonetworkServer) PeerCount() int64
func (*NonetworkServer) Peers ¶ added in v1.2.2
func (s *NonetworkServer) Peers() []*PeerConnInfo
func (*NonetworkServer) RegisterProtocol ¶ added in v1.2.2
func (s *NonetworkServer) RegisterProtocol(string, Protocol)
func (*NonetworkServer) Start ¶ added in v1.2.2
func (s *NonetworkServer) Start() error
func (*NonetworkServer) SubscribeFn ¶ added in v1.2.4
type NonetworkTopic ¶ added in v1.2.2
type NonetworkTopic struct{}
NonetworkTopic is a fake topic that does nothing only used for testing or offline mode
func (*NonetworkTopic) Close ¶ added in v1.2.2
func (t *NonetworkTopic) Close() error
type PeerConnInfo ¶
PeerConnInfo holds the connection information about the peer