diff options
Diffstat (limited to 'tools/lib/bpf/nlattr.h')
| -rw-r--r-- | tools/lib/bpf/nlattr.h | 82 | 
1 files changed, 58 insertions, 24 deletions
diff --git a/tools/lib/bpf/nlattr.h b/tools/lib/bpf/nlattr.h index 931a71f68f93..6cc3ac91690f 100644 --- a/tools/lib/bpf/nlattr.h +++ b/tools/lib/bpf/nlattr.h @@ -1,18 +1,13 @@ -/* SPDX-License-Identifier: LGPL-2.1 */ +/* SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause) */  /*   * NETLINK      Netlink attributes   * - *	This library is free software; you can redistribute it and/or - *	modify it under the terms of the GNU Lesser General Public - *	License as published by the Free Software Foundation version 2.1 - *	of the License. - *   * Copyright (c) 2003-2013 Thomas Graf <tgraf@suug.ch>   */ -#ifndef __NLATTR_H -#define __NLATTR_H +#ifndef __LIBBPF_NLATTR_H +#define __LIBBPF_NLATTR_H  #include <stdint.h>  #include <linux/netlink.h> @@ -23,19 +18,19 @@   * Standard attribute types to specify validation policy   */  enum { -	NLA_UNSPEC,	/**< Unspecified type, binary data chunk */ -	NLA_U8,		/**< 8 bit integer */ -	NLA_U16,	/**< 16 bit integer */ -	NLA_U32,	/**< 32 bit integer */ -	NLA_U64,	/**< 64 bit integer */ -	NLA_STRING,	/**< NUL terminated character string */ -	NLA_FLAG,	/**< Flag */ -	NLA_MSECS,	/**< Micro seconds (64bit) */ -	NLA_NESTED,	/**< Nested attributes */ -	__NLA_TYPE_MAX, +	LIBBPF_NLA_UNSPEC,	/**< Unspecified type, binary data chunk */ +	LIBBPF_NLA_U8,		/**< 8 bit integer */ +	LIBBPF_NLA_U16,		/**< 16 bit integer */ +	LIBBPF_NLA_U32,		/**< 32 bit integer */ +	LIBBPF_NLA_U64,		/**< 64 bit integer */ +	LIBBPF_NLA_STRING,	/**< NUL terminated character string */ +	LIBBPF_NLA_FLAG,	/**< Flag */ +	LIBBPF_NLA_MSECS,	/**< Micro seconds (64bit) */ +	LIBBPF_NLA_NESTED,	/**< Nested attributes */ +	__LIBBPF_NLA_TYPE_MAX,  }; -#define NLA_TYPE_MAX (__NLA_TYPE_MAX - 1) +#define LIBBPF_NLA_TYPE_MAX (__LIBBPF_NLA_TYPE_MAX - 1)  /**   * @ingroup attr @@ -43,8 +38,8 @@ enum {   *   * See section @core_doc{core_attr_parse,Attribute Parsing} for more details.   */ -struct nla_policy { -	/** Type of attribute or NLA_UNSPEC */ +struct libbpf_nla_policy { +	/** Type of attribute or LIBBPF_NLA_UNSPEC */  	uint16_t	type;  	/** Minimal length of payload required */ @@ -62,11 +57,50 @@ struct nla_policy {   * @arg len	length of attribute stream   * @arg rem	initialized to len, holds bytes currently remaining in stream   */ -#define nla_for_each_attr(pos, head, len, rem) \ +#define libbpf_nla_for_each_attr(pos, head, len, rem) \  	for (pos = head, rem = len; \  	     nla_ok(pos, rem); \  	     pos = nla_next(pos, &(rem))) -int nla_dump_errormsg(struct nlmsghdr *nlh); +/** + * libbpf_nla_data - head of payload + * @nla: netlink attribute + */ +static inline void *libbpf_nla_data(const struct nlattr *nla) +{ +	return (char *) nla + NLA_HDRLEN; +} + +static inline uint8_t libbpf_nla_getattr_u8(const struct nlattr *nla) +{ +	return *(uint8_t *)libbpf_nla_data(nla); +} + +static inline uint32_t libbpf_nla_getattr_u32(const struct nlattr *nla) +{ +	return *(uint32_t *)libbpf_nla_data(nla); +} + +static inline const char *libbpf_nla_getattr_str(const struct nlattr *nla) +{ +	return (const char *)libbpf_nla_data(nla); +} + +/** + * libbpf_nla_len - length of payload + * @nla: netlink attribute + */ +static inline int libbpf_nla_len(const struct nlattr *nla) +{ +	return nla->nla_len - NLA_HDRLEN; +} + +int libbpf_nla_parse(struct nlattr *tb[], int maxtype, struct nlattr *head, +		     int len, struct libbpf_nla_policy *policy); +int libbpf_nla_parse_nested(struct nlattr *tb[], int maxtype, +			    struct nlattr *nla, +			    struct libbpf_nla_policy *policy); + +int libbpf_nla_dump_errormsg(struct nlmsghdr *nlh); -#endif /* __NLATTR_H */ +#endif /* __LIBBPF_NLATTR_H */  | 
