Documentation ¶
Overview ¶
Package waitable provides the implementation of data-link layer endpoints that wrap other endpoints, and can wait for inflight calls to WritePacket or DeliverNetworkPacket to finish (and new ones to be prevented).
Waitable endpoints can be used in the networking stack by calling New(eID) to create a new endpoint, where eID is the ID of the endpoint being wrapped, and then passing it as an argument to Stack.CreateNIC().
Index ¶
- type Endpoint
- func (e *Endpoint) Attach(dispatcher stack.NetworkDispatcher)
- func (e *Endpoint) Capabilities() stack.LinkEndpointCapabilities
- func (e *Endpoint) DeliverNetworkPacket(linkEP stack.LinkEndpoint, remote, local tcpip.LinkAddress, ...)
- func (e *Endpoint) IsAttached() bool
- func (e *Endpoint) LinkAddress() tcpip.LinkAddress
- func (e *Endpoint) MTU() uint32
- func (e *Endpoint) MaxHeaderLength() uint16
- func (e *Endpoint) Wait()
- func (e *Endpoint) WaitDispatch()
- func (e *Endpoint) WaitWrite()
- func (e *Endpoint) WritePacket(r *stack.Route, gso *stack.GSO, hdr buffer.Prependable, ...) *tcpip.Error
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Endpoint ¶
type Endpoint struct {
// contains filtered or unexported fields
}
Endpoint is a waitable link-layer endpoint.
func New ¶
func New(lower stack.LinkEndpoint) *Endpoint
New creates a new waitable link-layer endpoint. It wraps around another endpoint and allows the caller to block new write/dispatch calls and wait for the inflight ones to finish before returning.
func (*Endpoint) Attach ¶
func (e *Endpoint) Attach(dispatcher stack.NetworkDispatcher)
Attach implements stack.LinkEndpoint.Attach. It saves the dispatcher and registers with the lower endpoint as its dispatcher so that "e" is called for inbound packets.
func (*Endpoint) Capabilities ¶
func (e *Endpoint) Capabilities() stack.LinkEndpointCapabilities
Capabilities implements stack.LinkEndpoint.Capabilities. It just forwards the request to the lower endpoint.
func (*Endpoint) DeliverNetworkPacket ¶
func (e *Endpoint) DeliverNetworkPacket(linkEP stack.LinkEndpoint, remote, local tcpip.LinkAddress, protocol tcpip.NetworkProtocolNumber, vv buffer.VectorisedView)
DeliverNetworkPacket implements stack.NetworkDispatcher.DeliverNetworkPacket. It is called by the link-layer endpoint being wrapped when a packet arrives, and only forwards to the actual dispatcher if Wait or WaitDispatch haven't been called.
func (*Endpoint) IsAttached ¶
IsAttached implements stack.LinkEndpoint.IsAttached.
func (*Endpoint) LinkAddress ¶
func (e *Endpoint) LinkAddress() tcpip.LinkAddress
LinkAddress implements stack.LinkEndpoint.LinkAddress. It just forwards the request to the lower endpoint.
func (*Endpoint) MTU ¶
MTU implements stack.LinkEndpoint.MTU. It just forwards the request to the lower endpoint.
func (*Endpoint) MaxHeaderLength ¶
MaxHeaderLength implements stack.LinkEndpoint.MaxHeaderLength. It just forwards the request to the lower endpoint.
func (*Endpoint) WaitDispatch ¶
func (e *Endpoint) WaitDispatch()
WaitDispatch prevents new calls to DeliverNetworkPacket from reaching the actual dispatcher, and waits for inflight ones to finish before returning.
func (*Endpoint) WaitWrite ¶
func (e *Endpoint) WaitWrite()
WaitWrite prevents new calls to WritePacket from reaching the lower endpoint, and waits for inflight ones to finish before returning.
func (*Endpoint) WritePacket ¶
func (e *Endpoint) WritePacket(r *stack.Route, gso *stack.GSO, hdr buffer.Prependable, payload buffer.VectorisedView, protocol tcpip.NetworkProtocolNumber) *tcpip.Error
WritePacket implements stack.LinkEndpoint.WritePacket. It is called by higher-level protocols to write packets. It only forwards packets to the lower endpoint if Wait or WaitWrite haven't been called.