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