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 |
<------- 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);
#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().