Documentation ¶
Overview ¶
Package nl has low level primitives for making Netlink calls.
Index ¶
- Constants
- Variables
- func BytesToString(b []byte) string
- func GetIPFamily(ip net.IP) int
- func GetIpsetFlags(cmd int) int
- func NativeEndian() binary.ByteOrder
- func NonZeroTerminated(s string) []byte
- func ParseAttributes(data []byte) <-chan Attribute
- func ParseRouteAttr(b []byte) ([]syscall.NetlinkRouteAttr, error)
- func PrintAttributes(data []byte)
- func Swap16(i uint16) uint16
- func Swap32(i uint32) uint32
- func Uint16Attr(v uint16) []byte
- func Uint32Attr(v uint32) []byte
- func Uint64Attr(v uint64) []byte
- func Uint8Attr(v uint8) []byte
- func ZeroTerminated(s string) []byte
- type Attribute
- type IPSetError
- type IfInfomsg
- type NetlinkRequest
- type NetlinkRequestData
- type NetlinkSocket
- func (s *NetlinkSocket) Close()
- func (s *NetlinkSocket) GetFd() int
- func (s *NetlinkSocket) GetPid() (uint32, error)
- func (s *NetlinkSocket) Receive() ([]syscall.NetlinkMessage, *unix.SockaddrNetlink, error)
- func (s *NetlinkSocket) Send(request *NetlinkRequest) error
- func (s *NetlinkSocket) SetReceiveTimeout(timeout *unix.Timeval) error
- func (s *NetlinkSocket) SetSendTimeout(timeout *unix.Timeval) error
- type Nfgenmsg
- type RtAttr
- type SocketHandle
- type Uint32Attribute
Constants ¶
const ( /* The protocol version */ IPSET_PROTOCOL = 6 /* The max length of strings including NUL: set and type identifiers */ IPSET_MAXNAMELEN = 32 /* The maximum permissible comment length we will accept over netlink */ IPSET_MAX_COMMENT_SIZE = 255 )
const ( IPSET_CMD_PROTOCOL /* 1: Return protocol version */ IPSET_CMD_CREATE /* 2: Create a new (empty) set */ IPSET_CMD_DESTROY /* 3: Destroy a (empty) set */ IPSET_CMD_FLUSH /* 4: Remove all elements from a set */ IPSET_CMD_RENAME /* 5: Rename a set */ IPSET_CMD_SWAP /* 6: Swap two sets */ IPSET_CMD_LIST /* 7: List sets */ IPSET_CMD_SAVE /* 8: Save sets */ IPSET_CMD_ADD /* 9: Add an element to a set */ IPSET_CMD_DEL /* 10: Delete an element from a set */ IPSET_CMD_TEST /* 11: Test an element in a set */ IPSET_CMD_HEADER /* 12: Get set header data only */ IPSET_CMD_TYPE /* 13: Get set type */ )
const ( IPSET_ATTR_PROTOCOL /* 1: Protocol version */ IPSET_ATTR_SETNAME /* 2: Name of the set */ IPSET_ATTR_TYPENAME /* 3: Typename */ IPSET_ATTR_REVISION /* 4: Settype revision */ IPSET_ATTR_FAMILY /* 5: Settype family */ IPSET_ATTR_FLAGS /* 6: Flags at command level */ IPSET_ATTR_DATA /* 7: Nested attributes */ IPSET_ATTR_ADT /* 8: Multiple data containers */ IPSET_ATTR_LINENO /* 9: Restore lineno */ IPSET_ATTR_PROTOCOL_MIN /* 10: Minimal supported version number */ IPSET_ATTR_SETNAME2 = IPSET_ATTR_TYPENAME /* Setname at rename/swap */ IPSET_ATTR_REVISION_MIN = IPSET_ATTR_PROTOCOL_MIN /* type rev min */ )
Attributes at command level
const ( IPSET_ATTR_IP = 1 IPSET_ATTR_IP_FROM = 1 IPSET_ATTR_IP_TO = 2 IPSET_ATTR_CIDR = 3 IPSET_ATTR_PORT = 4 IPSET_ATTR_PORT_FROM = 4 IPSET_ATTR_PORT_TO = 5 IPSET_ATTR_TIMEOUT = 6 IPSET_ATTR_PROTO = 7 IPSET_ATTR_CADT_FLAGS = 8 IPSET_ATTR_CADT_LINENO = IPSET_ATTR_LINENO /* 9 */ IPSET_ATTR_MARK = 10 IPSET_ATTR_MARKMASK = 11 /* Reserve empty slots */ IPSET_ATTR_CADT_MAX = 16 /* Create-only specific attributes */ IPSET_ATTR_GC = 3 + iota IPSET_ATTR_HASHSIZE IPSET_ATTR_MAXELEM IPSET_ATTR_NETMASK IPSET_ATTR_PROBES IPSET_ATTR_RESIZE IPSET_ATTR_SIZE /* Kernel-only */ IPSET_ATTR_ELEMENTS IPSET_ATTR_REFERENCES IPSET_ATTR_MEMSIZE SET_ATTR_CREATE_MAX )
CADT specific attributes
const ( IPSET_ATTR_IPADDR_IPV4 = 1 IPSET_ATTR_IPADDR_IPV6 = 2 )
IP specific attributes
const ( IPSET_ATTR_ETHER = IPSET_ATTR_CADT_MAX + iota + 1 IPSET_ATTR_NAME IPSET_ATTR_NAMEREF IPSET_ATTR_IP2 IPSET_ATTR_CIDR2 IPSET_ATTR_IP2_TO IPSET_ATTR_IFACE IPSET_ATTR_BYTES IPSET_ATTR_PACKETS IPSET_ATTR_COMMENT IPSET_ATTR_SKBMARK IPSET_ATTR_SKBPRIO IPSET_ATTR_SKBQUEUE )
ADT specific attributes
const ( IPSET_FLAG_BIT_BEFORE = 0 IPSET_FLAG_BEFORE = (1 << IPSET_FLAG_BIT_BEFORE) IPSET_FLAG_BIT_PHYSDEV = 1 IPSET_FLAG_PHYSDEV = (1 << IPSET_FLAG_BIT_PHYSDEV) IPSET_FLAG_BIT_NOMATCH = 2 IPSET_FLAG_NOMATCH = (1 << IPSET_FLAG_BIT_NOMATCH) IPSET_FLAG_BIT_WITH_COUNTERS = 3 IPSET_FLAG_WITH_COUNTERS = (1 << IPSET_FLAG_BIT_WITH_COUNTERS) IPSET_FLAG_BIT_WITH_COMMENT = 4 IPSET_FLAG_WITH_COMMENT = (1 << IPSET_FLAG_BIT_WITH_COMMENT) IPSET_FLAG_BIT_WITH_FORCEADD = 5 IPSET_FLAG_WITH_FORCEADD = (1 << IPSET_FLAG_BIT_WITH_FORCEADD) IPSET_FLAG_BIT_WITH_SKBINFO = 6 IPSET_FLAG_WITH_SKBINFO = (1 << IPSET_FLAG_BIT_WITH_SKBINFO) IPSET_FLAG_CADT_MAX = 15 )
Flags at CADT attribute level, upper half of cmdattrs
const ( IPSET_ERR_PRIVATE = 4096 + iota IPSET_ERR_PROTOCOL IPSET_ERR_FIND_TYPE IPSET_ERR_MAX_SETS IPSET_ERR_BUSY IPSET_ERR_EXIST_SETNAME2 IPSET_ERR_TYPE_MISMATCH IPSET_ERR_EXIST IPSET_ERR_INVALID_CIDR IPSET_ERR_INVALID_NETMASK IPSET_ERR_INVALID_FAMILY IPSET_ERR_TIMEOUT IPSET_ERR_REFERENCED IPSET_ERR_IPADDR_IPV4 IPSET_ERR_IPADDR_IPV6 IPSET_ERR_COUNTER IPSET_ERR_COMMENT IPSET_ERR_INVALID_MARKMASK IPSET_ERR_SKBINFO /* Type specific error codes */ IPSET_ERR_TYPE_SPECIFIC = 4352 )
const ( NLA_F_NESTED uint16 = (1 << 15) // #define NLA_F_NESTED (1 << 15) NLA_F_NET_BYTEORDER uint16 = (1 << 14) // #define NLA_F_NESTED (1 << 14) NLA_TYPE_MASK = ^(NLA_F_NESTED | NLA_F_NET_BYTEORDER) )
const ( // Family type definitions FAMILY_ALL = unix.AF_UNSPEC FAMILY_V4 = unix.AF_INET FAMILY_V6 = unix.AF_INET6 FAMILY_MPLS = unix.AF_MPLS // Arbitrary set value (greater than default 4k) to allow receiving // from kernel more verbose messages e.g. for statistics, // tc rules or filters, or other more memory requiring data. RECEIVE_BUFFER_SIZE = 65536 // Kernel netlink pid PidKernel uint32 = 0 )
const (
NFNETLINK_V0 = 0
)
#define NFNETLINK_V0 0
const SizeofNfgenmsg = 4
Variables ¶
var SocketTimeoutTv = unix.Timeval{Sec: 60, Usec: 0}
Default netlink socket timeout, 60s
var SupportedNlFamilies = []int{unix.NETLINK_ROUTE, unix.NETLINK_XFRM, unix.NETLINK_NETFILTER}
SupportedNlFamilies contains the list of netlink families this netlink package supports
Functions ¶
func BytesToString ¶
func GetIpsetFlags ¶
func NativeEndian ¶
NativeEndian gets native endianness for the system
func NonZeroTerminated ¶
func ParseAttributes ¶
func ParseRouteAttr ¶
func ParseRouteAttr(b []byte) ([]syscall.NetlinkRouteAttr, error)
func PrintAttributes ¶
func PrintAttributes(data []byte)
func Uint16Attr ¶
func Uint32Attr ¶
func Uint64Attr ¶
func ZeroTerminated ¶
Types ¶
type Attribute ¶
type IPSetError ¶
type IPSetError uintptr
func (IPSetError) Error ¶
func (e IPSetError) Error() string
type IfInfomsg ¶
IfInfomsg is related to links, but it is used for list requests as well
func DeserializeIfInfomsg ¶
func NewIfInfomsg ¶
Create an IfInfomsg with family specified
func NewIfInfomsgChild ¶
type NetlinkRequest ¶
type NetlinkRequest struct { unix.NlMsghdr Data []NetlinkRequestData RawData []byte SocketHandle *SocketHandle }
func NewNetlinkRequest ¶
func NewNetlinkRequest(proto, flags int) *NetlinkRequest
Create a new netlink request from proto and flags Note the Len value will be inaccurate once data is added until the message is serialized
func (*NetlinkRequest) AddData ¶
func (req *NetlinkRequest) AddData(data NetlinkRequestData)
func (*NetlinkRequest) AddRawData ¶
func (req *NetlinkRequest) AddRawData(data []byte)
AddRawData adds raw bytes to the end of the NetlinkRequest object during serialization
func (*NetlinkRequest) Execute ¶
func (req *NetlinkRequest) Execute(sockType int, resType uint16) ([][]byte, error)
Execute the request against a the given sockType. Returns a list of netlink messages in serialized format, optionally filtered by resType.
func (*NetlinkRequest) Serialize ¶
func (req *NetlinkRequest) Serialize() []byte
Serialize the Netlink Request into a byte array
type NetlinkRequestData ¶
type NetlinkSocket ¶
func Subscribe ¶
func Subscribe(protocol int, groups ...uint) (*NetlinkSocket, error)
Create a netlink socket with a given protocol (e.g. NETLINK_ROUTE) and subscribe it to multicast groups passed in variable argument list. Returns the netlink socket on which Receive() method can be called to retrieve the messages from the kernel.
func (*NetlinkSocket) Close ¶
func (s *NetlinkSocket) Close()
func (*NetlinkSocket) GetFd ¶
func (s *NetlinkSocket) GetFd() int
func (*NetlinkSocket) GetPid ¶
func (s *NetlinkSocket) GetPid() (uint32, error)
func (*NetlinkSocket) Receive ¶
func (s *NetlinkSocket) Receive() ([]syscall.NetlinkMessage, *unix.SockaddrNetlink, error)
func (*NetlinkSocket) Send ¶
func (s *NetlinkSocket) Send(request *NetlinkRequest) error
func (*NetlinkSocket) SetReceiveTimeout ¶
func (s *NetlinkSocket) SetReceiveTimeout(timeout *unix.Timeval) error
SetReceiveTimeout allows to set a receive timeout on the socket
func (*NetlinkSocket) SetSendTimeout ¶
func (s *NetlinkSocket) SetSendTimeout(timeout *unix.Timeval) error
SetSendTimeout allows to set a send timeout on the socket
type Nfgenmsg ¶
func DeserializeNfgenmsg ¶
type RtAttr ¶
Extend RtAttr to handle data and children
func NewRtAttrChild
deprecated
func (*RtAttr) AddChild ¶
func (a *RtAttr) AddChild(attr NetlinkRequestData)
AddChild adds an existing NetlinkRequestData as a child.
type SocketHandle ¶
type SocketHandle struct { Seq uint32 Socket *NetlinkSocket }
SocketHandle contains the netlink socket and the associated sequence counter for a specific netlink family
type Uint32Attribute ¶
func (*Uint32Attribute) Len ¶
func (a *Uint32Attribute) Len() int
func (*Uint32Attribute) Serialize ¶
func (a *Uint32Attribute) Serialize() []byte