<------- nla_total_size(payload) -------> <---- nla_attr_size(payload) -----> +----------+- - -+- - - - - - - - - +- - -+-------- - - | Header | Pad | Payload | Pad | Header +----------+- - -+- - - - - - - - - +- - -+-------- - - <- nla_len(nla) -> ^ nla_data(nla)----^ | nla_next(nla)-----------------------------'
<------- NLA_HDRLEN ------> <-- NLA_ALIGN(payload)--> +---------------------+- - -+- - - - - - - - - -+- - -+ | Header | Pad | Payload | Pad | | (struct nlattr) | ing | | ing | +---------------------+- - -+- - - - - - - - - -+- - -+ <-------------- nlattr->nla_len -------------->
<-------------------- NLA_ALIGN(...) ------------------->
+---------------+- - - - - - - - - - - - - - - - - -+- - -+
| |+---------+---------+- - -+-------+| |
| TLV Header || TLV 1 | TLV 2 | | TLV n || Pad |
| |+---------+---------+- - -+-------+| |
+---------------+- - - - - - - - - - - - - - - - - -+- - -+
<--------- nla_data(nla) --------->
int param1 = 10; char *param2 = "parameter text"; struct nl_msg *msg = nlmsg_alloc(); nla_put_u32(msg, 1, param1); nla_put_string(msg, 2, param2); nl_send_auto_complete(handle, nl_msg_get(msg)); nlmsg_free(msg);
struct nl_msg * nested_config(void) { int a = 5, int b = 10; struct nl_msg *n = nlmsg_alloc(); nla_put_u32(n, 10, a); nla_put_u32(n, 20, b); return n; } ... struct nl_msg *m = nlmsg_alloc(); struct nl_msg *nest = nested_config(); nla_put_nested(m, 1, nest); nl_send_auto_complete(handle, nl_msg_get(m)); nlmsg_free(nest); nlmsg_free(m);
Data Structures | |
| struct | nla_policy |
| attribute validation policy More... | |
Validation Policy Types | |
| enum | { NLA_UNSPEC, NLA_U8, NLA_U16, NLA_U32, NLA_U64, NLA_STRING, NLA_FLAG, NLA_MSECS, NLA_NESTED, __NLA_TYPE_MAX } |
| Standard attribute types to specify validation policy. More... | |
| #define | NLA_TYPE_MAX (__NLA_TYPE_MAX - 1) |
| Maximum netlink validation policy type. | |
Attribute Parsing | |
| int | nla_ok (const struct nlattr *nla, int remaining) |
| check if the netlink attribute fits into the remaining bytes | |
| struct nlattr * | nla_next (const struct nlattr *nla, int *remaining) |
| next netlink attribte in attribute stream | |
| int | nla_parse (struct nlattr *tb[], int maxtype, struct nlattr *head, int len, struct nla_policy *policy) |
| Parse a stream of attributes into a tb buffer. | |
| int | nla_parse_nested (struct nlattr *tb[], int maxtype, struct nlattr *nla, struct nla_policy *policy) |
| parse nested attributes | |
| int | nla_validate (struct nlattr *head, int len, int maxtype, struct nla_policy *policy) |
| Validate a stream of attributes. | |
| struct nlattr * | nla_find (struct nlattr *head, int len, int attrtype) |
| Find a specific attribute in a stream of attributes. | |
Size Calculations | |
| int | nla_attr_size (int payload) |
| length of attribute not including padding | |
| int | nla_total_size (int payload) |
| total length of attribute including padding | |
| int | nla_padlen (int payload) |
| length of padding at the tail of the attribute | |
Payload Access | |
| int | nla_type (const struct nlattr *nla) |
| attribute type | |
| void * | nla_data (const struct nlattr *nla) |
| head of payload | |
| int | nla_len (const struct nlattr *nla) |
| length of payload | |
Utilities | |
| int | nla_memcpy (void *dest, struct nlattr *src, int count) |
| Copy a netlink attribute into another memory area. | |
| size_t | nla_strlcpy (char *dst, const struct nlattr *nla, size_t dstsize) |
| Copy string attribute payload into a sized buffer. | |
| int | nla_memcmp (const struct nlattr *nla, const void *data, size_t size) |
| Compare an attribute with sized memory area. | |
| int | nla_strcmp (const struct nlattr *nla, const char *str) |
| Compare a string attribute against a string. | |
Attribute Construction | |
| struct nlattr * | nla_reserve (struct nl_msg *n, int attrtype, int attrlen) |
| reserve room for attribute on the skb | |
| int | nla_put (struct nl_msg *n, int attrtype, int attrlen, const void *data) |
| Add a netlink attribute to a netlink message. | |
| int | nla_put_nested (struct nl_msg *n, int attrtype, struct nl_msg *nested) |
| Add a nested netlink attribute to a netlink message. | |
| int | nla_put_u8 (struct nl_msg *n, int attrtype, uint8_t value) |
| Add a u16 netlink attribute to a netlink message. | |
| int | nla_put_u16 (struct nl_msg *n, int attrtype, uint16_t value) |
| Add a u16 netlink attribute to a netlink message. | |
| int | nla_put_u32 (struct nl_msg *n, int attrtype, uint32_t value) |
| Add a u32 netlink attribute to a netlink message. | |
| int | nla_put_u64 (struct nl_msg *n, int attrtype, uint64_t value) |
| Add a u64 netlink attribute to a netlink message. | |
| int | nla_put_string (struct nl_msg *n, int attrtype, const char *str) |
| Add a string netlink attribute to a netlink message. | |
| int | nla_put_flag (struct nl_msg *n, int attrtype) |
| Add a flag netlink attribute to a netlink message. | |
| int | nla_put_msecs (struct nl_msg *n, int attrtype, unsigned long msecs) |
| Add a msecs netlink attribute to a netlink message. | |
| int | nla_put_data (struct nl_msg *n, int attrtype, struct nl_data *data) |
| Add an abstract data netlink attribute to a netlink message. | |
| int | nla_put_addr (struct nl_msg *n, int attrtype, struct nl_addr *addr) |
| Add an abstract address netlink attribute to a netlink message. | |
Attribute Nesting | |
| struct nlattr * | nla_nest_start (struct nl_msg *n, int attrtype) |
| Start a new level of nested attributes. | |
| int | nla_nest_end (struct nl_msg *n, struct nlattr *start) |
| Finalize nesting of attributes. | |
Attribute Reading | |
| uint32_t | nla_get_u32 (struct nlattr *nla) |
| Return payload of u32 attribute. | |
| uint16_t | nla_get_u16 (struct nlattr *nla) |
| Return payload of u16 attribute. | |
| uint8_t | nla_get_u8 (struct nlattr *nla) |
| Return payload of u8 attribute. | |
| uint64_t | nla_get_u64 (struct nlattr *nla) |
| Return payload of u64 attribute. | |
| char * | nla_get_string (struct nlattr *nla) |
| return payload of string attribute | |
| int | nla_get_flag (struct nlattr *nla) |
| Return payload of flag attribute. | |
| unsigned long | nla_get_msecs (struct nlattr *nla) |
| Return payload of msecs attribute. | |
| struct nl_addr * | nla_get_addr (struct nlattr *nla, int family) |
| Return payload of address attribute. | |
| struct nl_data * | nla_get_data (struct nlattr *nla) |
| Return payload of abstract data attribute. | |
Attribute Construction (Exception Based) | |
| All these functions jump to nla_put_failure in case of a failure instead of returning an error code. | |
| #define | NLA_PUT(n, attrtype, attrlen, data) |
| Add a netlink attribute to a netlink message. | |
| #define | NLA_PUT_TYPE(n, type, attrtype, value) |
| Add a basic netlink attribute to a netlink message. | |
| #define | NLA_PUT_U8(n, attrtype, value) NLA_PUT_TYPE(n, uint8_t, attrtype, value) |
| Add a u8 netlink attribute to a netlink message. | |
| #define | NLA_PUT_U16(n, attrtype, value) NLA_PUT_TYPE(n, uint16_t, attrtype, value) |
| Add a u16 netlink attribute to a netlink message. | |
| #define | NLA_PUT_U32(n, attrtype, value) NLA_PUT_TYPE(n, uint32_t, attrtype, value) |
| Add a u32 netlink attribute to a netlink message. | |
| #define | NLA_PUT_U64(n, attrtype, value) NLA_PUT_TYPE(n, uint64_t, attrtype, value) |
| Add a u64 netlink attribute to a netlink message. | |
| #define | NLA_PUT_STRING(n, attrtype, value) NLA_PUT(n, attrtype, strlen(value) + 1, value) |
| Add a character string netlink attribute to a netlink message. | |
| #define | NLA_PUT_FLAG(n, attrtype) NLA_PUT(n, attrtype, 0, NULL) |
| Add a flag netlink attribute to a netlink message. | |
| #define | NLA_PUT_MSECS(n, attrtype, msecs) NLA_PUT_U64(n, attrtype, msecs) |
| Add a msecs netlink attribute to a netlink message. | |
| #define | NLA_PUT_ADDR(n, attrtype, addr) |
| Add a address attribute to a netlink message. | |
Iterators | |
| #define | nla_for_each_attr(pos, head, len, rem) |
| iterate over a stream of attributes | |
| #define | nla_for_each_nested(pos, nla, rem) |
| iterate over a stream of nested attributes | |
| #define NLA_PUT | ( | n, | |||
| attrtype, | |||||
| attrlen, | |||||
| data | ) |
| #define NLA_PUT_TYPE | ( | n, | |||
| type, | |||||
| attrtype, | |||||
| value | ) |
| #define nla_for_each_attr | ( | pos, | |||
| head, | |||||
| len, | |||||
| rem | ) |
Value:
| pos | loop counter, set to current attribute | |
| head | head of attribute stream | |
| len | length of attribute stream | |
| rem | initialized to len, holds bytes currently remaining in stream |
Definition at line 264 of file attr.h.
Referenced by nla_find(), nla_parse(), and nla_validate().
| #define nla_for_each_nested | ( | pos, | |||
| nla, | |||||
| rem | ) |
Value:
| pos | loop counter, set to current attribute | |
| nla | attribute containing the nested attributes | |
| rem | initialized to len, holds bytes currently remaining in stream |
| #define NLA_PUT_U8 | ( | n, | |||
| attrtype, | |||||
| value | ) | NLA_PUT_TYPE(n, uint8_t, attrtype, value) |
| n | netlink message | |
| attrtype | attribute type | |
| value | numeric value |
Definition at line 183 of file attr.h.
Referenced by rtnl_link_build_change_request().
| #define NLA_PUT_U16 | ( | n, | |||
| attrtype, | |||||
| value | ) | NLA_PUT_TYPE(n, uint16_t, attrtype, value) |
| #define NLA_PUT_U32 | ( | n, | |||
| attrtype, | |||||
| value | ) | NLA_PUT_TYPE(n, uint32_t, attrtype, value) |
| n | netlink message | |
| attrtype | attribute type | |
| value | numeric value |
Definition at line 201 of file attr.h.
Referenced by rtnl_link_build_change_request().
| #define NLA_PUT_U64 | ( | n, | |||
| attrtype, | |||||
| value | ) | NLA_PUT_TYPE(n, uint64_t, attrtype, value) |
| #define NLA_PUT_STRING | ( | n, | |||
| attrtype, | |||||
| value | ) | NLA_PUT(n, attrtype, strlen(value) + 1, value) |
| n | netlink message | |
| attrtype | attribute type | |
| value | character string |
Definition at line 219 of file attr.h.
Referenced by rtnl_link_build_change_request().
| #define NLA_PUT_FLAG | ( | n, | |||
| attrtype | ) | NLA_PUT(n, attrtype, 0, NULL) |
| #define NLA_PUT_MSECS | ( | n, | |||
| attrtype, | |||||
| msecs | ) | NLA_PUT_U64(n, attrtype, msecs) |
| #define NLA_PUT_ADDR | ( | n, | |||
| attrtype, | |||||
| addr | ) |
Value:
NLA_PUT(n, attrtype, nl_addr_get_len(addr), \ nl_addr_get_binary_addr(addr))
| n | netlink message | |
| attrtype | attribute type | |
| addr | abstract address object |
Definition at line 245 of file attr.h.
Referenced by rtnl_link_build_change_request().
| anonymous enum |
| int nla_attr_size | ( | int | payload | ) |
| payload | length of payload |
Definition at line 108 of file attr.c.
Referenced by nla_padlen(), nla_reserve(), and nla_total_size().
| int nla_total_size | ( | int | payload | ) |
| payload | length of payload |
Definition at line 117 of file attr.c.
References nla_attr_size().
Referenced by nla_padlen(), and nla_reserve().
| int nla_padlen | ( | int | payload | ) |
| payload | length of payload |
Definition at line 126 of file attr.c.
References nla_attr_size(), and nla_total_size().
Referenced by nla_reserve().
| int nla_type | ( | const struct nlattr * | nla | ) |
| nla | netlink attribute |
Definition at line 142 of file attr.c.
Referenced by nla_find(), and nla_parse().
| void* nla_data | ( | const struct nlattr * | nla | ) |
| nla | netlink attribute |
Definition at line 151 of file attr.c.
Referenced by nla_get_addr(), nla_get_data(), nla_get_string(), nla_get_u16(), nla_get_u32(), nla_get_u8(), nla_memcmp(), nla_memcpy(), nla_parse_nested(), nla_put(), nla_strcmp(), and nla_strlcpy().
| int nla_len | ( | const struct nlattr * | nla | ) |
| nla | netlink attribute |
Definition at line 160 of file attr.c.
Referenced by nla_get_addr(), nla_get_data(), nla_memcmp(), nla_memcpy(), nla_parse_nested(), nla_strcmp(), and nla_strlcpy().
| int nla_ok | ( | const struct nlattr * | nla, | |
| int | remaining | |||
| ) |
| struct nlattr* nla_next | ( | const struct nlattr * | nla, | |
| int * | remaining | |||
| ) | [read] |
| int nla_parse | ( | struct nlattr * | tb[], | |
| int | maxtype, | |||
| struct nlattr * | head, | |||
| int | len, | |||
| struct nla_policy * | policy | |||
| ) |
| tb | destination array with maxtype+1 elements | |
| maxtype | maximum attribute type to be expected | |
| head | head of attribute stream | |
| len | length of attribute stream | |
| policy | validation policy |
Definition at line 262 of file attr.c.
References nla_for_each_attr, and nla_type().
Referenced by nla_parse_nested(), and nlmsg_parse().
| int nla_parse_nested | ( | struct nlattr * | tb[], | |
| int | maxtype, | |||
| struct nlattr * | nla, | |||
| struct nla_policy * | policy | |||
| ) |
| tb | destination array with maxtype+1 elements | |
| maxtype | maximum attribute type to be expected | |
| nla | attribute containing the nested attributes | |
| policy | validation policy |
Definition at line 308 of file attr.c.
References nla_data(), nla_len(), and nla_parse().
| int nla_validate | ( | struct nlattr * | head, | |
| int | len, | |||
| int | maxtype, | |||
| struct nla_policy * | policy | |||
| ) |
| head | head of attribute stream | |
| len | length of attribute stream | |
| maxtype | maximum attribute type to be expected | |
| policy | validation policy |
Definition at line 328 of file attr.c.
References nla_for_each_attr.
Referenced by nlmsg_validate().
| struct nlattr* nla_find | ( | struct nlattr * | head, | |
| int | len, | |||
| int | attrtype | |||
| ) | [read] |
| head | head of attribute stream | |
| len | length of attribute stream | |
| attrtype | type of attribute to look for |
Definition at line 353 of file attr.c.
References nla_for_each_attr, and nla_type().
Referenced by nlmsg_find_attr().
| int nla_memcpy | ( | void * | dest, | |
| struct nlattr * | src, | |||
| int | count | |||
| ) |
| dest | where to copy to memcpy | |
| src | netlink attribute to copy from | |
| count | size of the destination area |
Definition at line 383 of file attr.c.
References nla_data(), and nla_len().
Referenced by nla_get_u64().
| size_t nla_strlcpy | ( | char * | dst, | |
| const struct nlattr * | nla, | |||
| size_t | dstsize | |||
| ) |
| dst | where to copy the string to | |
| nla | attribute to copy the string from | |
| dstsize | size of destination buffer |
Definition at line 408 of file attr.c.
References nla_data(), and nla_len().
| int nla_memcmp | ( | const struct nlattr * | nla, | |
| const void * | data, | |||
| size_t | size | |||
| ) |
| nla | netlink attribute | |
| data | memory area | |
| size | size of memory area |
Definition at line 432 of file attr.c.
References nla_data(), and nla_len().
| int nla_strcmp | ( | const struct nlattr * | nla, | |
| const char * | str | |||
| ) |
| nla | netlink string attribute | |
| str | another string |
Definition at line 448 of file attr.c.
References nla_data(), and nla_len().
| struct nlattr* nla_reserve | ( | struct nl_msg * | n, | |
| int | attrtype, | |||
| int | attrlen | |||
| ) | [read] |
| n | netlink message | |
| attrtype | attribute type | |
| attrlen | length of attribute payload |
Definition at line 475 of file attr.c.
References nla_attr_size(), nla_padlen(), nla_total_size(), and nlmsg_data().
Referenced by nla_put().
| int nla_put | ( | struct nl_msg * | n, | |
| int | attrtype, | |||
| int | attrlen, | |||
| const void * | data | |||
| ) |
| n | netlink message | |
| attrtype | attribute type | |
| attrlen | length of attribute payload | |
| data | head of attribute payload |
Definition at line 512 of file attr.c.
References nla_data(), nla_reserve(), and nlmsg_data().
Referenced by nla_nest_start(), nla_put_addr(), nla_put_data(), nla_put_flag(), nla_put_nested(), nla_put_string(), nla_put_u16(), nla_put_u32(), nla_put_u64(), and nla_put_u8().
| int nla_put_nested | ( | struct nl_msg * | n, | |
| int | attrtype, | |||
| struct nl_msg * | nested | |||
| ) |
| n | netlink message | |
| attrtype | attribute type | |
| nested | netlink attribute to nest |
Definition at line 536 of file attr.c.
References nla_put(), nlmsg_data(), and nlmsg_len().
Referenced by rtnl_neightbl_build_change_request().
| int nla_put_u8 | ( | struct nl_msg * | n, | |
| int | attrtype, | |||
| uint8_t | value | |||
| ) |
| int nla_put_u16 | ( | struct nl_msg * | n, | |
| int | attrtype, | |||
| uint16_t | value | |||
| ) |
| int nla_put_u32 | ( | struct nl_msg * | n, | |
| int | attrtype, | |||
| uint32_t | value | |||
| ) |
| n | netlink message | |
| attrtype | attribute type | |
| value | numeric value |
Definition at line 570 of file attr.c.
References nla_put().
Referenced by rtnl_neightbl_build_change_request().
| int nla_put_u64 | ( | struct nl_msg * | n, | |
| int | attrtype, | |||
| uint64_t | value | |||
| ) |
| n | netlink message | |
| attrtype | attribute type | |
| value | numeric value |
Definition at line 581 of file attr.c.
References nla_put().
Referenced by nla_put_msecs(), and rtnl_neightbl_build_change_request().
| int nla_put_string | ( | struct nl_msg * | n, | |
| int | attrtype, | |||
| const char * | str | |||
| ) |
| n | netlink message | |
| attrtype | attribute type | |
| str | NUL terminated string |
Definition at line 592 of file attr.c.
References nla_put().
Referenced by rtnl_neightbl_build_change_request().
| int nla_put_flag | ( | struct nl_msg * | n, | |
| int | attrtype | |||
| ) |
| int nla_put_msecs | ( | struct nl_msg * | n, | |
| int | attrtype, | |||
| unsigned long | msecs | |||
| ) |
| n | netlink message | |
| attrtype | attribute type | |
| msecs | number of msecs |
Definition at line 613 of file attr.c.
References nla_put_u64().
| int nla_put_data | ( | struct nl_msg * | n, | |
| int | attrtype, | |||
| struct nl_data * | data | |||
| ) |
| n | netlink message | |
| attrtype | attribute type | |
| data | abstract data |
Definition at line 624 of file attr.c.
References nl_data_get(), nl_data_get_size(), and nla_put().
| int nla_put_addr | ( | struct nl_msg * | n, | |
| int | attrtype, | |||
| struct nl_addr * | addr | |||
| ) |
| n | netlink message | |
| attrtype | attribute type | |
| addr | abstract address |
Definition at line 636 of file attr.c.
References nl_addr_get_binary_addr(), nl_addr_get_len(), and nla_put().
| struct nlattr* nla_nest_start | ( | struct nl_msg * | n, | |
| int | attrtype | |||
| ) | [read] |
| n | netlink message | |
| attrtype | attribute type of container |
Definition at line 656 of file attr.c.
References nla_put().
Referenced by rtnl_link_build_change_request().
| int nla_nest_end | ( | struct nl_msg * | n, | |
| struct nlattr * | start | |||
| ) |
| n | netlink message | |
| start | container attribute |
Definition at line 676 of file attr.c.
Referenced by rtnl_link_build_change_request().
| uint32_t nla_get_u32 | ( | struct nlattr * | nla | ) |
| uint16_t nla_get_u16 | ( | struct nlattr * | nla | ) |
| uint8_t nla_get_u8 | ( | struct nlattr * | nla | ) |
| uint64_t nla_get_u64 | ( | struct nlattr * | nla | ) |
| nla | u64 netlink attribute |
Definition at line 721 of file attr.c.
References nla_memcpy().
Referenced by nla_get_msecs().
| char* nla_get_string | ( | struct nlattr * | nla | ) |
| nla | string netlink attribute |
Definition at line 734 of file attr.c.
References nla_data().
| int nla_get_flag | ( | struct nlattr * | nla | ) |
| unsigned long nla_get_msecs | ( | struct nlattr * | nla | ) |
| nla | msecs netlink attribute |
Definition at line 754 of file attr.c.
References nla_get_u64().
| struct nl_addr* nla_get_addr | ( | struct nlattr * | nla, | |
| int | family | |||
| ) | [read] |
| nla | address netlink attribute | |
| family | address family |
Definition at line 766 of file attr.c.
References nl_addr_build(), nla_data(), and nla_len().
| struct nl_data* nla_get_data | ( | struct nlattr * | nla | ) | [read] |
| nla | abstract data netlink attribute |
Definition at line 777 of file attr.c.
References nl_data_alloc(), nla_data(), and nla_len().
1.5.5