nla_next(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

🌸 nla_next (9) β€” Kernel API Manual energy ✨

okay so first of all, hi bestie πŸ’– you've wandered into the Kernel API Manual, and the star of the show is nla_next β€” the little function that keeps a netlink attribute stream moving. no cap, it's giving "walk the list, bestie" πŸšΆβ€β™€οΈβœ¨

πŸ’… NAME

nla_next β€” next netlink attribute in attribute stream πŸ¦‹

πŸŽ€ SYNOPSIS

struct nlattr * nla_next (const struct nlattr *nla , int *remaining );

✨ ARGUMENTS

  • nla β€” netlink attribute. the one you're standing on rn πŸ‘‘
  • remaining β€” number of bytes remaining in attribute stream. think of it as your little countdown snack πŸ“

πŸ”₯ RETURN

it hands you the next netlink attribute in the attribute stream, and it decrements remaining by the size of the current attribute. the way it does two things at once?? multitasking queen, honestly. periodt πŸ’…

ngl, keep an eye on remaining β€” it's not just decorative, it's literally getting smaller as you skip along πŸ‘€

🌈 SEE ALSO

starting with the Kernel file ./include/net/netlink.h, then the structs and enums: struct nla_policy(9), struct nl_info(9), enum netlink_validation(9) 🧚

all the nlmsg-flavoured besties: 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 crew: 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-lifecycle girlies: nlmsg_report(9), nlmsg_seq(9), nlmsg_for_each_attr(9), nlmsg_for_each_attr_type(9), 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 sizing squad: nla_attr_size(9), nla_total_size(9), nla_padlen(9), nla_type(9), nla_data(9), nla_len(9), nla_ok(9), nla_find_nested(9), nla_parse_nested(9), nla_parse_nested_deprecated(9) πŸŽ€

every single nla_put in existence, no crumbs left: 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 matching nla_get squad, also complete, also iconic: 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) πŸ‘‘

nesting nation: 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 the loop legends themselves: nla_for_each_attr(9), nla_for_each_attr_type(9), nla_for_each_nested(9), nla_for_each_nested_type(9), nla_is_last(9) ⭐


🫢 that's the whole page, bestie β€” and here's the cute little sign-off: this one comes from ./include/net, dated October 2026, filed under nla_next(9). go forth and iterate those attributes, you absolute main character πŸ’œπŸŽ€

πŸ“¦ where this page comes from