.. | .. |
---|
1 | | -/* SPDX-License-Identifier: LGPL-2.1 */ |
---|
| 1 | +/* SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause) */ |
---|
2 | 2 | |
---|
3 | 3 | /* |
---|
4 | 4 | * NETLINK Netlink attributes |
---|
5 | 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 | 6 | * Copyright (c) 2003-2013 Thomas Graf <tgraf@suug.ch> |
---|
12 | 7 | */ |
---|
13 | 8 | |
---|
14 | | -#ifndef __NLATTR_H |
---|
15 | | -#define __NLATTR_H |
---|
| 9 | +#ifndef __LIBBPF_NLATTR_H |
---|
| 10 | +#define __LIBBPF_NLATTR_H |
---|
16 | 11 | |
---|
17 | 12 | #include <stdint.h> |
---|
18 | 13 | #include <linux/netlink.h> |
---|
.. | .. |
---|
23 | 18 | * Standard attribute types to specify validation policy |
---|
24 | 19 | */ |
---|
25 | 20 | 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, |
---|
| 21 | + LIBBPF_NLA_UNSPEC, /**< Unspecified type, binary data chunk */ |
---|
| 22 | + LIBBPF_NLA_U8, /**< 8 bit integer */ |
---|
| 23 | + LIBBPF_NLA_U16, /**< 16 bit integer */ |
---|
| 24 | + LIBBPF_NLA_U32, /**< 32 bit integer */ |
---|
| 25 | + LIBBPF_NLA_U64, /**< 64 bit integer */ |
---|
| 26 | + LIBBPF_NLA_STRING, /**< NUL terminated character string */ |
---|
| 27 | + LIBBPF_NLA_FLAG, /**< Flag */ |
---|
| 28 | + LIBBPF_NLA_MSECS, /**< Micro seconds (64bit) */ |
---|
| 29 | + LIBBPF_NLA_NESTED, /**< Nested attributes */ |
---|
| 30 | + __LIBBPF_NLA_TYPE_MAX, |
---|
36 | 31 | }; |
---|
37 | 32 | |
---|
38 | | -#define NLA_TYPE_MAX (__NLA_TYPE_MAX - 1) |
---|
| 33 | +#define LIBBPF_NLA_TYPE_MAX (__LIBBPF_NLA_TYPE_MAX - 1) |
---|
39 | 34 | |
---|
40 | 35 | /** |
---|
41 | 36 | * @ingroup attr |
---|
.. | .. |
---|
43 | 38 | * |
---|
44 | 39 | * See section @core_doc{core_attr_parse,Attribute Parsing} for more details. |
---|
45 | 40 | */ |
---|
46 | | -struct nla_policy { |
---|
47 | | - /** Type of attribute or NLA_UNSPEC */ |
---|
| 41 | +struct libbpf_nla_policy { |
---|
| 42 | + /** Type of attribute or LIBBPF_NLA_UNSPEC */ |
---|
48 | 43 | uint16_t type; |
---|
49 | 44 | |
---|
50 | 45 | /** Minimal length of payload required */ |
---|
.. | .. |
---|
62 | 57 | * @arg len length of attribute stream |
---|
63 | 58 | * @arg rem initialized to len, holds bytes currently remaining in stream |
---|
64 | 59 | */ |
---|
65 | | -#define nla_for_each_attr(pos, head, len, rem) \ |
---|
| 60 | +#define libbpf_nla_for_each_attr(pos, head, len, rem) \ |
---|
66 | 61 | for (pos = head, rem = len; \ |
---|
67 | 62 | nla_ok(pos, rem); \ |
---|
68 | 63 | pos = nla_next(pos, &(rem))) |
---|
69 | 64 | |
---|
70 | | -int nla_dump_errormsg(struct nlmsghdr *nlh); |
---|
| 65 | +/** |
---|
| 66 | + * libbpf_nla_data - head of payload |
---|
| 67 | + * @nla: netlink attribute |
---|
| 68 | + */ |
---|
| 69 | +static inline void *libbpf_nla_data(const struct nlattr *nla) |
---|
| 70 | +{ |
---|
| 71 | + return (char *) nla + NLA_HDRLEN; |
---|
| 72 | +} |
---|
71 | 73 | |
---|
72 | | -#endif /* __NLATTR_H */ |
---|
| 74 | +static inline uint8_t libbpf_nla_getattr_u8(const struct nlattr *nla) |
---|
| 75 | +{ |
---|
| 76 | + return *(uint8_t *)libbpf_nla_data(nla); |
---|
| 77 | +} |
---|
| 78 | + |
---|
| 79 | +static inline uint32_t libbpf_nla_getattr_u32(const struct nlattr *nla) |
---|
| 80 | +{ |
---|
| 81 | + return *(uint32_t *)libbpf_nla_data(nla); |
---|
| 82 | +} |
---|
| 83 | + |
---|
| 84 | +static inline const char *libbpf_nla_getattr_str(const struct nlattr *nla) |
---|
| 85 | +{ |
---|
| 86 | + return (const char *)libbpf_nla_data(nla); |
---|
| 87 | +} |
---|
| 88 | + |
---|
| 89 | +/** |
---|
| 90 | + * libbpf_nla_len - length of payload |
---|
| 91 | + * @nla: netlink attribute |
---|
| 92 | + */ |
---|
| 93 | +static inline int libbpf_nla_len(const struct nlattr *nla) |
---|
| 94 | +{ |
---|
| 95 | + return nla->nla_len - NLA_HDRLEN; |
---|
| 96 | +} |
---|
| 97 | + |
---|
| 98 | +int libbpf_nla_parse(struct nlattr *tb[], int maxtype, struct nlattr *head, |
---|
| 99 | + int len, struct libbpf_nla_policy *policy); |
---|
| 100 | +int libbpf_nla_parse_nested(struct nlattr *tb[], int maxtype, |
---|
| 101 | + struct nlattr *nla, |
---|
| 102 | + struct libbpf_nla_policy *policy); |
---|
| 103 | + |
---|
| 104 | +int libbpf_nla_dump_errormsg(struct nlmsghdr *nlh); |
---|
| 105 | + |
---|
| 106 | +#endif /* __LIBBPF_NLATTR_H */ |
---|