package netlink
import "gvisor.dev/gvisor/pkg/sentry/socket/netlink"
Package netlink provides core functionality for netlink sockets.
Index ¶
- func ExtractSockAddr(b []byte) (*linux.SockAddrNetlink, *syserr.Error)
- func RegisterProvider(protocol int, provider Provider)
- type Protocol
- type Provider
- type Socket
- func New(t *kernel.Task, skType linux.SockType, protocol Protocol) (*Socket, *syserr.Error)
- func (s *Socket) Accept(t *kernel.Task, peerRequested bool, flags int, blocking bool) (int32, linux.SockAddr, uint32, *syserr.Error)
- func (s *Socket) Bind(t *kernel.Task, sockaddr []byte) *syserr.Error
- func (s *Socket) Connect(t *kernel.Task, sockaddr []byte, blocking bool) *syserr.Error
- func (s *Socket) ConnectedPasscred() bool
- func (s *Socket) Epollable() bool
- func (s *Socket) EventRegister(e *waiter.Entry) error
- func (s *Socket) EventUnregister(e *waiter.Entry)
- func (s *Socket) GetPeerName(t *kernel.Task) (linux.SockAddr, uint32, *syserr.Error)
- func (s *Socket) GetSockName(t *kernel.Task) (linux.SockAddr, uint32, *syserr.Error)
- func (s *Socket) GetSockOpt(t *kernel.Task, level int, name int, outPtr hostarch.Addr, outLen int) (marshal.Marshallable, *syserr.Error)
- func (*Socket) Ioctl(ctx context.Context, uio usermem.IO, sysno uintptr, args arch.SyscallArguments) (uintptr, error)
- func (s *Socket) Listen(t *kernel.Task, backlog int) *syserr.Error
- func (s *Socket) PRead(ctx context.Context, dst usermem.IOSequence, offset int64, opts vfs.ReadOptions) (int64, error)
- func (s *Socket) PWrite(ctx context.Context, src usermem.IOSequence, offset int64, opts vfs.WriteOptions) (int64, error)
- func (s *Socket) Passcred() bool
- func (s *Socket) Read(ctx context.Context, dst usermem.IOSequence, opts vfs.ReadOptions) (int64, error)
- func (s *Socket) Readiness(mask waiter.EventMask) waiter.EventMask
- 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)
- func (s *Socket) Release(ctx context.Context)
- 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)
- func (s *Socket) SetSockOpt(t *kernel.Task, level int, name int, opt []byte) *syserr.Error
- func (s *Socket) Shutdown(t *kernel.Task, how int) *syserr.Error
- func (s *Socket) Stack() inet.Stack
- func (s *Socket) State() uint32
- func (s *Socket) Type() (family int, skType linux.SockType, protocol int)
- func (s *Socket) Write(ctx context.Context, src usermem.IOSequence, opts vfs.WriteOptions) (int64, error)
Functions ¶
func ExtractSockAddr ¶
func ExtractSockAddr(b []byte) (*linux.SockAddrNetlink, *syserr.Error)
ExtractSockAddr extracts the SockAddrNetlink from b.
func RegisterProvider ¶
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, s *Socket, msg *nlmsg.Message, ms *nlmsg.MessageSet) *syserr.Error }
Protocol is the implementation of a netlink socket protocol.
type Provider ¶
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 ¶
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 ¶
Bind implements socket.Socket.Bind.
func (*Socket) Connect ¶
Connect implements socket.Socket.Connect.
func (*Socket) ConnectedPasscred ¶
ConnectedPasscred implements transport.Credentialer.ConnectedPasscred.
func (*Socket) Epollable ¶
Epollable implements FileDescriptionImpl.Epollable.
func (*Socket) EventRegister ¶
EventRegister implements waiter.Waitable.EventRegister.
func (*Socket) EventUnregister ¶
EventUnregister implements waiter.Waitable.EventUnregister.
func (*Socket) GetPeerName ¶
GetPeerName implements socket.Socket.GetPeerName.
func (*Socket) GetSockName ¶
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 ¶
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 ¶
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 ¶
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 ¶
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 ¶
SetSockOpt implements socket.Socket.SetSockOpt.
func (*Socket) Shutdown ¶
Shutdown implements socket.Socket.Shutdown.
func (*Socket) Stack ¶
Stack returns the network stack associated with the socket.
func (*Socket) State ¶
State implements socket.Socket.State.
func (*Socket) Type ¶
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.
Source Files ¶
provider.go socket.go
Directories ¶
Path | Synopsis |
---|---|
pkg/sentry/socket/netlink/nlmsg | Package nlmsg provides helpers to parse and construct netlink messages. |
pkg/sentry/socket/netlink/port | Package port provides port ID allocation for netlink sockets. |
pkg/sentry/socket/netlink/route | Package route provides a NETLINK_ROUTE socket protocol. |
pkg/sentry/socket/netlink/uevent | Package uevent provides a NETLINK_KOBJECT_UEVENT socket protocol. |
- Version
- v0.0.0-20250605235530-a6711d1e1dc6 (latest)
- Published
- Jun 5, 2025
- Platform
- linux/amd64
- Imports
- 27 packages
- Last checked
- 4 hours ago –
Tools for package owners.