nla_for_each_attr(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ’… NAME

nla_for_each_attr β€” bestie, this is the one that loops over a whole stream of attributes, one by one, no skips πŸ’–

So the full name on the tin is nla_for_each_attr(9), and it's from the Kernel API Manual β€” keep that in your back pocket, iykyk.


✨ SYNOPSIS

nla_for_each_attr (pos , head , len , rem );

That's the whole vibe up there πŸ‘† four args, in that exact order, spaces and all. Copy it character for character or it's not gonna slay.


πŸŽ€ ARGUMENTS

Okay so here's the friend group β€” four lil parameters and what each one is doing fr fr:

  • pos β€” the loop counter ✨ it gets set to the current attribute every time around. This is your main character pointer, the one you're actually looking at right now.
  • head β€” head of the attribute stream. Like, the start of the whole line-up. Where the queue begins 🫢
  • len β€” length of the attribute stream. How much total stuff we're walking through.
  • rem β€” initialized to len, and it holds the bytes currently remaining in the stream πŸ’€ yeah, it's the shrinking budget. Starts full, ends empty.
ngl that's it. No hidden extras, no secret fifth parameter. Group chat says four, so it's four πŸ™ˆ

🌈 SEE ALSO

Lowkey the biggest squad ever β€” the whole netlink friend group shows up here, and they're all from the Kernel file ./include/net/netlink.h, so let's give them their moment πŸ‘‘

The structured-and-official ones:

struct nla_policy(9), struct nl_info(9), enum netlink_validation(9)

The msg-size and msg-layout crew:

nlmsg_msg_size(9), nlmsg_total_size(9), nlmsg_padlen(9), nlmsg_data(9), nlmsg_len(9), nlmsg_payload(9), nlmsg_attrdata(9), nlmsg_attrlen(9), nlmsg_ok(9), nlmsg_next(9)

The parsing gatekeepers (some of them deprecated, be careful bestie):

nla_parse(9), nla_parse_deprecated(9), nla_parse_deprecated_strict(9), __nlmsg_parse(9), nlmsg_parse(9), nlmsg_parse_deprecated(9), nlmsg_parse_deprecated_strict(9), nlmsg_find_attr(9), nla_validate_deprecated(9), nla_validate(9), nlmsg_validate_deprecated(9)

The message metadata girlies:

nlmsg_report(9), nlmsg_seq(9), nlmsg_for_each_attr(9), nlmsg_for_each_attr_type(9)

The building-and-sending section 🧚:

nlmsg_put(9), nlmsg_append(9), nlmsg_put_answer(9), nlmsg_new(9), nlmsg_new_large(9), nlmsg_end(9), nlmsg_get_pos(9), nlmsg_trim(9), nlmsg_cancel(9), nlmsg_free(9), nlmsg_consume(9), nlmsg_multicast_filtered(9), nlmsg_multicast(9), nlmsg_unicast(9), nlmsg_for_each_msg(9), nl_dump_check_consistent(9)

The attribute size / type / walk-the-list icons:

nla_attr_size(9), nla_total_size(9), nla_padlen(9), nla_type(9), nla_data(9), nla_len(9), nla_ok(9), nla_next(9), nla_find_nested(9), nla_parse_nested(9), nla_parse_nested_deprecated(9)

Now the putters β€” the ones that actually write stuff in πŸ’… this list is giving "I own this function":

nla_put_u8(9), nla_put_u16(9), nla_put_be16(9), nla_put_net16(9), nla_put_le16(9), nla_put_u32(9), nla_put_uint(9), nla_put_be32(9), nla_put_net32(9), nla_put_le32(9), nla_put_u64_64bit(9), nla_put_be64(9), nla_put_net64(9), nla_put_le64(9), nla_put_s8(9), nla_put_s16(9), nla_put_s32(9), nla_put_s64(9), nla_put_sint(9), nla_put_string(9), nla_put_flag(9), nla_put_msecs(9), nla_put_in_addr(9), nla_put_in6_addr(9), nla_put_bitfield32(9)

And the getters β€” the read-only girlies, iconic, plus a bunch of _default versions for when the attribute just isn't there 😭:

nla_get_u32(9), nla_get_u32_default(9), nla_get_be32(9), nla_get_be32_default(9), nla_get_le32(9), nla_get_le32_default(9), nla_get_u16(9), nla_get_u16_default(9), nla_get_be16(9), nla_get_be16_default(9), nla_get_le16(9), nla_get_le16_default(9), nla_get_u8(9), nla_get_u8_default(9), nla_get_u64(9), nla_get_u64_default(9), nla_get_uint(9), nla_get_uint_default(9), nla_get_be64(9), nla_get_be64_default(9), nla_get_le64(9), nla_get_le64_default(9), nla_get_s32(9), nla_get_s32_default(9), nla_get_s16(9), nla_get_s16_default(9), nla_get_s8(9), nla_get_s8_default(9), nla_get_s64(9), nla_get_s64_default(9), nla_get_sint(9), nla_get_sint_default(9), nla_get_flag(9), nla_get_msecs(9), nla_get_msecs_default(9), nla_get_in_addr(9), nla_get_in_addr_default(9), nla_get_in6_addr(9), nla_get_bitfield32(9)

The nesting / memory / alignment besties πŸ¦‹:

nla_memdup(9), nla_nest_start_noflag(9), nla_nest_start(9), nla_nest_end(9), nla_nest_end_safe(9), nla_nest_cancel(9), nla_put_empty_nest(9), __nla_validate_nested(9), nla_need_padding_for_64bit(9), nla_align_64bit(9), nla_total_size_64bit(9)

And finally our fellow loopers, the siblings πŸ”₯:

nla_for_each_attr_type(9), nla_for_each_nested(9), nla_for_each_nested_type(9), nla_is_last(9)


and that's the whole page, periodt πŸ’œ This one came to you from the source path ./include/net, dated October 2026 β€” mwah, take care of her, she's a legend πŸŒΈπŸŽ€βœ¨

πŸ“¦ where this page comes from