1  /* SPDX-License-Identifier: GPL-2.0 */
2  #ifndef __NET_NETLINK_H
3  #define __NET_NETLINK_H
4  
5  #include <linux/types.h>
6  #include <linux/netlink.h>
7  #include <linux/jiffies.h>
8  #include <linux/in6.h>
9  
10  /* ========================================================================
11   *         Netlink Messages and Attributes Interface (As Seen On TV)
12   * ------------------------------------------------------------------------
13   *                          Messages Interface
14   * ------------------------------------------------------------------------
15   *
16   * Message Format:
17   *    <--- nlmsg_total_size(payload)  --->
18   *    <-- nlmsg_msg_size(payload) ->
19   *   +----------+- - -+-------------+- - -+-------- - -
20   *   | nlmsghdr | Pad |   Payload   | Pad | nlmsghdr
21   *   +----------+- - -+-------------+- - -+-------- - -
22   *   nlmsg_data(nlh)---^                   ^
23   *   nlmsg_next(nlh)-----------------------+
24   *
25   * Payload Format:
26   *    <---------------------- nlmsg_len(nlh) --------------------->
27   *    <------ hdrlen ------>       <- nlmsg_attrlen(nlh, hdrlen) ->
28   *   +----------------------+- - -+--------------------------------+
29   *   |     Family Header    | Pad |           Attributes           |
30   *   +----------------------+- - -+--------------------------------+
31   *   nlmsg_attrdata(nlh, hdrlen)---^
32   *
33   * Data Structures:
34   *   struct nlmsghdr			netlink message header
35   *
36   * Message Construction:
37   *   nlmsg_new()			create a new netlink message
38   *   nlmsg_put()			add a netlink message to an skb
39   *   nlmsg_put_answer()			callback based nlmsg_put()
40   *   nlmsg_end()			finalize netlink message
41   *   nlmsg_get_pos()			return current position in message
42   *   nlmsg_trim()			trim part of message
43   *   nlmsg_cancel()			cancel message construction
44   *   nlmsg_free()			free a netlink message
45   *
46   * Message Sending:
47   *   nlmsg_multicast()			multicast message to several groups
48   *   nlmsg_unicast()			unicast a message to a single socket
49   *   nlmsg_notify()			send notification message
50   *
51   * Message Length Calculations:
52   *   nlmsg_msg_size(payload)		length of message w/o padding
53   *   nlmsg_total_size(payload)		length of message w/ padding
54   *   nlmsg_padlen(payload)		length of padding at tail
55   *
56   * Message Payload Access:
57   *   nlmsg_data(nlh)			head of message payload
58   *   nlmsg_len(nlh)			length of message payload
59   *   nlmsg_attrdata(nlh, hdrlen)	head of attributes data
60   *   nlmsg_attrlen(nlh, hdrlen)		length of attributes data
61   *
62   * Message Parsing:
63   *   nlmsg_ok(nlh, remaining)		does nlh fit into remaining bytes?
64   *   nlmsg_next(nlh, remaining)		get next netlink message
65   *   nlmsg_parse()			parse attributes of a message
66   *   nlmsg_find_attr()			find an attribute in a message
67   *   nlmsg_for_each_msg()		loop over all messages
68   *   nlmsg_validate()			validate netlink message incl. attrs
69   *   nlmsg_for_each_attr()		loop over all attributes
70   *
71   * Misc:
72   *   nlmsg_report()			report back to application?
73   *
74   * ------------------------------------------------------------------------
75   *                          Attributes Interface
76   * ------------------------------------------------------------------------
77   *
78   * Attribute Format:
79   *    <------- nla_total_size(payload) ------->
80   *    <---- nla_attr_size(payload) ----->
81   *   +----------+- - -+- - - - - - - - - +- - -+-------- - -
82   *   |  Header  | Pad |     Payload      | Pad |  Header
83   *   +----------+- - -+- - - - - - - - - +- - -+-------- - -
84   *                     <- nla_len(nla) ->      ^
85   *   nla_data(nla)----^                        |
86   *   nla_next(nla)-----------------------------'
87   *
88   * Data Structures:
89   *   struct nlattr			netlink attribute header
90   *
91   * Attribute Construction:
92   *   nla_reserve(skb, type, len)	reserve room for an attribute
93   *   nla_reserve_nohdr(skb, len)	reserve room for an attribute w/o hdr
94   *   nla_put(skb, type, len, data)	add attribute to skb
95   *   nla_put_nohdr(skb, len, data)	add attribute w/o hdr
96   *   nla_append(skb, len, data)		append data to skb
97   *
98   * Attribute Construction for Basic Types:
99   *   nla_put_u8(skb, type, value)	add u8 attribute to skb
100   *   nla_put_u16(skb, type, value)	add u16 attribute to skb
101   *   nla_put_u32(skb, type, value)	add u32 attribute to skb
102   *   nla_put_u64_64bit(skb, type,
103   *                     value, padattr)	add u64 attribute to skb
104   *   nla_put_s8(skb, type, value)	add s8 attribute to skb
105   *   nla_put_s16(skb, type, value)	add s16 attribute to skb
106   *   nla_put_s32(skb, type, value)	add s32 attribute to skb
107   *   nla_put_s64(skb, type, value,
108   *               padattr)		add s64 attribute to skb
109   *   nla_put_string(skb, type, str)	add string attribute to skb
110   *   nla_put_flag(skb, type)		add flag attribute to skb
111   *   nla_put_msecs(skb, type, jiffies,
112   *                 padattr)		add msecs attribute to skb
113   *   nla_put_in_addr(skb, type, addr)	add IPv4 address attribute to skb
114   *   nla_put_in6_addr(skb, type, addr)	add IPv6 address attribute to skb
115   *
116   * Nested Attributes Construction:
117   *   nla_nest_start(skb, type)		start a nested attribute
118   *   nla_nest_end(skb, nla)		finalize a nested attribute
119   *   nla_nest_cancel(skb, nla)		cancel nested attribute construction
120   *
121   * Attribute Length Calculations:
122   *   nla_attr_size(payload)		length of attribute w/o padding
123   *   nla_total_size(payload)		length of attribute w/ padding
124   *   nla_padlen(payload)		length of padding
125   *
126   * Attribute Payload Access:
127   *   nla_data(nla)			head of attribute payload
128   *   nla_len(nla)			length of attribute payload
129   *
130   * Attribute Payload Access for Basic Types:
131   *   nla_get_u8(nla)			get payload for a u8 attribute
132   *   nla_get_u16(nla)			get payload for a u16 attribute
133   *   nla_get_u32(nla)			get payload for a u32 attribute
134   *   nla_get_u64(nla)			get payload for a u64 attribute
135   *   nla_get_s8(nla)			get payload for a s8 attribute
136   *   nla_get_s16(nla)			get payload for a s16 attribute
137   *   nla_get_s32(nla)			get payload for a s32 attribute
138   *   nla_get_s64(nla)			get payload for a s64 attribute
139   *   nla_get_flag(nla)			return 1 if flag is true
140   *   nla_get_msecs(nla)			get payload for a msecs attribute
141   *
142   * Attribute Misc:
143   *   nla_memcpy(dest, nla, count)	copy attribute into memory
144   *   nla_memcmp(nla, data, size)	compare attribute with memory area
145   *   nla_strscpy(dst, nla, size)	copy attribute to a sized string
146   *   nla_strcmp(nla, str)		compare attribute with string
147   *
148   * Attribute Parsing:
149   *   nla_ok(nla, remaining)		does nla fit into remaining bytes?
150   *   nla_next(nla, remaining)		get next netlink attribute
151   *   nla_validate()			validate a stream of attributes
152   *   nla_validate_nested()		validate a stream of nested attributes
153   *   nla_find()				find attribute in stream of attributes
154   *   nla_find_nested()			find attribute in nested attributes
155   *   nla_parse()			parse and validate stream of attrs
156   *   nla_parse_nested()			parse nested attributes
157   *   nla_for_each_attr()		loop over all attributes
158   *   nla_for_each_nested()		loop over the nested attributes
159   *=========================================================================
160   */
161  
162   /**
163    * Standard attribute types to specify validation policy
164    */
165  enum {
166  	NLA_UNSPEC,
167  	NLA_U8,
168  	NLA_U16,
169  	NLA_U32,
170  	NLA_U64,
171  	NLA_STRING,
172  	NLA_FLAG,
173  	NLA_MSECS,
174  	NLA_NESTED,
175  	NLA_NESTED_ARRAY,
176  	NLA_NUL_STRING,
177  	NLA_BINARY,
178  	NLA_S8,
179  	NLA_S16,
180  	NLA_S32,
181  	NLA_S64,
182  	NLA_BITFIELD32,
183  	NLA_REJECT,
184  	__NLA_TYPE_MAX,
185  };
186  
187  #define NLA_TYPE_MAX (__NLA_TYPE_MAX - 1)
188  
189  struct netlink_range_validation {
190  	u64 min, max;
191  };
192  
193  struct netlink_range_validation_signed {
194  	s64 min, max;
195  };
196  
197  enum nla_policy_validation {
198  	NLA_VALIDATE_NONE,
199  	NLA_VALIDATE_RANGE,
200  	NLA_VALIDATE_RANGE_WARN_TOO_LONG,
201  	NLA_VALIDATE_MIN,
202  	NLA_VALIDATE_MAX,
203  	NLA_VALIDATE_MASK,
204  	NLA_VALIDATE_RANGE_PTR,
205  	NLA_VALIDATE_FUNCTION,
206  };
207  
208  /**
209   * struct nla_policy - attribute validation policy
210   * @type: Type of attribute or NLA_UNSPEC
211   * @validation_type: type of attribute validation done in addition to
212   *	type-specific validation (e.g. range, function call), see
213   *	&enum nla_policy_validation
214   * @len: Type specific length of payload
215   *
216   * Policies are defined as arrays of this struct, the array must be
217   * accessible by attribute type up to the highest identifier to be expected.
218   *
219   * Meaning of `len' field:
220   *    NLA_STRING           Maximum length of string
221   *    NLA_NUL_STRING       Maximum length of string (excluding NUL)
222   *    NLA_FLAG             Unused
223   *    NLA_BINARY           Maximum length of attribute payload
224   *                         (but see also below with the validation type)
225   *    NLA_NESTED,
226   *    NLA_NESTED_ARRAY     Length verification is done by checking len of
227   *                         nested header (or empty); len field is used if
228   *                         nested_policy is also used, for the max attr
229   *                         number in the nested policy.
230   *    NLA_U8, NLA_U16,
231   *    NLA_U32, NLA_U64,
232   *    NLA_S8, NLA_S16,
233   *    NLA_S32, NLA_S64,
234   *    NLA_MSECS            Leaving the length field zero will verify the
235   *                         given type fits, using it verifies minimum length
236   *                         just like "All other"
237   *    NLA_BITFIELD32       Unused
238   *    NLA_REJECT           Unused
239   *    All other            Minimum length of attribute payload
240   *
241   * Meaning of validation union:
242   *    NLA_BITFIELD32       This is a 32-bit bitmap/bitselector attribute and
243   *                         `bitfield32_valid' is the u32 value of valid flags
244   *    NLA_REJECT           This attribute is always rejected and `reject_message'
245   *                         may point to a string to report as the error instead
246   *                         of the generic one in extended ACK.
247   *    NLA_NESTED           `nested_policy' to a nested policy to validate, must
248   *                         also set `len' to the max attribute number. Use the
249   *                         provided NLA_POLICY_NESTED() macro.
250   *                         Note that nla_parse() will validate, but of course not
251   *                         parse, the nested sub-policies.
252   *    NLA_NESTED_ARRAY     `nested_policy' points to a nested policy to validate,
253   *                         must also set `len' to the max attribute number. Use
254   *                         the provided NLA_POLICY_NESTED_ARRAY() macro.
255   *                         The difference to NLA_NESTED is the structure:
256   *                         NLA_NESTED has the nested attributes directly inside
257   *                         while an array has the nested attributes at another
258   *                         level down and the attribute types directly in the
259   *                         nesting don't matter.
260   *    NLA_U8,
261   *    NLA_U16,
262   *    NLA_U32,
263   *    NLA_U64,
264   *    NLA_S8,
265   *    NLA_S16,
266   *    NLA_S32,
267   *    NLA_S64              The `min' and `max' fields are used depending on the
268   *                         validation_type field, if that is min/max/range then
269   *                         the min, max or both are used (respectively) to check
270   *                         the value of the integer attribute.
271   *                         Note that in the interest of code simplicity and
272   *                         struct size both limits are s16, so you cannot
273   *                         enforce a range that doesn't fall within the range
274   *                         of s16 - do that as usual in the code instead.
275   *                         Use the NLA_POLICY_MIN(), NLA_POLICY_MAX() and
276   *                         NLA_POLICY_RANGE() macros.
277   *    NLA_U8,
278   *    NLA_U16,
279   *    NLA_U32,
280   *    NLA_U64              If the validation_type field instead is set to
281   *                         NLA_VALIDATE_RANGE_PTR, `range' must be a pointer
282   *                         to a struct netlink_range_validation that indicates
283   *                         the min/max values.
284   *                         Use NLA_POLICY_FULL_RANGE().
285   *    NLA_S8,
286   *    NLA_S16,
287   *    NLA_S32,
288   *    NLA_S64              If the validation_type field instead is set to
289   *                         NLA_VALIDATE_RANGE_PTR, `range_signed' must be a
290   *                         pointer to a struct netlink_range_validation_signed
291   *                         that indicates the min/max values.
292   *                         Use NLA_POLICY_FULL_RANGE_SIGNED().
293   *
294   *    NLA_BINARY           If the validation type is like the ones for integers
295   *                         above, then the min/max length (not value like for
296   *                         integers) of the attribute is enforced.
297   *
298   *    All other            Unused - but note that it's a union
299   *
300   * Meaning of `validate' field, use via NLA_POLICY_VALIDATE_FN:
301   *    NLA_BINARY           Validation function called for the attribute.
302   *    All other            Unused - but note that it's a union
303   *
304   * Example:
305   *
306   * static const u32 myvalidflags = 0xff231023;
307   *
308   * static const struct nla_policy my_policy[ATTR_MAX+1] = {
309   * 	[ATTR_FOO] = { .type = NLA_U16 },
310   *	[ATTR_BAR] = { .type = NLA_STRING, .len = BARSIZ },
311   *	[ATTR_BAZ] = NLA_POLICY_EXACT_LEN(sizeof(struct mystruct)),
312   *	[ATTR_GOO] = NLA_POLICY_BITFIELD32(myvalidflags),
313   * };
314   */
315  struct nla_policy {
316  	u8		type;
317  	u8		validation_type;
318  	u16		len;
319  	union {
320  		const u32 bitfield32_valid;
321  		const u32 mask;
322  		const char *reject_message;
323  		const struct nla_policy *nested_policy;
324  		struct netlink_range_validation *range;
325  		struct netlink_range_validation_signed *range_signed;
326  		struct {
327  			s16 min, max;
328  		};
329  		int (*validate)(const struct nlattr *attr,
330  				struct netlink_ext_ack *extack);
331  		/* This entry is special, and used for the attribute at index 0
332  		 * only, and specifies special data about the policy, namely it
333  		 * specifies the "boundary type" where strict length validation
334  		 * starts for any attribute types >= this value, also, strict
335  		 * nesting validation starts here.
336  		 *
337  		 * Additionally, it means that NLA_UNSPEC is actually NLA_REJECT
338  		 * for any types >= this, so need to use NLA_POLICY_MIN_LEN() to
339  		 * get the previous pure { .len = xyz } behaviour. The advantage
340  		 * of this is that types not specified in the policy will be
341  		 * rejected.
342  		 *
343  		 * For completely new families it should be set to 1 so that the
344  		 * validation is enforced for all attributes. For existing ones
345  		 * it should be set at least when new attributes are added to
346  		 * the enum used by the policy, and be set to the new value that
347  		 * was added to enforce strict validation from thereon.
348  		 */
349  		u16 strict_start_type;
350  	};
351  };
352  
353  #define NLA_POLICY_ETH_ADDR		NLA_POLICY_EXACT_LEN(ETH_ALEN)
354  #define NLA_POLICY_ETH_ADDR_COMPAT	NLA_POLICY_EXACT_LEN_WARN(ETH_ALEN)
355  
356  #define _NLA_POLICY_NESTED(maxattr, policy) \
357  	{ .type = NLA_NESTED, .nested_policy = policy, .len = maxattr }
358  #define _NLA_POLICY_NESTED_ARRAY(maxattr, policy) \
359  	{ .type = NLA_NESTED_ARRAY, .nested_policy = policy, .len = maxattr }
360  #define NLA_POLICY_NESTED(policy) \
361  	_NLA_POLICY_NESTED(ARRAY_SIZE(policy) - 1, policy)
362  #define NLA_POLICY_NESTED_ARRAY(policy) \
363  	_NLA_POLICY_NESTED_ARRAY(ARRAY_SIZE(policy) - 1, policy)
364  #define NLA_POLICY_BITFIELD32(valid) \
365  	{ .type = NLA_BITFIELD32, .bitfield32_valid = valid }
366  
367  #define __NLA_IS_UINT_TYPE(tp)						\
368  	(tp == NLA_U8 || tp == NLA_U16 || tp == NLA_U32 || tp == NLA_U64)
369  #define __NLA_IS_SINT_TYPE(tp)						\
370  	(tp == NLA_S8 || tp == NLA_S16 || tp == NLA_S32 || tp == NLA_S64)
371  
372  #define __NLA_ENSURE(condition) BUILD_BUG_ON_ZERO(!(condition))
373  #define NLA_ENSURE_UINT_TYPE(tp)			\
374  	(__NLA_ENSURE(__NLA_IS_UINT_TYPE(tp)) + tp)
375  #define NLA_ENSURE_UINT_OR_BINARY_TYPE(tp)		\
376  	(__NLA_ENSURE(__NLA_IS_UINT_TYPE(tp) ||	\
377  		      tp == NLA_MSECS ||		\
378  		      tp == NLA_BINARY) + tp)
379  #define NLA_ENSURE_SINT_TYPE(tp)			\
380  	(__NLA_ENSURE(__NLA_IS_SINT_TYPE(tp)) + tp)
381  #define NLA_ENSURE_INT_OR_BINARY_TYPE(tp)		\
382  	(__NLA_ENSURE(__NLA_IS_UINT_TYPE(tp) ||		\
383  		      __NLA_IS_SINT_TYPE(tp) ||		\
384  		      tp == NLA_MSECS ||		\
385  		      tp == NLA_BINARY) + tp)
386  #define NLA_ENSURE_NO_VALIDATION_PTR(tp)		\
387  	(__NLA_ENSURE(tp != NLA_BITFIELD32 &&		\
388  		      tp != NLA_REJECT &&		\
389  		      tp != NLA_NESTED &&		\
390  		      tp != NLA_NESTED_ARRAY) + tp)
391  
392  #define NLA_POLICY_RANGE(tp, _min, _max) {		\
393  	.type = NLA_ENSURE_INT_OR_BINARY_TYPE(tp),	\
394  	.validation_type = NLA_VALIDATE_RANGE,		\
395  	.min = _min,					\
396  	.max = _max					\
397  }
398  
399  #define NLA_POLICY_FULL_RANGE(tp, _range) {		\
400  	.type = NLA_ENSURE_UINT_OR_BINARY_TYPE(tp),	\
401  	.validation_type = NLA_VALIDATE_RANGE_PTR,	\
402  	.range = _range,				\
403  }
404  
405  #define NLA_POLICY_FULL_RANGE_SIGNED(tp, _range) {	\
406  	.type = NLA_ENSURE_SINT_TYPE(tp),		\
407  	.validation_type = NLA_VALIDATE_RANGE_PTR,	\
408  	.range_signed = _range,				\
409  }
410  
411  #define NLA_POLICY_MIN(tp, _min) {			\
412  	.type = NLA_ENSURE_INT_OR_BINARY_TYPE(tp),	\
413  	.validation_type = NLA_VALIDATE_MIN,		\
414  	.min = _min,					\
415  }
416  
417  #define NLA_POLICY_MAX(tp, _max) {			\
418  	.type = NLA_ENSURE_INT_OR_BINARY_TYPE(tp),	\
419  	.validation_type = NLA_VALIDATE_MAX,		\
420  	.max = _max,					\
421  }
422  
423  #define NLA_POLICY_MASK(tp, _mask) {			\
424  	.type = NLA_ENSURE_UINT_TYPE(tp),		\
425  	.validation_type = NLA_VALIDATE_MASK,		\
426  	.mask = _mask,					\
427  }
428  
429  #define NLA_POLICY_VALIDATE_FN(tp, fn, ...) {		\
430  	.type = NLA_ENSURE_NO_VALIDATION_PTR(tp),	\
431  	.validation_type = NLA_VALIDATE_FUNCTION,	\
432  	.validate = fn,					\
433  	.len = __VA_ARGS__ + 0,				\
434  }
435  
436  #define NLA_POLICY_EXACT_LEN(_len)	NLA_POLICY_RANGE(NLA_BINARY, _len, _len)
437  #define NLA_POLICY_EXACT_LEN_WARN(_len) {			\
438  	.type = NLA_BINARY,					\
439  	.validation_type = NLA_VALIDATE_RANGE_WARN_TOO_LONG,	\
440  	.min = _len,						\
441  	.max = _len						\
442  }
443  #define NLA_POLICY_MIN_LEN(_len)	NLA_POLICY_MIN(NLA_BINARY, _len)
444  
445  /**
446   * struct nl_info - netlink source information
447   * @nlh: Netlink message header of original request
448   * @nl_net: Network namespace
449   * @portid: Netlink PORTID of requesting application
450   * @skip_notify: Skip netlink notifications to user space
451   * @skip_notify_kernel: Skip selected in-kernel notifications
452   */
453  struct nl_info {
454  	struct nlmsghdr		*nlh;
455  	struct net		*nl_net;
456  	u32			portid;
457  	u8			skip_notify:1,
458  				skip_notify_kernel:1;
459  };
460  
461  /**
462   * enum netlink_validation - netlink message/attribute validation levels
463   * @NL_VALIDATE_LIBERAL: Old-style "be liberal" validation, not caring about
464   *	extra data at the end of the message, attributes being longer than
465   *	they should be, or unknown attributes being present.
466   * @NL_VALIDATE_TRAILING: Reject junk data encountered after attribute parsing.
467   * @NL_VALIDATE_MAXTYPE: Reject attributes > max type; Together with _TRAILING
468   *	this is equivalent to the old nla_parse_strict()/nlmsg_parse_strict().
469   * @NL_VALIDATE_UNSPEC: Reject attributes with NLA_UNSPEC in the policy.
470   *	This can safely be set by the kernel when the given policy has no
471   *	NLA_UNSPEC anymore, and can thus be used to ensure policy entries
472   *	are enforced going forward.
473   * @NL_VALIDATE_STRICT_ATTRS: strict attribute policy parsing (e.g.
474   *	U8, U16, U32 must have exact size, etc.)
475   * @NL_VALIDATE_NESTED: Check that NLA_F_NESTED is set for NLA_NESTED(_ARRAY)
476   *	and unset for other policies.
477   */
478  enum netlink_validation {
479  	NL_VALIDATE_LIBERAL = 0,
480  	NL_VALIDATE_TRAILING = BIT(0),
481  	NL_VALIDATE_MAXTYPE = BIT(1),
482  	NL_VALIDATE_UNSPEC = BIT(2),
483  	NL_VALIDATE_STRICT_ATTRS = BIT(3),
484  	NL_VALIDATE_NESTED = BIT(4),
485  };
486  
487  #define NL_VALIDATE_DEPRECATED_STRICT (NL_VALIDATE_TRAILING |\
488  				       NL_VALIDATE_MAXTYPE)
489  #define NL_VALIDATE_STRICT (NL_VALIDATE_TRAILING |\
490  			    NL_VALIDATE_MAXTYPE |\
491  			    NL_VALIDATE_UNSPEC |\
492  			    NL_VALIDATE_STRICT_ATTRS |\
493  			    NL_VALIDATE_NESTED)
494  
495  int netlink_rcv_skb(struct sk_buff *skb,
496  		    int (*cb)(struct sk_buff *, struct nlmsghdr *,
497  			      struct netlink_ext_ack *));
498  int nlmsg_notify(struct sock *sk, struct sk_buff *skb, u32 portid,
499  		 unsigned int group, int report, gfp_t flags);
500  
501  int __nla_validate(const struct nlattr *head, int len, int maxtype,
502  		   const struct nla_policy *policy, unsigned int validate,
503  		   struct netlink_ext_ack *extack);
504  int __nla_parse(struct nlattr **tb, int maxtype, const struct nlattr *head,
505  		int len, const struct nla_policy *policy, unsigned int validate,
506  		struct netlink_ext_ack *extack);
507  int nla_policy_len(const struct nla_policy *, int);
508  struct nlattr *nla_find(const struct nlattr *head, int len, int attrtype);
509  ssize_t nla_strscpy(char *dst, const struct nlattr *nla, size_t dstsize);
510  char *nla_strdup(const struct nlattr *nla, gfp_t flags);
511  int nla_memcpy(void *dest, const struct nlattr *src, int count);
512  int nla_memcmp(const struct nlattr *nla, const void *data, size_t size);
513  int nla_strcmp(const struct nlattr *nla, const char *str);
514  struct nlattr *__nla_reserve(struct sk_buff *skb, int attrtype, int attrlen);
515  struct nlattr *__nla_reserve_64bit(struct sk_buff *skb, int attrtype,
516  				   int attrlen, int padattr);
517  void *__nla_reserve_nohdr(struct sk_buff *skb, int attrlen);
518  struct nlattr *nla_reserve(struct sk_buff *skb, int attrtype, int attrlen);
519  struct nlattr *nla_reserve_64bit(struct sk_buff *skb, int attrtype,
520  				 int attrlen, int padattr);
521  void *nla_reserve_nohdr(struct sk_buff *skb, int attrlen);
522  void __nla_put(struct sk_buff *skb, int attrtype, int attrlen,
523  	       const void *data);
524  void __nla_put_64bit(struct sk_buff *skb, int attrtype, int attrlen,
525  		     const void *data, int padattr);
526  void __nla_put_nohdr(struct sk_buff *skb, int attrlen, const void *data);
527  int nla_put(struct sk_buff *skb, int attrtype, int attrlen, const void *data);
528  int nla_put_64bit(struct sk_buff *skb, int attrtype, int attrlen,
529  		  const void *data, int padattr);
530  int nla_put_nohdr(struct sk_buff *skb, int attrlen, const void *data);
531  int nla_append(struct sk_buff *skb, int attrlen, const void *data);
532  
533  /**************************************************************************
534   * Netlink Messages
535   **************************************************************************/
536  
537  /**
538   * nlmsg_msg_size - length of netlink message not including padding
539   * @payload: length of message payload
540   */
nlmsg_msg_size(int payload)541  static inline int nlmsg_msg_size(int payload)
542  {
543  	return NLMSG_HDRLEN + payload;
544  }
545  
546  /**
547   * nlmsg_total_size - length of netlink message including padding
548   * @payload: length of message payload
549   */
nlmsg_total_size(int payload)550  static inline int nlmsg_total_size(int payload)
551  {
552  	return NLMSG_ALIGN(nlmsg_msg_size(payload));
553  }
554  
555  /**
556   * nlmsg_padlen - length of padding at the message's tail
557   * @payload: length of message payload
558   */
nlmsg_padlen(int payload)559  static inline int nlmsg_padlen(int payload)
560  {
561  	return nlmsg_total_size(payload) - nlmsg_msg_size(payload);
562  }
563  
564  /**
565   * nlmsg_data - head of message payload
566   * @nlh: netlink message header
567   */
nlmsg_data(const struct nlmsghdr * nlh)568  static inline void *nlmsg_data(const struct nlmsghdr *nlh)
569  {
570  	return (unsigned char *) nlh + NLMSG_HDRLEN;
571  }
572  
573  /**
574   * nlmsg_len - length of message payload
575   * @nlh: netlink message header
576   */
nlmsg_len(const struct nlmsghdr * nlh)577  static inline int nlmsg_len(const struct nlmsghdr *nlh)
578  {
579  	return nlh->nlmsg_len - NLMSG_HDRLEN;
580  }
581  
582  /**
583   * nlmsg_attrdata - head of attributes data
584   * @nlh: netlink message header
585   * @hdrlen: length of family specific header
586   */
nlmsg_attrdata(const struct nlmsghdr * nlh,int hdrlen)587  static inline struct nlattr *nlmsg_attrdata(const struct nlmsghdr *nlh,
588  					    int hdrlen)
589  {
590  	unsigned char *data = nlmsg_data(nlh);
591  	return (struct nlattr *) (data + NLMSG_ALIGN(hdrlen));
592  }
593  
594  /**
595   * nlmsg_attrlen - length of attributes data
596   * @nlh: netlink message header
597   * @hdrlen: length of family specific header
598   */
nlmsg_attrlen(const struct nlmsghdr * nlh,int hdrlen)599  static inline int nlmsg_attrlen(const struct nlmsghdr *nlh, int hdrlen)
600  {
601  	return nlmsg_len(nlh) - NLMSG_ALIGN(hdrlen);
602  }
603  
604  /**
605   * nlmsg_ok - check if the netlink message fits into the remaining bytes
606   * @nlh: netlink message header
607   * @remaining: number of bytes remaining in message stream
608   */
nlmsg_ok(const struct nlmsghdr * nlh,int remaining)609  static inline int nlmsg_ok(const struct nlmsghdr *nlh, int remaining)
610  {
611  	return (remaining >= (int) sizeof(struct nlmsghdr) &&
612  		nlh->nlmsg_len >= sizeof(struct nlmsghdr) &&
613  		nlh->nlmsg_len <= remaining);
614  }
615  
616  /**
617   * nlmsg_next - next netlink message in message stream
618   * @nlh: netlink message header
619   * @remaining: number of bytes remaining in message stream
620   *
621   * Returns the next netlink message in the message stream and
622   * decrements remaining by the size of the current message.
623   */
624  static inline struct nlmsghdr *
nlmsg_next(const struct nlmsghdr * nlh,int * remaining)625  nlmsg_next(const struct nlmsghdr *nlh, int *remaining)
626  {
627  	int totlen = NLMSG_ALIGN(nlh->nlmsg_len);
628  
629  	*remaining -= totlen;
630  
631  	return (struct nlmsghdr *) ((unsigned char *) nlh + totlen);
632  }
633  
634  /**
635   * nla_parse - Parse a stream of attributes into a tb buffer
636   * @tb: destination array with maxtype+1 elements
637   * @maxtype: maximum attribute type to be expected
638   * @head: head of attribute stream
639   * @len: length of attribute stream
640   * @policy: validation policy
641   * @extack: extended ACK pointer
642   *
643   * Parses a stream of attributes and stores a pointer to each attribute in
644   * the tb array accessible via the attribute type. Attributes with a type
645   * exceeding maxtype will be rejected, policy must be specified, attributes
646   * will be validated in the strictest way possible.
647   *
648   * Returns 0 on success or a negative error code.
649   */
nla_parse(struct nlattr ** tb,int maxtype,const struct nlattr * head,int len,const struct nla_policy * policy,struct netlink_ext_ack * extack)650  static inline int nla_parse(struct nlattr **tb, int maxtype,
651  			    const struct nlattr *head, int len,
652  			    const struct nla_policy *policy,
653  			    struct netlink_ext_ack *extack)
654  {
655  	return __nla_parse(tb, maxtype, head, len, policy,
656  			   NL_VALIDATE_STRICT, extack);
657  }
658  
659  /**
660   * nla_parse_deprecated - Parse a stream of attributes into a tb buffer
661   * @tb: destination array with maxtype+1 elements
662   * @maxtype: maximum attribute type to be expected
663   * @head: head of attribute stream
664   * @len: length of attribute stream
665   * @policy: validation policy
666   * @extack: extended ACK pointer
667   *
668   * Parses a stream of attributes and stores a pointer to each attribute in
669   * the tb array accessible via the attribute type. Attributes with a type
670   * exceeding maxtype will be ignored and attributes from the policy are not
671   * always strictly validated (only for new attributes).
672   *
673   * Returns 0 on success or a negative error code.
674   */
nla_parse_deprecated(struct nlattr ** tb,int maxtype,const struct nlattr * head,int len,const struct nla_policy * policy,struct netlink_ext_ack * extack)675  static inline int nla_parse_deprecated(struct nlattr **tb, int maxtype,
676  				       const struct nlattr *head, int len,
677  				       const struct nla_policy *policy,
678  				       struct netlink_ext_ack *extack)
679  {
680  	return __nla_parse(tb, maxtype, head, len, policy,
681  			   NL_VALIDATE_LIBERAL, extack);
682  }
683  
684  /**
685   * nla_parse_deprecated_strict - Parse a stream of attributes into a tb buffer
686   * @tb: destination array with maxtype+1 elements
687   * @maxtype: maximum attribute type to be expected
688   * @head: head of attribute stream
689   * @len: length of attribute stream
690   * @policy: validation policy
691   * @extack: extended ACK pointer
692   *
693   * Parses a stream of attributes and stores a pointer to each attribute in
694   * the tb array accessible via the attribute type. Attributes with a type
695   * exceeding maxtype will be rejected as well as trailing data, but the
696   * policy is not completely strictly validated (only for new attributes).
697   *
698   * Returns 0 on success or a negative error code.
699   */
nla_parse_deprecated_strict(struct nlattr ** tb,int maxtype,const struct nlattr * head,int len,const struct nla_policy * policy,struct netlink_ext_ack * extack)700  static inline int nla_parse_deprecated_strict(struct nlattr **tb, int maxtype,
701  					      const struct nlattr *head,
702  					      int len,
703  					      const struct nla_policy *policy,
704  					      struct netlink_ext_ack *extack)
705  {
706  	return __nla_parse(tb, maxtype, head, len, policy,
707  			   NL_VALIDATE_DEPRECATED_STRICT, extack);
708  }
709  
710  /**
711   * __nlmsg_parse - parse attributes of a netlink message
712   * @nlh: netlink message header
713   * @hdrlen: length of family specific header
714   * @tb: destination array with maxtype+1 elements
715   * @maxtype: maximum attribute type to be expected
716   * @policy: validation policy
717   * @validate: validation strictness
718   * @extack: extended ACK report struct
719   *
720   * See nla_parse()
721   */
__nlmsg_parse(const struct nlmsghdr * nlh,int hdrlen,struct nlattr * tb[],int maxtype,const struct nla_policy * policy,unsigned int validate,struct netlink_ext_ack * extack)722  static inline int __nlmsg_parse(const struct nlmsghdr *nlh, int hdrlen,
723  				struct nlattr *tb[], int maxtype,
724  				const struct nla_policy *policy,
725  				unsigned int validate,
726  				struct netlink_ext_ack *extack)
727  {
728  	if (nlh->nlmsg_len < nlmsg_msg_size(hdrlen)) {
729  		NL_SET_ERR_MSG(extack, "Invalid header length");
730  		return -EINVAL;
731  	}
732  
733  	return __nla_parse(tb, maxtype, nlmsg_attrdata(nlh, hdrlen),
734  			   nlmsg_attrlen(nlh, hdrlen), policy, validate,
735  			   extack);
736  }
737  
738  /**
739   * nlmsg_parse - parse attributes of a netlink message
740   * @nlh: netlink message header
741   * @hdrlen: length of family specific header
742   * @tb: destination array with maxtype+1 elements
743   * @maxtype: maximum attribute type to be expected
744   * @extack: extended ACK report struct
745   *
746   * See nla_parse()
747   */
nlmsg_parse(const struct nlmsghdr * nlh,int hdrlen,struct nlattr * tb[],int maxtype,const struct nla_policy * policy,struct netlink_ext_ack * extack)748  static inline int nlmsg_parse(const struct nlmsghdr *nlh, int hdrlen,
749  			      struct nlattr *tb[], int maxtype,
750  			      const struct nla_policy *policy,
751  			      struct netlink_ext_ack *extack)
752  {
753  	return __nlmsg_parse(nlh, hdrlen, tb, maxtype, policy,
754  			     NL_VALIDATE_STRICT, extack);
755  }
756  
757  /**
758   * nlmsg_parse_deprecated - parse attributes of a netlink message
759   * @nlh: netlink message header
760   * @hdrlen: length of family specific header
761   * @tb: destination array with maxtype+1 elements
762   * @maxtype: maximum attribute type to be expected
763   * @extack: extended ACK report struct
764   *
765   * See nla_parse_deprecated()
766   */
nlmsg_parse_deprecated(const struct nlmsghdr * nlh,int hdrlen,struct nlattr * tb[],int maxtype,const struct nla_policy * policy,struct netlink_ext_ack * extack)767  static inline int nlmsg_parse_deprecated(const struct nlmsghdr *nlh, int hdrlen,
768  					 struct nlattr *tb[], int maxtype,
769  					 const struct nla_policy *policy,
770  					 struct netlink_ext_ack *extack)
771  {
772  	return __nlmsg_parse(nlh, hdrlen, tb, maxtype, policy,
773  			     NL_VALIDATE_LIBERAL, extack);
774  }
775  
776  /**
777   * nlmsg_parse_deprecated_strict - parse attributes of a netlink message
778   * @nlh: netlink message header
779   * @hdrlen: length of family specific header
780   * @tb: destination array with maxtype+1 elements
781   * @maxtype: maximum attribute type to be expected
782   * @extack: extended ACK report struct
783   *
784   * See nla_parse_deprecated_strict()
785   */
786  static inline int
nlmsg_parse_deprecated_strict(const struct nlmsghdr * nlh,int hdrlen,struct nlattr * tb[],int maxtype,const struct nla_policy * policy,struct netlink_ext_ack * extack)787  nlmsg_parse_deprecated_strict(const struct nlmsghdr *nlh, int hdrlen,
788  			      struct nlattr *tb[], int maxtype,
789  			      const struct nla_policy *policy,
790  			      struct netlink_ext_ack *extack)
791  {
792  	return __nlmsg_parse(nlh, hdrlen, tb, maxtype, policy,
793  			     NL_VALIDATE_DEPRECATED_STRICT, extack);
794  }
795  
796  /**
797   * nlmsg_find_attr - find a specific attribute in a netlink message
798   * @nlh: netlink message header
799   * @hdrlen: length of familiy specific header
800   * @attrtype: type of attribute to look for
801   *
802   * Returns the first attribute which matches the specified type.
803   */
nlmsg_find_attr(const struct nlmsghdr * nlh,int hdrlen,int attrtype)804  static inline struct nlattr *nlmsg_find_attr(const struct nlmsghdr *nlh,
805  					     int hdrlen, int attrtype)
806  {
807  	return nla_find(nlmsg_attrdata(nlh, hdrlen),
808  			nlmsg_attrlen(nlh, hdrlen), attrtype);
809  }
810  
811  /**
812   * nla_validate_deprecated - Validate a stream of attributes
813   * @head: head of attribute stream
814   * @len: length of attribute stream
815   * @maxtype: maximum attribute type to be expected
816   * @policy: validation policy
817   * @validate: validation strictness
818   * @extack: extended ACK report struct
819   *
820   * Validates all attributes in the specified attribute stream against the
821   * specified policy. Validation is done in liberal mode.
822   * See documenation of struct nla_policy for more details.
823   *
824   * Returns 0 on success or a negative error code.
825   */
nla_validate_deprecated(const struct nlattr * head,int len,int maxtype,const struct nla_policy * policy,struct netlink_ext_ack * extack)826  static inline int nla_validate_deprecated(const struct nlattr *head, int len,
827  					  int maxtype,
828  					  const struct nla_policy *policy,
829  					  struct netlink_ext_ack *extack)
830  {
831  	return __nla_validate(head, len, maxtype, policy, NL_VALIDATE_LIBERAL,
832  			      extack);
833  }
834  
835  /**
836   * nla_validate - Validate a stream of attributes
837   * @head: head of attribute stream
838   * @len: length of attribute stream
839   * @maxtype: maximum attribute type to be expected
840   * @policy: validation policy
841   * @extack: extended ACK report struct
842   *
843   * Validates all attributes in the specified attribute stream against the
844   * specified policy. Validation is done in strict mode.
845   * See documenation of struct nla_policy for more details.
846   *
847   * Returns 0 on success or a negative error code.
848   */
nla_validate(const struct nlattr * head,int len,int maxtype,const struct nla_policy * policy,struct netlink_ext_ack * extack)849  static inline int nla_validate(const struct nlattr *head, int len, int maxtype,
850  			       const struct nla_policy *policy,
851  			       struct netlink_ext_ack *extack)
852  {
853  	return __nla_validate(head, len, maxtype, policy, NL_VALIDATE_STRICT,
854  			      extack);
855  }
856  
857  /**
858   * nlmsg_validate_deprecated - validate a netlink message including attributes
859   * @nlh: netlinket message header
860   * @hdrlen: length of familiy specific header
861   * @maxtype: maximum attribute type to be expected
862   * @policy: validation policy
863   * @extack: extended ACK report struct
864   */
nlmsg_validate_deprecated(const struct nlmsghdr * nlh,int hdrlen,int maxtype,const struct nla_policy * policy,struct netlink_ext_ack * extack)865  static inline int nlmsg_validate_deprecated(const struct nlmsghdr *nlh,
866  					    int hdrlen, int maxtype,
867  					    const struct nla_policy *policy,
868  					    struct netlink_ext_ack *extack)
869  {
870  	if (nlh->nlmsg_len < nlmsg_msg_size(hdrlen))
871  		return -EINVAL;
872  
873  	return __nla_validate(nlmsg_attrdata(nlh, hdrlen),
874  			      nlmsg_attrlen(nlh, hdrlen), maxtype,
875  			      policy, NL_VALIDATE_LIBERAL, extack);
876  }
877  
878  
879  
880  /**
881   * nlmsg_report - need to report back to application?
882   * @nlh: netlink message header
883   *
884   * Returns 1 if a report back to the application is requested.
885   */
nlmsg_report(const struct nlmsghdr * nlh)886  static inline int nlmsg_report(const struct nlmsghdr *nlh)
887  {
888  	return nlh ? !!(nlh->nlmsg_flags & NLM_F_ECHO) : 0;
889  }
890  
891  /**
892   * nlmsg_for_each_attr - iterate over a stream of attributes
893   * @pos: loop counter, set to current attribute
894   * @nlh: netlink message header
895   * @hdrlen: length of familiy specific header
896   * @rem: initialized to len, holds bytes currently remaining in stream
897   */
898  #define nlmsg_for_each_attr(pos, nlh, hdrlen, rem) \
899  	nla_for_each_attr(pos, nlmsg_attrdata(nlh, hdrlen), \
900  			  nlmsg_attrlen(nlh, hdrlen), rem)
901  
902  /**
903   * nlmsg_put - Add a new netlink message to an skb
904   * @skb: socket buffer to store message in
905   * @portid: netlink PORTID of requesting application
906   * @seq: sequence number of message
907   * @type: message type
908   * @payload: length of message payload
909   * @flags: message flags
910   *
911   * Returns NULL if the tailroom of the skb is insufficient to store
912   * the message header and payload.
913   */
nlmsg_put(struct sk_buff * skb,u32 portid,u32 seq,int type,int payload,int flags)914  static inline struct nlmsghdr *nlmsg_put(struct sk_buff *skb, u32 portid, u32 seq,
915  					 int type, int payload, int flags)
916  {
917  	if (unlikely(skb_tailroom(skb) < nlmsg_total_size(payload)))
918  		return NULL;
919  
920  	return __nlmsg_put(skb, portid, seq, type, payload, flags);
921  }
922  
923  /**
924   * nlmsg_put_answer - Add a new callback based netlink message to an skb
925   * @skb: socket buffer to store message in
926   * @cb: netlink callback
927   * @type: message type
928   * @payload: length of message payload
929   * @flags: message flags
930   *
931   * Returns NULL if the tailroom of the skb is insufficient to store
932   * the message header and payload.
933   */
nlmsg_put_answer(struct sk_buff * skb,struct netlink_callback * cb,int type,int payload,int flags)934  static inline struct nlmsghdr *nlmsg_put_answer(struct sk_buff *skb,
935  						struct netlink_callback *cb,
936  						int type, int payload,
937  						int flags)
938  {
939  	return nlmsg_put(skb, NETLINK_CB(cb->skb).portid, cb->nlh->nlmsg_seq,
940  			 type, payload, flags);
941  }
942  
943  /**
944   * nlmsg_new - Allocate a new netlink message
945   * @payload: size of the message payload
946   * @flags: the type of memory to allocate.
947   *
948   * Use NLMSG_DEFAULT_SIZE if the size of the payload isn't known
949   * and a good default is needed.
950   */
nlmsg_new(size_t payload,gfp_t flags)951  static inline struct sk_buff *nlmsg_new(size_t payload, gfp_t flags)
952  {
953  	return alloc_skb(nlmsg_total_size(payload), flags);
954  }
955  
956  /**
957   * nlmsg_end - Finalize a netlink message
958   * @skb: socket buffer the message is stored in
959   * @nlh: netlink message header
960   *
961   * Corrects the netlink message header to include the appeneded
962   * attributes. Only necessary if attributes have been added to
963   * the message.
964   */
nlmsg_end(struct sk_buff * skb,struct nlmsghdr * nlh)965  static inline void nlmsg_end(struct sk_buff *skb, struct nlmsghdr *nlh)
966  {
967  	nlh->nlmsg_len = skb_tail_pointer(skb) - (unsigned char *)nlh;
968  }
969  
970  /**
971   * nlmsg_get_pos - return current position in netlink message
972   * @skb: socket buffer the message is stored in
973   *
974   * Returns a pointer to the current tail of the message.
975   */
nlmsg_get_pos(struct sk_buff * skb)976  static inline void *nlmsg_get_pos(struct sk_buff *skb)
977  {
978  	return skb_tail_pointer(skb);
979  }
980  
981  /**
982   * nlmsg_trim - Trim message to a mark
983   * @skb: socket buffer the message is stored in
984   * @mark: mark to trim to
985   *
986   * Trims the message to the provided mark.
987   */
nlmsg_trim(struct sk_buff * skb,const void * mark)988  static inline void nlmsg_trim(struct sk_buff *skb, const void *mark)
989  {
990  	if (mark) {
991  		WARN_ON((unsigned char *) mark < skb->data);
992  		skb_trim(skb, (unsigned char *) mark - skb->data);
993  	}
994  }
995  
996  /**
997   * nlmsg_cancel - Cancel construction of a netlink message
998   * @skb: socket buffer the message is stored in
999   * @nlh: netlink message header
1000   *
1001   * Removes the complete netlink message including all
1002   * attributes from the socket buffer again.
1003   */
nlmsg_cancel(struct sk_buff * skb,struct nlmsghdr * nlh)1004  static inline void nlmsg_cancel(struct sk_buff *skb, struct nlmsghdr *nlh)
1005  {
1006  	nlmsg_trim(skb, nlh);
1007  }
1008  
1009  /**
1010   * nlmsg_free - free a netlink message
1011   * @skb: socket buffer of netlink message
1012   */
nlmsg_free(struct sk_buff * skb)1013  static inline void nlmsg_free(struct sk_buff *skb)
1014  {
1015  	kfree_skb(skb);
1016  }
1017  
1018  /**
1019   * nlmsg_multicast - multicast a netlink message
1020   * @sk: netlink socket to spread messages to
1021   * @skb: netlink message as socket buffer
1022   * @portid: own netlink portid to avoid sending to yourself
1023   * @group: multicast group id
1024   * @flags: allocation flags
1025   */
nlmsg_multicast(struct sock * sk,struct sk_buff * skb,u32 portid,unsigned int group,gfp_t flags)1026  static inline int nlmsg_multicast(struct sock *sk, struct sk_buff *skb,
1027  				  u32 portid, unsigned int group, gfp_t flags)
1028  {
1029  	int err;
1030  
1031  	NETLINK_CB(skb).dst_group = group;
1032  
1033  	err = netlink_broadcast(sk, skb, portid, group, flags);
1034  	if (err > 0)
1035  		err = 0;
1036  
1037  	return err;
1038  }
1039  
1040  /**
1041   * nlmsg_unicast - unicast a netlink message
1042   * @sk: netlink socket to spread message to
1043   * @skb: netlink message as socket buffer
1044   * @portid: netlink portid of the destination socket
1045   */
nlmsg_unicast(struct sock * sk,struct sk_buff * skb,u32 portid)1046  static inline int nlmsg_unicast(struct sock *sk, struct sk_buff *skb, u32 portid)
1047  {
1048  	int err;
1049  
1050  	err = netlink_unicast(sk, skb, portid, MSG_DONTWAIT);
1051  	if (err > 0)
1052  		err = 0;
1053  
1054  	return err;
1055  }
1056  
1057  /**
1058   * nlmsg_for_each_msg - iterate over a stream of messages
1059   * @pos: loop counter, set to current message
1060   * @head: head of message stream
1061   * @len: length of message stream
1062   * @rem: initialized to len, holds bytes currently remaining in stream
1063   */
1064  #define nlmsg_for_each_msg(pos, head, len, rem) \
1065  	for (pos = head, rem = len; \
1066  	     nlmsg_ok(pos, rem); \
1067  	     pos = nlmsg_next(pos, &(rem)))
1068  
1069  /**
1070   * nl_dump_check_consistent - check if sequence is consistent and advertise if not
1071   * @cb: netlink callback structure that stores the sequence number
1072   * @nlh: netlink message header to write the flag to
1073   *
1074   * This function checks if the sequence (generation) number changed during dump
1075   * and if it did, advertises it in the netlink message header.
1076   *
1077   * The correct way to use it is to set cb->seq to the generation counter when
1078   * all locks for dumping have been acquired, and then call this function for
1079   * each message that is generated.
1080   *
1081   * Note that due to initialisation concerns, 0 is an invalid sequence number
1082   * and must not be used by code that uses this functionality.
1083   */
1084  static inline void
nl_dump_check_consistent(struct netlink_callback * cb,struct nlmsghdr * nlh)1085  nl_dump_check_consistent(struct netlink_callback *cb,
1086  			 struct nlmsghdr *nlh)
1087  {
1088  	if (cb->prev_seq && cb->seq != cb->prev_seq)
1089  		nlh->nlmsg_flags |= NLM_F_DUMP_INTR;
1090  	cb->prev_seq = cb->seq;
1091  }
1092  
1093  /**************************************************************************
1094   * Netlink Attributes
1095   **************************************************************************/
1096  
1097  /**
1098   * nla_attr_size - length of attribute not including padding
1099   * @payload: length of payload
1100   */
nla_attr_size(int payload)1101  static inline int nla_attr_size(int payload)
1102  {
1103  	return NLA_HDRLEN + payload;
1104  }
1105  
1106  /**
1107   * nla_total_size - total length of attribute including padding
1108   * @payload: length of payload
1109   */
nla_total_size(int payload)1110  static inline int nla_total_size(int payload)
1111  {
1112  	return NLA_ALIGN(nla_attr_size(payload));
1113  }
1114  
1115  /**
1116   * nla_padlen - length of padding at the tail of attribute
1117   * @payload: length of payload
1118   */
nla_padlen(int payload)1119  static inline int nla_padlen(int payload)
1120  {
1121  	return nla_total_size(payload) - nla_attr_size(payload);
1122  }
1123  
1124  /**
1125   * nla_type - attribute type
1126   * @nla: netlink attribute
1127   */
nla_type(const struct nlattr * nla)1128  static inline int nla_type(const struct nlattr *nla)
1129  {
1130  	return nla->nla_type & NLA_TYPE_MASK;
1131  }
1132  
1133  /**
1134   * nla_data - head of payload
1135   * @nla: netlink attribute
1136   */
nla_data(const struct nlattr * nla)1137  static inline void *nla_data(const struct nlattr *nla)
1138  {
1139  	return (char *) nla + NLA_HDRLEN;
1140  }
1141  
1142  /**
1143   * nla_len - length of payload
1144   * @nla: netlink attribute
1145   */
nla_len(const struct nlattr * nla)1146  static inline int nla_len(const struct nlattr *nla)
1147  {
1148  	return nla->nla_len - NLA_HDRLEN;
1149  }
1150  
1151  /**
1152   * nla_ok - check if the netlink attribute fits into the remaining bytes
1153   * @nla: netlink attribute
1154   * @remaining: number of bytes remaining in attribute stream
1155   */
nla_ok(const struct nlattr * nla,int remaining)1156  static inline int nla_ok(const struct nlattr *nla, int remaining)
1157  {
1158  	return remaining >= (int) sizeof(*nla) &&
1159  	       nla->nla_len >= sizeof(*nla) &&
1160  	       nla->nla_len <= remaining;
1161  }
1162  
1163  /**
1164   * nla_next - next netlink attribute in attribute stream
1165   * @nla: netlink attribute
1166   * @remaining: number of bytes remaining in attribute stream
1167   *
1168   * Returns the next netlink attribute in the attribute stream and
1169   * decrements remaining by the size of the current attribute.
1170   */
nla_next(const struct nlattr * nla,int * remaining)1171  static inline struct nlattr *nla_next(const struct nlattr *nla, int *remaining)
1172  {
1173  	unsigned int totlen = NLA_ALIGN(nla->nla_len);
1174  
1175  	*remaining -= totlen;
1176  	return (struct nlattr *) ((char *) nla + totlen);
1177  }
1178  
1179  /**
1180   * nla_find_nested - find attribute in a set of nested attributes
1181   * @nla: attribute containing the nested attributes
1182   * @attrtype: type of attribute to look for
1183   *
1184   * Returns the first attribute which matches the specified type.
1185   */
1186  static inline struct nlattr *
nla_find_nested(const struct nlattr * nla,int attrtype)1187  nla_find_nested(const struct nlattr *nla, int attrtype)
1188  {
1189  	return nla_find(nla_data(nla), nla_len(nla), attrtype);
1190  }
1191  
1192  /**
1193   * nla_parse_nested - parse nested attributes
1194   * @tb: destination array with maxtype+1 elements
1195   * @maxtype: maximum attribute type to be expected
1196   * @nla: attribute containing the nested attributes
1197   * @policy: validation policy
1198   * @extack: extended ACK report struct
1199   *
1200   * See nla_parse()
1201   */
nla_parse_nested(struct nlattr * tb[],int maxtype,const struct nlattr * nla,const struct nla_policy * policy,struct netlink_ext_ack * extack)1202  static inline int nla_parse_nested(struct nlattr *tb[], int maxtype,
1203  				   const struct nlattr *nla,
1204  				   const struct nla_policy *policy,
1205  				   struct netlink_ext_ack *extack)
1206  {
1207  	if (!(nla->nla_type & NLA_F_NESTED)) {
1208  		NL_SET_ERR_MSG_ATTR(extack, nla, "NLA_F_NESTED is missing");
1209  		return -EINVAL;
1210  	}
1211  
1212  	return __nla_parse(tb, maxtype, nla_data(nla), nla_len(nla), policy,
1213  			   NL_VALIDATE_STRICT, extack);
1214  }
1215  
1216  /**
1217   * nla_parse_nested_deprecated - parse nested attributes
1218   * @tb: destination array with maxtype+1 elements
1219   * @maxtype: maximum attribute type to be expected
1220   * @nla: attribute containing the nested attributes
1221   * @policy: validation policy
1222   * @extack: extended ACK report struct
1223   *
1224   * See nla_parse_deprecated()
1225   */
nla_parse_nested_deprecated(struct nlattr * tb[],int maxtype,const struct nlattr * nla,const struct nla_policy * policy,struct netlink_ext_ack * extack)1226  static inline int nla_parse_nested_deprecated(struct nlattr *tb[], int maxtype,
1227  					      const struct nlattr *nla,
1228  					      const struct nla_policy *policy,
1229  					      struct netlink_ext_ack *extack)
1230  {
1231  	return __nla_parse(tb, maxtype, nla_data(nla), nla_len(nla), policy,
1232  			   NL_VALIDATE_LIBERAL, extack);
1233  }
1234  
1235  /**
1236   * nla_put_u8 - Add a u8 netlink attribute to a socket buffer
1237   * @skb: socket buffer to add attribute to
1238   * @attrtype: attribute type
1239   * @value: numeric value
1240   */
nla_put_u8(struct sk_buff * skb,int attrtype,u8 value)1241  static inline int nla_put_u8(struct sk_buff *skb, int attrtype, u8 value)
1242  {
1243  	/* temporary variables to work around GCC PR81715 with asan-stack=1 */
1244  	u8 tmp = value;
1245  
1246  	return nla_put(skb, attrtype, sizeof(u8), &tmp);
1247  }
1248  
1249  /**
1250   * nla_put_u16 - Add a u16 netlink attribute to a socket buffer
1251   * @skb: socket buffer to add attribute to
1252   * @attrtype: attribute type
1253   * @value: numeric value
1254   */
nla_put_u16(struct sk_buff * skb,int attrtype,u16 value)1255  static inline int nla_put_u16(struct sk_buff *skb, int attrtype, u16 value)
1256  {
1257  	u16 tmp = value;
1258  
1259  	return nla_put(skb, attrtype, sizeof(u16), &tmp);
1260  }
1261  
1262  /**
1263   * nla_put_be16 - Add a __be16 netlink attribute to a socket buffer
1264   * @skb: socket buffer to add attribute to
1265   * @attrtype: attribute type
1266   * @value: numeric value
1267   */
nla_put_be16(struct sk_buff * skb,int attrtype,__be16 value)1268  static inline int nla_put_be16(struct sk_buff *skb, int attrtype, __be16 value)
1269  {
1270  	__be16 tmp = value;
1271  
1272  	return nla_put(skb, attrtype, sizeof(__be16), &tmp);
1273  }
1274  
1275  /**
1276   * nla_put_net16 - Add 16-bit network byte order netlink attribute to a socket buffer
1277   * @skb: socket buffer to add attribute to
1278   * @attrtype: attribute type
1279   * @value: numeric value
1280   */
nla_put_net16(struct sk_buff * skb,int attrtype,__be16 value)1281  static inline int nla_put_net16(struct sk_buff *skb, int attrtype, __be16 value)
1282  {
1283  	__be16 tmp = value;
1284  
1285  	return nla_put_be16(skb, attrtype | NLA_F_NET_BYTEORDER, tmp);
1286  }
1287  
1288  /**
1289   * nla_put_le16 - Add a __le16 netlink attribute to a socket buffer
1290   * @skb: socket buffer to add attribute to
1291   * @attrtype: attribute type
1292   * @value: numeric value
1293   */
nla_put_le16(struct sk_buff * skb,int attrtype,__le16 value)1294  static inline int nla_put_le16(struct sk_buff *skb, int attrtype, __le16 value)
1295  {
1296  	__le16 tmp = value;
1297  
1298  	return nla_put(skb, attrtype, sizeof(__le16), &tmp);
1299  }
1300  
1301  /**
1302   * nla_put_u32 - Add a u32 netlink attribute to a socket buffer
1303   * @skb: socket buffer to add attribute to
1304   * @attrtype: attribute type
1305   * @value: numeric value
1306   */
nla_put_u32(struct sk_buff * skb,int attrtype,u32 value)1307  static inline int nla_put_u32(struct sk_buff *skb, int attrtype, u32 value)
1308  {
1309  	u32 tmp = value;
1310  
1311  	return nla_put(skb, attrtype, sizeof(u32), &tmp);
1312  }
1313  
1314  /**
1315   * nla_put_be32 - Add a __be32 netlink attribute to a socket buffer
1316   * @skb: socket buffer to add attribute to
1317   * @attrtype: attribute type
1318   * @value: numeric value
1319   */
nla_put_be32(struct sk_buff * skb,int attrtype,__be32 value)1320  static inline int nla_put_be32(struct sk_buff *skb, int attrtype, __be32 value)
1321  {
1322  	__be32 tmp = value;
1323  
1324  	return nla_put(skb, attrtype, sizeof(__be32), &tmp);
1325  }
1326  
1327  /**
1328   * nla_put_net32 - Add 32-bit network byte order netlink attribute to a socket buffer
1329   * @skb: socket buffer to add attribute to
1330   * @attrtype: attribute type
1331   * @value: numeric value
1332   */
nla_put_net32(struct sk_buff * skb,int attrtype,__be32 value)1333  static inline int nla_put_net32(struct sk_buff *skb, int attrtype, __be32 value)
1334  {
1335  	__be32 tmp = value;
1336  
1337  	return nla_put_be32(skb, attrtype | NLA_F_NET_BYTEORDER, tmp);
1338  }
1339  
1340  /**
1341   * nla_put_le32 - Add a __le32 netlink attribute to a socket buffer
1342   * @skb: socket buffer to add attribute to
1343   * @attrtype: attribute type
1344   * @value: numeric value
1345   */
nla_put_le32(struct sk_buff * skb,int attrtype,__le32 value)1346  static inline int nla_put_le32(struct sk_buff *skb, int attrtype, __le32 value)
1347  {
1348  	__le32 tmp = value;
1349  
1350  	return nla_put(skb, attrtype, sizeof(__le32), &tmp);
1351  }
1352  
1353  /**
1354   * nla_put_u64_64bit - Add a u64 netlink attribute to a skb and align it
1355   * @skb: socket buffer to add attribute to
1356   * @attrtype: attribute type
1357   * @value: numeric value
1358   * @padattr: attribute type for the padding
1359   */
nla_put_u64_64bit(struct sk_buff * skb,int attrtype,u64 value,int padattr)1360  static inline int nla_put_u64_64bit(struct sk_buff *skb, int attrtype,
1361  				    u64 value, int padattr)
1362  {
1363  	u64 tmp = value;
1364  
1365  	return nla_put_64bit(skb, attrtype, sizeof(u64), &tmp, padattr);
1366  }
1367  
1368  /**
1369   * nla_put_be64 - Add a __be64 netlink attribute to a socket buffer and align it
1370   * @skb: socket buffer to add attribute to
1371   * @attrtype: attribute type
1372   * @value: numeric value
1373   * @padattr: attribute type for the padding
1374   */
nla_put_be64(struct sk_buff * skb,int attrtype,__be64 value,int padattr)1375  static inline int nla_put_be64(struct sk_buff *skb, int attrtype, __be64 value,
1376  			       int padattr)
1377  {
1378  	__be64 tmp = value;
1379  
1380  	return nla_put_64bit(skb, attrtype, sizeof(__be64), &tmp, padattr);
1381  }
1382  
1383  /**
1384   * nla_put_net64 - Add 64-bit network byte order nlattr to a skb and align it
1385   * @skb: socket buffer to add attribute to
1386   * @attrtype: attribute type
1387   * @value: numeric value
1388   * @padattr: attribute type for the padding
1389   */
nla_put_net64(struct sk_buff * skb,int attrtype,__be64 value,int padattr)1390  static inline int nla_put_net64(struct sk_buff *skb, int attrtype, __be64 value,
1391  				int padattr)
1392  {
1393  	__be64 tmp = value;
1394  
1395  	return nla_put_be64(skb, attrtype | NLA_F_NET_BYTEORDER, tmp,
1396  			    padattr);
1397  }
1398  
1399  /**
1400   * nla_put_le64 - Add a __le64 netlink attribute to a socket buffer and align it
1401   * @skb: socket buffer to add attribute to
1402   * @attrtype: attribute type
1403   * @value: numeric value
1404   * @padattr: attribute type for the padding
1405   */
nla_put_le64(struct sk_buff * skb,int attrtype,__le64 value,int padattr)1406  static inline int nla_put_le64(struct sk_buff *skb, int attrtype, __le64 value,
1407  			       int padattr)
1408  {
1409  	__le64 tmp = value;
1410  
1411  	return nla_put_64bit(skb, attrtype, sizeof(__le64), &tmp, padattr);
1412  }
1413  
1414  /**
1415   * nla_put_s8 - Add a s8 netlink attribute to a socket buffer
1416   * @skb: socket buffer to add attribute to
1417   * @attrtype: attribute type
1418   * @value: numeric value
1419   */
nla_put_s8(struct sk_buff * skb,int attrtype,s8 value)1420  static inline int nla_put_s8(struct sk_buff *skb, int attrtype, s8 value)
1421  {
1422  	s8 tmp = value;
1423  
1424  	return nla_put(skb, attrtype, sizeof(s8), &tmp);
1425  }
1426  
1427  /**
1428   * nla_put_s16 - Add a s16 netlink attribute to a socket buffer
1429   * @skb: socket buffer to add attribute to
1430   * @attrtype: attribute type
1431   * @value: numeric value
1432   */
nla_put_s16(struct sk_buff * skb,int attrtype,s16 value)1433  static inline int nla_put_s16(struct sk_buff *skb, int attrtype, s16 value)
1434  {
1435  	s16 tmp = value;
1436  
1437  	return nla_put(skb, attrtype, sizeof(s16), &tmp);
1438  }
1439  
1440  /**
1441   * nla_put_s32 - Add a s32 netlink attribute to a socket buffer
1442   * @skb: socket buffer to add attribute to
1443   * @attrtype: attribute type
1444   * @value: numeric value
1445   */
nla_put_s32(struct sk_buff * skb,int attrtype,s32 value)1446  static inline int nla_put_s32(struct sk_buff *skb, int attrtype, s32 value)
1447  {
1448  	s32 tmp = value;
1449  
1450  	return nla_put(skb, attrtype, sizeof(s32), &tmp);
1451  }
1452  
1453  /**
1454   * nla_put_s64 - Add a s64 netlink attribute to a socket buffer and align it
1455   * @skb: socket buffer to add attribute to
1456   * @attrtype: attribute type
1457   * @value: numeric value
1458   * @padattr: attribute type for the padding
1459   */
nla_put_s64(struct sk_buff * skb,int attrtype,s64 value,int padattr)1460  static inline int nla_put_s64(struct sk_buff *skb, int attrtype, s64 value,
1461  			      int padattr)
1462  {
1463  	s64 tmp = value;
1464  
1465  	return nla_put_64bit(skb, attrtype, sizeof(s64), &tmp, padattr);
1466  }
1467  
1468  /**
1469   * nla_put_string - Add a string netlink attribute to a socket buffer
1470   * @skb: socket buffer to add attribute to
1471   * @attrtype: attribute type
1472   * @str: NUL terminated string
1473   */
nla_put_string(struct sk_buff * skb,int attrtype,const char * str)1474  static inline int nla_put_string(struct sk_buff *skb, int attrtype,
1475  				 const char *str)
1476  {
1477  	return nla_put(skb, attrtype, strlen(str) + 1, str);
1478  }
1479  
1480  /**
1481   * nla_put_flag - Add a flag netlink attribute to a socket buffer
1482   * @skb: socket buffer to add attribute to
1483   * @attrtype: attribute type
1484   */
nla_put_flag(struct sk_buff * skb,int attrtype)1485  static inline int nla_put_flag(struct sk_buff *skb, int attrtype)
1486  {
1487  	return nla_put(skb, attrtype, 0, NULL);
1488  }
1489  
1490  /**
1491   * nla_put_msecs - Add a msecs netlink attribute to a skb and align it
1492   * @skb: socket buffer to add attribute to
1493   * @attrtype: attribute type
1494   * @njiffies: number of jiffies to convert to msecs
1495   * @padattr: attribute type for the padding
1496   */
nla_put_msecs(struct sk_buff * skb,int attrtype,unsigned long njiffies,int padattr)1497  static inline int nla_put_msecs(struct sk_buff *skb, int attrtype,
1498  				unsigned long njiffies, int padattr)
1499  {
1500  	u64 tmp = jiffies_to_msecs(njiffies);
1501  
1502  	return nla_put_64bit(skb, attrtype, sizeof(u64), &tmp, padattr);
1503  }
1504  
1505  /**
1506   * nla_put_in_addr - Add an IPv4 address netlink attribute to a socket
1507   * buffer
1508   * @skb: socket buffer to add attribute to
1509   * @attrtype: attribute type
1510   * @addr: IPv4 address
1511   */
nla_put_in_addr(struct sk_buff * skb,int attrtype,__be32 addr)1512  static inline int nla_put_in_addr(struct sk_buff *skb, int attrtype,
1513  				  __be32 addr)
1514  {
1515  	__be32 tmp = addr;
1516  
1517  	return nla_put_be32(skb, attrtype, tmp);
1518  }
1519  
1520  /**
1521   * nla_put_in6_addr - Add an IPv6 address netlink attribute to a socket
1522   * buffer
1523   * @skb: socket buffer to add attribute to
1524   * @attrtype: attribute type
1525   * @addr: IPv6 address
1526   */
nla_put_in6_addr(struct sk_buff * skb,int attrtype,const struct in6_addr * addr)1527  static inline int nla_put_in6_addr(struct sk_buff *skb, int attrtype,
1528  				   const struct in6_addr *addr)
1529  {
1530  	return nla_put(skb, attrtype, sizeof(*addr), addr);
1531  }
1532  
1533  /**
1534   * nla_put_bitfield32 - Add a bitfield32 netlink attribute to a socket buffer
1535   * @skb: socket buffer to add attribute to
1536   * @attrtype: attribute type
1537   * @value: value carrying bits
1538   * @selector: selector of valid bits
1539   */
nla_put_bitfield32(struct sk_buff * skb,int attrtype,__u32 value,__u32 selector)1540  static inline int nla_put_bitfield32(struct sk_buff *skb, int attrtype,
1541  				     __u32 value, __u32 selector)
1542  {
1543  	struct nla_bitfield32 tmp = { value, selector, };
1544  
1545  	return nla_put(skb, attrtype, sizeof(tmp), &tmp);
1546  }
1547  
1548  /**
1549   * nla_get_u32 - return payload of u32 attribute
1550   * @nla: u32 netlink attribute
1551   */
nla_get_u32(const struct nlattr * nla)1552  static inline u32 nla_get_u32(const struct nlattr *nla)
1553  {
1554  	return *(u32 *) nla_data(nla);
1555  }
1556  
1557  /**
1558   * nla_get_be32 - return payload of __be32 attribute
1559   * @nla: __be32 netlink attribute
1560   */
nla_get_be32(const struct nlattr * nla)1561  static inline __be32 nla_get_be32(const struct nlattr *nla)
1562  {
1563  	return *(__be32 *) nla_data(nla);
1564  }
1565  
1566  /**
1567   * nla_get_le32 - return payload of __le32 attribute
1568   * @nla: __le32 netlink attribute
1569   */
nla_get_le32(const struct nlattr * nla)1570  static inline __le32 nla_get_le32(const struct nlattr *nla)
1571  {
1572  	return *(__le32 *) nla_data(nla);
1573  }
1574  
1575  /**
1576   * nla_get_u16 - return payload of u16 attribute
1577   * @nla: u16 netlink attribute
1578   */
nla_get_u16(const struct nlattr * nla)1579  static inline u16 nla_get_u16(const struct nlattr *nla)
1580  {
1581  	return *(u16 *) nla_data(nla);
1582  }
1583  
1584  /**
1585   * nla_get_be16 - return payload of __be16 attribute
1586   * @nla: __be16 netlink attribute
1587   */
nla_get_be16(const struct nlattr * nla)1588  static inline __be16 nla_get_be16(const struct nlattr *nla)
1589  {
1590  	return *(__be16 *) nla_data(nla);
1591  }
1592  
1593  /**
1594   * nla_get_le16 - return payload of __le16 attribute
1595   * @nla: __le16 netlink attribute
1596   */
nla_get_le16(const struct nlattr * nla)1597  static inline __le16 nla_get_le16(const struct nlattr *nla)
1598  {
1599  	return *(__le16 *) nla_data(nla);
1600  }
1601  
1602  /**
1603   * nla_get_u8 - return payload of u8 attribute
1604   * @nla: u8 netlink attribute
1605   */
nla_get_u8(const struct nlattr * nla)1606  static inline u8 nla_get_u8(const struct nlattr *nla)
1607  {
1608  	return *(u8 *) nla_data(nla);
1609  }
1610  
1611  /**
1612   * nla_get_u64 - return payload of u64 attribute
1613   * @nla: u64 netlink attribute
1614   */
nla_get_u64(const struct nlattr * nla)1615  static inline u64 nla_get_u64(const struct nlattr *nla)
1616  {
1617  	u64 tmp;
1618  
1619  	nla_memcpy(&tmp, nla, sizeof(tmp));
1620  
1621  	return tmp;
1622  }
1623  
1624  /**
1625   * nla_get_be64 - return payload of __be64 attribute
1626   * @nla: __be64 netlink attribute
1627   */
nla_get_be64(const struct nlattr * nla)1628  static inline __be64 nla_get_be64(const struct nlattr *nla)
1629  {
1630  	__be64 tmp;
1631  
1632  	nla_memcpy(&tmp, nla, sizeof(tmp));
1633  
1634  	return tmp;
1635  }
1636  
1637  /**
1638   * nla_get_le64 - return payload of __le64 attribute
1639   * @nla: __le64 netlink attribute
1640   */
nla_get_le64(const struct nlattr * nla)1641  static inline __le64 nla_get_le64(const struct nlattr *nla)
1642  {
1643  	return *(__le64 *) nla_data(nla);
1644  }
1645  
1646  /**
1647   * nla_get_s32 - return payload of s32 attribute
1648   * @nla: s32 netlink attribute
1649   */
nla_get_s32(const struct nlattr * nla)1650  static inline s32 nla_get_s32(const struct nlattr *nla)
1651  {
1652  	return *(s32 *) nla_data(nla);
1653  }
1654  
1655  /**
1656   * nla_get_s16 - return payload of s16 attribute
1657   * @nla: s16 netlink attribute
1658   */
nla_get_s16(const struct nlattr * nla)1659  static inline s16 nla_get_s16(const struct nlattr *nla)
1660  {
1661  	return *(s16 *) nla_data(nla);
1662  }
1663  
1664  /**
1665   * nla_get_s8 - return payload of s8 attribute
1666   * @nla: s8 netlink attribute
1667   */
nla_get_s8(const struct nlattr * nla)1668  static inline s8 nla_get_s8(const struct nlattr *nla)
1669  {
1670  	return *(s8 *) nla_data(nla);
1671  }
1672  
1673  /**
1674   * nla_get_s64 - return payload of s64 attribute
1675   * @nla: s64 netlink attribute
1676   */
nla_get_s64(const struct nlattr * nla)1677  static inline s64 nla_get_s64(const struct nlattr *nla)
1678  {
1679  	s64 tmp;
1680  
1681  	nla_memcpy(&tmp, nla, sizeof(tmp));
1682  
1683  	return tmp;
1684  }
1685  
1686  /**
1687   * nla_get_flag - return payload of flag attribute
1688   * @nla: flag netlink attribute
1689   */
nla_get_flag(const struct nlattr * nla)1690  static inline int nla_get_flag(const struct nlattr *nla)
1691  {
1692  	return !!nla;
1693  }
1694  
1695  /**
1696   * nla_get_msecs - return payload of msecs attribute
1697   * @nla: msecs netlink attribute
1698   *
1699   * Returns the number of milliseconds in jiffies.
1700   */
nla_get_msecs(const struct nlattr * nla)1701  static inline unsigned long nla_get_msecs(const struct nlattr *nla)
1702  {
1703  	u64 msecs = nla_get_u64(nla);
1704  
1705  	return msecs_to_jiffies((unsigned long) msecs);
1706  }
1707  
1708  /**
1709   * nla_get_in_addr - return payload of IPv4 address attribute
1710   * @nla: IPv4 address netlink attribute
1711   */
nla_get_in_addr(const struct nlattr * nla)1712  static inline __be32 nla_get_in_addr(const struct nlattr *nla)
1713  {
1714  	return *(__be32 *) nla_data(nla);
1715  }
1716  
1717  /**
1718   * nla_get_in6_addr - return payload of IPv6 address attribute
1719   * @nla: IPv6 address netlink attribute
1720   */
nla_get_in6_addr(const struct nlattr * nla)1721  static inline struct in6_addr nla_get_in6_addr(const struct nlattr *nla)
1722  {
1723  	struct in6_addr tmp;
1724  
1725  	nla_memcpy(&tmp, nla, sizeof(tmp));
1726  	return tmp;
1727  }
1728  
1729  /**
1730   * nla_get_bitfield32 - return payload of 32 bitfield attribute
1731   * @nla: nla_bitfield32 attribute
1732   */
nla_get_bitfield32(const struct nlattr * nla)1733  static inline struct nla_bitfield32 nla_get_bitfield32(const struct nlattr *nla)
1734  {
1735  	struct nla_bitfield32 tmp;
1736  
1737  	nla_memcpy(&tmp, nla, sizeof(tmp));
1738  	return tmp;
1739  }
1740  
1741  /**
1742   * nla_memdup - duplicate attribute memory (kmemdup)
1743   * @src: netlink attribute to duplicate from
1744   * @gfp: GFP mask
1745   */
nla_memdup(const struct nlattr * src,gfp_t gfp)1746  static inline void *nla_memdup(const struct nlattr *src, gfp_t gfp)
1747  {
1748  	return kmemdup(nla_data(src), nla_len(src), gfp);
1749  }
1750  
1751  /**
1752   * nla_nest_start_noflag - Start a new level of nested attributes
1753   * @skb: socket buffer to add attributes to
1754   * @attrtype: attribute type of container
1755   *
1756   * This function exists for backward compatibility to use in APIs which never
1757   * marked their nest attributes with NLA_F_NESTED flag. New APIs should use
1758   * nla_nest_start() which sets the flag.
1759   *
1760   * Returns the container attribute or NULL on error
1761   */
nla_nest_start_noflag(struct sk_buff * skb,int attrtype)1762  static inline struct nlattr *nla_nest_start_noflag(struct sk_buff *skb,
1763  						   int attrtype)
1764  {
1765  	struct nlattr *start = (struct nlattr *)skb_tail_pointer(skb);
1766  
1767  	if (nla_put(skb, attrtype, 0, NULL) < 0)
1768  		return NULL;
1769  
1770  	return start;
1771  }
1772  
1773  /**
1774   * nla_nest_start - Start a new level of nested attributes, with NLA_F_NESTED
1775   * @skb: socket buffer to add attributes to
1776   * @attrtype: attribute type of container
1777   *
1778   * Unlike nla_nest_start_noflag(), mark the nest attribute with NLA_F_NESTED
1779   * flag. This is the preferred function to use in new code.
1780   *
1781   * Returns the container attribute or NULL on error
1782   */
nla_nest_start(struct sk_buff * skb,int attrtype)1783  static inline struct nlattr *nla_nest_start(struct sk_buff *skb, int attrtype)
1784  {
1785  	return nla_nest_start_noflag(skb, attrtype | NLA_F_NESTED);
1786  }
1787  
1788  /**
1789   * nla_nest_end - Finalize nesting of attributes
1790   * @skb: socket buffer the attributes are stored in
1791   * @start: container attribute
1792   *
1793   * Corrects the container attribute header to include the all
1794   * appeneded attributes.
1795   *
1796   * Returns the total data length of the skb.
1797   */
nla_nest_end(struct sk_buff * skb,struct nlattr * start)1798  static inline int nla_nest_end(struct sk_buff *skb, struct nlattr *start)
1799  {
1800  	start->nla_len = skb_tail_pointer(skb) - (unsigned char *)start;
1801  	return skb->len;
1802  }
1803  
1804  /**
1805   * nla_nest_cancel - Cancel nesting of attributes
1806   * @skb: socket buffer the message is stored in
1807   * @start: container attribute
1808   *
1809   * Removes the container attribute and including all nested
1810   * attributes. Returns -EMSGSIZE
1811   */
nla_nest_cancel(struct sk_buff * skb,struct nlattr * start)1812  static inline void nla_nest_cancel(struct sk_buff *skb, struct nlattr *start)
1813  {
1814  	nlmsg_trim(skb, start);
1815  }
1816  
1817  /**
1818   * __nla_validate_nested - Validate a stream of nested attributes
1819   * @start: container attribute
1820   * @maxtype: maximum attribute type to be expected
1821   * @policy: validation policy
1822   * @validate: validation strictness
1823   * @extack: extended ACK report struct
1824   *
1825   * Validates all attributes in the nested attribute stream against the
1826   * specified policy. Attributes with a type exceeding maxtype will be
1827   * ignored. See documenation of struct nla_policy for more details.
1828   *
1829   * Returns 0 on success or a negative error code.
1830   */
__nla_validate_nested(const struct nlattr * start,int maxtype,const struct nla_policy * policy,unsigned int validate,struct netlink_ext_ack * extack)1831  static inline int __nla_validate_nested(const struct nlattr *start, int maxtype,
1832  					const struct nla_policy *policy,
1833  					unsigned int validate,
1834  					struct netlink_ext_ack *extack)
1835  {
1836  	return __nla_validate(nla_data(start), nla_len(start), maxtype, policy,
1837  			      validate, extack);
1838  }
1839  
1840  static inline int
nla_validate_nested(const struct nlattr * start,int maxtype,const struct nla_policy * policy,struct netlink_ext_ack * extack)1841  nla_validate_nested(const struct nlattr *start, int maxtype,
1842  		    const struct nla_policy *policy,
1843  		    struct netlink_ext_ack *extack)
1844  {
1845  	return __nla_validate_nested(start, maxtype, policy,
1846  				     NL_VALIDATE_STRICT, extack);
1847  }
1848  
1849  static inline int
nla_validate_nested_deprecated(const struct nlattr * start,int maxtype,const struct nla_policy * policy,struct netlink_ext_ack * extack)1850  nla_validate_nested_deprecated(const struct nlattr *start, int maxtype,
1851  			       const struct nla_policy *policy,
1852  			       struct netlink_ext_ack *extack)
1853  {
1854  	return __nla_validate_nested(start, maxtype, policy,
1855  				     NL_VALIDATE_LIBERAL, extack);
1856  }
1857  
1858  /**
1859   * nla_need_padding_for_64bit - test 64-bit alignment of the next attribute
1860   * @skb: socket buffer the message is stored in
1861   *
1862   * Return true if padding is needed to align the next attribute (nla_data()) to
1863   * a 64-bit aligned area.
1864   */
nla_need_padding_for_64bit(struct sk_buff * skb)1865  static inline bool nla_need_padding_for_64bit(struct sk_buff *skb)
1866  {
1867  #ifndef CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS
1868  	/* The nlattr header is 4 bytes in size, that's why we test
1869  	 * if the skb->data _is_ aligned.  A NOP attribute, plus
1870  	 * nlattr header for next attribute, will make nla_data()
1871  	 * 8-byte aligned.
1872  	 */
1873  	if (IS_ALIGNED((unsigned long)skb_tail_pointer(skb), 8))
1874  		return true;
1875  #endif
1876  	return false;
1877  }
1878  
1879  /**
1880   * nla_align_64bit - 64-bit align the nla_data() of next attribute
1881   * @skb: socket buffer the message is stored in
1882   * @padattr: attribute type for the padding
1883   *
1884   * Conditionally emit a padding netlink attribute in order to make
1885   * the next attribute we emit have a 64-bit aligned nla_data() area.
1886   * This will only be done in architectures which do not have
1887   * CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS defined.
1888   *
1889   * Returns zero on success or a negative error code.
1890   */
nla_align_64bit(struct sk_buff * skb,int padattr)1891  static inline int nla_align_64bit(struct sk_buff *skb, int padattr)
1892  {
1893  	if (nla_need_padding_for_64bit(skb) &&
1894  	    !nla_reserve(skb, padattr, 0))
1895  		return -EMSGSIZE;
1896  
1897  	return 0;
1898  }
1899  
1900  /**
1901   * nla_total_size_64bit - total length of attribute including padding
1902   * @payload: length of payload
1903   */
nla_total_size_64bit(int payload)1904  static inline int nla_total_size_64bit(int payload)
1905  {
1906  	return NLA_ALIGN(nla_attr_size(payload))
1907  #ifndef CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS
1908  		+ NLA_ALIGN(nla_attr_size(0))
1909  #endif
1910  		;
1911  }
1912  
1913  /**
1914   * nla_for_each_attr - iterate over a stream of attributes
1915   * @pos: loop counter, set to current attribute
1916   * @head: head of attribute stream
1917   * @len: length of attribute stream
1918   * @rem: initialized to len, holds bytes currently remaining in stream
1919   */
1920  #define nla_for_each_attr(pos, head, len, rem) \
1921  	for (pos = head, rem = len; \
1922  	     nla_ok(pos, rem); \
1923  	     pos = nla_next(pos, &(rem)))
1924  
1925  /**
1926   * nla_for_each_nested - iterate over nested attributes
1927   * @pos: loop counter, set to current attribute
1928   * @nla: attribute containing the nested attributes
1929   * @rem: initialized to len, holds bytes currently remaining in stream
1930   */
1931  #define nla_for_each_nested(pos, nla, rem) \
1932  	nla_for_each_attr(pos, nla_data(nla), nla_len(nla), rem)
1933  
1934  /**
1935   * nla_is_last - Test if attribute is last in stream
1936   * @nla: attribute to test
1937   * @rem: bytes remaining in stream
1938   */
nla_is_last(const struct nlattr * nla,int rem)1939  static inline bool nla_is_last(const struct nlattr *nla, int rem)
1940  {
1941  	return nla->nla_len == rem;
1942  }
1943  
1944  void nla_get_range_unsigned(const struct nla_policy *pt,
1945  			    struct netlink_range_validation *range);
1946  void nla_get_range_signed(const struct nla_policy *pt,
1947  			  struct netlink_range_validation_signed *range);
1948  
1949  struct netlink_policy_dump_state;
1950  
1951  int netlink_policy_dump_add_policy(struct netlink_policy_dump_state **pstate,
1952  				   const struct nla_policy *policy,
1953  				   unsigned int maxtype);
1954  int netlink_policy_dump_get_policy_idx(struct netlink_policy_dump_state *state,
1955  				       const struct nla_policy *policy,
1956  				       unsigned int maxtype);
1957  bool netlink_policy_dump_loop(struct netlink_policy_dump_state *state);
1958  int netlink_policy_dump_write(struct sk_buff *skb,
1959  			      struct netlink_policy_dump_state *state);
1960  int netlink_policy_dump_attr_size_estimate(const struct nla_policy *pt);
1961  int netlink_policy_dump_write_attr(struct sk_buff *skb,
1962  				   const struct nla_policy *pt,
1963  				   int nestattr);
1964  void netlink_policy_dump_free(struct netlink_policy_dump_state *state);
1965  
1966  #endif
1967