1 #ifndef __NET_NETLINK_H 2 #define __NET_NETLINK_H 3 4 #include <linux/types.h> 5 #include <linux/netlink.h> 6 #include <linux/jiffies.h> 7 #include <linux/in6.h> 8 9 /* ======================================================================== 10 * Netlink Messages and Attributes Interface (As Seen On TV) 11 * ------------------------------------------------------------------------ 12 * Messages Interface 13 * ------------------------------------------------------------------------ 14 * 15 * Message Format: 16 * <--- nlmsg_total_size(payload) ---> 17 * <-- nlmsg_msg_size(payload) -> 18 * +----------+- - -+-------------+- - -+-------- - - 19 * | nlmsghdr | Pad | Payload | Pad | nlmsghdr 20 * +----------+- - -+-------------+- - -+-------- - - 21 * nlmsg_data(nlh)---^ ^ 22 * nlmsg_next(nlh)-----------------------+ 23 * 24 * Payload Format: 25 * <---------------------- nlmsg_len(nlh) ---------------------> 26 * <------ hdrlen ------> <- nlmsg_attrlen(nlh, hdrlen) -> 27 * +----------------------+- - -+--------------------------------+ 28 * | Family Header | Pad | Attributes | 29 * +----------------------+- - -+--------------------------------+ 30 * nlmsg_attrdata(nlh, hdrlen)---^ 31 * 32 * Data Structures: 33 * struct nlmsghdr netlink message header 34 * 35 * Message Construction: 36 * nlmsg_new() create a new netlink message 37 * nlmsg_put() add a netlink message to an skb 38 * nlmsg_put_answer() callback based nlmsg_put() 39 * nlmsg_end() finalize netlink message 40 * nlmsg_get_pos() return current position in message 41 * nlmsg_trim() trim part of message 42 * nlmsg_cancel() cancel message construction 43 * nlmsg_free() free a netlink message 44 * 45 * Message Sending: 46 * nlmsg_multicast() multicast message to several groups 47 * nlmsg_unicast() unicast a message to a single socket 48 * nlmsg_notify() send notification message 49 * 50 * Message Length Calculations: 51 * nlmsg_msg_size(payload) length of message w/o padding 52 * nlmsg_total_size(payload) length of message w/ padding 53 * nlmsg_padlen(payload) length of padding at tail 54 * 55 * Message Payload Access: 56 * nlmsg_data(nlh) head of message payload 57 * nlmsg_len(nlh) length of message payload 58 * nlmsg_attrdata(nlh, hdrlen) head of attributes data 59 * nlmsg_attrlen(nlh, hdrlen) length of attributes data 60 * 61 * Message Parsing: 62 * nlmsg_ok(nlh, remaining) does nlh fit into remaining bytes? 63 * nlmsg_next(nlh, remaining) get next netlink message 64 * nlmsg_parse() parse attributes of a message 65 * nlmsg_find_attr() find an attribute in a message 66 * nlmsg_for_each_msg() loop over all messages 67 * nlmsg_validate() validate netlink message incl. attrs 68 * nlmsg_for_each_attr() loop over all attributes 69 * 70 * Misc: 71 * nlmsg_report() report back to application? 72 * 73 * ------------------------------------------------------------------------ 74 * Attributes Interface 75 * ------------------------------------------------------------------------ 76 * 77 * Attribute Format: 78 * <------- nla_total_size(payload) -------> 79 * <---- nla_attr_size(payload) -----> 80 * +----------+- - -+- - - - - - - - - +- - -+-------- - - 81 * | Header | Pad | Payload | Pad | Header 82 * +----------+- - -+- - - - - - - - - +- - -+-------- - - 83 * <- nla_len(nla) -> ^ 84 * nla_data(nla)----^ | 85 * nla_next(nla)-----------------------------' 86 * 87 * Data Structures: 88 * struct nlattr netlink attribute header 89 * 90 * Attribute Construction: 91 * nla_reserve(skb, type, len) reserve room for an attribute 92 * nla_reserve_nohdr(skb, len) reserve room for an attribute w/o hdr 93 * nla_put(skb, type, len, data) add attribute to skb 94 * nla_put_nohdr(skb, len, data) add attribute w/o hdr 95 * nla_append(skb, len, data) append data to skb 96 * 97 * Attribute Construction for Basic Types: 98 * nla_put_u8(skb, type, value) add u8 attribute to skb 99 * nla_put_u16(skb, type, value) add u16 attribute to skb 100 * nla_put_u32(skb, type, value) add u32 attribute to skb 101 * nla_put_u64_64bit(skb, type, 102 * value, padattr) add u64 attribute to skb 103 * nla_put_s8(skb, type, value) add s8 attribute to skb 104 * nla_put_s16(skb, type, value) add s16 attribute to skb 105 * nla_put_s32(skb, type, value) add s32 attribute to skb 106 * nla_put_s64(skb, type, value, 107 * padattr) add s64 attribute to skb 108 * nla_put_string(skb, type, str) add string attribute to skb 109 * nla_put_flag(skb, type) add flag attribute to skb 110 * nla_put_msecs(skb, type, jiffies, 111 * padattr) add msecs attribute to skb 112 * nla_put_in_addr(skb, type, addr) add IPv4 address attribute to skb 113 * nla_put_in6_addr(skb, type, addr) add IPv6 address attribute to skb 114 * 115 * Nested Attributes Construction: 116 * nla_nest_start(skb, type) start a nested attribute 117 * nla_nest_end(skb, nla) finalize a nested attribute 118 * nla_nest_cancel(skb, nla) cancel nested attribute construction 119 * 120 * Attribute Length Calculations: 121 * nla_attr_size(payload) length of attribute w/o padding 122 * nla_total_size(payload) length of attribute w/ padding 123 * nla_padlen(payload) length of padding 124 * 125 * Attribute Payload Access: 126 * nla_data(nla) head of attribute payload 127 * nla_len(nla) length of attribute payload 128 * 129 * Attribute Payload Access for Basic Types: 130 * nla_get_u8(nla) get payload for a u8 attribute 131 * nla_get_u16(nla) get payload for a u16 attribute 132 * nla_get_u32(nla) get payload for a u32 attribute 133 * nla_get_u64(nla) get payload for a u64 attribute 134 * nla_get_s8(nla) get payload for a s8 attribute 135 * nla_get_s16(nla) get payload for a s16 attribute 136 * nla_get_s32(nla) get payload for a s32 attribute 137 * nla_get_s64(nla) get payload for a s64 attribute 138 * nla_get_flag(nla) return 1 if flag is true 139 * nla_get_msecs(nla) get payload for a msecs attribute 140 * 141 * Attribute Misc: 142 * nla_memcpy(dest, nla, count) copy attribute into memory 143 * nla_memcmp(nla, data, size) compare attribute with memory area 144 * nla_strlcpy(dst, nla, size) copy attribute to a sized string 145 * nla_strcmp(nla, str) compare attribute with string 146 * 147 * Attribute Parsing: 148 * nla_ok(nla, remaining) does nla fit into remaining bytes? 149 * nla_next(nla, remaining) get next netlink attribute 150 * nla_validate() validate a stream of attributes 151 * nla_validate_nested() validate a stream of nested attributes 152 * nla_find() find attribute in stream of attributes 153 * nla_find_nested() find attribute in nested attributes 154 * nla_parse() parse and validate stream of attrs 155 * nla_parse_nested() parse nested attribuets 156 * nla_for_each_attr() loop over all attributes 157 * nla_for_each_nested() loop over the nested attributes 158 *========================================================================= 159 */ 160 161 /** 162 * Standard attribute types to specify validation policy 163 */ 164 enum { 165 NLA_UNSPEC, 166 NLA_U8, 167 NLA_U16, 168 NLA_U32, 169 NLA_U64, 170 NLA_STRING, 171 NLA_FLAG, 172 NLA_MSECS, 173 NLA_NESTED, 174 NLA_NESTED_COMPAT, 175 NLA_NUL_STRING, 176 NLA_BINARY, 177 NLA_S8, 178 NLA_S16, 179 NLA_S32, 180 NLA_S64, 181 __NLA_TYPE_MAX, 182 }; 183 184 #define NLA_TYPE_MAX (__NLA_TYPE_MAX - 1) 185 186 /** 187 * struct nla_policy - attribute validation policy 188 * @type: Type of attribute or NLA_UNSPEC 189 * @len: Type specific length of payload 190 * 191 * Policies are defined as arrays of this struct, the array must be 192 * accessible by attribute type up to the highest identifier to be expected. 193 * 194 * Meaning of `len' field: 195 * NLA_STRING Maximum length of string 196 * NLA_NUL_STRING Maximum length of string (excluding NUL) 197 * NLA_FLAG Unused 198 * NLA_BINARY Maximum length of attribute payload 199 * NLA_NESTED Don't use `len' field -- length verification is 200 * done by checking len of nested header (or empty) 201 * NLA_NESTED_COMPAT Minimum length of structure payload 202 * NLA_U8, NLA_U16, 203 * NLA_U32, NLA_U64, 204 * NLA_S8, NLA_S16, 205 * NLA_S32, NLA_S64, 206 * NLA_MSECS Leaving the length field zero will verify the 207 * given type fits, using it verifies minimum length 208 * just like "All other" 209 * All other Minimum length of attribute payload 210 * 211 * Example: 212 * static const struct nla_policy my_policy[ATTR_MAX+1] = { 213 * [ATTR_FOO] = { .type = NLA_U16 }, 214 * [ATTR_BAR] = { .type = NLA_STRING, .len = BARSIZ }, 215 * [ATTR_BAZ] = { .len = sizeof(struct mystruct) }, 216 * }; 217 */ 218 struct nla_policy { 219 u16 type; 220 u16 len; 221 }; 222 223 /** 224 * struct nl_info - netlink source information 225 * @nlh: Netlink message header of original request 226 * @portid: Netlink PORTID of requesting application 227 */ 228 struct nl_info { 229 struct nlmsghdr *nlh; 230 struct net *nl_net; 231 u32 portid; 232 bool skip_notify; 233 }; 234 235 int netlink_rcv_skb(struct sk_buff *skb, 236 int (*cb)(struct sk_buff *, struct nlmsghdr *, 237 struct netlink_ext_ack *)); 238 int nlmsg_notify(struct sock *sk, struct sk_buff *skb, u32 portid, 239 unsigned int group, int report, gfp_t flags); 240 241 int nla_validate(const struct nlattr *head, int len, int maxtype, 242 const struct nla_policy *policy, 243 struct netlink_ext_ack *extack); 244 int nla_parse(struct nlattr **tb, int maxtype, const struct nlattr *head, 245 int len, const struct nla_policy *policy, 246 struct netlink_ext_ack *extack); 247 int nla_policy_len(const struct nla_policy *, int); 248 struct nlattr *nla_find(const struct nlattr *head, int len, int attrtype); 249 size_t nla_strlcpy(char *dst, const struct nlattr *nla, size_t dstsize); 250 int nla_memcpy(void *dest, const struct nlattr *src, int count); 251 int nla_memcmp(const struct nlattr *nla, const void *data, size_t size); 252 int nla_strcmp(const struct nlattr *nla, const char *str); 253 struct nlattr *__nla_reserve(struct sk_buff *skb, int attrtype, int attrlen); 254 struct nlattr *__nla_reserve_64bit(struct sk_buff *skb, int attrtype, 255 int attrlen, int padattr); 256 void *__nla_reserve_nohdr(struct sk_buff *skb, int attrlen); 257 struct nlattr *nla_reserve(struct sk_buff *skb, int attrtype, int attrlen); 258 struct nlattr *nla_reserve_64bit(struct sk_buff *skb, int attrtype, 259 int attrlen, int padattr); 260 void *nla_reserve_nohdr(struct sk_buff *skb, int attrlen); 261 void __nla_put(struct sk_buff *skb, int attrtype, int attrlen, 262 const void *data); 263 void __nla_put_64bit(struct sk_buff *skb, int attrtype, int attrlen, 264 const void *data, int padattr); 265 void __nla_put_nohdr(struct sk_buff *skb, int attrlen, const void *data); 266 int nla_put(struct sk_buff *skb, int attrtype, int attrlen, const void *data); 267 int nla_put_64bit(struct sk_buff *skb, int attrtype, int attrlen, 268 const void *data, int padattr); 269 int nla_put_nohdr(struct sk_buff *skb, int attrlen, const void *data); 270 int nla_append(struct sk_buff *skb, int attrlen, const void *data); 271 272 /************************************************************************** 273 * Netlink Messages 274 **************************************************************************/ 275 276 /** 277 * nlmsg_msg_size - length of netlink message not including padding 278 * @payload: length of message payload 279 */ 280 static inline int nlmsg_msg_size(int payload) 281 { 282 return NLMSG_HDRLEN + payload; 283 } 284 285 /** 286 * nlmsg_total_size - length of netlink message including padding 287 * @payload: length of message payload 288 */ 289 static inline int nlmsg_total_size(int payload) 290 { 291 return NLMSG_ALIGN(nlmsg_msg_size(payload)); 292 } 293 294 /** 295 * nlmsg_padlen - length of padding at the message's tail 296 * @payload: length of message payload 297 */ 298 static inline int nlmsg_padlen(int payload) 299 { 300 return nlmsg_total_size(payload) - nlmsg_msg_size(payload); 301 } 302 303 /** 304 * nlmsg_data - head of message payload 305 * @nlh: netlink message header 306 */ 307 static inline void *nlmsg_data(const struct nlmsghdr *nlh) 308 { 309 return (unsigned char *) nlh + NLMSG_HDRLEN; 310 } 311 312 /** 313 * nlmsg_len - length of message payload 314 * @nlh: netlink message header 315 */ 316 static inline int nlmsg_len(const struct nlmsghdr *nlh) 317 { 318 return nlh->nlmsg_len - NLMSG_HDRLEN; 319 } 320 321 /** 322 * nlmsg_attrdata - head of attributes data 323 * @nlh: netlink message header 324 * @hdrlen: length of family specific header 325 */ 326 static inline struct nlattr *nlmsg_attrdata(const struct nlmsghdr *nlh, 327 int hdrlen) 328 { 329 unsigned char *data = nlmsg_data(nlh); 330 return (struct nlattr *) (data + NLMSG_ALIGN(hdrlen)); 331 } 332 333 /** 334 * nlmsg_attrlen - length of attributes data 335 * @nlh: netlink message header 336 * @hdrlen: length of family specific header 337 */ 338 static inline int nlmsg_attrlen(const struct nlmsghdr *nlh, int hdrlen) 339 { 340 return nlmsg_len(nlh) - NLMSG_ALIGN(hdrlen); 341 } 342 343 /** 344 * nlmsg_ok - check if the netlink message fits into the remaining bytes 345 * @nlh: netlink message header 346 * @remaining: number of bytes remaining in message stream 347 */ 348 static inline int nlmsg_ok(const struct nlmsghdr *nlh, int remaining) 349 { 350 return (remaining >= (int) sizeof(struct nlmsghdr) && 351 nlh->nlmsg_len >= sizeof(struct nlmsghdr) && 352 nlh->nlmsg_len <= remaining); 353 } 354 355 /** 356 * nlmsg_next - next netlink message in message stream 357 * @nlh: netlink message header 358 * @remaining: number of bytes remaining in message stream 359 * 360 * Returns the next netlink message in the message stream and 361 * decrements remaining by the size of the current message. 362 */ 363 static inline struct nlmsghdr * 364 nlmsg_next(const struct nlmsghdr *nlh, int *remaining) 365 { 366 int totlen = NLMSG_ALIGN(nlh->nlmsg_len); 367 368 *remaining -= totlen; 369 370 return (struct nlmsghdr *) ((unsigned char *) nlh + totlen); 371 } 372 373 /** 374 * nlmsg_parse - parse attributes of a netlink message 375 * @nlh: netlink message header 376 * @hdrlen: length of family specific header 377 * @tb: destination array with maxtype+1 elements 378 * @maxtype: maximum attribute type to be expected 379 * @policy: validation policy 380 * @extack: extended ACK report struct 381 * 382 * See nla_parse() 383 */ 384 static inline int nlmsg_parse(const struct nlmsghdr *nlh, int hdrlen, 385 struct nlattr *tb[], int maxtype, 386 const struct nla_policy *policy, 387 struct netlink_ext_ack *extack) 388 { 389 if (nlh->nlmsg_len < nlmsg_msg_size(hdrlen)) 390 return -EINVAL; 391 392 return nla_parse(tb, maxtype, nlmsg_attrdata(nlh, hdrlen), 393 nlmsg_attrlen(nlh, hdrlen), policy, extack); 394 } 395 396 /** 397 * nlmsg_find_attr - find a specific attribute in a netlink message 398 * @nlh: netlink message header 399 * @hdrlen: length of familiy specific header 400 * @attrtype: type of attribute to look for 401 * 402 * Returns the first attribute which matches the specified type. 403 */ 404 static inline struct nlattr *nlmsg_find_attr(const struct nlmsghdr *nlh, 405 int hdrlen, int attrtype) 406 { 407 return nla_find(nlmsg_attrdata(nlh, hdrlen), 408 nlmsg_attrlen(nlh, hdrlen), attrtype); 409 } 410 411 /** 412 * nlmsg_validate - validate a netlink message including attributes 413 * @nlh: netlinket message header 414 * @hdrlen: length of familiy specific header 415 * @maxtype: maximum attribute type to be expected 416 * @policy: validation policy 417 * @extack: extended ACK report struct 418 */ 419 static inline int nlmsg_validate(const struct nlmsghdr *nlh, 420 int hdrlen, int maxtype, 421 const struct nla_policy *policy, 422 struct netlink_ext_ack *extack) 423 { 424 if (nlh->nlmsg_len < nlmsg_msg_size(hdrlen)) 425 return -EINVAL; 426 427 return nla_validate(nlmsg_attrdata(nlh, hdrlen), 428 nlmsg_attrlen(nlh, hdrlen), maxtype, policy, 429 extack); 430 } 431 432 /** 433 * nlmsg_report - need to report back to application? 434 * @nlh: netlink message header 435 * 436 * Returns 1 if a report back to the application is requested. 437 */ 438 static inline int nlmsg_report(const struct nlmsghdr *nlh) 439 { 440 return !!(nlh->nlmsg_flags & NLM_F_ECHO); 441 } 442 443 /** 444 * nlmsg_for_each_attr - iterate over a stream of attributes 445 * @pos: loop counter, set to current attribute 446 * @nlh: netlink message header 447 * @hdrlen: length of familiy specific header 448 * @rem: initialized to len, holds bytes currently remaining in stream 449 */ 450 #define nlmsg_for_each_attr(pos, nlh, hdrlen, rem) \ 451 nla_for_each_attr(pos, nlmsg_attrdata(nlh, hdrlen), \ 452 nlmsg_attrlen(nlh, hdrlen), rem) 453 454 /** 455 * nlmsg_put - Add a new netlink message to an skb 456 * @skb: socket buffer to store message in 457 * @portid: netlink PORTID of requesting application 458 * @seq: sequence number of message 459 * @type: message type 460 * @payload: length of message payload 461 * @flags: message flags 462 * 463 * Returns NULL if the tailroom of the skb is insufficient to store 464 * the message header and payload. 465 */ 466 static inline struct nlmsghdr *nlmsg_put(struct sk_buff *skb, u32 portid, u32 seq, 467 int type, int payload, int flags) 468 { 469 if (unlikely(skb_tailroom(skb) < nlmsg_total_size(payload))) 470 return NULL; 471 472 return __nlmsg_put(skb, portid, seq, type, payload, flags); 473 } 474 475 /** 476 * nlmsg_put_answer - Add a new callback based netlink message to an skb 477 * @skb: socket buffer to store message in 478 * @cb: netlink callback 479 * @type: message type 480 * @payload: length of message payload 481 * @flags: message flags 482 * 483 * Returns NULL if the tailroom of the skb is insufficient to store 484 * the message header and payload. 485 */ 486 static inline struct nlmsghdr *nlmsg_put_answer(struct sk_buff *skb, 487 struct netlink_callback *cb, 488 int type, int payload, 489 int flags) 490 { 491 return nlmsg_put(skb, NETLINK_CB(cb->skb).portid, cb->nlh->nlmsg_seq, 492 type, payload, flags); 493 } 494 495 /** 496 * nlmsg_new - Allocate a new netlink message 497 * @payload: size of the message payload 498 * @flags: the type of memory to allocate. 499 * 500 * Use NLMSG_DEFAULT_SIZE if the size of the payload isn't known 501 * and a good default is needed. 502 */ 503 static inline struct sk_buff *nlmsg_new(size_t payload, gfp_t flags) 504 { 505 return alloc_skb(nlmsg_total_size(payload), flags); 506 } 507 508 /** 509 * nlmsg_end - Finalize a netlink message 510 * @skb: socket buffer the message is stored in 511 * @nlh: netlink message header 512 * 513 * Corrects the netlink message header to include the appeneded 514 * attributes. Only necessary if attributes have been added to 515 * the message. 516 */ 517 static inline void nlmsg_end(struct sk_buff *skb, struct nlmsghdr *nlh) 518 { 519 nlh->nlmsg_len = skb_tail_pointer(skb) - (unsigned char *)nlh; 520 } 521 522 /** 523 * nlmsg_get_pos - return current position in netlink message 524 * @skb: socket buffer the message is stored in 525 * 526 * Returns a pointer to the current tail of the message. 527 */ 528 static inline void *nlmsg_get_pos(struct sk_buff *skb) 529 { 530 return skb_tail_pointer(skb); 531 } 532 533 /** 534 * nlmsg_trim - Trim message to a mark 535 * @skb: socket buffer the message is stored in 536 * @mark: mark to trim to 537 * 538 * Trims the message to the provided mark. 539 */ 540 static inline void nlmsg_trim(struct sk_buff *skb, const void *mark) 541 { 542 if (mark) { 543 WARN_ON((unsigned char *) mark < skb->data); 544 skb_trim(skb, (unsigned char *) mark - skb->data); 545 } 546 } 547 548 /** 549 * nlmsg_cancel - Cancel construction of a netlink message 550 * @skb: socket buffer the message is stored in 551 * @nlh: netlink message header 552 * 553 * Removes the complete netlink message including all 554 * attributes from the socket buffer again. 555 */ 556 static inline void nlmsg_cancel(struct sk_buff *skb, struct nlmsghdr *nlh) 557 { 558 nlmsg_trim(skb, nlh); 559 } 560 561 /** 562 * nlmsg_free - free a netlink message 563 * @skb: socket buffer of netlink message 564 */ 565 static inline void nlmsg_free(struct sk_buff *skb) 566 { 567 kfree_skb(skb); 568 } 569 570 /** 571 * nlmsg_multicast - multicast a netlink message 572 * @sk: netlink socket to spread messages to 573 * @skb: netlink message as socket buffer 574 * @portid: own netlink portid to avoid sending to yourself 575 * @group: multicast group id 576 * @flags: allocation flags 577 */ 578 static inline int nlmsg_multicast(struct sock *sk, struct sk_buff *skb, 579 u32 portid, unsigned int group, gfp_t flags) 580 { 581 int err; 582 583 NETLINK_CB(skb).dst_group = group; 584 585 err = netlink_broadcast(sk, skb, portid, group, flags); 586 if (err > 0) 587 err = 0; 588 589 return err; 590 } 591 592 /** 593 * nlmsg_unicast - unicast a netlink message 594 * @sk: netlink socket to spread message to 595 * @skb: netlink message as socket buffer 596 * @portid: netlink portid of the destination socket 597 */ 598 static inline int nlmsg_unicast(struct sock *sk, struct sk_buff *skb, u32 portid) 599 { 600 int err; 601 602 err = netlink_unicast(sk, skb, portid, MSG_DONTWAIT); 603 if (err > 0) 604 err = 0; 605 606 return err; 607 } 608 609 /** 610 * nlmsg_for_each_msg - iterate over a stream of messages 611 * @pos: loop counter, set to current message 612 * @head: head of message stream 613 * @len: length of message stream 614 * @rem: initialized to len, holds bytes currently remaining in stream 615 */ 616 #define nlmsg_for_each_msg(pos, head, len, rem) \ 617 for (pos = head, rem = len; \ 618 nlmsg_ok(pos, rem); \ 619 pos = nlmsg_next(pos, &(rem))) 620 621 /** 622 * nl_dump_check_consistent - check if sequence is consistent and advertise if not 623 * @cb: netlink callback structure that stores the sequence number 624 * @nlh: netlink message header to write the flag to 625 * 626 * This function checks if the sequence (generation) number changed during dump 627 * and if it did, advertises it in the netlink message header. 628 * 629 * The correct way to use it is to set cb->seq to the generation counter when 630 * all locks for dumping have been acquired, and then call this function for 631 * each message that is generated. 632 * 633 * Note that due to initialisation concerns, 0 is an invalid sequence number 634 * and must not be used by code that uses this functionality. 635 */ 636 static inline void 637 nl_dump_check_consistent(struct netlink_callback *cb, 638 struct nlmsghdr *nlh) 639 { 640 if (cb->prev_seq && cb->seq != cb->prev_seq) 641 nlh->nlmsg_flags |= NLM_F_DUMP_INTR; 642 cb->prev_seq = cb->seq; 643 } 644 645 /************************************************************************** 646 * Netlink Attributes 647 **************************************************************************/ 648 649 /** 650 * nla_attr_size - length of attribute not including padding 651 * @payload: length of payload 652 */ 653 static inline int nla_attr_size(int payload) 654 { 655 return NLA_HDRLEN + payload; 656 } 657 658 /** 659 * nla_total_size - total length of attribute including padding 660 * @payload: length of payload 661 */ 662 static inline int nla_total_size(int payload) 663 { 664 return NLA_ALIGN(nla_attr_size(payload)); 665 } 666 667 /** 668 * nla_padlen - length of padding at the tail of attribute 669 * @payload: length of payload 670 */ 671 static inline int nla_padlen(int payload) 672 { 673 return nla_total_size(payload) - nla_attr_size(payload); 674 } 675 676 /** 677 * nla_type - attribute type 678 * @nla: netlink attribute 679 */ 680 static inline int nla_type(const struct nlattr *nla) 681 { 682 return nla->nla_type & NLA_TYPE_MASK; 683 } 684 685 /** 686 * nla_data - head of payload 687 * @nla: netlink attribute 688 */ 689 static inline void *nla_data(const struct nlattr *nla) 690 { 691 return (char *) nla + NLA_HDRLEN; 692 } 693 694 /** 695 * nla_len - length of payload 696 * @nla: netlink attribute 697 */ 698 static inline int nla_len(const struct nlattr *nla) 699 { 700 return nla->nla_len - NLA_HDRLEN; 701 } 702 703 /** 704 * nla_ok - check if the netlink attribute fits into the remaining bytes 705 * @nla: netlink attribute 706 * @remaining: number of bytes remaining in attribute stream 707 */ 708 static inline int nla_ok(const struct nlattr *nla, int remaining) 709 { 710 return remaining >= (int) sizeof(*nla) && 711 nla->nla_len >= sizeof(*nla) && 712 nla->nla_len <= remaining; 713 } 714 715 /** 716 * nla_next - next netlink attribute in attribute stream 717 * @nla: netlink attribute 718 * @remaining: number of bytes remaining in attribute stream 719 * 720 * Returns the next netlink attribute in the attribute stream and 721 * decrements remaining by the size of the current attribute. 722 */ 723 static inline struct nlattr *nla_next(const struct nlattr *nla, int *remaining) 724 { 725 unsigned int totlen = NLA_ALIGN(nla->nla_len); 726 727 *remaining -= totlen; 728 return (struct nlattr *) ((char *) nla + totlen); 729 } 730 731 /** 732 * nla_find_nested - find attribute in a set of nested attributes 733 * @nla: attribute containing the nested attributes 734 * @attrtype: type of attribute to look for 735 * 736 * Returns the first attribute which matches the specified type. 737 */ 738 static inline struct nlattr * 739 nla_find_nested(const struct nlattr *nla, int attrtype) 740 { 741 return nla_find(nla_data(nla), nla_len(nla), attrtype); 742 } 743 744 /** 745 * nla_parse_nested - parse nested attributes 746 * @tb: destination array with maxtype+1 elements 747 * @maxtype: maximum attribute type to be expected 748 * @nla: attribute containing the nested attributes 749 * @policy: validation policy 750 * @extack: extended ACK report struct 751 * 752 * See nla_parse() 753 */ 754 static inline int nla_parse_nested(struct nlattr *tb[], int maxtype, 755 const struct nlattr *nla, 756 const struct nla_policy *policy, 757 struct netlink_ext_ack *extack) 758 { 759 return nla_parse(tb, maxtype, nla_data(nla), nla_len(nla), policy, 760 extack); 761 } 762 763 /** 764 * nla_put_u8 - Add a u8 netlink attribute to a socket buffer 765 * @skb: socket buffer to add attribute to 766 * @attrtype: attribute type 767 * @value: numeric value 768 */ 769 static inline int nla_put_u8(struct sk_buff *skb, int attrtype, u8 value) 770 { 771 return nla_put(skb, attrtype, sizeof(u8), &value); 772 } 773 774 /** 775 * nla_put_u16 - Add a u16 netlink attribute to a socket buffer 776 * @skb: socket buffer to add attribute to 777 * @attrtype: attribute type 778 * @value: numeric value 779 */ 780 static inline int nla_put_u16(struct sk_buff *skb, int attrtype, u16 value) 781 { 782 return nla_put(skb, attrtype, sizeof(u16), &value); 783 } 784 785 /** 786 * nla_put_be16 - Add a __be16 netlink attribute to a socket buffer 787 * @skb: socket buffer to add attribute to 788 * @attrtype: attribute type 789 * @value: numeric value 790 */ 791 static inline int nla_put_be16(struct sk_buff *skb, int attrtype, __be16 value) 792 { 793 return nla_put(skb, attrtype, sizeof(__be16), &value); 794 } 795 796 /** 797 * nla_put_net16 - Add 16-bit network byte order netlink attribute to a socket buffer 798 * @skb: socket buffer to add attribute to 799 * @attrtype: attribute type 800 * @value: numeric value 801 */ 802 static inline int nla_put_net16(struct sk_buff *skb, int attrtype, __be16 value) 803 { 804 return nla_put_be16(skb, attrtype | NLA_F_NET_BYTEORDER, value); 805 } 806 807 /** 808 * nla_put_le16 - Add a __le16 netlink attribute to a socket buffer 809 * @skb: socket buffer to add attribute to 810 * @attrtype: attribute type 811 * @value: numeric value 812 */ 813 static inline int nla_put_le16(struct sk_buff *skb, int attrtype, __le16 value) 814 { 815 return nla_put(skb, attrtype, sizeof(__le16), &value); 816 } 817 818 /** 819 * nla_put_u32 - Add a u32 netlink attribute to a socket buffer 820 * @skb: socket buffer to add attribute to 821 * @attrtype: attribute type 822 * @value: numeric value 823 */ 824 static inline int nla_put_u32(struct sk_buff *skb, int attrtype, u32 value) 825 { 826 return nla_put(skb, attrtype, sizeof(u32), &value); 827 } 828 829 /** 830 * nla_put_be32 - Add a __be32 netlink attribute to a socket buffer 831 * @skb: socket buffer to add attribute to 832 * @attrtype: attribute type 833 * @value: numeric value 834 */ 835 static inline int nla_put_be32(struct sk_buff *skb, int attrtype, __be32 value) 836 { 837 return nla_put(skb, attrtype, sizeof(__be32), &value); 838 } 839 840 /** 841 * nla_put_net32 - Add 32-bit network byte order netlink attribute to a socket buffer 842 * @skb: socket buffer to add attribute to 843 * @attrtype: attribute type 844 * @value: numeric value 845 */ 846 static inline int nla_put_net32(struct sk_buff *skb, int attrtype, __be32 value) 847 { 848 return nla_put_be32(skb, attrtype | NLA_F_NET_BYTEORDER, value); 849 } 850 851 /** 852 * nla_put_le32 - Add a __le32 netlink attribute to a socket buffer 853 * @skb: socket buffer to add attribute to 854 * @attrtype: attribute type 855 * @value: numeric value 856 */ 857 static inline int nla_put_le32(struct sk_buff *skb, int attrtype, __le32 value) 858 { 859 return nla_put(skb, attrtype, sizeof(__le32), &value); 860 } 861 862 /** 863 * nla_put_u64_64bit - Add a u64 netlink attribute to a skb and align it 864 * @skb: socket buffer to add attribute to 865 * @attrtype: attribute type 866 * @value: numeric value 867 * @padattr: attribute type for the padding 868 */ 869 static inline int nla_put_u64_64bit(struct sk_buff *skb, int attrtype, 870 u64 value, int padattr) 871 { 872 return nla_put_64bit(skb, attrtype, sizeof(u64), &value, padattr); 873 } 874 875 /** 876 * nla_put_be64 - Add a __be64 netlink attribute to a socket buffer and align it 877 * @skb: socket buffer to add attribute to 878 * @attrtype: attribute type 879 * @value: numeric value 880 * @padattr: attribute type for the padding 881 */ 882 static inline int nla_put_be64(struct sk_buff *skb, int attrtype, __be64 value, 883 int padattr) 884 { 885 return nla_put_64bit(skb, attrtype, sizeof(__be64), &value, padattr); 886 } 887 888 /** 889 * nla_put_net64 - Add 64-bit network byte order nlattr to a skb and align it 890 * @skb: socket buffer to add attribute to 891 * @attrtype: attribute type 892 * @value: numeric value 893 * @padattr: attribute type for the padding 894 */ 895 static inline int nla_put_net64(struct sk_buff *skb, int attrtype, __be64 value, 896 int padattr) 897 { 898 return nla_put_be64(skb, attrtype | NLA_F_NET_BYTEORDER, value, 899 padattr); 900 } 901 902 /** 903 * nla_put_le64 - Add a __le64 netlink attribute to a socket buffer and align it 904 * @skb: socket buffer to add attribute to 905 * @attrtype: attribute type 906 * @value: numeric value 907 * @padattr: attribute type for the padding 908 */ 909 static inline int nla_put_le64(struct sk_buff *skb, int attrtype, __le64 value, 910 int padattr) 911 { 912 return nla_put_64bit(skb, attrtype, sizeof(__le64), &value, padattr); 913 } 914 915 /** 916 * nla_put_s8 - Add a s8 netlink attribute to a socket buffer 917 * @skb: socket buffer to add attribute to 918 * @attrtype: attribute type 919 * @value: numeric value 920 */ 921 static inline int nla_put_s8(struct sk_buff *skb, int attrtype, s8 value) 922 { 923 return nla_put(skb, attrtype, sizeof(s8), &value); 924 } 925 926 /** 927 * nla_put_s16 - Add a s16 netlink attribute to a socket buffer 928 * @skb: socket buffer to add attribute to 929 * @attrtype: attribute type 930 * @value: numeric value 931 */ 932 static inline int nla_put_s16(struct sk_buff *skb, int attrtype, s16 value) 933 { 934 return nla_put(skb, attrtype, sizeof(s16), &value); 935 } 936 937 /** 938 * nla_put_s32 - Add a s32 netlink attribute to a socket buffer 939 * @skb: socket buffer to add attribute to 940 * @attrtype: attribute type 941 * @value: numeric value 942 */ 943 static inline int nla_put_s32(struct sk_buff *skb, int attrtype, s32 value) 944 { 945 return nla_put(skb, attrtype, sizeof(s32), &value); 946 } 947 948 /** 949 * nla_put_s64 - Add a s64 netlink attribute to a socket buffer and align it 950 * @skb: socket buffer to add attribute to 951 * @attrtype: attribute type 952 * @value: numeric value 953 * @padattr: attribute type for the padding 954 */ 955 static inline int nla_put_s64(struct sk_buff *skb, int attrtype, s64 value, 956 int padattr) 957 { 958 return nla_put_64bit(skb, attrtype, sizeof(s64), &value, padattr); 959 } 960 961 /** 962 * nla_put_string - Add a string netlink attribute to a socket buffer 963 * @skb: socket buffer to add attribute to 964 * @attrtype: attribute type 965 * @str: NUL terminated string 966 */ 967 static inline int nla_put_string(struct sk_buff *skb, int attrtype, 968 const char *str) 969 { 970 return nla_put(skb, attrtype, strlen(str) + 1, str); 971 } 972 973 /** 974 * nla_put_flag - Add a flag netlink attribute to a socket buffer 975 * @skb: socket buffer to add attribute to 976 * @attrtype: attribute type 977 */ 978 static inline int nla_put_flag(struct sk_buff *skb, int attrtype) 979 { 980 return nla_put(skb, attrtype, 0, NULL); 981 } 982 983 /** 984 * nla_put_msecs - Add a msecs netlink attribute to a skb and align it 985 * @skb: socket buffer to add attribute to 986 * @attrtype: attribute type 987 * @njiffies: number of jiffies to convert to msecs 988 * @padattr: attribute type for the padding 989 */ 990 static inline int nla_put_msecs(struct sk_buff *skb, int attrtype, 991 unsigned long njiffies, int padattr) 992 { 993 u64 tmp = jiffies_to_msecs(njiffies); 994 995 return nla_put_64bit(skb, attrtype, sizeof(u64), &tmp, padattr); 996 } 997 998 /** 999 * nla_put_in_addr - Add an IPv4 address netlink attribute to a socket 1000 * buffer 1001 * @skb: socket buffer to add attribute to 1002 * @attrtype: attribute type 1003 * @addr: IPv4 address 1004 */ 1005 static inline int nla_put_in_addr(struct sk_buff *skb, int attrtype, 1006 __be32 addr) 1007 { 1008 return nla_put_be32(skb, attrtype, addr); 1009 } 1010 1011 /** 1012 * nla_put_in6_addr - Add an IPv6 address netlink attribute to a socket 1013 * buffer 1014 * @skb: socket buffer to add attribute to 1015 * @attrtype: attribute type 1016 * @addr: IPv6 address 1017 */ 1018 static inline int nla_put_in6_addr(struct sk_buff *skb, int attrtype, 1019 const struct in6_addr *addr) 1020 { 1021 return nla_put(skb, attrtype, sizeof(*addr), addr); 1022 } 1023 1024 /** 1025 * nla_get_u32 - return payload of u32 attribute 1026 * @nla: u32 netlink attribute 1027 */ 1028 static inline u32 nla_get_u32(const struct nlattr *nla) 1029 { 1030 return *(u32 *) nla_data(nla); 1031 } 1032 1033 /** 1034 * nla_get_be32 - return payload of __be32 attribute 1035 * @nla: __be32 netlink attribute 1036 */ 1037 static inline __be32 nla_get_be32(const struct nlattr *nla) 1038 { 1039 return *(__be32 *) nla_data(nla); 1040 } 1041 1042 /** 1043 * nla_get_le32 - return payload of __le32 attribute 1044 * @nla: __le32 netlink attribute 1045 */ 1046 static inline __le32 nla_get_le32(const struct nlattr *nla) 1047 { 1048 return *(__le32 *) nla_data(nla); 1049 } 1050 1051 /** 1052 * nla_get_u16 - return payload of u16 attribute 1053 * @nla: u16 netlink attribute 1054 */ 1055 static inline u16 nla_get_u16(const struct nlattr *nla) 1056 { 1057 return *(u16 *) nla_data(nla); 1058 } 1059 1060 /** 1061 * nla_get_be16 - return payload of __be16 attribute 1062 * @nla: __be16 netlink attribute 1063 */ 1064 static inline __be16 nla_get_be16(const struct nlattr *nla) 1065 { 1066 return *(__be16 *) nla_data(nla); 1067 } 1068 1069 /** 1070 * nla_get_le16 - return payload of __le16 attribute 1071 * @nla: __le16 netlink attribute 1072 */ 1073 static inline __le16 nla_get_le16(const struct nlattr *nla) 1074 { 1075 return *(__le16 *) nla_data(nla); 1076 } 1077 1078 /** 1079 * nla_get_u8 - return payload of u8 attribute 1080 * @nla: u8 netlink attribute 1081 */ 1082 static inline u8 nla_get_u8(const struct nlattr *nla) 1083 { 1084 return *(u8 *) nla_data(nla); 1085 } 1086 1087 /** 1088 * nla_get_u64 - return payload of u64 attribute 1089 * @nla: u64 netlink attribute 1090 */ 1091 static inline u64 nla_get_u64(const struct nlattr *nla) 1092 { 1093 u64 tmp; 1094 1095 nla_memcpy(&tmp, nla, sizeof(tmp)); 1096 1097 return tmp; 1098 } 1099 1100 /** 1101 * nla_get_be64 - return payload of __be64 attribute 1102 * @nla: __be64 netlink attribute 1103 */ 1104 static inline __be64 nla_get_be64(const struct nlattr *nla) 1105 { 1106 __be64 tmp; 1107 1108 nla_memcpy(&tmp, nla, sizeof(tmp)); 1109 1110 return tmp; 1111 } 1112 1113 /** 1114 * nla_get_le64 - return payload of __le64 attribute 1115 * @nla: __le64 netlink attribute 1116 */ 1117 static inline __le64 nla_get_le64(const struct nlattr *nla) 1118 { 1119 return *(__le64 *) nla_data(nla); 1120 } 1121 1122 /** 1123 * nla_get_s32 - return payload of s32 attribute 1124 * @nla: s32 netlink attribute 1125 */ 1126 static inline s32 nla_get_s32(const struct nlattr *nla) 1127 { 1128 return *(s32 *) nla_data(nla); 1129 } 1130 1131 /** 1132 * nla_get_s16 - return payload of s16 attribute 1133 * @nla: s16 netlink attribute 1134 */ 1135 static inline s16 nla_get_s16(const struct nlattr *nla) 1136 { 1137 return *(s16 *) nla_data(nla); 1138 } 1139 1140 /** 1141 * nla_get_s8 - return payload of s8 attribute 1142 * @nla: s8 netlink attribute 1143 */ 1144 static inline s8 nla_get_s8(const struct nlattr *nla) 1145 { 1146 return *(s8 *) nla_data(nla); 1147 } 1148 1149 /** 1150 * nla_get_s64 - return payload of s64 attribute 1151 * @nla: s64 netlink attribute 1152 */ 1153 static inline s64 nla_get_s64(const struct nlattr *nla) 1154 { 1155 s64 tmp; 1156 1157 nla_memcpy(&tmp, nla, sizeof(tmp)); 1158 1159 return tmp; 1160 } 1161 1162 /** 1163 * nla_get_flag - return payload of flag attribute 1164 * @nla: flag netlink attribute 1165 */ 1166 static inline int nla_get_flag(const struct nlattr *nla) 1167 { 1168 return !!nla; 1169 } 1170 1171 /** 1172 * nla_get_msecs - return payload of msecs attribute 1173 * @nla: msecs netlink attribute 1174 * 1175 * Returns the number of milliseconds in jiffies. 1176 */ 1177 static inline unsigned long nla_get_msecs(const struct nlattr *nla) 1178 { 1179 u64 msecs = nla_get_u64(nla); 1180 1181 return msecs_to_jiffies((unsigned long) msecs); 1182 } 1183 1184 /** 1185 * nla_get_in_addr - return payload of IPv4 address attribute 1186 * @nla: IPv4 address netlink attribute 1187 */ 1188 static inline __be32 nla_get_in_addr(const struct nlattr *nla) 1189 { 1190 return *(__be32 *) nla_data(nla); 1191 } 1192 1193 /** 1194 * nla_get_in6_addr - return payload of IPv6 address attribute 1195 * @nla: IPv6 address netlink attribute 1196 */ 1197 static inline struct in6_addr nla_get_in6_addr(const struct nlattr *nla) 1198 { 1199 struct in6_addr tmp; 1200 1201 nla_memcpy(&tmp, nla, sizeof(tmp)); 1202 return tmp; 1203 } 1204 1205 /** 1206 * nla_memdup - duplicate attribute memory (kmemdup) 1207 * @src: netlink attribute to duplicate from 1208 * @gfp: GFP mask 1209 */ 1210 static inline void *nla_memdup(const struct nlattr *src, gfp_t gfp) 1211 { 1212 return kmemdup(nla_data(src), nla_len(src), gfp); 1213 } 1214 1215 /** 1216 * nla_nest_start - Start a new level of nested attributes 1217 * @skb: socket buffer to add attributes to 1218 * @attrtype: attribute type of container 1219 * 1220 * Returns the container attribute 1221 */ 1222 static inline struct nlattr *nla_nest_start(struct sk_buff *skb, int attrtype) 1223 { 1224 struct nlattr *start = (struct nlattr *)skb_tail_pointer(skb); 1225 1226 if (nla_put(skb, attrtype, 0, NULL) < 0) 1227 return NULL; 1228 1229 return start; 1230 } 1231 1232 /** 1233 * nla_nest_end - Finalize nesting of attributes 1234 * @skb: socket buffer the attributes are stored in 1235 * @start: container attribute 1236 * 1237 * Corrects the container attribute header to include the all 1238 * appeneded attributes. 1239 * 1240 * Returns the total data length of the skb. 1241 */ 1242 static inline int nla_nest_end(struct sk_buff *skb, struct nlattr *start) 1243 { 1244 start->nla_len = skb_tail_pointer(skb) - (unsigned char *)start; 1245 return skb->len; 1246 } 1247 1248 /** 1249 * nla_nest_cancel - Cancel nesting of attributes 1250 * @skb: socket buffer the message is stored in 1251 * @start: container attribute 1252 * 1253 * Removes the container attribute and including all nested 1254 * attributes. Returns -EMSGSIZE 1255 */ 1256 static inline void nla_nest_cancel(struct sk_buff *skb, struct nlattr *start) 1257 { 1258 nlmsg_trim(skb, start); 1259 } 1260 1261 /** 1262 * nla_validate_nested - Validate a stream of nested attributes 1263 * @start: container attribute 1264 * @maxtype: maximum attribute type to be expected 1265 * @policy: validation policy 1266 * @extack: extended ACK report struct 1267 * 1268 * Validates all attributes in the nested attribute stream against the 1269 * specified policy. Attributes with a type exceeding maxtype will be 1270 * ignored. See documenation of struct nla_policy for more details. 1271 * 1272 * Returns 0 on success or a negative error code. 1273 */ 1274 static inline int nla_validate_nested(const struct nlattr *start, int maxtype, 1275 const struct nla_policy *policy, 1276 struct netlink_ext_ack *extack) 1277 { 1278 return nla_validate(nla_data(start), nla_len(start), maxtype, policy, 1279 extack); 1280 } 1281 1282 /** 1283 * nla_need_padding_for_64bit - test 64-bit alignment of the next attribute 1284 * @skb: socket buffer the message is stored in 1285 * 1286 * Return true if padding is needed to align the next attribute (nla_data()) to 1287 * a 64-bit aligned area. 1288 */ 1289 static inline bool nla_need_padding_for_64bit(struct sk_buff *skb) 1290 { 1291 #ifndef CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS 1292 /* The nlattr header is 4 bytes in size, that's why we test 1293 * if the skb->data _is_ aligned. A NOP attribute, plus 1294 * nlattr header for next attribute, will make nla_data() 1295 * 8-byte aligned. 1296 */ 1297 if (IS_ALIGNED((unsigned long)skb_tail_pointer(skb), 8)) 1298 return true; 1299 #endif 1300 return false; 1301 } 1302 1303 /** 1304 * nla_align_64bit - 64-bit align the nla_data() of next attribute 1305 * @skb: socket buffer the message is stored in 1306 * @padattr: attribute type for the padding 1307 * 1308 * Conditionally emit a padding netlink attribute in order to make 1309 * the next attribute we emit have a 64-bit aligned nla_data() area. 1310 * This will only be done in architectures which do not have 1311 * CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS defined. 1312 * 1313 * Returns zero on success or a negative error code. 1314 */ 1315 static inline int nla_align_64bit(struct sk_buff *skb, int padattr) 1316 { 1317 if (nla_need_padding_for_64bit(skb) && 1318 !nla_reserve(skb, padattr, 0)) 1319 return -EMSGSIZE; 1320 1321 return 0; 1322 } 1323 1324 /** 1325 * nla_total_size_64bit - total length of attribute including padding 1326 * @payload: length of payload 1327 */ 1328 static inline int nla_total_size_64bit(int payload) 1329 { 1330 return NLA_ALIGN(nla_attr_size(payload)) 1331 #ifndef CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS 1332 + NLA_ALIGN(nla_attr_size(0)) 1333 #endif 1334 ; 1335 } 1336 1337 /** 1338 * nla_for_each_attr - iterate over a stream of attributes 1339 * @pos: loop counter, set to current attribute 1340 * @head: head of attribute stream 1341 * @len: length of attribute stream 1342 * @rem: initialized to len, holds bytes currently remaining in stream 1343 */ 1344 #define nla_for_each_attr(pos, head, len, rem) \ 1345 for (pos = head, rem = len; \ 1346 nla_ok(pos, rem); \ 1347 pos = nla_next(pos, &(rem))) 1348 1349 /** 1350 * nla_for_each_nested - iterate over nested attributes 1351 * @pos: loop counter, set to current attribute 1352 * @nla: attribute containing the nested attributes 1353 * @rem: initialized to len, holds bytes currently remaining in stream 1354 */ 1355 #define nla_for_each_nested(pos, nla, rem) \ 1356 nla_for_each_attr(pos, nla_data(nla), nla_len(nla), rem) 1357 1358 /** 1359 * nla_is_last - Test if attribute is last in stream 1360 * @nla: attribute to test 1361 * @rem: bytes remaining in stream 1362 */ 1363 static inline bool nla_is_last(const struct nlattr *nla, int rem) 1364 { 1365 return nla->nla_len == rem; 1366 } 1367 1368 #endif 1369