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) ARPHardwareType() header.ARPHardwareType
- func (e *Endpoint) AddHeader(pkt stack.PacketBufferPtr)
- func (e *Endpoint) Attach(dispatcher stack.NetworkDispatcher)
- func (e *Endpoint) Capabilities() stack.LinkEndpointCapabilities
- func (e *Endpoint) DeliverLinkPacket(protocol tcpip.NetworkProtocolNumber, pkt stack.PacketBufferPtr)
- func (e *Endpoint) DeliverNetworkPacket(protocol tcpip.NetworkProtocolNumber, pkt stack.PacketBufferPtr)
- func (e *Endpoint) IsAttached() bool
- func (e *Endpoint) LinkAddress() tcpip.LinkAddress
- func (e *Endpoint) MTU() uint32
- func (e *Endpoint) MaxHeaderLength() uint16
- func (e *Endpoint) ParseHeader(pkt stack.PacketBufferPtr) bool
- func (e *Endpoint) Wait()
- func (e *Endpoint) WaitDispatch()
- func (e *Endpoint) WaitWrite()
- func (e *Endpoint) WritePackets(pkts stack.PacketBufferList) (int, 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) ARPHardwareType ¶
func (e *Endpoint) ARPHardwareType() header.ARPHardwareType
ARPHardwareType implements stack.LinkEndpoint.ARPHardwareType.
func (*Endpoint) AddHeader ¶
func (e *Endpoint) AddHeader(pkt stack.PacketBufferPtr)
AddHeader implements stack.LinkEndpoint.AddHeader.
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) DeliverLinkPacket ¶
func (e *Endpoint) DeliverLinkPacket(protocol tcpip.NetworkProtocolNumber, pkt stack.PacketBufferPtr)
DeliverLinkPacket implements stack.NetworkDispatcher.
func (*Endpoint) DeliverNetworkPacket ¶
func (e *Endpoint) DeliverNetworkPacket(protocol tcpip.NetworkProtocolNumber, pkt stack.PacketBufferPtr)
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) ParseHeader ¶
func (e *Endpoint) ParseHeader(pkt stack.PacketBufferPtr) bool
ParseHeader implements stack.LinkEndpoint.ParseHeader.
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) WritePackets ¶
WritePackets implements stack.LinkEndpoint.WritePackets. 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.