router

package
v2.6.5+incompatible Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 10, 2020 License: Apache-2.0 Imports: 29 Imported by: 0

Documentation

Index

Constants

View Source
const (
	FastDatapathHeartbeatAck = iota
	FastDatapathCryptoInitSARemote
)
View Source
const (
	ChannelSize         = 16
	MaxUDPPacketSize    = 65535
	FastHeartbeat       = 500 * time.Millisecond
	SlowHeartbeat       = 10 * time.Second
	MaxMissedHeartbeats = 6
	HeartbeatTimeout    = MaxMissedHeartbeats * SlowHeartbeat
	MaxDuration         = time.Duration(math.MaxInt64)
	NameSize            = mesh.NameSize
)
View Source
const (
	EthernetOverhead  = 14
	UDPOverhead       = 28 // 20 bytes for IPv4, 8 bytes for UDP
	DefaultMTU        = 65535
	FragTestSize      = 60001
	PMTUDiscoverySize = 60000
	FragTestInterval  = 5 * time.Minute
	MTUVerifyAttempts = 8
	MTUVerifyTimeout  = 10 * time.Millisecond // doubled with each attempt

	ProtocolConnectionEstablished = mesh.ProtocolReserved1
	ProtocolFragmentationReceived = mesh.ProtocolReserved2
	ProtocolPMTUVerified          = mesh.ProtocolReserved3
)
View Source
const (
	WindowSize = 20 // bits
)

Variables

This section is empty.

Functions

func PosixError

func PosixError(err error) error

Look inside an error produced by the net package to get to the syscall.Errno at the root of the problem.

Types

type AWSVPC added in v1.6.0

type AWSVPC struct{}

func NewAWSVPC added in v1.6.0

func NewAWSVPC() AWSVPC

func (AWSVPC) AddFeaturesTo added in v1.6.0

func (vpc AWSVPC) AddFeaturesTo(features map[string]string)

func (AWSVPC) Diagnostics added in v1.6.0

func (vpc AWSVPC) Diagnostics() interface{}

func (AWSVPC) InvalidateRoutes added in v1.6.0

func (vpc AWSVPC) InvalidateRoutes()

func (AWSVPC) InvalidateShortIDs added in v1.6.0

func (vpc AWSVPC) InvalidateShortIDs()

func (AWSVPC) PrepareConnection added in v1.6.0

func (vpc AWSVPC) PrepareConnection(params mesh.OverlayConnectionParams) (mesh.OverlayConnection, error)

func (AWSVPC) StartConsumingPackets added in v1.6.0

func (vpc AWSVPC) StartConsumingPackets(localPeer *mesh.Peer, peers *mesh.Peers, consumer OverlayConsumer) error

func (AWSVPC) Stop added in v1.9.0

func (vpc AWSVPC) Stop()

type AWSVPCConnection added in v1.6.0

type AWSVPCConnection struct {
	// contains filtered or unexported fields
}

func (*AWSVPCConnection) Attrs added in v1.9.0

func (conn *AWSVPCConnection) Attrs() map[string]interface{}

func (*AWSVPCConnection) Confirm added in v1.6.0

func (conn *AWSVPCConnection) Confirm()

func (*AWSVPCConnection) ControlMessage added in v1.6.0

func (conn *AWSVPCConnection) ControlMessage(tag byte, msg []byte)

func (*AWSVPCConnection) ErrorChannel added in v1.6.0

func (conn *AWSVPCConnection) ErrorChannel() <-chan error

func (*AWSVPCConnection) EstablishedChannel added in v1.6.0

func (conn *AWSVPCConnection) EstablishedChannel() <-chan struct{}

func (*AWSVPCConnection) Forward added in v1.6.0

func (conn *AWSVPCConnection) Forward(key ForwardPacketKey) FlowOp

func (*AWSVPCConnection) Stop added in v1.6.0

func (conn *AWSVPCConnection) Stop()

type Consumer

type Consumer func(PacketKey) FlowOp

A function that determines how to handle locally captured packets.

type Decryptor

type Decryptor interface {
	IterateFrames([]byte, FrameConsumer) error
}

type DiscardingFlowOp added in v1.2.0

type DiscardingFlowOp struct{}

func (DiscardingFlowOp) Discards added in v1.2.0

func (DiscardingFlowOp) Discards() bool

func (DiscardingFlowOp) Process added in v1.2.0

func (DiscardingFlowOp) Process([]byte, *EthernetDecoder, bool)

type Encryptor

type Encryptor interface {
	FrameOverhead() int
	PacketOverhead() int
	Bytes() ([]byte, error)
	AppendFrame(src []byte, dst []byte, frame []byte)
	TotalLen() int
}

type EthernetDecoder

type EthernetDecoder struct {
	Eth layers.Ethernet
	IP  layers.IPv4
	// contains filtered or unexported fields
}

func NewEthernetDecoder

func NewEthernetDecoder() *EthernetDecoder

func (*EthernetDecoder) DF added in v1.1.0

func (dec *EthernetDecoder) DF() bool

func (*EthernetDecoder) DecodeLayers

func (dec *EthernetDecoder) DecodeLayers(data []byte)

func (*EthernetDecoder) IsSpecial added in v0.9.0

func (dec *EthernetDecoder) IsSpecial() bool

func (*EthernetDecoder) PacketKey added in v1.2.0

func (dec *EthernetDecoder) PacketKey() (key PacketKey)

type FastDPMetrics added in v1.8.0

type FastDPMetrics struct {
	Flows        int
	TotalPackets uint64
	TotalBytes   uint64
}

type FastDPStatus added in v1.8.0

type FastDPStatus struct {
	Vports []VportStatus
	Flows  []FlowStatus
}

func (FastDPStatus) Metrics added in v1.8.0

func (s FastDPStatus) Metrics() interface{}

type FastDatapath added in v1.2.0

type FastDatapath struct {
	// contains filtered or unexported fields
}

func NewFastDatapath added in v1.2.0

func NewFastDatapath(iface *net.Interface, port int, encryptionEnabled bool) (*FastDatapath, error)

func (*FastDatapath) Close added in v1.2.0

func (fastdp *FastDatapath) Close() error

func (*FastDatapath) Error added in v1.2.0

func (fastdp *FastDatapath) Error(err error, stopped bool)

func (*FastDatapath) InjectorConsumer

func (fastdp *FastDatapath) InjectorConsumer() InjectorConsumer

func (*FastDatapath) Miss added in v1.2.0

func (fastdp *FastDatapath) Miss(packet []byte, fks odp.FlowKeys) error

func (*FastDatapath) Overlay added in v1.2.0

func (fastdp *FastDatapath) Overlay() NetworkOverlay

func (*FastDatapath) VportCreated added in v1.2.0

func (fastdp *FastDatapath) VportCreated(dpid odp.DatapathID, vport odp.Vport) error

func (*FastDatapath) VportDeleted added in v1.2.0

func (fastdp *FastDatapath) VportDeleted(dpid odp.DatapathID, vport odp.Vport) error

type FlowOp added in v1.2.0

type FlowOp interface {
	// The caller must supply an EthernetDecoder specific to this
	// thread, which has already been used to decode the frame.
	// The broadcast parameter is a hint whether the packet is
	// being broadcast.
	Process(frame []byte, dec *EthernetDecoder, broadcast bool)

	// Does the FlowOp discard the packet?
	Discards() bool
}

func FlattenFlowOp added in v1.2.0

func FlattenFlowOp(fop FlowOp) []FlowOp

Flatten out a FlowOp to eliminate any MultiFlowOps

type FlowStatus added in v1.2.0

type FlowStatus odp.FlowInfo

func (*FlowStatus) MarshalJSON added in v1.2.0

func (flowStatus *FlowStatus) MarshalJSON() ([]byte, error)

type ForwardPacketKey added in v1.2.0

type ForwardPacketKey struct {
	SrcPeer *mesh.Peer
	DstPeer *mesh.Peer
	PacketKey
}

type FrameConsumer

type FrameConsumer func(src []byte, dst []byte, frame []byte)

type InjectorConsumer

type InjectorConsumer interface {
	// Inject a packet to be delivered locally
	InjectPacket(PacketKey) FlowOp

	// Start consuming packets from the bridge.  Injected packets
	// should not be included.
	StartConsumingPackets(Consumer) error

	Interface() *net.Interface
	String() string
	Stats() map[string]int
}

Interface to packet handling on the local virtual bridge

func NewPcap added in v1.2.0

func NewPcap(iface *net.Interface, bufSz int) (InjectorConsumer, error)

type MAC added in v1.2.0

type MAC [6]byte

func (MAC) String added in v1.2.0

func (mac MAC) String() string

type MACStatus added in v1.1.0

type MACStatus struct {
	Mac      string
	Name     string
	NickName string
	LastSeen time.Time
}

func NewMACStatusSlice added in v1.1.0

func NewMACStatusSlice(cache *MacCache) []MACStatus

type MacCache

type MacCache struct {
	sync.RWMutex
	// contains filtered or unexported fields
}

func NewMacCache

func NewMacCache(maxAge time.Duration, onExpiry func(net.HardwareAddr, *mesh.Peer)) *MacCache

func (*MacCache) Add added in v1.2.0

func (cache *MacCache) Add(mac net.HardwareAddr, peer *mesh.Peer) (bool, *mesh.Peer)

func (*MacCache) AddForced added in v1.2.0

func (cache *MacCache) AddForced(mac net.HardwareAddr, peer *mesh.Peer) (bool, *mesh.Peer)

func (*MacCache) Delete

func (cache *MacCache) Delete(peer *mesh.Peer) bool

func (*MacCache) Lookup

func (cache *MacCache) Lookup(mac net.HardwareAddr) *mesh.Peer

type MacCacheEntry

type MacCacheEntry struct {
	// contains filtered or unexported fields
}

type MultiFlowOp added in v1.2.0

type MultiFlowOp struct {
	// contains filtered or unexported fields
}

func NewMultiFlowOp added in v1.2.0

func NewMultiFlowOp(broadcast bool, ops ...FlowOp) *MultiFlowOp

func (*MultiFlowOp) Add added in v1.2.0

func (mfop *MultiFlowOp) Add(op FlowOp)

func (*MultiFlowOp) Discards added in v1.2.0

func (mfop *MultiFlowOp) Discards() bool

func (*MultiFlowOp) Process added in v1.2.0

func (mfop *MultiFlowOp) Process(frame []byte, dec *EthernetDecoder, broadcast bool)

type NaClDecryptor

type NaClDecryptor struct {
	NonDecryptor
	// contains filtered or unexported fields
}

func NewNaClDecryptor

func NewNaClDecryptor(sessionKey *[32]byte, outbound bool) *NaClDecryptor

func (*NaClDecryptor) IterateFrames

func (nd *NaClDecryptor) IterateFrames(packet []byte, consumer FrameConsumer) error

type NaClDecryptorInstance

type NaClDecryptorInstance struct {
	// contains filtered or unexported fields
}

func NewNaClDecryptorInstance added in v0.11.0

func NewNaClDecryptorInstance(outbound bool) *NaClDecryptorInstance

type NaClEncryptor

type NaClEncryptor struct {
	NonEncryptor
	// contains filtered or unexported fields
}

func NewNaClEncryptor

func NewNaClEncryptor(prefix []byte, sessionKey *[32]byte, outbound bool, df bool) *NaClEncryptor

func (*NaClEncryptor) Bytes

func (ne *NaClEncryptor) Bytes() ([]byte, error)

func (*NaClEncryptor) PacketOverhead

func (ne *NaClEncryptor) PacketOverhead() int

func (*NaClEncryptor) TotalLen

func (ne *NaClEncryptor) TotalLen() int

type NetworkConfig added in v1.3.0

type NetworkConfig struct {
	BufSz            int
	PacketLogging    PacketLogging
	InjectorConsumer InjectorConsumer
}

type NetworkOverlay added in v1.3.0

type NetworkOverlay interface {
	mesh.Overlay

	// The routes have changed, so any cached information should
	// be discarded.
	InvalidateRoutes()

	// A mapping of a short id to a peer has changed
	InvalidateShortIDs()

	// Start consuming forwarded packets.
	StartConsumingPackets(*mesh.Peer, *mesh.Peers, OverlayConsumer) error
}

Interface to overlay network packet handling

func NewSleeveOverlay added in v1.2.0

func NewSleeveOverlay(host string, localPort int) NetworkOverlay

type NetworkRouter added in v1.3.0

type NetworkRouter struct {
	*mesh.Router
	NetworkConfig
	weavenet.BridgeConfig
	Macs *MacCache
	// contains filtered or unexported fields
}

func NewNetworkRouter added in v1.3.0

func NewNetworkRouter(config mesh.Config, networkConfig NetworkConfig, bridgeConfig weavenet.BridgeConfig, name mesh.PeerName, nickName string, overlay NetworkOverlay, db db.DB) (*NetworkRouter, error)

func (*NetworkRouter) CreateRestartSentinel added in v1.7.0

func (router *NetworkRouter) CreateRestartSentinel() error

func (*NetworkRouter) ForgetConnections added in v1.5.0

func (router *NetworkRouter) ForgetConnections(peers []string)

func (*NetworkRouter) HandleHTTP added in v1.3.0

func (router *NetworkRouter) HandleHTTP(muxRouter *mux.Router)

func (*NetworkRouter) InitialPeers added in v1.5.0

func (router *NetworkRouter) InitialPeers(resume bool, peers []string) ([]string, error)

func (*NetworkRouter) InitiateConnections added in v1.5.0

func (router *NetworkRouter) InitiateConnections(peers []string, replace bool) []error

func (*NetworkRouter) Start added in v1.3.0

func (router *NetworkRouter) Start()

Start listening for TCP connections, locally captured packets, and forwarded packets.

type NetworkRouterStatus added in v1.3.0

type NetworkRouterStatus struct {
	*mesh.Status
	Interface    string
	CaptureStats map[string]int
	MACs         []MACStatus
}

func NewNetworkRouterStatus added in v1.3.0

func NewNetworkRouterStatus(router *NetworkRouter) *NetworkRouterStatus

type NonDecryptor

type NonDecryptor struct {
}

func NewNonDecryptor

func NewNonDecryptor() *NonDecryptor

func (*NonDecryptor) IterateFrames

func (nd *NonDecryptor) IterateFrames(packet []byte, consumer FrameConsumer) error

type NonDiscardingFlowOp added in v1.2.0

type NonDiscardingFlowOp struct{}

func (NonDiscardingFlowOp) Discards added in v1.2.0

func (NonDiscardingFlowOp) Discards() bool

type NonEncryptor

type NonEncryptor struct {
	// contains filtered or unexported fields
}

func NewNonEncryptor

func NewNonEncryptor(prefix []byte) *NonEncryptor

func (*NonEncryptor) AppendFrame

func (ne *NonEncryptor) AppendFrame(src []byte, dst []byte, frame []byte)

func (*NonEncryptor) Bytes

func (ne *NonEncryptor) Bytes() ([]byte, error)

func (*NonEncryptor) FrameOverhead

func (ne *NonEncryptor) FrameOverhead() int

func (*NonEncryptor) PacketOverhead

func (ne *NonEncryptor) PacketOverhead() int

func (*NonEncryptor) TotalLen

func (ne *NonEncryptor) TotalLen() int

type NullInjectorConsumer

type NullInjectorConsumer struct{}

func (NullInjectorConsumer) InjectPacket

func (NullInjectorConsumer) InjectPacket(PacketKey) FlowOp

func (NullInjectorConsumer) Interface

func (NullInjectorConsumer) Interface() *net.Interface

func (NullInjectorConsumer) StartConsumingPackets

func (NullInjectorConsumer) StartConsumingPackets(Consumer) error

func (NullInjectorConsumer) Stats

func (NullInjectorConsumer) Stats() map[string]int

func (NullInjectorConsumer) String

func (NullInjectorConsumer) String() string

type NullNetworkOverlay added in v1.3.0

type NullNetworkOverlay struct{ mesh.NullOverlay }

func (NullNetworkOverlay) Forward added in v1.3.0

func (NullNetworkOverlay) InvalidateRoutes added in v1.3.0

func (NullNetworkOverlay) InvalidateRoutes()

func (NullNetworkOverlay) InvalidateShortIDs added in v1.3.0

func (NullNetworkOverlay) InvalidateShortIDs()

func (NullNetworkOverlay) StartConsumingPackets added in v1.3.0

func (NullNetworkOverlay) StartConsumingPackets(*mesh.Peer, *mesh.Peers, OverlayConsumer) error

type OverlayConsumer added in v1.2.0

type OverlayConsumer func(ForwardPacketKey) FlowOp

When a consumer is called, the decoder will already have been used to decode the frame.

type OverlayForwarder added in v1.2.0

type OverlayForwarder interface {
	mesh.OverlayConnection
	// Forward a packet across the connection.  May be called as soon
	// as the overlay connection is created, in particular before
	// Confirm().  The return value nil means the key could not be
	// handled by this forwarder.
	Forward(ForwardPacketKey) FlowOp

	HealthChannel() <-chan bool
}

All of the machinery to forward packets to a particular peer

type OverlaySwitch added in v1.2.0

type OverlaySwitch struct {
	// contains filtered or unexported fields
}

func NewOverlaySwitch added in v1.2.0

func NewOverlaySwitch() *OverlaySwitch

func (*OverlaySwitch) Add added in v1.2.0

func (osw *OverlaySwitch) Add(name string, overlay NetworkOverlay)

func (*OverlaySwitch) AddFeaturesTo added in v1.2.0

func (osw *OverlaySwitch) AddFeaturesTo(features map[string]string)

func (*OverlaySwitch) Diagnostics added in v1.2.0

func (osw *OverlaySwitch) Diagnostics() interface{}

func (*OverlaySwitch) InvalidateRoutes added in v1.2.0

func (osw *OverlaySwitch) InvalidateRoutes()

func (*OverlaySwitch) InvalidateShortIDs added in v1.2.0

func (osw *OverlaySwitch) InvalidateShortIDs()

func (*OverlaySwitch) PrepareConnection added in v1.3.0

func (osw *OverlaySwitch) PrepareConnection(params mesh.OverlayConnectionParams) (mesh.OverlayConnection, error)

func (*OverlaySwitch) SetCompatOverlay added in v1.2.0

func (osw *OverlaySwitch) SetCompatOverlay(overlay NetworkOverlay)

func (*OverlaySwitch) StartConsumingPackets added in v1.2.0

func (osw *OverlaySwitch) StartConsumingPackets(localPeer *mesh.Peer, peers *mesh.Peers, consumer OverlayConsumer) error

func (*OverlaySwitch) Stop added in v1.9.0

func (osw *OverlaySwitch) Stop()

type PacketDecodingError

type PacketDecodingError struct {
	Desc string
}

func (PacketDecodingError) Error

func (pde PacketDecodingError) Error() string

type PacketKey added in v1.2.0

type PacketKey struct {
	SrcMAC MAC
	DstMAC MAC
}

type PacketLogging added in v1.2.0

type PacketLogging interface {
	LogPacket(string, PacketKey)
	LogForwardPacket(string, ForwardPacketKey)
}

type Pcap added in v1.2.0

type Pcap struct {
	NonDiscardingFlowOp
	// contains filtered or unexported fields
}

func (*Pcap) InjectPacket added in v1.2.0

func (p *Pcap) InjectPacket(PacketKey) FlowOp

func (*Pcap) Interface added in v1.5.0

func (p *Pcap) Interface() *net.Interface

func (*Pcap) Process added in v1.2.0

func (p *Pcap) Process(frame []byte, dec *EthernetDecoder, broadcast bool)

func (*Pcap) StartConsumingPackets added in v1.2.0

func (p *Pcap) StartConsumingPackets(consumer Consumer) error

func (*Pcap) Stats added in v1.2.0

func (p *Pcap) Stats() map[string]int

func (*Pcap) String added in v1.2.0

func (p *Pcap) String() string

type SleeveOverlay added in v1.2.0

type SleeveOverlay struct {
	// contains filtered or unexported fields
}

func (*SleeveOverlay) AddFeaturesTo added in v1.2.0

func (*SleeveOverlay) AddFeaturesTo(map[string]string)

func (*SleeveOverlay) Diagnostics added in v1.2.0

func (*SleeveOverlay) Diagnostics() interface{}

func (*SleeveOverlay) InvalidateRoutes added in v1.2.0

func (*SleeveOverlay) InvalidateRoutes()

func (*SleeveOverlay) InvalidateShortIDs added in v1.2.0

func (*SleeveOverlay) InvalidateShortIDs()

func (*SleeveOverlay) PrepareConnection added in v1.3.0

func (sleeve *SleeveOverlay) PrepareConnection(params mesh.OverlayConnectionParams) (mesh.OverlayConnection, error)

func (*SleeveOverlay) StartConsumingPackets added in v1.2.0

func (sleeve *SleeveOverlay) StartConsumingPackets(localPeer *mesh.Peer, peers *mesh.Peers, consumer OverlayConsumer) error

func (*SleeveOverlay) Stop added in v1.9.0

func (*SleeveOverlay) Stop()

type VportStatus added in v1.2.0

type VportStatus odp.Vport

func (*VportStatus) MarshalJSON added in v1.2.0

func (vport *VportStatus) MarshalJSON() ([]byte, error)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL