diff options
Diffstat (limited to 'tools/lib/bpf/nlattr.h')
-rw-r--r-- | tools/lib/bpf/nlattr.h | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/tools/lib/bpf/nlattr.h b/tools/lib/bpf/nlattr.h new file mode 100644 index 000000000000..931a71f68f93 --- /dev/null +++ b/tools/lib/bpf/nlattr.h | |||
@@ -0,0 +1,72 @@ | |||
1 | /* SPDX-License-Identifier: LGPL-2.1 */ | ||
2 | |||
3 | /* | ||
4 | * NETLINK Netlink attributes | ||
5 | * | ||
6 | * This library is free software; you can redistribute it and/or | ||
7 | * modify it under the terms of the GNU Lesser General Public | ||
8 | * License as published by the Free Software Foundation version 2.1 | ||
9 | * of the License. | ||
10 | * | ||
11 | * Copyright (c) 2003-2013 Thomas Graf <tgraf@suug.ch> | ||
12 | */ | ||
13 | |||
14 | #ifndef __NLATTR_H | ||
15 | #define __NLATTR_H | ||
16 | |||
17 | #include <stdint.h> | ||
18 | #include <linux/netlink.h> | ||
19 | /* avoid multiple definition of netlink features */ | ||
20 | #define __LINUX_NETLINK_H | ||
21 | |||
22 | /** | ||
23 | * Standard attribute types to specify validation policy | ||
24 | */ | ||
25 | enum { | ||
26 | NLA_UNSPEC, /**< Unspecified type, binary data chunk */ | ||
27 | NLA_U8, /**< 8 bit integer */ | ||
28 | NLA_U16, /**< 16 bit integer */ | ||
29 | NLA_U32, /**< 32 bit integer */ | ||
30 | NLA_U64, /**< 64 bit integer */ | ||
31 | NLA_STRING, /**< NUL terminated character string */ | ||
32 | NLA_FLAG, /**< Flag */ | ||
33 | NLA_MSECS, /**< Micro seconds (64bit) */ | ||
34 | NLA_NESTED, /**< Nested attributes */ | ||
35 | __NLA_TYPE_MAX, | ||
36 | }; | ||
37 | |||
38 | #define NLA_TYPE_MAX (__NLA_TYPE_MAX - 1) | ||
39 | |||
40 | /** | ||
41 | * @ingroup attr | ||
42 | * Attribute validation policy. | ||
43 | * | ||
44 | * See section @core_doc{core_attr_parse,Attribute Parsing} for more details. | ||
45 | */ | ||
46 | struct nla_policy { | ||
47 | /** Type of attribute or NLA_UNSPEC */ | ||
48 | uint16_t type; | ||
49 | |||
50 | /** Minimal length of payload required */ | ||
51 | uint16_t minlen; | ||
52 | |||
53 | /** Maximal length of payload allowed */ | ||
54 | uint16_t maxlen; | ||
55 | }; | ||
56 | |||
57 | /** | ||
58 | * @ingroup attr | ||
59 | * Iterate over a stream of attributes | ||
60 | * @arg pos loop counter, set to current attribute | ||
61 | * @arg head head of attribute stream | ||
62 | * @arg len length of attribute stream | ||
63 | * @arg rem initialized to len, holds bytes currently remaining in stream | ||
64 | */ | ||
65 | #define nla_for_each_attr(pos, head, len, rem) \ | ||
66 | for (pos = head, rem = len; \ | ||
67 | nla_ok(pos, rem); \ | ||
68 | pos = nla_next(pos, &(rem))) | ||
69 | |||
70 | int nla_dump_errormsg(struct nlmsghdr *nlh); | ||
71 | |||
72 | #endif /* __NLATTR_H */ | ||