tendermint: github.com/tendermint/tendermint/p2p/pex Index | Files

package pex

import "github.com/tendermint/tendermint/p2p/pex"


Package Files

addrbook.go codec.go errors.go file.go known_address.go params.go pex_reactor.go


const (
    // PexChannel is a channel for PEX messages
    PexChannel = byte(0x00)

func RegisterMessages Uses

func RegisterMessages(cdc *amino.Codec)

type AddrBook Uses

type AddrBook interface {

    // Add our own addresses so we don't later add ourselves
    // Check if it is our address
    OurAddress(*p2p.NetAddress) bool


    // Add and remove an address
    AddAddress(addr *p2p.NetAddress, src *p2p.NetAddress) error

    // Check if the address is in the book
    HasAddress(*p2p.NetAddress) bool

    // Do we need more peers?
    NeedMoreAddrs() bool
    // Is Address Book Empty? Answer should not depend on being in your own
    // address book, or private peers
    Empty() bool

    // Pick an address to dial
    PickAddress(biasTowardsNewAddrs int) *p2p.NetAddress

    // Mark address

    IsGood(*p2p.NetAddress) bool

    // Send a selection of addresses to peers
    GetSelection() []*p2p.NetAddress
    // Send a selection of addresses with bias
    GetSelectionWithBias(biasTowardsNewAddrs int) []*p2p.NetAddress

    Size() int

    // Persist to disk

AddrBook is an address book used for tracking peers so we can gossip about them to others and select peers to dial. TODO: break this up?

func NewAddrBook Uses

func NewAddrBook(filePath string, routabilityStrict bool) AddrBook

NewAddrBook creates a new address book. Use Start to begin processing asynchronous address updates.

type ErrAddrBookInvalidAddr Uses

type ErrAddrBookInvalidAddr struct {
    Addr    *p2p.NetAddress
    AddrErr error

func (ErrAddrBookInvalidAddr) Error Uses

func (err ErrAddrBookInvalidAddr) Error() string

type ErrAddrBookNilAddr Uses

type ErrAddrBookNilAddr struct {
    Addr *p2p.NetAddress
    Src  *p2p.NetAddress

func (ErrAddrBookNilAddr) Error Uses

func (err ErrAddrBookNilAddr) Error() string

type ErrAddrBookNonRoutable Uses

type ErrAddrBookNonRoutable struct {
    Addr *p2p.NetAddress

func (ErrAddrBookNonRoutable) Error Uses

func (err ErrAddrBookNonRoutable) Error() string

type ErrAddrBookPrivate Uses

type ErrAddrBookPrivate struct {
    Addr *p2p.NetAddress

func (ErrAddrBookPrivate) Error Uses

func (err ErrAddrBookPrivate) Error() string

func (ErrAddrBookPrivate) PrivateAddr Uses

func (err ErrAddrBookPrivate) PrivateAddr() bool

type ErrAddrBookPrivateSrc Uses

type ErrAddrBookPrivateSrc struct {
    Src *p2p.NetAddress

func (ErrAddrBookPrivateSrc) Error Uses

func (err ErrAddrBookPrivateSrc) Error() string

func (ErrAddrBookPrivateSrc) PrivateAddr Uses

func (err ErrAddrBookPrivateSrc) PrivateAddr() bool

type ErrAddrBookSelf Uses

type ErrAddrBookSelf struct {
    Addr *p2p.NetAddress

func (ErrAddrBookSelf) Error Uses

func (err ErrAddrBookSelf) Error() string

type Message Uses

type Message interface{}

Message is a primary type for PEX messages. Underneath, it could contain either pexRequestMessage, or pexAddrsMessage messages.

type Peer Uses

type Peer = p2p.Peer

type Reactor Uses

type Reactor struct {
    // contains filtered or unexported fields

Reactor handles PEX (peer exchange) and ensures that an adequate number of peers are connected to the switch.

It uses `AddrBook` (address book) to store `NetAddress`es of the peers.

## Preventing abuse

Only accept pexAddrsMsg from peers we sent a corresponding pexRequestMsg too. Only accept one pexRequestMsg every ~defaultEnsurePeersPeriod.

func NewReactor Uses

func NewReactor(b AddrBook, config *ReactorConfig) *Reactor

NewReactor creates new PEX reactor.

func (*Reactor) AddPeer Uses

func (r *Reactor) AddPeer(p Peer)

AddPeer implements Reactor by adding peer to the address book (if inbound) or by requesting more addresses (if outbound).

func (*Reactor) AttemptsToDial Uses

func (r *Reactor) AttemptsToDial(addr *p2p.NetAddress) int

AttemptsToDial returns the number of attempts to dial specific address. It returns 0 if never attempted or successfully connected.

func (*Reactor) GetChannels Uses

func (r *Reactor) GetChannels() []*conn.ChannelDescriptor

GetChannels implements Reactor

func (*Reactor) OnStart Uses

func (r *Reactor) OnStart() error

OnStart implements BaseService

func (*Reactor) OnStop Uses

func (r *Reactor) OnStop()

OnStop implements BaseService

func (*Reactor) Receive Uses

func (r *Reactor) Receive(chID byte, src Peer, msgBytes []byte)

Receive implements Reactor by handling incoming PEX messages.

func (*Reactor) ReceiveAddrs Uses

func (r *Reactor) ReceiveAddrs(addrs []*p2p.NetAddress, src Peer) error

ReceiveAddrs adds the given addrs to the addrbook if theres an open request for this peer and deletes the open request. If there's no open request for the src peer, it returns an error.

func (*Reactor) RemovePeer Uses

func (r *Reactor) RemovePeer(p Peer, reason interface{})

RemovePeer implements Reactor by resetting peer's requests info.

func (*Reactor) RequestAddrs Uses

func (r *Reactor) RequestAddrs(p Peer)

RequestAddrs asks peer for more addresses if we do not already have a request out for this peer.

func (*Reactor) SendAddrs Uses

func (r *Reactor) SendAddrs(p Peer, netAddrs []*p2p.NetAddress)

SendAddrs sends addrs to the peer.

func (*Reactor) SetEnsurePeersPeriod Uses

func (r *Reactor) SetEnsurePeersPeriod(d time.Duration)

SetEnsurePeersPeriod sets period to ensure peers connected.

type ReactorConfig Uses

type ReactorConfig struct {
    // Seed/Crawler mode
    SeedMode bool

    // We want seeds to only advertise good peers. Therefore they should wait at
    // least as long as we expect it to take for a peer to become good before
    // disconnecting.
    SeedDisconnectWaitPeriod time.Duration

    // Maximum pause when redialing a persistent peer (if zero, exponential backoff is used)
    PersistentPeersMaxDialPeriod time.Duration

    // Seeds is a list of addresses reactor may use
    // if it can't connect to peers in the addrbook.
    Seeds []string

ReactorConfig holds reactor specific configuration data.

Package pex imports 21 packages (graph) and is imported by 9 packages. Updated 2020-02-22. Refresh now. Tools for package owners.