|  | /* SPDX-License-Identifier: LGPL-2.1 */ | 
|  |  | 
|  | /* | 
|  | * 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 | 
|  |  | 
|  | #include <stdint.h> | 
|  | #include <linux/netlink.h> | 
|  | /* avoid multiple definition of netlink features */ | 
|  | #define __LINUX_NETLINK_H | 
|  |  | 
|  | /** | 
|  | * 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, | 
|  | }; | 
|  |  | 
|  | #define NLA_TYPE_MAX (__NLA_TYPE_MAX - 1) | 
|  |  | 
|  | /** | 
|  | * @ingroup attr | 
|  | * Attribute validation policy. | 
|  | * | 
|  | * See section @core_doc{core_attr_parse,Attribute Parsing} for more details. | 
|  | */ | 
|  | struct nla_policy { | 
|  | /** Type of attribute or NLA_UNSPEC */ | 
|  | uint16_t	type; | 
|  |  | 
|  | /** Minimal length of payload required */ | 
|  | uint16_t	minlen; | 
|  |  | 
|  | /** Maximal length of payload allowed */ | 
|  | uint16_t	maxlen; | 
|  | }; | 
|  |  | 
|  | /** | 
|  | * @ingroup attr | 
|  | * Iterate over a stream of attributes | 
|  | * @arg pos	loop counter, set to current attribute | 
|  | * @arg head	head of attribute stream | 
|  | * @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) \ | 
|  | for (pos = head, rem = len; \ | 
|  | nla_ok(pos, rem); \ | 
|  | pos = nla_next(pos, &(rem))) | 
|  |  | 
|  | int nla_dump_errormsg(struct nlmsghdr *nlh); | 
|  |  | 
|  | #endif /* __NLATTR_H */ |