xgress

package
v0.24.46 Latest Latest
Warning

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

Go to latest
Published: Nov 14, 2023 License: Apache-2.0 Imports: 34 Imported by: 6

Documentation

Index

Constants

View Source
const (
	MinHeaderKey = 2000
	MaxHeaderKey = MinHeaderKey + int32(math.MaxUint8)

	HeaderKeyCircuitId      = 2256
	HeaderKeySequence       = 2257
	HeaderKeyFlags          = 2258
	HeaderKeyRecvBufferSize = 2259
	HeaderKeyRTT            = 2260

	ContentTypePayloadType         = 1100
	ContentTypeAcknowledgementType = 1101
	ContentTypeControlType         = 1102
)
View Source
const (
	ControlHopCount  = 20
	ControlHopType   = 21
	ControlHopId     = 22
	ControlTimestamp = 23
	ControlUserVal   = 24
	ControlError     = 25
)
View Source
const DECODER = "data"
View Source
const (
	HeaderKeyUUID = 0
)

Variables

View Source
var ContentTypeValue = map[string]int32{
	"PayloadType":         ContentTypePayloadType,
	"AcknowledgementType": ContentTypeAcknowledgementType,
	"ControlType":         ContentTypeControlType,
}

Functions

func DecodePayload

func DecodePayload(payload *Payload) ([]byte, bool)

func GlobalRegistry

func GlobalRegistry() *registry

func InitAcker added in v0.15.0

func InitAcker(forwarder PayloadBufferForwarder, metrics metrics.Registry, closeNotify <-chan struct{})

func InitMetrics added in v0.15.0

func InitMetrics(registry metrics.UsageRegistry)

func InitPayloadIngester added in v0.15.0

func InitPayloadIngester(closeNotify <-chan struct{})

func InitRetransmitter added in v0.15.0

func InitRetransmitter(forwarder PayloadBufferForwarder, faultReporter RetransmitterFaultReporter, metrics metrics.Registry, closeNotify <-chan struct{})

func NewRegistry

func NewRegistry() *registry

func ReadUntil

func ReadUntil(peer transport.Conn, stop byte) ([]byte, error)

func ReadUntilNewline

func ReadUntilNewline(peer transport.Conn) ([]byte, error)

func RemoveTerminator

func RemoveTerminator(ctrls networkControllers, terminatorId string) error

func RemoveTerminators added in v0.22.76

func RemoveTerminators(ctrls networkControllers, terminatorIds []string)

func RespondToTraceRequest added in v0.16.114

func RespondToTraceRequest(headers channel.Headers, hopType, hopId string, response ControlReceiver)

func SendRequest

func SendRequest(request *Request, peer io.Writer) error

func SendResponse

func SendResponse(response *Response, peer io.Writer) error

func SetOriginatorFlag

func SetOriginatorFlag(flags uint32, originator Originator) uint32

Types

type Acker added in v0.15.0

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

Note: if altering this struct, be sure to account for 64 bit alignment on 32 bit arm arch https://pkg.go.dev/sync/atomic#pkg-note-BUG https://github.com/golang/go/issues/36606

func NewAcker added in v0.15.0

func NewAcker(forwarder PayloadBufferForwarder, metrics metrics.Registry, closeNotify <-chan struct{}) *Acker

type Acknowledgement

type Acknowledgement struct {
	Header
	Sequence []int32
}

func NewAcknowledgement

func NewAcknowledgement(circuitId string, originator Originator) *Acknowledgement

func UnmarshallAcknowledgement

func UnmarshallAcknowledgement(msg *channel.Message) (*Acknowledgement, error)

func (*Acknowledgement) GetLoggerFields added in v0.15.0

func (ack *Acknowledgement) GetLoggerFields() logrus.Fields

func (*Acknowledgement) GetSequence

func (ack *Acknowledgement) GetSequence() []int32

func (*Acknowledgement) Marshall

func (ack *Acknowledgement) Marshall() *channel.Message

type Address

type Address string

type BindHandler

type BindHandler interface {
	HandleXgressBind(x *Xgress)
}

The BindHandlers are invoked to install the appropriate handlers.

type CircuitInfo added in v0.16.92

type CircuitInfo struct {
	CtrlId      string
	CircuitId   *identity.TokenId
	Address     Address
	ResponseMsg *channel.Message
}

func GetCircuit added in v0.16.92

func GetCircuit(ctrl networkControllers, ingressId string, service string, timeout time.Duration, peerData map[uint32][]byte) (*CircuitInfo, error)

type CloseHandler

type CloseHandler interface {
	// HandleXgressClose is invoked when the connected peer terminates the communication.
	//
	HandleXgressClose(x *Xgress)
}

CloseHandler is invoked by an xgress when the connected peer terminates the communication.

type CloseHandlerF added in v0.16.30

type CloseHandlerF func(x *Xgress)

CloseHandlerF is the function version of CloseHandler

func (CloseHandlerF) HandleXgressClose added in v0.16.30

func (self CloseHandlerF) HandleXgressClose(x *Xgress)

type CloseHelper

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

func (*CloseHelper) Close

func (self *CloseHelper) Close() error

func (*CloseHelper) Init

func (self *CloseHelper) Init(closer io.Closer)

type Connection

type Connection interface {
	io.Closer
	LogContext() string
	ReadPayload() ([]byte, map[uint8][]byte, error)
	WritePayload([]byte, map[uint8][]byte) (int, error)
	HandleControlMsg(controlType ControlType, headers channel.Headers, responder ControlReceiver) error
}

type Control added in v0.16.114

type Control struct {
	Type      ControlType
	CircuitId string
	Headers   channel.Headers
}

func UnmarshallControl added in v0.16.114

func UnmarshallControl(msg *channel.Message) (*Control, error)

func (*Control) CreateTraceResponse added in v0.16.114

func (self *Control) CreateTraceResponse(hopType, hopId string) *Control

func (*Control) DecrementAndGetHop added in v0.16.114

func (self *Control) DecrementAndGetHop() uint32

func (*Control) GetLoggerFields added in v0.16.114

func (self *Control) GetLoggerFields() logrus.Fields

func (*Control) IsTypeTraceRoute added in v0.16.114

func (self *Control) IsTypeTraceRoute() bool

func (*Control) IsTypeTraceRouteResponse added in v0.16.114

func (self *Control) IsTypeTraceRouteResponse() bool

func (*Control) Marshall added in v0.16.114

func (self *Control) Marshall() *channel.Message

type ControlReceiver added in v0.16.114

type ControlReceiver interface {
	HandleControlReceive(controlType ControlType, headers channel.Headers)
}

type ControlType added in v0.16.114

type ControlType byte
const (
	ControlTypeTraceRoute         ControlType = 1
	ControlTypeTraceRouteResponse ControlType = 2
)

func (ControlType) String added in v0.17.109

func (self ControlType) String() string

type Decoder

type Decoder struct{}

func (Decoder) Decode

func (d Decoder) Decode(msg *channel.Message) ([]byte, bool)

type DialParams added in v0.20.0

type DialParams interface {
	GetCtrlId() string
	GetDestination() string
	GetCircuitId() *identity.TokenId
	GetAddress() Address
	GetBindHandler() BindHandler
	GetLogContext() logcontext.Context
	GetDeadline() time.Time
	GetCircuitTags() map[string]string
}

type Dialer

type Dialer interface {
	Dial(params DialParams) (xt.PeerData, error)
	IsTerminatorValid(id string, destination string) bool
}

type Factory

type Factory interface {
	CreateListener(optionsData OptionsData) (Listener, error)
	CreateDialer(optionsData OptionsData) (Dialer, error)
}
type Header struct {
	CircuitId      string
	Flags          uint32
	RecvBufferSize uint32
	RTT            uint16
}

func (*Header) GetCircuitId added in v0.16.92

func (header *Header) GetCircuitId() string

func (*Header) GetFlags

func (header *Header) GetFlags() string

func (*Header) GetOriginator

func (header *Header) GetOriginator() Originator

type InvalidTerminatorError added in v0.17.76

type InvalidTerminatorError struct {
	InnerError error
}

func (InvalidTerminatorError) Error added in v0.17.76

func (e InvalidTerminatorError) Error() string

func (InvalidTerminatorError) Unwrap added in v0.17.76

func (e InvalidTerminatorError) Unwrap() error

type LinkReceiveBuffer added in v0.15.0

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

func NewLinkReceiveBuffer added in v0.15.0

func NewLinkReceiveBuffer() *LinkReceiveBuffer

func (*LinkReceiveBuffer) Inspect added in v0.17.78

func (*LinkReceiveBuffer) PeekHead added in v0.15.0

func (buffer *LinkReceiveBuffer) PeekHead() *Payload

func (*LinkReceiveBuffer) ReceiveUnordered added in v0.15.0

func (buffer *LinkReceiveBuffer) ReceiveUnordered(payload *Payload, maxSize uint32) bool

func (*LinkReceiveBuffer) Remove added in v0.15.0

func (buffer *LinkReceiveBuffer) Remove(payload *Payload)

func (*LinkReceiveBuffer) Size added in v0.15.0

func (buffer *LinkReceiveBuffer) Size() uint32

type LinkSendBuffer added in v0.15.0

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

Note: if altering this struct, be sure to account for 64 bit alignment on 32 bit arm arch https://pkg.go.dev/sync/atomic#pkg-note-BUG https://github.com/golang/go/issues/36606

func NewLinkSendBuffer added in v0.15.0

func NewLinkSendBuffer(x *Xgress) *LinkSendBuffer

func (*LinkSendBuffer) BufferPayload added in v0.15.0

func (buffer *LinkSendBuffer) BufferPayload(payload *Payload) (func(), error)

func (*LinkSendBuffer) Close added in v0.15.0

func (buffer *LinkSendBuffer) Close()

func (*LinkSendBuffer) CloseWhenEmpty added in v0.15.2

func (buffer *LinkSendBuffer) CloseWhenEmpty() bool

func (*LinkSendBuffer) Inspect added in v0.17.78

func (buffer *LinkSendBuffer) Inspect() *inspect.XgressSendBufferDetail

func (*LinkSendBuffer) ReceiveAcknowledgement added in v0.15.0

func (buffer *LinkSendBuffer) ReceiveAcknowledgement(ack *Acknowledgement)

type Listener

type Listener interface {
	Listen(address string, bindHandler BindHandler) error
	Close() error
}

type MisconfiguredTerminatorError added in v0.17.76

type MisconfiguredTerminatorError struct {
	InnerError error
}

func (MisconfiguredTerminatorError) Error added in v0.17.76

func (MisconfiguredTerminatorError) Unwrap added in v0.17.76

type Options

type Options struct {
	Mtu         int32
	RandomDrops bool
	Drop1InN    int32
	TxQueueSize int32

	TxPortalStartSize      uint32
	TxPortalMaxSize        uint32
	TxPortalMinSize        uint32
	TxPortalIncreaseThresh uint32
	TxPortalIncreaseScale  float64
	TxPortalRetxThresh     uint32
	TxPortalRetxScale      float64
	TxPortalDupAckThresh   uint32
	TxPortalDupAckScale    float64

	RxBufferSize uint32
	RetxStartMs  uint32
	RetxScale    float64
	RetxAddMs    uint32

	MaxCloseWait        time.Duration
	GetCircuitTimeout   time.Duration
	CircuitStartTimeout time.Duration
	ConnectTimeout      time.Duration
}

Options contains common Xgress configuration options

func DefaultOptions

func DefaultOptions() *Options

func LoadOptions

func LoadOptions(data OptionsData) (*Options, error)

func (Options) String

func (options Options) String() string

type OptionsData

type OptionsData map[interface{}]interface{}

type Originator

type Originator int32
const (
	Initiator  Originator = 0
	Terminator Originator = 1
)

func (Originator) String

func (o Originator) String() string

type Payload

type Payload struct {
	Header
	Sequence int32
	Headers  map[uint8][]byte
	Data     []byte
}

func UnmarshallPayload

func UnmarshallPayload(msg *channel.Message) (*Payload, error)

func (*Payload) GetLoggerFields

func (payload *Payload) GetLoggerFields() logrus.Fields

func (*Payload) GetSequence

func (payload *Payload) GetSequence() int32

func (*Payload) IsCircuitEndFlagSet added in v0.16.92

func (payload *Payload) IsCircuitEndFlagSet() bool

func (*Payload) IsCircuitStartFlagSet added in v0.16.92

func (payload *Payload) IsCircuitStartFlagSet() bool

func (*Payload) Marshall

func (payload *Payload) Marshall() *channel.Message

type PayloadBufferForwarder

type PayloadBufferForwarder interface {
	ForwardPayload(srcAddr Address, payload *Payload) error
	RetransmitPayload(srcAddr Address, payload *Payload) error
	ForwardAcknowledgement(srcAddr Address, acknowledgement *Acknowledgement) error
}

type PayloadFlag

type PayloadFlag uint32
const (
	PayloadFlagCircuitEnd   PayloadFlag = 1
	PayloadFlagOriginator   PayloadFlag = 2
	PayloadFlagCircuitStart PayloadFlag = 4
)

type PayloadIngester added in v0.15.0

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

func NewPayloadIngester added in v0.15.0

func NewPayloadIngester(closeNotify <-chan struct{}) *PayloadIngester

type PeekHandler

type PeekHandler interface {
	Rx(x *Xgress, payload *Payload)
	Tx(x *Xgress, payload *Payload)
	Close(x *Xgress)
}

PeekHandler allows registering watcher to react to data flowing an xgress instance

type ReceiveHandler

type ReceiveHandler interface {
	// HandleXgressReceive is invoked when data is received from the connected xgress peer.
	//
	HandleXgressReceive(payload *Payload, x *Xgress)
	HandleControlReceive(control *Control, x *Xgress)
}

ReceiveHandler is invoked by an xgress whenever data is received from the connected peer. Generally a ReceiveHandler is implemented to connect the xgress to a data plane data transmission system.

type Request

type Request struct {
	Id        string `json:"id"`
	ServiceId string `json:"svcId"`
}

func ReceiveRequest

func ReceiveRequest(peer transport.Conn) (*Request, error)

func RequestFromJSON

func RequestFromJSON(payload []byte) (*Request, error)

func (*Request) ToJSON

func (r *Request) ToJSON() ([]byte, error)

type Response

type Response struct {
	Success   bool   `json:"scc"`
	Message   string `json:"msg"`
	CircuitId string `json:"circuitId"`
}

func CreateCircuit added in v0.16.92

func CreateCircuit(ctrl networkControllers, peer Connection, request *Request, bindHandler BindHandler, options *Options) *Response

func ReceiveResponse

func ReceiveResponse(peer transport.Conn) (*Response, error)

func ResponseFromJSON

func ResponseFromJSON(payload []byte) (*Response, error)

func (*Response) ToJSON

func (r *Response) ToJSON() ([]byte, error)

type Retransmitter added in v0.15.0

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

func NewRetransmitter added in v0.15.0

func NewRetransmitter(forwarder PayloadBufferForwarder, faultReporter RetransmitterFaultReporter, metrics metrics.Registry, closeNotify <-chan struct{}) *Retransmitter

type RetransmitterFaultReporter added in v0.15.24

type RetransmitterFaultReporter interface {
	ReportForwardingFault(circuitId string, ctrlId string)
}

type Xgress

type Xgress struct {
	Options *Options
	// contains filtered or unexported fields
}

func NewXgress

func NewXgress(circuitId string, ctrlId string, address Address, peer Connection, originator Originator, options *Options, tags map[string]string) *Xgress

func (*Xgress) AddCloseHandler added in v0.16.30

func (self *Xgress) AddCloseHandler(closeHandler CloseHandler)

func (*Xgress) AddPeekHandler

func (self *Xgress) AddPeekHandler(peekHandler PeekHandler)

func (*Xgress) Address

func (self *Xgress) Address() Address

func (*Xgress) CircuitId added in v0.16.92

func (self *Xgress) CircuitId() string

func (*Xgress) Close

func (self *Xgress) Close()

Things which can trigger close

1. Read fails 2. Write fails 3. End of Circuit received 4. Unroute received

func (*Xgress) CloseTimeout

func (self *Xgress) CloseTimeout(duration time.Duration)

func (*Xgress) Closed

func (self *Xgress) Closed() bool

func (*Xgress) CtrlId added in v0.21.0

func (self *Xgress) CtrlId() string

func (*Xgress) ForwardEndOfCircuit added in v0.16.92

func (self *Xgress) ForwardEndOfCircuit(sendF func(payload *Payload) bool)

func (*Xgress) GetEndCircuit added in v0.16.92

func (self *Xgress) GetEndCircuit() *Payload

func (*Xgress) GetIntervalId added in v0.20.0

func (self *Xgress) GetIntervalId() string

func (*Xgress) GetSequence added in v0.18.6

func (self *Xgress) GetSequence() int32

func (*Xgress) GetStartCircuit added in v0.16.92

func (self *Xgress) GetStartCircuit() *Payload

func (*Xgress) GetTags added in v0.20.0

func (self *Xgress) GetTags() map[string]string
func (self *Xgress) GetTimeOfLastRxFromLink() int64

func (*Xgress) HandleControlReceive added in v0.16.114

func (self *Xgress) HandleControlReceive(controlType ControlType, headers channel.Headers)

func (*Xgress) InspectCircuit added in v0.17.105

func (self *Xgress) InspectCircuit(detail *inspect.CircuitInspectDetail)

func (*Xgress) IsCircuitStarted added in v0.16.92

func (self *Xgress) IsCircuitStarted() bool

func (*Xgress) IsEndOfCircuitReceived added in v0.16.92

func (self *Xgress) IsEndOfCircuitReceived() bool

func (*Xgress) IsEndOfCircuitSent added in v0.16.92

func (self *Xgress) IsEndOfCircuitSent() bool

func (*Xgress) IsTerminator

func (self *Xgress) IsTerminator() bool

func (*Xgress) Label

func (self *Xgress) Label() string

func (*Xgress) Originator

func (self *Xgress) Originator() Originator

func (*Xgress) PayloadReceived added in v0.15.0

func (self *Xgress) PayloadReceived(payload *Payload)

func (*Xgress) SendAcknowledgement

func (self *Xgress) SendAcknowledgement(acknowledgement *Acknowledgement) error

func (*Xgress) SendControl added in v0.16.114

func (self *Xgress) SendControl(control *Control) error

func (*Xgress) SendEmptyAck added in v0.15.0

func (self *Xgress) SendEmptyAck()

func (*Xgress) SendPayload

func (self *Xgress) SendPayload(payload *Payload) error

func (*Xgress) SetReceiveHandler

func (self *Xgress) SetReceiveHandler(receiveHandler ReceiveHandler)

func (*Xgress) Start

func (self *Xgress) Start()

func (*Xgress) Unrouted added in v0.16.76

func (self *Xgress) Unrouted()

Jump to

Keyboard shortcuts

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