nla_for_each_attr(9)
π 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 tolen, 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
- nixpkgs unstable: linux-manual 7.3.1
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms