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

package pex

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

Index

Package Files

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

Constants

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

func NewAddrBook Uses

func NewAddrBook(filePath string, routabilityStrict bool) *addrBook

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

func RegisterPexMessage Uses

func RegisterPexMessage(cdc *amino.Codec)

type AddrBook Uses

type AddrBook interface {
    cmn.Service

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

    AddPrivateIDs([]string)

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

    // 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
    MarkGood(p2p.ID)
    MarkAttempt(*p2p.NetAddress)
    MarkBad(*p2p.NetAddress)

    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
    Save()
}

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?

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 PEXReactor Uses

type PEXReactor struct {
    p2p.BaseReactor
    // contains filtered or unexported fields
}

PEXReactor 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 NewPEXReactor Uses

func NewPEXReactor(b AddrBook, config *PEXReactorConfig) *PEXReactor

NewPEXReactor creates new PEX reactor.

func (*PEXReactor) AddPeer Uses

func (r *PEXReactor) AddPeer(p Peer)

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

func (*PEXReactor) AttemptsToDial Uses

func (r *PEXReactor) 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 (*PEXReactor) GetChannels Uses

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

GetChannels implements Reactor

func (*PEXReactor) OnStart Uses

func (r *PEXReactor) OnStart() error

OnStart implements BaseService

func (*PEXReactor) OnStop Uses

func (r *PEXReactor) OnStop()

OnStop implements BaseService

func (*PEXReactor) Receive Uses

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

Receive implements Reactor by handling incoming PEX messages.

func (*PEXReactor) ReceiveAddrs Uses

func (r *PEXReactor) 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 (*PEXReactor) RemovePeer Uses

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

RemovePeer implements Reactor by resetting peer's requests info.

func (*PEXReactor) RequestAddrs Uses

func (r *PEXReactor) RequestAddrs(p Peer)

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

func (*PEXReactor) SendAddrs Uses

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

SendAddrs sends addrs to the peer.

func (*PEXReactor) SetEnsurePeersPeriod Uses

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

SetEnsurePeersPeriod sets period to ensure peers connected.

type PEXReactorConfig Uses

type PEXReactorConfig 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

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

PEXReactorConfig holds reactor specific configuration data.

type Peer Uses

type Peer = p2p.Peer

type PexMessage Uses

type PexMessage interface{}

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

Package pex imports 17 packages (graph) and is imported by 4 packages. Updated 2019-09-11. Refresh now. Tools for package owners.