netlink

package
v0.0.0-...-f67e10c Latest Latest
Warning

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

Go to latest
Published: May 3, 2024 License: Apache-2.0, MIT Imports: 26 Imported by: 12

Documentation

Overview

Package netlink provides core functionality for netlink sockets.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func ExtractSockAddr

func ExtractSockAddr(b []byte) (*linux.SockAddrNetlink, *syserr.Error)

ExtractSockAddr extracts the SockAddrNetlink from b.

func RegisterProvider

func RegisterProvider(protocol int, provider Provider)

RegisterProvider registers the provider of a given address protocol so that netlink sockets of that type can be created via socket(2).

Preconditions: May only be called before any netlink sockets are created.

Types

type Protocol

type Protocol interface {
	// Protocol returns the Linux netlink protocol value.
	Protocol() int

	// CanSend returns true if this protocol may ever send messages.
	//
	// TODO(gvisor.dev/issue/1119): This is a workaround to allow
	// advertising support for otherwise unimplemented features on sockets
	// that will never send messages, thus making those features no-ops.
	CanSend() bool

	// ProcessMessage processes a single message from userspace.
	//
	// If err == nil, any messages added to ms will be sent back to the
	// other end of the socket. Setting ms.Multi will cause an NLMSG_DONE
	// message to be sent even if ms contains no messages.
	ProcessMessage(ctx context.Context, msg *nlmsg.Message, ms *nlmsg.MessageSet) *syserr.Error
}

Protocol is the implementation of a netlink socket protocol.

type Provider

type Provider func(t *kernel.Task) (Protocol, *syserr.Error)

Provider is a function that creates a new Protocol for a specific netlink protocol.

Note that this is distinct from socket.Provider, which is used for all socket families.

type Socket

type Socket struct {
	vfs.FileDescriptionDefaultImpl
	vfs.DentryMetadataFileDescriptionImpl
	vfs.LockFD
	socket.SendReceiveTimeout
	// contains filtered or unexported fields
}

Socket is the base socket type for netlink sockets.

This implementation only supports userspace sending and receiving messages to/from the kernel.

Socket implements socket.Socket and transport.Credentialer.

+stateify savable

func New

func New(t *kernel.Task, skType linux.SockType, protocol Protocol) (*Socket, *syserr.Error)

New creates a new Socket.

func (*Socket) Accept

func (s *Socket) Accept(t *kernel.Task, peerRequested bool, flags int, blocking bool) (int32, linux.SockAddr, uint32, *syserr.Error)

Accept implements socket.Socket.Accept.

func (*Socket) Bind

func (s *Socket) Bind(t *kernel.Task, sockaddr []byte) *syserr.Error

Bind implements socket.Socket.Bind.

func (*Socket) Connect

func (s *Socket) Connect(t *kernel.Task, sockaddr []byte, blocking bool) *syserr.Error

Connect implements socket.Socket.Connect.

func (*Socket) ConnectedPasscred

func (s *Socket) ConnectedPasscred() bool

ConnectedPasscred implements transport.Credentialer.ConnectedPasscred.

func (*Socket) Epollable

func (s *Socket) Epollable() bool

Epollable implements FileDescriptionImpl.Epollable.

func (*Socket) EventRegister

func (s *Socket) EventRegister(e *waiter.Entry) error

EventRegister implements waiter.Waitable.EventRegister.

func (*Socket) EventUnregister

func (s *Socket) EventUnregister(e *waiter.Entry)

EventUnregister implements waiter.Waitable.EventUnregister.

func (*Socket) GetPeerName

func (s *Socket) GetPeerName(t *kernel.Task) (linux.SockAddr, uint32, *syserr.Error)

GetPeerName implements socket.Socket.GetPeerName.

func (*Socket) GetSockName

func (s *Socket) GetSockName(t *kernel.Task) (linux.SockAddr, uint32, *syserr.Error)

GetSockName implements socket.Socket.GetSockName.

func (*Socket) GetSockOpt

func (s *Socket) GetSockOpt(t *kernel.Task, level int, name int, outPtr hostarch.Addr, outLen int) (marshal.Marshallable, *syserr.Error)

GetSockOpt implements socket.Socket.GetSockOpt.

func (*Socket) Ioctl

func (*Socket) Ioctl(ctx context.Context, uio usermem.IO, sysno uintptr, args arch.SyscallArguments) (uintptr, error)

Ioctl implements vfs.FileDescriptionImpl.

func (*Socket) Listen

func (s *Socket) Listen(t *kernel.Task, backlog int) *syserr.Error

Listen implements socket.Socket.Listen.

func (*Socket) PRead

func (s *Socket) PRead(ctx context.Context, dst usermem.IOSequence, offset int64, opts vfs.ReadOptions) (int64, error)

PRead implements vfs.FileDescriptionImpl.

func (*Socket) PWrite

func (s *Socket) PWrite(ctx context.Context, src usermem.IOSequence, offset int64, opts vfs.WriteOptions) (int64, error)

PWrite implements vfs.FileDescriptionImpl.

func (*Socket) Passcred

func (s *Socket) Passcred() bool

Passcred implements transport.Credentialer.Passcred.

func (*Socket) Read

func (s *Socket) Read(ctx context.Context, dst usermem.IOSequence, opts vfs.ReadOptions) (int64, error)

Read implements vfs.FileDescriptionImpl.

func (*Socket) Readiness

func (s *Socket) Readiness(mask waiter.EventMask) waiter.EventMask

Readiness implements waiter.Waitable.Readiness.

func (*Socket) RecvMsg

func (s *Socket) RecvMsg(t *kernel.Task, dst usermem.IOSequence, flags int, haveDeadline bool, deadline ktime.Time, senderRequested bool, controlDataLen uint64) (int, int, linux.SockAddr, uint32, socket.ControlMessages, *syserr.Error)

RecvMsg implements socket.Socket.RecvMsg.

func (*Socket) Release

func (s *Socket) Release(ctx context.Context)

Release implements vfs.FileDescriptionImpl.Release.

func (*Socket) SendMsg

func (s *Socket) SendMsg(t *kernel.Task, src usermem.IOSequence, to []byte, flags int, haveDeadline bool, deadline ktime.Time, controlMessages socket.ControlMessages) (int, *syserr.Error)

SendMsg implements socket.Socket.SendMsg.

func (*Socket) SetSockOpt

func (s *Socket) SetSockOpt(t *kernel.Task, level int, name int, opt []byte) *syserr.Error

SetSockOpt implements socket.Socket.SetSockOpt.

func (*Socket) Shutdown

func (s *Socket) Shutdown(t *kernel.Task, how int) *syserr.Error

Shutdown implements socket.Socket.Shutdown.

func (*Socket) State

func (s *Socket) State() uint32

State implements socket.Socket.State.

func (*Socket) Type

func (s *Socket) Type() (family int, skType linux.SockType, protocol int)

Type implements socket.Socket.Type.

func (*Socket) Write

func (s *Socket) Write(ctx context.Context, src usermem.IOSequence, opts vfs.WriteOptions) (int64, error)

Write implements vfs.FileDescriptionImpl.

Directories

Path Synopsis
Package nlmsg provides helpers to parse and construct netlink messages.
Package nlmsg provides helpers to parse and construct netlink messages.
Package port provides port ID allocation for netlink sockets.
Package port provides port ID allocation for netlink sockets.
Package route provides a NETLINK_ROUTE socket protocol.
Package route provides a NETLINK_ROUTE socket protocol.
Package uevent provides a NETLINK_KOBJECT_UEVENT socket protocol.
Package uevent provides a NETLINK_KOBJECT_UEVENT socket protocol.

Jump to

Keyboard shortcuts

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