nla_put_net16(9)
π nla_put_net16 β from the Kernel API Manual β¨
okay so bestie, picture this: you're deep in kernel land, you've got a struct sk_buff in your hand, and you need to shove a lil 16-bit value in there in network byte order as a netlink attribute. That's it. That's the whole function. This page in your Kernel API Manual is literally about nla_put_net16, and it is lowkey iconic for how small it is π
β¨ NAME β¨
nla_put_net16 β add a 16-bit network byte order netlink attribute to a socket buffer π¦
No cap, that's the whole job description. She adds, she doesn't read, she doesn't validate, she just puts π
πΈ SYNOPSIS πΈ
int nla_put_net16 (struct sk_buff *skb , int attrtype , __be16 value );
Three things in, an int out. Look at her go π«Ά
π ARGUMENTS π
skbβ the socket buffer you're adding the attribute to. Your canvas. Your group chat. Add your attribute to it πattrtypeβ the attribute type. The little label so everyone knows what this value is. iykyk π·οΈvalueβ the numeric value itself. Here's the key part bestie: it's a__be16, so it's network byte order. That's literally thenetin the name, don't come for her π
π SEE ALSO π
okay this list is long β like, unhinged long β but I promised to keep every single one so here we go, no skips, periodt. First up, the file and the structs/enums:
- Kernel file
./include/net/netlink.h struct nla_policy(9)struct nl_info(9)enum netlink_validation(9)
Then the nlmsg_* message-level 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)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)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)
Then sizing/type helpers β the little utilities that keep everything aligned and pretty:
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 nla_put_* family β yes, nla_put_net16's siblings, the whole nepo baby lineup π₯:
nla_put_u8(9)nla_put_u16(9)nla_put_be16(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 nla_get_* girlies β the read side of the story π:
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)
Finally the nesting / iteration / 64-bit-alignment crowd β the ones who make everything fit together π§:
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)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)
ok and that's genuinely all of them, I counted, we do not skip aunties in this house π
π cute sign-off π
and that's the page bestie!! straight out of ./include/net, dated October 2026, page name nla_put_net16(9), Kernel API Manual energy all the way through π go forth and put your 16 bits, in network byte order, respectfully π
β¨
π¦ 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