inet

package
v1.0.1 Latest Latest
Warning

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

Go to latest
Published: Apr 30, 2024 License: Apache-2.0, MIT Imports: 15 Imported by: 0

Documentation

Overview

Package inet defines semantics for IP stacks.

Index

Constants

View Source
const (
	// CtxStack is a Context.Value key for a network stack.
	CtxStack contextID = iota
)

Variables

This section is empty.

Functions

This section is empty.

Types

type AbstractSocketNamespace

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

AbstractSocketNamespace is used to implement the Linux abstract socket functionality.

+stateify savable

func (*AbstractSocketNamespace) Bind

Bind binds the given socket.

When the last reference managed by socket is dropped, ep may be removed from the namespace.

func (*AbstractSocketNamespace) BoundEndpoint

func (a *AbstractSocketNamespace) BoundEndpoint(name string) transport.BoundEndpoint

BoundEndpoint retrieves the endpoint bound to the given name. The return value is nil if no endpoint was bound.

func (*AbstractSocketNamespace) Remove

func (a *AbstractSocketNamespace) Remove(name string, socket refs.TryRefCounter)

Remove removes the specified socket at name from the abstract socket namespace, if it has not yet been replaced.

type Interface

type Interface struct {
	// DeviceType is the device type, a Linux ARPHRD_* constant.
	DeviceType uint16

	// Flags is the device flags; see netdevice(7), under "Ioctls",
	// "SIOCGIFFLAGS, SIOCSIFFLAGS".
	Flags uint32

	// Name is the device name.
	Name string

	// Addr is the hardware device address.
	Addr []byte

	// MTU is the maximum transmission unit.
	MTU uint32

	// Features are the device features queried from the host at
	// stack creation time. These are immutable after startup.
	Features []linux.EthtoolGetFeaturesBlock
}

Interface contains information about a network interface.

type InterfaceAddr

type InterfaceAddr struct {
	// Family is the address family, a Linux AF_* constant.
	Family uint8

	// PrefixLen is the address prefix length.
	PrefixLen uint8

	// Flags is the address flags.
	Flags uint8

	// Addr is the actual address.
	Addr []byte
}

InterfaceAddr contains information about a network interface address.

type Namespace

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

Namespace represents a network namespace. See network_namespaces(7).

+stateify savable

func NewNamespace

func NewNamespace(root *Namespace, userNS *auth.UserNamespace) *Namespace

NewNamespace creates a new network namespace from the root.

func NewRootNamespace

func NewRootNamespace(stack Stack, creator NetworkStackCreator, userNS *auth.UserNamespace) *Namespace

NewRootNamespace creates the root network namespace, with creator allowing new network namespaces to be created. If creator is nil, no networking will function if the network is namespaced.

func (*Namespace) AbstractSockets

func (n *Namespace) AbstractSockets() *AbstractSocketNamespace

AbstractSockets returns AbstractSocketNamespace.

func (*Namespace) DecRef

func (n *Namespace) DecRef(ctx context.Context)

DecRef decrements the Namespace's refcount.

func (*Namespace) Destroy

func (n *Namespace) Destroy(ctx context.Context)

Destroy implements nsfs.Namespace.Destroy.

func (*Namespace) GetInode

func (n *Namespace) GetInode() *nsfs.Inode

GetInode returns the nsfs inode associated with this namespace.

func (*Namespace) IncRef

func (n *Namespace) IncRef()

IncRef increments the Namespace's refcount.

func (*Namespace) IsRoot

func (n *Namespace) IsRoot() bool

IsRoot returns whether n is the root network namespace.

func (*Namespace) ResetStack

func (n *Namespace) ResetStack()

ResetStack resets the stack in the network namespace to nil. This should only be called when restoring kernel.

func (*Namespace) RestoreRootStack

func (n *Namespace) RestoreRootStack(stack Stack)

RestoreRootStack restores the root network namespace with stack. This should only be called when restoring kernel.

func (*Namespace) SetInode

func (n *Namespace) SetInode(inode *nsfs.Inode)

SetInode sets the nsfs `inode` to the namespace.

func (*Namespace) Stack

func (n *Namespace) Stack() Stack

Stack returns the network stack of n. Stack may return nil if no network stack is configured.

func (*Namespace) Type

func (n *Namespace) Type() string

Type implements nsfs.Namespace.Type.

func (*Namespace) UserNamespace

func (n *Namespace) UserNamespace() *auth.UserNamespace

UserNamespace returns the user namespace associated with this namespace.

type NetworkStackCreator

type NetworkStackCreator interface {
	// CreateStack creates a new network stack for a network namespace.
	CreateStack() (Stack, error)
}

NetworkStackCreator allows new instances of a network stack to be created. It is used by the kernel to create new network namespaces when requested.

type Route

type Route struct {
	// Family is the address family, a Linux AF_* constant.
	Family uint8

	// DstLen is the length of the destination address.
	DstLen uint8

	// SrcLen is the length of the source address.
	SrcLen uint8

	// TOS is the Type of Service filter.
	TOS uint8

	// Table is the routing table ID.
	Table uint8

	// Protocol is the route origin, a Linux RTPROT_* constant.
	Protocol uint8

	// Scope is the distance to destination, a Linux RT_SCOPE_* constant.
	Scope uint8

	// Type is the route origin, a Linux RTN_* constant.
	Type uint8

	// Flags are route flags. See rtnetlink(7) under "rtm_flags".
	Flags uint32

	// DstAddr is the route destination address (RTA_DST).
	DstAddr []byte

	// SrcAddr is the route source address (RTA_SRC).
	SrcAddr []byte

	// OutputInterface is the output interface index (RTA_OIF).
	OutputInterface int32

	// GatewayAddr is the route gateway address (RTA_GATEWAY).
	GatewayAddr []byte
}

Route contains information about a network route.

type Stack

type Stack interface {
	// Interfaces returns all network interfaces as a mapping from interface
	// indexes to interface properties. Interface indices are strictly positive
	// integers.
	Interfaces() map[int32]Interface

	// RemoveInterface removes the specified network interface.
	RemoveInterface(idx int32) error

	// InterfaceAddrs returns all network interface addresses as a mapping from
	// interface indexes to a slice of associated interface address properties.
	InterfaceAddrs() map[int32][]InterfaceAddr

	// AddInterfaceAddr adds an address to the network interface identified by
	// idx.
	AddInterfaceAddr(idx int32, addr InterfaceAddr) error

	// SetInterface modifies or adds a new interface.
	SetInterface(ctx context.Context, msg *nlmsg.Message) *syserr.Error

	// RemoveInterfaceAddr removes an address from the network interface
	// identified by idx.
	RemoveInterfaceAddr(idx int32, addr InterfaceAddr) error

	// SupportsIPv6 returns true if the stack supports IPv6 connectivity.
	SupportsIPv6() bool

	// TCPReceiveBufferSize returns TCP receive buffer size settings.
	TCPReceiveBufferSize() (TCPBufferSize, error)

	// SetTCPReceiveBufferSize attempts to change TCP receive buffer size
	// settings.
	SetTCPReceiveBufferSize(size TCPBufferSize) error

	// TCPSendBufferSize returns TCP send buffer size settings.
	TCPSendBufferSize() (TCPBufferSize, error)

	// SetTCPSendBufferSize attempts to change TCP send buffer size settings.
	SetTCPSendBufferSize(size TCPBufferSize) error

	// TCPSACKEnabled returns true if RFC 2018 TCP Selective Acknowledgements
	// are enabled.
	TCPSACKEnabled() (bool, error)

	// SetTCPSACKEnabled attempts to change TCP selective acknowledgement
	// settings.
	SetTCPSACKEnabled(enabled bool) error

	// TCPRecovery returns the TCP loss detection algorithm.
	TCPRecovery() (TCPLossRecovery, error)

	// SetTCPRecovery attempts to change TCP loss detection algorithm.
	SetTCPRecovery(recovery TCPLossRecovery) error

	// Statistics reports stack statistics.
	Statistics(stat any, arg string) error

	// RouteTable returns the network stack's route table.
	RouteTable() []Route

	// Pause pauses the network stack before save.
	Pause()

	// Resume resumes the network stack after save.
	Resume()

	// Restore restarts the network stack after restore.
	Restore()

	// Destroy the network stack.
	Destroy()

	// RegisteredEndpoints returns all endpoints which are currently registered.
	RegisteredEndpoints() []stack.TransportEndpoint

	// CleanupEndpoints returns endpoints currently in the cleanup state.
	CleanupEndpoints() []stack.TransportEndpoint

	// RestoreCleanupEndpoints adds endpoints to cleanup tracking. This is useful
	// for restoring a stack after a save.
	RestoreCleanupEndpoints([]stack.TransportEndpoint)

	// SetForwarding enables or disables packet forwarding between NICs.
	SetForwarding(protocol tcpip.NetworkProtocolNumber, enable bool) error

	// PortRange returns the UDP and TCP inclusive range of ephemeral ports
	// used in both IPv4 and IPv6.
	PortRange() (uint16, uint16)

	// SetPortRange sets the UDP and TCP IPv4 and IPv6 ephemeral port range
	// (inclusive).
	SetPortRange(start uint16, end uint16) error
}

Stack represents a TCP/IP stack.

func StackFromContext

func StackFromContext(ctx context.Context) Stack

StackFromContext returns the network stack associated with ctx.

type StatDev

type StatDev [16]uint64

StatDev describes one line of /proc/net/dev, i.e., stats for one network interface.

type StatSNMPICMP

type StatSNMPICMP [27]uint64

StatSNMPICMP describes Icmp line of /proc/net/snmp.

type StatSNMPICMPMSG

type StatSNMPICMPMSG [512]uint64

StatSNMPICMPMSG describes IcmpMsg line of /proc/net/snmp.

type StatSNMPIP

type StatSNMPIP [19]uint64

StatSNMPIP describes Ip line of /proc/net/snmp.

type StatSNMPTCP

type StatSNMPTCP [15]uint64

StatSNMPTCP describes Tcp line of /proc/net/snmp.

type StatSNMPUDP

type StatSNMPUDP [8]uint64

StatSNMPUDP describes Udp line of /proc/net/snmp.

type StatSNMPUDPLite

type StatSNMPUDPLite [8]uint64

StatSNMPUDPLite describes UdpLite line of /proc/net/snmp.

type TCPBufferSize

type TCPBufferSize struct {
	// Min is the minimum size.
	Min int

	// Default is the default size.
	Default int

	// Max is the maximum size.
	Max int
}

TCPBufferSize contains settings controlling TCP buffer sizing.

+stateify savable

type TCPLossRecovery

type TCPLossRecovery int32

TCPLossRecovery indicates TCP loss detection and recovery methods to use.

const (
	TCP_RACK_LOSS_DETECTION TCPLossRecovery = 1 << iota
	TCP_RACK_STATIC_REO_WND
	TCP_RACK_NO_DUPTHRESH
)

Loss recovery constants from include/net/tcp.h which are used to set /proc/sys/net/ipv4/tcp_recovery.

type TestStack

type TestStack struct {
	InterfacesMap     map[int32]Interface
	InterfaceAddrsMap map[int32][]InterfaceAddr
	RouteList         []Route
	SupportsIPv6Flag  bool
	TCPRecvBufSize    TCPBufferSize
	TCPSendBufSize    TCPBufferSize
	TCPSACKFlag       bool
	Recovery          TCPLossRecovery
	IPForwarding      bool
}

TestStack is a dummy implementation of Stack for tests.

func NewTestStack

func NewTestStack() *TestStack

NewTestStack returns a TestStack with no network interfaces. The value of all other options is unspecified; tests that rely on specific values must set them explicitly.

func (*TestStack) AddInterfaceAddr

func (s *TestStack) AddInterfaceAddr(idx int32, addr InterfaceAddr) error

AddInterfaceAddr implements Stack.

func (*TestStack) CleanupEndpoints

func (s *TestStack) CleanupEndpoints() []stack.TransportEndpoint

CleanupEndpoints implements Stack.

func (*TestStack) Destroy

func (s *TestStack) Destroy()

Destroy implements Stack.

func (*TestStack) GROTimeout

func (*TestStack) GROTimeout(NICID int32) (time.Duration, error)

GROTimeout implements Stack.

func (*TestStack) InterfaceAddrs

func (s *TestStack) InterfaceAddrs() map[int32][]InterfaceAddr

InterfaceAddrs implements Stack.

func (*TestStack) Interfaces

func (s *TestStack) Interfaces() map[int32]Interface

Interfaces implements Stack.

func (*TestStack) Pause

func (s *TestStack) Pause()

Pause implements Stack.

func (*TestStack) PortRange

func (*TestStack) PortRange() (uint16, uint16)

PortRange implements Stack.

func (*TestStack) RegisteredEndpoints

func (s *TestStack) RegisteredEndpoints() []stack.TransportEndpoint

RegisteredEndpoints implements Stack.

func (*TestStack) RemoveInterface

func (s *TestStack) RemoveInterface(idx int32) error

RemoveInterface implements Stack.

func (*TestStack) RemoveInterfaceAddr

func (s *TestStack) RemoveInterfaceAddr(idx int32, addr InterfaceAddr) error

RemoveInterfaceAddr implements Stack.

func (*TestStack) Restore

func (s *TestStack) Restore()

Restore implements Stack.

func (*TestStack) RestoreCleanupEndpoints

func (s *TestStack) RestoreCleanupEndpoints([]stack.TransportEndpoint)

RestoreCleanupEndpoints implements Stack.

func (*TestStack) Resume

func (s *TestStack) Resume()

Resume implements Stack.

func (*TestStack) RouteTable

func (s *TestStack) RouteTable() []Route

RouteTable implements Stack.

func (*TestStack) SetForwarding

func (s *TestStack) SetForwarding(protocol tcpip.NetworkProtocolNumber, enable bool) error

SetForwarding implements Stack.

func (*TestStack) SetGROTimeout

func (*TestStack) SetGROTimeout(NICID int32, timeout time.Duration) error

SetGROTimeout implements Stack.

func (*TestStack) SetInterface

func (s *TestStack) SetInterface(ctx context.Context, msg *nlmsg.Message) *syserr.Error

SetInterface implements Stack.

func (*TestStack) SetPortRange

func (*TestStack) SetPortRange(start uint16, end uint16) error

SetPortRange implements Stack.

func (*TestStack) SetTCPReceiveBufferSize

func (s *TestStack) SetTCPReceiveBufferSize(size TCPBufferSize) error

SetTCPReceiveBufferSize implements Stack.

func (*TestStack) SetTCPRecovery

func (s *TestStack) SetTCPRecovery(recovery TCPLossRecovery) error

SetTCPRecovery implements Stack.

func (*TestStack) SetTCPSACKEnabled

func (s *TestStack) SetTCPSACKEnabled(enabled bool) error

SetTCPSACKEnabled implements Stack.

func (*TestStack) SetTCPSendBufferSize

func (s *TestStack) SetTCPSendBufferSize(size TCPBufferSize) error

SetTCPSendBufferSize implements Stack.

func (*TestStack) Statistics

func (s *TestStack) Statistics(stat any, arg string) error

Statistics implements Stack.

func (*TestStack) SupportsIPv6

func (s *TestStack) SupportsIPv6() bool

SupportsIPv6 implements Stack.

func (*TestStack) TCPReceiveBufferSize

func (s *TestStack) TCPReceiveBufferSize() (TCPBufferSize, error)

TCPReceiveBufferSize implements Stack.

func (*TestStack) TCPRecovery

func (s *TestStack) TCPRecovery() (TCPLossRecovery, error)

TCPRecovery implements Stack.

func (*TestStack) TCPSACKEnabled

func (s *TestStack) TCPSACKEnabled() (bool, error)

TCPSACKEnabled implements Stack.

func (*TestStack) TCPSendBufferSize

func (s *TestStack) TCPSendBufferSize() (TCPBufferSize, error)

TCPSendBufferSize implements Stack.

Jump to

Keyboard shortcuts

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