Functions

Netlink attribute helpers

Functions

EXPORT_SYMBOL uint16_t mnl_attr_get_type (const struct nlattr *attr)
EXPORT_SYMBOL uint16_t mnl_attr_get_len (const struct nlattr *attr)
EXPORT_SYMBOL uint16_t mnl_attr_get_payload_len (const struct nlattr *attr)
EXPORT_SYMBOL void * mnl_attr_get_payload (const struct nlattr *attr)
EXPORT_SYMBOL bool mnl_attr_ok (const struct nlattr *attr, int len)
EXPORT_SYMBOL struct nlattr * mnl_attr_next (const struct nlattr *attr)
EXPORT_SYMBOL int mnl_attr_type_valid (const struct nlattr *attr, uint16_t max)
EXPORT_SYMBOL int mnl_attr_validate (const struct nlattr *attr, enum mnl_attr_data_type type)
EXPORT_SYMBOL int mnl_attr_validate2 (const struct nlattr *attr, enum mnl_attr_data_type type, size_t exp_len)
EXPORT_SYMBOL int mnl_attr_parse (const struct nlmsghdr *nlh, unsigned int offset, mnl_attr_cb_t cb, void *data)
EXPORT_SYMBOL int mnl_attr_parse_nested (const struct nlattr *nested, mnl_attr_cb_t cb, void *data)
EXPORT_SYMBOL uint8_t mnl_attr_get_u8 (const struct nlattr *attr)
EXPORT_SYMBOL uint16_t mnl_attr_get_u16 (const struct nlattr *attr)
EXPORT_SYMBOL uint32_t mnl_attr_get_u32 (const struct nlattr *attr)
EXPORT_SYMBOL uint64_t mnl_attr_get_u64 (const struct nlattr *attr)
EXPORT_SYMBOL const char * mnl_attr_get_str (const struct nlattr *attr)
EXPORT_SYMBOL void mnl_attr_put (struct nlmsghdr *nlh, uint16_t type, size_t len, const void *data)
EXPORT_SYMBOL void mnl_attr_put_u8 (struct nlmsghdr *nlh, uint16_t type, uint8_t data)
EXPORT_SYMBOL void mnl_attr_put_u16 (struct nlmsghdr *nlh, uint16_t type, uint16_t data)
EXPORT_SYMBOL void mnl_attr_put_u32 (struct nlmsghdr *nlh, uint16_t type, uint32_t data)
EXPORT_SYMBOL void mnl_attr_put_u64 (struct nlmsghdr *nlh, uint16_t type, uint64_t data)
EXPORT_SYMBOL void mnl_attr_put_str (struct nlmsghdr *nlh, uint16_t type, const char *data)
EXPORT_SYMBOL void mnl_attr_put_strz (struct nlmsghdr *nlh, uint16_t type, const char *data)
EXPORT_SYMBOL struct nlattr * mnl_attr_nest_start (struct nlmsghdr *nlh, uint16_t type)
EXPORT_SYMBOL bool mnl_attr_put_check (struct nlmsghdr *nlh, size_t buflen, uint16_t type, size_t len, const void *data)
EXPORT_SYMBOL bool mnl_attr_put_u8_check (struct nlmsghdr *nlh, size_t buflen, uint16_t type, uint8_t data)
EXPORT_SYMBOL bool mnl_attr_put_u16_check (struct nlmsghdr *nlh, size_t buflen, uint16_t type, uint16_t data)
EXPORT_SYMBOL bool mnl_attr_put_u32_check (struct nlmsghdr *nlh, size_t buflen, uint16_t type, uint32_t data)
EXPORT_SYMBOL bool mnl_attr_put_u64_check (struct nlmsghdr *nlh, size_t buflen, uint16_t type, uint64_t data)
EXPORT_SYMBOL bool mnl_attr_put_str_check (struct nlmsghdr *nlh, size_t buflen, uint16_t type, const char *data)
EXPORT_SYMBOL bool mnl_attr_put_strz_check (struct nlmsghdr *nlh, size_t buflen, uint16_t type, const char *data)
EXPORT_SYMBOL struct nlattr * mnl_attr_nest_start_check (struct nlmsghdr *nlh, size_t buflen, uint16_t type)
EXPORT_SYMBOL void mnl_attr_nest_end (struct nlmsghdr *nlh, struct nlattr *start)
EXPORT_SYMBOL void mnl_attr_nest_cancel (struct nlmsghdr *nlh, struct nlattr *start)

Detailed Description

Netlink Type-Length-Value (TLV) attribute:

	|<-- 2 bytes -->|<-- 2 bytes -->|<-- variable -->|
	-------------------------------------------------
	|     length    |      type     |      value     |
	-------------------------------------------------
	|<--------- header ------------>|<-- payload --->|

The payload of the Netlink message contains sequences of attributes that are expressed in TLV format.


Function Documentation

EXPORT_SYMBOL uint16_t mnl_attr_get_len ( const struct nlattr *  attr  ) 

mnl_attr_get_len - get length of netlink attribute

Parameters:
attr pointer to netlink attribute

This function returns the attribute length that is the attribute header plus the attribute payload.

Definition at line 51 of file attr.c.

EXPORT_SYMBOL void* mnl_attr_get_payload ( const struct nlattr *  attr  ) 

mnl_attr_get_payload - get pointer to the attribute payload

Parameters:
attr pointer to netlink attribute

This function return a pointer to the attribute payload.

Definition at line 73 of file attr.c.

EXPORT_SYMBOL uint16_t mnl_attr_get_payload_len ( const struct nlattr *  attr  ) 

mnl_attr_get_payload_len - get the attribute payload-value length

Parameters:
attr pointer to netlink attribute

This function returns the attribute payload-value length.

Definition at line 62 of file attr.c.

EXPORT_SYMBOL const char* mnl_attr_get_str ( const struct nlattr *  attr  ) 

mnl_attr_get_str - returns pointer to string attribute.

Parameters:
attr pointer to netlink attribute

This function returns the payload of string attribute value.

Definition at line 351 of file attr.c.

EXPORT_SYMBOL uint16_t mnl_attr_get_type ( const struct nlattr *  attr  ) 

mnl_attr_get_type - get type of netlink attribute

Parameters:
attr pointer to netlink attribute

This function returns the attribute type.

Definition at line 39 of file attr.c.

EXPORT_SYMBOL uint16_t mnl_attr_get_u16 ( const struct nlattr *  attr  ) 

mnl_attr_get_u16 - returns 16-bit unsigned integer attribute payload

Parameters:
attr pointer to netlink attribute

This function returns the 16-bit value of the attribute payload.

Definition at line 314 of file attr.c.

EXPORT_SYMBOL uint32_t mnl_attr_get_u32 ( const struct nlattr *  attr  ) 

mnl_attr_get_u32 - returns 32-bit unsigned integer attribute payload

Parameters:
attr pointer to netlink attribute

This function returns the 32-bit value of the attribute payload.

Definition at line 325 of file attr.c.

EXPORT_SYMBOL uint64_t mnl_attr_get_u64 ( const struct nlattr *  attr  ) 

mnl_attr_get_u64 - returns 64-bit unsigned integer attribute.

Parameters:
attr pointer to netlink attribute

This function returns the 64-bit value of the attribute payload. This function is align-safe, since accessing 64-bit Netlink attributes is a common source of alignment issues.

Definition at line 338 of file attr.c.

EXPORT_SYMBOL uint8_t mnl_attr_get_u8 ( const struct nlattr *  attr  ) 

mnl_attr_get_u8 - returns 8-bit unsigned integer attribute payload

Parameters:
attr pointer to netlink attribute

This function returns the 8-bit value of the attribute payload.

Definition at line 303 of file attr.c.

EXPORT_SYMBOL void mnl_attr_nest_cancel ( struct nlmsghdr *  nlh,
struct nlattr *  start 
)

mnl_attr_nest_cancel - cancel an attribute nest

Parameters:
nlh pointer to the netlink message
start pointer to the attribute nest returned by mnl_attr_nest_start()

This function updates the attribute header that identifies the nest.

Definition at line 688 of file attr.c.

EXPORT_SYMBOL void mnl_attr_nest_end ( struct nlmsghdr *  nlh,
struct nlattr *  start 
)

mnl_attr_nest_end - end an attribute nest

Parameters:
nlh pointer to the netlink message
start pointer to the attribute nest returned by mnl_attr_nest_start()

This function updates the attribute header that identifies the nest.

Definition at line 675 of file attr.c.

EXPORT_SYMBOL struct nlattr* mnl_attr_nest_start ( struct nlmsghdr *  nlh,
uint16_t  type 
) [read]

mnl_attr_nest_start - start an attribute nest

Parameters:
nlh pointer to the netlink message
type netlink attribute type

This function adds the attribute header that identifies the beginning of an attribute nest. This function always returns a valid pointer to the beginning of the nest.

Definition at line 482 of file attr.c.

EXPORT_SYMBOL struct nlattr* mnl_attr_nest_start_check ( struct nlmsghdr *  nlh,
size_t  buflen,
uint16_t  type 
) [read]

mnl_attr_nest_start_check - start an attribute nest

Parameters:
buflen size of buffer which stores the message
nlh pointer to the netlink message
type netlink attribute type

This function adds the attribute header that identifies the beginning of an attribute nest. If the nested attribute cannot be added then NULL, otherwise valid pointer to the beginning of the nest is returned.

Definition at line 660 of file attr.c.

EXPORT_SYMBOL struct nlattr* mnl_attr_next ( const struct nlattr *  attr  )  [read]

mnl_attr_next - get the next attribute in the payload of a netlink message

Parameters:
attr pointer to the current attribute
len length of the remaining bytes in the buffer (passed by reference).

This function returns a pointer to the next attribute after the one passed as parameter. You have to use mnl_attr_ok() to ensure that the next attribute is valid.

Definition at line 110 of file attr.c.

EXPORT_SYMBOL bool mnl_attr_ok ( const struct nlattr *  attr,
int  len 
)

mnl_attr_ok - check if there is room for an attribute in a buffer

Parameters:
attr attribute that we want to check if there is room for
len remaining bytes in a buffer that contains the attribute

This function is used to check that a buffer, which is supposed to contain an attribute, has enough room for the attribute that it stores, i.e. this function can be used to verify that an attribute is neither malformed nor truncated.

This function does not set errno in case of error since it is intended for iterations. Thus, it returns 1 on success and 0 on error.

The len parameter may be negative in the case of malformed messages during attribute iteration, that is why we use a signed integer.

Definition at line 94 of file attr.c.

EXPORT_SYMBOL int mnl_attr_parse ( const struct nlmsghdr *  nlh,
unsigned int  offset,
mnl_attr_cb_t  cb,
void *  data 
)

mnl_attr_parse - parse attributes

Parameters:
nlh pointer to netlink message
offset offset to start parsing from (if payload is after any header)
cb callback function that is called for each attribute
data pointer to data that is passed to the callback function

This function allows to iterate over the sequence of attributes that compose the Netlink message. You can then put the attribute in an array as it usually happens at this stage or you can use any other data structure (such as lists or trees).

This function propagates the return value of the callback, which can be MNL_CB_ERROR, MNL_CB_OK or MNL_CB_STOP.

Definition at line 258 of file attr.c.

EXPORT_SYMBOL int mnl_attr_parse_nested ( const struct nlattr *  nested,
mnl_attr_cb_t  cb,
void *  data 
)

mnl_attr_parse_nested - parse attributes inside a nest

Parameters:
nested pointer to netlink attribute that contains a nest
cb callback function that is called for each attribute in the nest
data pointer to data passed to the callback function

This function allows to iterate over the sequence of attributes that compose the Netlink message. You can then put the attribute in an array as it usually happens at this stage or you can use any other data structure (such as lists or trees).

This function propagates the return value of the callback, which can be MNL_CB_ERROR, MNL_CB_OK or MNL_CB_STOP.

Definition at line 285 of file attr.c.

EXPORT_SYMBOL void mnl_attr_put ( struct nlmsghdr *  nlh,
uint16_t  type,
size_t  len,
const void *  data 
)

mnl_attr_put - add an attribute to netlink message

Parameters:
nlh pointer to the netlink message
type netlink attribute type that you want to add
len netlink attribute payload length
data pointer to the data that will be stored by the new attribute

This function updates the length field of the Netlink message (nlmsg_len) by adding the size (header + payload) of the new attribute.

Definition at line 367 of file attr.c.

EXPORT_SYMBOL bool mnl_attr_put_check ( struct nlmsghdr *  nlh,
size_t  buflen,
uint16_t  type,
size_t  len,
const void *  data 
)

mnl_attr_put_check - add an attribute to netlink message

Parameters:
nlh pointer to the netlink message
buflen size of buffer which stores the message
type netlink attribute type that you want to add
len netlink attribute payload length
data pointer to the data that will be stored by the new attribute

This function first checks that the data can be added to the message (fits into the buffer) and then updates the length field of the Netlink message (nlmsg_len) by adding the size (header + payload) of the new attribute. The function returns true if the attribute could be added to the message, otherwise false is returned.

Definition at line 508 of file attr.c.

EXPORT_SYMBOL void mnl_attr_put_str ( struct nlmsghdr *  nlh,
uint16_t  type,
const char *  data 
)

mnl_attr_put_str - add string attribute to netlink message

Parameters:
nlh pointer to the netlink message
type netlink attribute type
data pointer to string data that is stored by the new attribute

This function updates the length field of the Netlink message (nlmsg_len) by adding the size (header + payload) of the new attribute.

Definition at line 449 of file attr.c.

EXPORT_SYMBOL bool mnl_attr_put_str_check ( struct nlmsghdr *  nlh,
size_t  buflen,
uint16_t  type,
const char *  data 
)

mnl_attr_put_str_check - add string attribute to netlink message

Parameters:
nlh pointer to the netlink message
buflen size of buffer which stores the message
type netlink attribute type
data pointer to string data that is stored by the new attribute

This function first checks that the data can be added to the message (fits into the buffer) and then updates the length field of the Netlink message (nlmsg_len) by adding the size (header + payload) of the new attribute. The function returns true if the attribute could be added to the message, otherwise false is returned. This function updates the length field of the Netlink message (nlmsg_len) by adding the size (header + payload) of the new attribute.

Definition at line 620 of file attr.c.

EXPORT_SYMBOL void mnl_attr_put_strz ( struct nlmsghdr *  nlh,
uint16_t  type,
const char *  data 
)

mnl_attr_put_strz - add string attribute to netlink message

Parameters:
nlh pointer to the netlink message
type netlink attribute type
data pointer to string data that is stored by the new attribute

This function is similar to mnl_attr_put_str, but it includes the NUL/zero ('') terminator at the end of the string.

This function updates the length field of the Netlink message (nlmsg_len) by adding the size (header + payload) of the new attribute.

Definition at line 467 of file attr.c.

EXPORT_SYMBOL bool mnl_attr_put_strz_check ( struct nlmsghdr *  nlh,
size_t  buflen,
uint16_t  type,
const char *  data 
)

mnl_attr_put_strz_check - add string attribute to netlink message

Parameters:
nlh pointer to the netlink message
buflen size of buffer which stores the message
type netlink attribute type
data pointer to string data that is stored by the new attribute

This function is similar to mnl_attr_put_str, but it includes the NUL/zero ('') terminator at the end of the string.

This function first checks that the data can be added to the message (fits into the buffer) and then updates the length field of the Netlink message (nlmsg_len) by adding the size (header + payload) of the new attribute. The function returns true if the attribute could be added to the message, otherwise false is returned.

Definition at line 643 of file attr.c.

EXPORT_SYMBOL void mnl_attr_put_u16 ( struct nlmsghdr *  nlh,
uint16_t  type,
uint16_t  data 
)

mnl_attr_put_u16 - add 16-bit unsigned integer attribute to netlink message

Parameters:
nlh pointer to the netlink message
type netlink attribute type
data 16-bit unsigned integer data that is stored by the new attribute

This function updates the length field of the Netlink message (nlmsg_len) by adding the size (header + payload) of the new attribute.

Definition at line 404 of file attr.c.

EXPORT_SYMBOL bool mnl_attr_put_u16_check ( struct nlmsghdr *  nlh,
size_t  buflen,
uint16_t  type,
uint16_t  data 
)

mnl_attr_put_u16_check - add 16-bit unsigned int attribute to netlink message

Parameters:
nlh pointer to the netlink message
buflen size of buffer which stores the message
type netlink attribute type
data 16-bit unsigned integer data that is stored by the new attribute

This function first checks that the data can be added to the message (fits into the buffer) and then updates the length field of the Netlink message (nlmsg_len) by adding the size (header + payload) of the new attribute. The function returns true if the attribute could be added to the message, otherwise false is returned. This function updates the length field of the Netlink message (nlmsg_len) by adding the size (header + payload) of the new attribute.

Definition at line 554 of file attr.c.

EXPORT_SYMBOL void mnl_attr_put_u32 ( struct nlmsghdr *  nlh,
uint16_t  type,
uint32_t  data 
)

mnl_attr_put_u32 - add 32-bit unsigned integer attribute to netlink message

Parameters:
nlh pointer to the netlink message
type netlink attribute type
data 32-bit unsigned integer data that is stored by the new attribute

This function updates the length field of the Netlink message (nlmsg_len) by adding the size (header + payload) of the new attribute.

Definition at line 419 of file attr.c.

EXPORT_SYMBOL bool mnl_attr_put_u32_check ( struct nlmsghdr *  nlh,
size_t  buflen,
uint16_t  type,
uint32_t  data 
)

mnl_attr_put_u32_check - add 32-bit unsigned int attribute to netlink message

Parameters:
nlh pointer to the netlink message
buflen size of buffer which stores the message
type netlink attribute type
data 32-bit unsigned integer data that is stored by the new attribute

This function first checks that the data can be added to the message (fits into the buffer) and then updates the length field of the Netlink message (nlmsg_len) by adding the size (header + payload) of the new attribute. The function returns true if the attribute could be added to the message, otherwise false is returned. This function updates the length field of the Netlink message (nlmsg_len) by adding the size (header + payload) of the new attribute.

Definition at line 576 of file attr.c.

EXPORT_SYMBOL void mnl_attr_put_u64 ( struct nlmsghdr *  nlh,
uint16_t  type,
uint64_t  data 
)

mnl_attr_put_u64 - add 64-bit unsigned integer attribute to netlink message

Parameters:
nlh pointer to the netlink message
type netlink attribute type
data 64-bit unsigned integer data that is stored by the new attribute

This function updates the length field of the Netlink message (nlmsg_len) by adding the size (header + payload) of the new attribute.

Definition at line 434 of file attr.c.

EXPORT_SYMBOL bool mnl_attr_put_u64_check ( struct nlmsghdr *  nlh,
size_t  buflen,
uint16_t  type,
uint64_t  data 
)

mnl_attr_put_u64_check - add 64-bit unsigned int attribute to netlink message

Parameters:
nlh pointer to the netlink message
buflen size of buffer which stores the message
type netlink attribute type
data 64-bit unsigned integer data that is stored by the new attribute

This function first checks that the data can be added to the message (fits into the buffer) and then updates the length field of the Netlink message (nlmsg_len) by adding the size (header + payload) of the new attribute. The function returns true if the attribute could be added to the message, otherwise false is returned. This function updates the length field of the Netlink message (nlmsg_len) by adding the size (header + payload) of the new attribute.

Definition at line 598 of file attr.c.

EXPORT_SYMBOL void mnl_attr_put_u8 ( struct nlmsghdr *  nlh,
uint16_t  type,
uint8_t  data 
)

mnl_attr_put_u8 - add 8-bit unsigned integer attribute to netlink message

Parameters:
nlh pointer to the netlink message
type netlink attribute type
len netlink attribute payload size
data 8-bit unsigned integer data that is stored by the new attribute

This function updates the length field of the Netlink message (nlmsg_len) by adding the size (header + payload) of the new attribute.

Definition at line 389 of file attr.c.

EXPORT_SYMBOL bool mnl_attr_put_u8_check ( struct nlmsghdr *  nlh,
size_t  buflen,
uint16_t  type,
uint8_t  data 
)

mnl_attr_put_u8_check - add 8-bit unsigned int attribute to netlink message

Parameters:
nlh pointer to the netlink message
buflen size of buffer which stores the message
type netlink attribute type
len netlink attribute payload size
data 8-bit unsigned integer data that is stored by the new attribute

This function first checks that the data can be added to the message (fits into the buffer) and then updates the length field of the Netlink message (nlmsg_len) by adding the size (header + payload) of the new attribute. The function returns true if the attribute could be added to the message, otherwise false is returned.

Definition at line 532 of file attr.c.

EXPORT_SYMBOL int mnl_attr_type_valid ( const struct nlattr *  attr,
uint16_t  max 
)

mnl_attr_type_valid - check if the attribute type is valid

Parameters:
attr pointer to attribute to be checked
max maximum attribute type

This function allows to check if the attribute type is higher than the maximum supported type. If the attribute type is invalid, this function returns -1 and errno is explicitly set. On success, this function returns 1.

Strict attribute checking in user-space is not a good idea since you may run an old application with a newer kernel that supports new attributes. This leads to backward compatibility breakages in user-space. Better check if you support an attribute, if not, skip it.

Definition at line 129 of file attr.c.

EXPORT_SYMBOL int mnl_attr_validate ( const struct nlattr *  attr,
enum mnl_attr_data_type  type 
)

mnl_attr_validate - validate netlink attribute (simplified version)

Parameters:
attr pointer to netlink attribute that we want to validate
type data type (see enum mnl_attr_data_type)

The validation is based on the data type. Specifically, it checks that integers (u8, u16, u32 and u64) have enough room for them. This function returns -1 in case of error, and errno is explicitly set.

Definition at line 209 of file attr.c.

EXPORT_SYMBOL int mnl_attr_validate2 ( const struct nlattr *  attr,
enum mnl_attr_data_type  type,
size_t  exp_len 
)

mnl_attr_validate2 - validate netlink attribute (extended version)

Parameters:
attr pointer to netlink attribute that we want to validate
type attribute type (see enum mnl_attr_data_type)
exp_len expected attribute data size

This function allows to perform a more accurate validation for attributes whose size is variable. If the size of the attribute is not what we expect, this functions returns -1 and errno is explicitly set.

Definition at line 232 of file attr.c.