Documentation ¶
Overview ¶
Package channel provides the implementation of channel-based data-link layer endpoints. Such endpoints allow injection of inbound packets and store outbound packets in a channel.
Index ¶
- type Endpoint
- func (*Endpoint) ARPHardwareType() header.ARPHardwareType
- func (*Endpoint) AddHeader(*stack.PacketBuffer)
- func (e *Endpoint) AddNotify(notify Notification) *NotificationHandle
- func (e *Endpoint) Attach(dispatcher stack.NetworkDispatcher)
- func (e *Endpoint) Capabilities() stack.LinkEndpointCapabilities
- func (e *Endpoint) Close()
- func (e *Endpoint) Drain() int
- func (*Endpoint) GSOMaxSize() uint32
- func (e *Endpoint) InjectInbound(protocol tcpip.NetworkProtocolNumber, pkt *stack.PacketBuffer)
- func (e *Endpoint) IsAttached() bool
- func (e *Endpoint) LinkAddress() tcpip.LinkAddress
- func (e *Endpoint) MTU() uint32
- func (*Endpoint) MaxHeaderLength() uint16
- func (e *Endpoint) NumQueued() int
- func (*Endpoint) ParseHeader(*stack.PacketBuffer) bool
- func (e *Endpoint) Read() *stack.PacketBuffer
- func (e *Endpoint) ReadContext(ctx context.Context) *stack.PacketBuffer
- func (e *Endpoint) RemoveNotify(handle *NotificationHandle)
- func (e *Endpoint) SetLinkAddress(addr tcpip.LinkAddress)
- func (e *Endpoint) SetMTU(mtu uint32)
- func (*Endpoint) SetOnCloseAction(func())
- func (e *Endpoint) SupportedGSO() stack.SupportedGSO
- func (*Endpoint) Wait()
- func (e *Endpoint) WritePackets(pkts stack.PacketBufferList) (int, tcpip.Error)
- type Notification
- type NotificationHandle
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Endpoint ¶
type Endpoint struct { LinkEPCapabilities stack.LinkEndpointCapabilities SupportedGSOKind stack.SupportedGSO // contains filtered or unexported fields }
Endpoint is link layer endpoint that stores outbound packets in a channel and allows injection of inbound packets.
+stateify savable
func New ¶
func New(size int, mtu uint32, linkAddr tcpip.LinkAddress) *Endpoint
New creates a new channel endpoint.
func (*Endpoint) ARPHardwareType ¶
func (*Endpoint) ARPHardwareType() header.ARPHardwareType
ARPHardwareType implements stack.LinkEndpoint.ARPHardwareType.
func (*Endpoint) AddHeader ¶
func (*Endpoint) AddHeader(*stack.PacketBuffer)
AddHeader implements stack.LinkEndpoint.AddHeader.
func (*Endpoint) AddNotify ¶
func (e *Endpoint) AddNotify(notify Notification) *NotificationHandle
AddNotify adds a notification target for receiving event about outgoing packets.
func (*Endpoint) Attach ¶
func (e *Endpoint) Attach(dispatcher stack.NetworkDispatcher)
Attach saves the stack network-layer dispatcher for use later when packets are injected.
func (*Endpoint) Capabilities ¶
func (e *Endpoint) Capabilities() stack.LinkEndpointCapabilities
Capabilities implements stack.LinkEndpoint.Capabilities.
func (*Endpoint) Close ¶
func (e *Endpoint) Close()
Close closes e. Further packet injections will return an error, and all pending packets are discarded. Close may be called concurrently with WritePackets.
func (*Endpoint) GSOMaxSize ¶
GSOMaxSize implements stack.GSOEndpoint.
func (*Endpoint) InjectInbound ¶
func (e *Endpoint) InjectInbound(protocol tcpip.NetworkProtocolNumber, pkt *stack.PacketBuffer)
InjectInbound injects an inbound packet. If the endpoint is not attached, the packet is not delivered.
func (*Endpoint) IsAttached ¶
IsAttached implements stack.LinkEndpoint.IsAttached.
func (*Endpoint) LinkAddress ¶
func (e *Endpoint) LinkAddress() tcpip.LinkAddress
LinkAddress returns the link address of this endpoint.
func (*Endpoint) MaxHeaderLength ¶
MaxHeaderLength returns the maximum size of the link layer header. Given it doesn't have a header, it just returns 0.
func (*Endpoint) ParseHeader ¶
func (*Endpoint) ParseHeader(*stack.PacketBuffer) bool
ParseHeader implements stack.LinkEndpoint.ParseHeader.
func (*Endpoint) Read ¶
func (e *Endpoint) Read() *stack.PacketBuffer
Read does non-blocking read one packet from the outbound packet queue.
func (*Endpoint) ReadContext ¶
func (e *Endpoint) ReadContext(ctx context.Context) *stack.PacketBuffer
ReadContext does blocking read for one packet from the outbound packet queue. It can be cancelled by ctx, and in this case, it returns nil.
func (*Endpoint) RemoveNotify ¶
func (e *Endpoint) RemoveNotify(handle *NotificationHandle)
RemoveNotify removes handle from the list of notification targets.
func (*Endpoint) SetLinkAddress ¶
func (e *Endpoint) SetLinkAddress(addr tcpip.LinkAddress)
SetLinkAddress implements stack.LinkEndpoint.SetLinkAddress.
func (*Endpoint) SetOnCloseAction ¶
func (*Endpoint) SetOnCloseAction(func())
SetOnCloseAction implements stack.LinkEndpoint.
func (*Endpoint) SupportedGSO ¶
func (e *Endpoint) SupportedGSO() stack.SupportedGSO
SupportedGSO implements stack.GSOEndpoint.
func (*Endpoint) WritePackets ¶
WritePackets stores outbound packets into the channel. Multiple concurrent calls are permitted.
type Notification ¶
type Notification interface {
// WriteNotify will be called when a write happens to the queue.
WriteNotify()
}
Notification is the interface for receiving notification from the packet queue.
type NotificationHandle ¶
type NotificationHandle struct {
// contains filtered or unexported fields
}
NotificationHandle is an opaque handle to the registered notification target. It can be used to unregister the notification when no longer interested.
+stateify savable