xgress

package
v0.16.42 Latest Latest
Warning

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

Go to latest
Published: Mar 25, 2021 License: Apache-2.0 Imports: 28 Imported by: 6

Documentation

Index

Constants

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

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

	ContentTypePayloadType         = 1100
	ContentTypeAcknowledgementType = 1101
)
View Source
const DECODER = "data"
View Source
const (
	HeaderKeyUUID = 0
)

Variables

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

Functions

func AddTerminator

func AddTerminator(ctrl CtrlChannel, serviceId, binding, address, identity string, identitySecret []byte, peerData map[uint32][]byte, staticCost uint16, precedence ctrl_pb.TerminatorPrecedence) (string, error)

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.Connection, stop byte) ([]byte, error)

func ReadUntilNewline

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

func RemoveTerminator

func RemoveTerminator(ctrl CtrlChannel, terminatorId string) error

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

func UpdateTerminator

func UpdateTerminator(ctrl CtrlChannel, terminatorId string, staticCost *uint16, precedence *ctrl_pb.TerminatorPrecedence) error

Types

type Acker added in v0.15.0

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

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(sessionId string, originator Originator) *Acknowledgement

func UnmarshallAcknowledgement

func UnmarshallAcknowledgement(msg *channel2.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() *channel2.Message

type Address

type Address string

type BindHandler

type BindHandler interface {
	HandleXgressBind(x *Xgress)
}

The BindHandlers are invoked to install the appropriate handlers.

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

type CtrlChannel

type CtrlChannel interface {
	Channel() channel2.Channel
	DefaultRequestTimeout() time.Duration
}

type Decoder

type Decoder struct{}

func (Decoder) Decode

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

type Dialer

type Dialer interface {
	Dial(destination string, sessionId *identity.TokenId, address Address, bindHandler BindHandler) (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 {
	SessionId      string
	Flags          uint32
	RecvBufferSize uint32
	RTT            uint16
}

func (*Header) GetFlags

func (header *Header) GetFlags() string

func (*Header) GetOriginator

func (header *Header) GetOriginator() Originator

func (*Header) GetSessionId

func (header *Header) GetSessionId() string

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

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) 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 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
	GetSessionTimeout   time.Duration
	SessionStartTimeout 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 *channel2.Message) (*Payload, error)

func (*Payload) GetLoggerFields

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

func (*Payload) GetSequence

func (payload *Payload) GetSequence() int32

func (*Payload) IsSessionEndFlagSet

func (payload *Payload) IsSessionEndFlagSet() bool

func (*Payload) IsSessionStartFlagSet added in v0.12.0

func (payload *Payload) IsSessionStartFlagSet() bool

func (*Payload) Marshall

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

type PayloadBufferForwarder

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

type PayloadFlag

type PayloadFlag uint32
const (
	PayloadFlagSessionEnd   PayloadFlag = 1
	PayloadFlagEgress       PayloadFlag = 2
	PayloadFlagSessionStart 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)
}

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.Connection) (*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"`
	SessionId string `json:"sessionId"`
}

func CreateSession

func CreateSession(ctrl CtrlChannel, peer Connection, request *Request, bindHandler BindHandler, options *Options) *Response

func ReceiveResponse

func ReceiveResponse(peer transport.Connection) (*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(sessionId string)
}

type SessionInfo

type SessionInfo struct {
	SessionId   *identity.TokenId
	Address     Address
	ResponseMsg *channel2.Message
	// contains filtered or unexported fields
}

func GetSession

func GetSession(ctrl CtrlChannel, ingressId string, serviceId string, timeout time.Duration, peerData map[uint32][]byte) (*SessionInfo, error)

type Xgress

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

func NewXgress

func NewXgress(sessionId *identity.TokenId, address Address, peer Connection, originator Originator, options *Options) *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) Close

func (self *Xgress) Close()

Things which can trigger close

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

func (*Xgress) CloseTimeout

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

func (*Xgress) Closed

func (self *Xgress) Closed() bool

func (*Xgress) ForwardEndOfSession added in v0.15.11

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

func (*Xgress) GetEndSession

func (self *Xgress) GetEndSession() *Payload

func (*Xgress) GetStartSession added in v0.12.0

func (self *Xgress) GetStartSession() *Payload
func (self *Xgress) GetTimeOfLastRxFromLink() int64

func (*Xgress) IsEndOfSessionReceived added in v0.15.11

func (self *Xgress) IsEndOfSessionReceived() bool

func (*Xgress) IsEndOfSessionSent added in v0.15.17

func (self *Xgress) IsEndOfSessionSent() bool

func (*Xgress) IsSessionStarted added in v0.15.24

func (self *Xgress) IsSessionStarted() 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) SendEmptyAck added in v0.15.0

func (self *Xgress) SendEmptyAck()

func (*Xgress) SendPayload

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

func (*Xgress) SessionId

func (self *Xgress) SessionId() string

func (*Xgress) SetReceiveHandler

func (self *Xgress) SetReceiveHandler(receiveHandler ReceiveHandler)

func (*Xgress) Start

func (self *Xgress) Start()

Jump to

Keyboard shortcuts

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