netfilter
firewalling, NAT, and packet mangling for linux
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
Messages

Netlink Message Construction/Parsing Interface. More...

Collaboration diagram for Messages:

Modules

 Netlink attribute helpers
 Netlink Type-Length-Value (TLV) attribute:
 

Data Structures

struct  nlmsghdr
 Netlink message header. More...
 
struct  nlmsgerr
 Netlink error message. More...
 

Macros

#define NL_AUTO_PID   0
 Will cause the netlink pid to be set to the pid assigned to the netlink handle (socket) just before sending the message off. More...
 
#define NL_AUTO_SEQ   0
 May be used to refer to a sequence number which should be automatically set just before sending the message off. More...
 

Iterators

#define nlmsg_for_each_attr(pos, nlh, hdrlen, rem)
 Iterate over a stream of attributes in a message. More...
 
#define nlmsg_for_each_msg(pos, head, len, rem)
 Iterate over a stream of messages. More...
 

Standard message flags

#define NLM_F_REQUEST   1
 Must be set on all request messages (typically from user space to kernel space). More...
 
#define NLM_F_MULTI   2
 Indicates the message is part of a multipart message terminated by NLMSG_DONE. More...
 
#define NLM_F_ACK   4
 Request for an acknowledgment on success. More...
 
#define NLM_F_ECHO   8
 Echo this request. More...
 

Additional message flags for GET requests

#define NLM_F_ROOT   0x100
 Return the complete table instead of a single entry. More...
 
#define NLM_F_MATCH   0x200
 Return all entries matching criteria passed in message content. More...
 
#define NLM_F_ATOMIC   0x400
 Return an atomic snapshot of the table being referenced. More...
 
#define NLM_F_DUMP   (NLM_F_ROOT|NLM_F_MATCH)
 Dump all entries. More...
 

Additional messsage flags for NEW requests

#define NLM_F_REPLACE   0x100
 Replace existing matching config object with this request. More...
 
#define NLM_F_EXCL   0x200
 Don't replace the config object if it already exists. More...
 
#define NLM_F_CREATE   0x400
 Create config object if it doesn't already exist. More...
 
#define NLM_F_APPEND   0x800
 Add to the end of the object list. More...
 

Standard Message types

#define NLMSG_NOOP   0x1
 No operation, message must be ignored. More...
 
#define NLMSG_ERROR   0x2
 The message signals an error and the payload contains a nlmsgerr structure. More...
 
#define NLMSG_DONE   0x3
 Message terminates a multipart message. More...
 
#define NLMSG_OVERRUN   0x4
 The message signals that data got lost. More...
 
#define NLMSG_MIN_TYPE   0x10
 Lower limit of reserved message types. More...
 

Size Calculations

int nlmsg_msg_size (int payload)
 length of netlink message not including padding More...
 
int nlmsg_total_size (int payload)
 length of netlink message including padding More...
 
int nlmsg_padlen (int payload)
 length of padding at the message's tail More...
 

Payload Access

void * nlmsg_data (const struct nlmsghdr *nlh)
 head of message payload More...
 
void * nlmsg_tail (const struct nlmsghdr *nlh)
 
int nlmsg_len (const struct nlmsghdr *nlh)
 length of message payload More...
 

Attribute Access

struct nlattrnlmsg_attrdata (const struct nlmsghdr *nlh, int hdrlen)
 head of attributes data More...
 
int nlmsg_attrlen (const struct nlmsghdr *nlh, int hdrlen)
 length of attributes data More...
 

Message Parsing

int nlmsg_valid_hdr (const struct nlmsghdr *nlh, int hdrlen)
 
int nlmsg_ok (const struct nlmsghdr *nlh, int remaining)
 check if the netlink message fits into the remaining bytes More...
 
struct nlmsghdrnlmsg_next (struct nlmsghdr *nlh, int *remaining)
 next netlink message in message stream More...
 
int nlmsg_parse (struct nlmsghdr *nlh, int hdrlen, struct nlattr *tb[], int maxtype, struct nla_policy *policy)
 parse attributes of a netlink message More...
 
struct nlattrnlmsg_find_attr (struct nlmsghdr *nlh, int hdrlen, int attrtype)
 nlmsg_find_attr - find a specific attribute in a netlink message More...
 
int nlmsg_validate (struct nlmsghdr *nlh, int hdrlen, int maxtype, struct nla_policy *policy)
 nlmsg_validate - validate a netlink message including attributes More...
 

Message Building/Access

struct nl_msgnlmsg_alloc (void)
 Allocate a new netlink message with the default maximum payload size. More...
 
struct nl_msgnlmsg_alloc_size (size_t max)
 Allocate a new netlink message with maximum payload size specified. More...
 
struct nl_msgnlmsg_inherit (struct nlmsghdr *hdr)
 Allocate a new netlink message and inherit netlink message header. More...
 
struct nl_msgnlmsg_alloc_simple (int nlmsgtype, int flags)
 Allocate a new netlink message. More...
 
void nlmsg_set_default_size (size_t max)
 Set the default maximum message payload size for allocated messages. More...
 
struct nl_msgnlmsg_convert (struct nlmsghdr *hdr)
 Convert a netlink message received from a netlink socket to a nl_msg. More...
 
void * nlmsg_reserve (struct nl_msg *n, size_t len, int pad)
 Reserve room for additional data in a netlink message. More...
 
int nlmsg_append (struct nl_msg *n, void *data, size_t len, int pad)
 Append data to tail of a netlink message. More...
 
int nlmsg_expand (struct nl_msg *n, size_t newlen)
 Expand maximum payload size of a netlink message. More...
 
struct nlmsghdrnlmsg_put (struct nl_msg *n, uint32_t pid, uint32_t seq, int type, int payload, int flags)
 Add a netlink message header to a netlink message. More...
 
struct nlmsghdrnlmsg_hdr (struct nl_msg *n)
 Return actual netlink message. More...
 
void nlmsg_get (struct nl_msg *msg)
 Acquire a reference on a netlink message. More...
 
void nlmsg_free (struct nl_msg *msg)
 Release a reference from an netlink message. More...
 

Attributes

void nlmsg_set_proto (struct nl_msg *msg, int protocol)
 
int nlmsg_get_proto (struct nl_msg *msg)
 
size_t nlmsg_get_max_size (struct nl_msg *msg)
 
void nlmsg_set_src (struct nl_msg *msg, struct sockaddr_nl *addr)
 
struct sockaddr_nlnlmsg_get_src (struct nl_msg *msg)
 
void nlmsg_set_dst (struct nl_msg *msg, struct sockaddr_nl *addr)
 
struct sockaddr_nlnlmsg_get_dst (struct nl_msg *msg)
 
void nlmsg_set_creds (struct nl_msg *msg, struct ucred *creds)
 
struct ucred * nlmsg_get_creds (struct nl_msg *msg)
 

Netlink Message Type Translations

char * nl_nlmsgtype2str (int type, char *buf, size_t size)
 
int nl_str2nlmsgtype (const char *name)
 

Netlink Message Flags Translations

char * nl_nlmsg_flags2str (int flags, char *buf, size_t len)
 

Direct Parsing

int nl_msg_parse (struct nl_msg *msg, void(*cb)(struct nl_object *, void *), void *arg)
 

Dumping

void nl_msg_dump (struct nl_msg *msg, FILE *ofd)
 Dump message in human readable format to file descriptor. More...
 

Detailed Description

Netlink Message Construction/Parsing Interface.

The following information is partly extracted from RFC3549 (ftp://ftp.rfc-editor.org/in-notes/rfc3549.txt)

Message Format
Netlink messages consist of a byte stream with one or multiple Netlink headers and an associated payload. If the payload is too big to fit into a single message it, can be split over multiple Netlink messages, collectively called a multipart message. For multipart messages, the first and all following headers have the NLM_F_MULTI Netlink header flag set, except for the last header which has the Netlink header type NLMSG_DONE.
The Netlink message header (struct nlmsghdr) is shown below.
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Flags |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Sequence Number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Process ID (PID) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
The netlink message header and payload must be aligned properly:
<------- NLMSG_ALIGN(hlen) ------> <---- NLMSG_ALIGN(len) --->
+----------------------------+- - -+- - - - - - - - - - -+- - -+
| Header | Pad | Payload | Pad |
| struct nlmsghdr | | | |
+----------------------------+- - -+- - - - - - - - - - -+- - -+
Message Format:
+----------+- - -+-------------+- - -+-------- - -
| nlmsghdr | Pad | Payload | Pad | nlmsghdr
+----------+- - -+-------------+- - -+-------- - -
nlmsg_data(nlh)---^ ^
nlmsg_next(nlh)-----------------------+
The payload may consist of arbitary data but may have strict alignment and formatting rules depening on the specific netlink families.
<---------------------- nlmsg_len(nlh) --------------------->
<------ hdrlen ------> <- nlmsg_attrlen(nlh, hdrlen) ->
+----------------------+- - -+--------------------------------+
| Family Header | Pad | Attributes |
+----------------------+- - -+--------------------------------+
nlmsg_attrdata(nlh, hdrlen)---^
The ACK Netlink Message
This message is actually used to denote both an ACK and a NACK. Typically, the direction is from FEC to CPC (in response to an ACK request message). However, the CPC should be able to send ACKs back to FEC when requested.
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Netlink message header |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Error code |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| OLD Netlink message header |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Example
// Various methods exist to create/allocate a new netlink
// message.
//
// nlmsg_alloc() will allocate an empty netlink message with
// a maximum payload size which defaults to the page size of
// the system. This default size can be modified using the
// function nlmsg_set_default_size().
struct nl_msg *msg = nlmsg_alloc();
// Very often, the message type and message flags are known
// at allocation time while the other fields are auto generated:
struct nl_msg *msg = nlmsg_alloc_simple(MY_TYPE, MY_FLAGS);
// Alternatively an existing netlink message header can be used
// to inherit the header values:
struct nlmsghdr hdr = {
.nlmsg_type = MY_TYPE,
.nlmsg_flags = MY_FLAGS,
};
struct nl_msg *msg = nlmsg_inherit(&hdr);
// Last but not least, netlink messages received from netlink sockets
// can be converted into nl_msg objects using nlmsg_convert(). This
// will create a message with a maximum payload size which equals the
// length of the existing netlink message, therefore no more data can
// be appened without calling nlmsg_expand() first.
struct nl_msg *msg = nlmsg_convert(nlh_from_nl_sock);
// Payload may be added to the message via nlmsg_append(). The fourth
// parameter specifies the number of alignment bytes the data should
// be padding with at the end. Common values are 0 to disable it or
// NLMSG_ALIGNTO to ensure proper netlink message padding.
nlmsg_append(msg, &mydata, sizeof(mydata), 0);
// Sometimes it may be necessary to reserve room for data but defer
// the actual copying to a later point, nlmsg_reserve() can be used
// for this purpose:
void *data = nlmsg_reserve(msg, sizeof(mydata), NLMSG_ALIGNTO);
// Attributes may be added using the attributes interface.
// After successful use of the message, the memory must be freed
// using nlmsg_free()
4) Parsing messages
int n;
unsigned char *buf;
struct nlmsghdr *hdr;
n = nl_recv(handle, NULL, &buf);
hdr = (struct nlmsghdr *) buf;
while (nlmsg_ok(hdr, n)) {
// Process message here...
hdr = nlmsg_next(hdr, &n);
}

Macro Definition Documentation

#define NL_AUTO_PID   0

Will cause the netlink pid to be set to the pid assigned to the netlink handle (socket) just before sending the message off.

Note
Requires the use of nl_send_auto_complete()!
#define NL_AUTO_SEQ   0

May be used to refer to a sequence number which should be automatically set just before sending the message off.

Note
Requires the use of nl_send_auto_complete()!
#define NLM_F_ACK   4

Request for an acknowledgment on success.

#define NLM_F_APPEND   0x800

Add to the end of the object list.

#define NLM_F_ATOMIC   0x400

Return an atomic snapshot of the table being referenced.

This may require special privileges because it has the potential to interrupt service in the FE for a longer time.

#define NLM_F_CREATE   0x400

Create config object if it doesn't already exist.

#define NLM_F_DUMP   (NLM_F_ROOT|NLM_F_MATCH)

Dump all entries.

#define NLM_F_ECHO   8

Echo this request.

#define NLM_F_EXCL   0x200

Don't replace the config object if it already exists.

#define NLM_F_MATCH   0x200

Return all entries matching criteria passed in message content.

#define NLM_F_MULTI   2

Indicates the message is part of a multipart message terminated by NLMSG_DONE.

#define NLM_F_REPLACE   0x100

Replace existing matching config object with this request.

#define NLM_F_REQUEST   1

Must be set on all request messages (typically from user space to kernel space).

#define NLM_F_ROOT   0x100

Return the complete table instead of a single entry.

#define NLMSG_DONE   0x3

Message terminates a multipart message.

#define NLMSG_ERROR   0x2

The message signals an error and the payload contains a nlmsgerr structure.

This can be looked at as a NACK and typically it is from FEC to CPC.

#define nlmsg_for_each_attr (   pos,
  nlh,
  hdrlen,
  rem 
)
Value:
nlmsg_attrlen(nlh, hdrlen), rem)
int nlmsg_attrlen(const struct nlmsghdr *, int)
length of attributes data
Definition: msg.c:260
struct nlattr * nlmsg_attrdata(const struct nlmsghdr *, int)
head of attributes data
Definition: msg.c:249
u8 pos
Definition: ip_set_hash_gen.h:187
const struct nlmsghdr * nlh
Definition: libnetfilter_conntrack.h:565
#define nla_for_each_attr(pos, head, len, rem)
Iterate over a stream of attributes.
Definition: attr.h:260

Iterate over a stream of attributes in a message.

  • pos loop counter, set to current attribute
  • nlh netlink message header
  • hdrlen length of family header
  • rem initialized to len, holds bytes currently remaining in stream
#define nlmsg_for_each_msg (   pos,
  head,
  len,
  rem 
)
Value:
for (pos = head, rem = len; \
nlmsg_ok(pos, rem); \
pos = nlmsg_next(pos, &(rem)))
int nlmsg_ok(const struct nlmsghdr *, int)
check if the netlink message fits into the remaining bytes
Definition: msg.c:285
struct nlmsghdr * nlmsg_next(struct nlmsghdr *, int *)
next netlink message in message stream
Definition: msg.c:300
u8 pos
Definition: ip_set_hash_gen.h:187
int len
Definition: utils.c:56

Iterate over a stream of messages.

  • pos loop counter, set to current message
  • head head of message stream
  • len length of message stream
  • rem initialized to len, holds bytes currently remaining in stream
#define NLMSG_MIN_TYPE   0x10

Lower limit of reserved message types.

#define NLMSG_NOOP   0x1

No operation, message must be ignored.

#define NLMSG_OVERRUN   0x4

The message signals that data got lost.

Function Documentation

void nl_msg_dump ( struct nl_msg msg,
FILE *  ofd 
)

Dump message in human readable format to file descriptor.

  • msg Message to print
  • ofd File descriptor.

References nl_cache_ops::co_hdrsize, nlmsgerr::error, nlmsgerr::msg, nl_cache_ops_associate(), nlmsg_attrdata(), nlmsg_attrlen(), nlmsg_data(), NLMSG_ERROR, nlmsg_free(), nlmsg_get_proto(), nlmsg_hdr(), nlmsg_inherit(), nlmsghdr::nlmsg_len, nlmsg_len(), nlmsg_msg_size(), and nlmsghdr::nlmsg_type.

Here is the call graph for this function:

int nl_msg_parse ( struct nl_msg msg,
void(*)(struct nl_object *, void *)  cb,
void *  arg 
)
char* nl_nlmsg_flags2str ( int  flags,
char *  buf,
size_t  len 
)

References buf, PRINT_FLAG, REQUEST, and s.

char* nl_nlmsgtype2str ( int  type,
char *  buf,
size_t  size 
)

References __type2str(), and ARRAY_SIZE.

Here is the call graph for this function:

int nl_str2nlmsgtype ( const char *  name)

References __str2type(), and ARRAY_SIZE.

Here is the call graph for this function:

struct nl_msg* nlmsg_alloc ( void  )

Allocate a new netlink message with the default maximum payload size.

Allocates a new netlink message without any further payload. The maximum payload size defaults to PAGESIZE or as otherwise specified with nlmsg_set_default_size().

Returns
Newly allocated netlink message or NULL.

Referenced by nfnl_nft_set_dump_request(), nfnl_nft_setelem_dump_request(), nlmsg_inherit(), and rtnl_neightbl_build_change_request().

Here is the caller graph for this function:

struct nl_msg* nlmsg_alloc_simple ( int  nlmsgtype,
int  flags 
)

Allocate a new netlink message.

  • nlmsgtype Netlink message type
  • flags Message flags.
Returns
Newly allocated netlink message or NULL.

References flags, NL_DBG, nlmsg_inherit(), and nlmsghdr::nlmsg_type.

Referenced by flnl_lookup_build_request(), main(), nfnlmsg_alloc_simple(), nl_send_simple(), rtnl_class_build_delete_request(), rtnl_link_build_change_request(), rtnl_neightbl_build_change_request(), and rtnl_qdisc_build_delete_request().

Here is the call graph for this function:

Here is the caller graph for this function:

struct nl_msg* nlmsg_alloc_size ( size_t  max)

Allocate a new netlink message with maximum payload size specified.

int nlmsg_append ( struct nl_msg n,
void *  data,
size_t  len,
int  pad 
)

Append data to tail of a netlink message.

  • n netlink message
  • data data to add
  • len length of data
  • pad Number of bytes to align data to.

Extends the netlink message as needed and appends the data of given length to the message.

Returns
0 on success or a negative error code

References NL_DBG, NLE_NOMEM, nlmsg_reserve(), and NULL.

Referenced by flnl_lookup_build_request(), main(), nl_send_simple(), rtnl_class_build_delete_request(), rtnl_link_build_change_request(), rtnl_neightbl_build_change_request(), rtnl_qdisc_build_delete_request(), and rtnl_route_build_msg().

Here is the call graph for this function:

Here is the caller graph for this function:

struct nlattr* nlmsg_attrdata ( const struct nlmsghdr nlh,
int  hdrlen 
)

head of attributes data

  • nlh netlink message header
  • hdrlen length of family specific header

References data, NLMSG_ALIGN, and nlmsg_data().

Referenced by nl_msg_dump(), nlmsg_find_attr(), nlmsg_parse(), and nlmsg_validate().

Here is the call graph for this function:

Here is the caller graph for this function:

int nlmsg_attrlen ( const struct nlmsghdr nlh,
int  hdrlen 
)

length of attributes data

  • nlh netlink message header
  • hdrlen length of family specific header

References NLMSG_ALIGN, and nlmsg_len().

Referenced by nl_msg_dump(), nlmsg_find_attr(), nlmsg_parse(), and nlmsg_validate().

Here is the call graph for this function:

Here is the caller graph for this function:

struct nl_msg* nlmsg_convert ( struct nlmsghdr hdr)

Convert a netlink message received from a netlink socket to a nl_msg.

  • hdr Netlink message received from netlink socket.

Allocates a new netlink message and copies all of the data pointed to by hdr into the new message object.

Returns
Newly allocated netlink message or NULL.

References NLMSG_ALIGN, nlmsg_free(), nlmsghdr::nlmsg_len, nl_msg::nm_nlh, and NULL.

Here is the call graph for this function:

void* nlmsg_data ( const struct nlmsghdr nlh)

head of message payload

  • nlh netlink messsage header

References NLMSG_HDRLEN.

Referenced by genlmsg_parse(), genlmsg_put(), genlmsg_valid_hdr(), genlmsg_validate(), nfnl_dump_packet(), nfnlmsg_family(), nfnlmsg_res_id(), nl_msg_dump(), nla_put(), nla_put_nested(), nla_reserve(), nlmsg_attrdata(), and rtnl_route_parse().

Here is the caller graph for this function:

int nlmsg_expand ( struct nl_msg n,
size_t  newlen 
)

Expand maximum payload size of a netlink message.

  • n Netlink message.
  • newlen New maximum payload size.

Reallocates the payload section of a netlink message and increases the maximum payload size of the message.

Note
Any pointers pointing to old payload block will be stale and need to be refetched. Therfore, do not expand while constructing nested attributes or while reserved data blocks are held.
Returns
0 on success or a negative error code.

References NLE_INVAL, NLE_NOMEM, nl_msg::nm_nlh, nl_msg::nm_size, and NULL.

struct nlattr* nlmsg_find_attr ( struct nlmsghdr nlh,
int  hdrlen,
int  attrtype 
)

nlmsg_find_attr - find a specific attribute in a netlink message

  • nlh netlink message header
  • hdrlen length of familiy specific header
  • attrtype type of attribute to look for

Returns the first attribute which matches the specified type.

References nla_find(), nlmsg_attrdata(), and nlmsg_attrlen().

Here is the call graph for this function:

void nlmsg_get ( struct nl_msg msg)

Acquire a reference on a netlink message.

  • msg message to acquire reference from

References NL_DBG, and nl_msg::nm_refcnt.

struct ucred* nlmsg_get_creds ( struct nl_msg msg)

References NL_MSG_CRED_PRESENT, nl_msg::nm_creds, nl_msg::nm_flags, and NULL.

Referenced by nl_send_iovec().

Here is the caller graph for this function:

struct sockaddr_nl* nlmsg_get_dst ( struct nl_msg msg)

References nl_msg::nm_dst.

Referenced by nl_send_iovec().

Here is the caller graph for this function:

size_t nlmsg_get_max_size ( struct nl_msg msg)

References nl_msg::nm_size.

int nlmsg_get_proto ( struct nl_msg msg)

References nl_msg::nm_protocol.

Referenced by nl_msg_dump(), and nl_msg_parse().

Here is the caller graph for this function:

struct sockaddr_nl* nlmsg_get_src ( struct nl_msg msg)

References nl_msg::nm_src.

struct nlmsghdr* nlmsg_hdr ( struct nl_msg n)

Return actual netlink message.

  • n netlink message

Returns the actual netlink message casted to the type of the netlink message header.

Returns
A pointer to the netlink message.

References nl_msg::nm_nlh.

Referenced by nfnl_queue_msg_send_verdict_payload(), nl_auto_complete(), nl_cache_parse_and_add(), nl_msg_dump(), nl_msg_parse(), and nl_send().

Here is the caller graph for this function:

struct nl_msg* nlmsg_inherit ( struct nlmsghdr hdr)

Allocate a new netlink message and inherit netlink message header.

  • hdr Netlink message header template

Allocates a new netlink message and inherits the original message header. If hdr is not NULL it will be used as a template for the netlink message header, otherwise the header is left blank.

Returns
Newly allocated netlink message or NULL

References nlmsg_alloc(), nlmsghdr::nlmsg_flags, nlmsghdr::nlmsg_pid, nlmsghdr::nlmsg_seq, nlmsghdr::nlmsg_type, and nl_msg::nm_nlh.

Referenced by nl_msg_dump(), and nlmsg_alloc_simple().

Here is the call graph for this function:

Here is the caller graph for this function:

int nlmsg_len ( const struct nlmsghdr nlh)

length of message payload

  • nlh netlink message header

References NLMSG_HDRLEN, and nlmsghdr::nlmsg_len.

Referenced by nl_msg_dump(), nla_put_nested(), nlmsg_attrlen(), and nlmsg_reserve().

Here is the caller graph for this function:

int nlmsg_msg_size ( int  payload)

length of netlink message not including padding

  • payload length of message payload

References NLMSG_HDRLEN, and payload.

Referenced by nl_msg_dump(), nlmsg_padlen(), nlmsg_total_size(), and nlmsg_valid_hdr().

Here is the caller graph for this function:

struct nlmsghdr* nlmsg_next ( struct nlmsghdr nlh,
int *  remaining 
)

next netlink message in message stream

  • nlh netlink message header
  • remaining number of bytes remaining in message stream
Returns
the next netlink message in the message stream and decrements remaining by the size of the current message.

References NLMSG_ALIGN, and nlmsghdr::nlmsg_len.

int nlmsg_ok ( const struct nlmsghdr nlh,
int  remaining 
)

check if the netlink message fits into the remaining bytes

  • nlh netlink message header
  • remaining number of bytes remaining in message stream

References nlmsghdr::nlmsg_len.

int nlmsg_padlen ( int  payload)

length of padding at the message's tail

  • payload length of message payload

References nlmsg_msg_size(), and nlmsg_total_size().

Here is the call graph for this function:

int nlmsg_parse ( struct nlmsghdr nlh,
int  hdrlen,
struct nlattr tb[],
int  maxtype,
struct nla_policy policy 
)

parse attributes of a netlink message

  • nlh netlink message header
  • hdrlen length of family specific header
  • tb destination array with maxtype+1 elements
  • maxtype maximum attribute type to be expected
  • policy validation policy

See nla_parse()

References nla_parse(), NLE_MSG_TOOSHORT, nlmsg_attrdata(), nlmsg_attrlen(), and nlmsg_valid_hdr().

Here is the call graph for this function:

struct nlmsghdr* nlmsg_put ( struct nl_msg n,
uint32_t  pid,
uint32_t  seq,
int  type,
int  payload,
int  flags 
)

Add a netlink message header to a netlink message.

  • n netlink message
  • pid netlink process id or NL_AUTO_PID
  • seq sequence number of message or NL_AUTO_SEQ
  • type message type
  • payload length of message payload
  • flags message flags

Adds or overwrites the netlink message header in an existing message object. If payload is greater-than zero additional room will be reserved, f.e. for family specific headers. It can be accesed via nlmsg_data().

Returns
A pointer to the netlink message header or NULL.

References BUG, NL_DBG, nlh, NLMSG_ALIGNTO, nlmsghdr::nlmsg_flags, NLMSG_HDRLEN, nlmsghdr::nlmsg_len, nlmsghdr::nlmsg_pid, nlmsg_reserve(), nlmsghdr::nlmsg_seq, nlmsghdr::nlmsg_type, nl_msg::nm_nlh, and NULL.

Referenced by genlmsg_put(), and nfnlmsg_put().

Here is the call graph for this function:

Here is the caller graph for this function:

void* nlmsg_reserve ( struct nl_msg n,
size_t  len,
int  pad 
)

Reserve room for additional data in a netlink message.

  • n netlink message
  • len length of additional data to reserve room for
  • pad number of bytes to align data to

Reserves room for additional data at the tail of the an existing netlink message. Eventual padding required will be zeroed out.

Returns
Pointer to start of additional data tailroom or NULL.

References buf, len, NL_DBG, nlmsghdr::nlmsg_len, nlmsg_len(), nl_msg::nm_nlh, nl_msg::nm_size, and NULL.

Referenced by nlmsg_append(), nlmsg_put(), and rtnl_route_build_msg().

Here is the call graph for this function:

Here is the caller graph for this function:

void nlmsg_set_creds ( struct nl_msg msg,
struct ucred *  creds 
)
void nlmsg_set_default_size ( size_t  max)

Set the default maximum message payload size for allocated messages.

  • max Size of payload in bytes.

References max, and nlmsg_total_size().

Referenced by main().

Here is the call graph for this function:

Here is the caller graph for this function:

void nlmsg_set_dst ( struct nl_msg msg,
struct sockaddr_nl addr 
)

References nl_msg::nm_dst.

void nlmsg_set_proto ( struct nl_msg msg,
int  protocol 
)

References nl_msg::nm_protocol.

void nlmsg_set_src ( struct nl_msg msg,
struct sockaddr_nl addr 
)

References nl_msg::nm_src.

Referenced by nl_sendmsg().

Here is the caller graph for this function:

void* nlmsg_tail ( const struct nlmsghdr nlh)

References NLMSG_ALIGN, and nlmsghdr::nlmsg_len.

Referenced by nla_nest_end(), nla_nest_start(), nla_reserve(), and rtnl_route_build_msg().

Here is the caller graph for this function:

int nlmsg_total_size ( int  payload)

length of netlink message including padding

  • payload length of message payload

References NLMSG_ALIGN, and nlmsg_msg_size().

Referenced by nlmsg_padlen(), and nlmsg_set_default_size().

Here is the call graph for this function:

Here is the caller graph for this function:

int nlmsg_valid_hdr ( const struct nlmsghdr nlh,
int  hdrlen 
)

References nlmsghdr::nlmsg_len, and nlmsg_msg_size().

Referenced by genlmsg_valid_hdr(), nlmsg_parse(), and nlmsg_validate().

Here is the call graph for this function:

Here is the caller graph for this function:

int nlmsg_validate ( struct nlmsghdr nlh,
int  hdrlen,
int  maxtype,
struct nla_policy policy 
)

nlmsg_validate - validate a netlink message including attributes

  • nlh netlinket message header
  • hdrlen length of familiy specific header
  • maxtype maximum attribute type to be expected
  • policy validation policy

References nla_validate(), NLE_MSG_TOOSHORT, nlmsg_attrdata(), nlmsg_attrlen(), and nlmsg_valid_hdr().

Here is the call graph for this function: