nlmsg_multicast_filtered(9)
π nlmsg_multicast_filtered β the group-chat broadcast, but for netlink
Okay so bestie, real talk: this is nlmsg_multicast_filtered, straight out of the Kernel API Manual, section 9. It's the netlink multicast girlie who also runs a filter function before the message goes out. Like a group chat where you get to mute certain people before hitting send. Iconic behaviour, honestly.
β¨ NAME β¨
nlmsg_multicast_filtered β multicast a netlink message with filter function π
π SYNOPSIS π
int nlmsg_multicast_filtered (struct sock *sk , struct sk_buff *skb ,
u32 portid , unsigned int group , gfp_t flags , netlink_filter_fn filter
, void *filter_data );
That's a whole lot of arguments, I know, but stay with me β they're all getting their own little moment below. π«Ά
πΈ ARGUMENTS πΈ
skβ the netlink socket you're spreading messages to. This is the main character socket, no cap.skbβ the netlink message itself, chilling there as a socket buffer.portidβ your own netlink portid. Babes, you pass this so the kernel doesn't accidentally send the message back to you. We love a self-awareness moment. πgroupβ the multicast group id. Basically which group chat this lands in.flagsβ allocation flags. The boring-but-necessary bits.filterβ the filter function. The bouncer at the door, the vibe check, the "are you actually on the list" energy. π₯filter_dataβ private data that gets handed to the filter function. Just forfilter. Nobody else's business. π
β RETURN β
0 on success π β and a negative error code if it flops π.
π¦ SEE ALSO π¦
Genuinely obsessed with how long this list is. Grab a snack, bestie β the whole family is here. π
The netlink header & pals
- Kernel file
./include/net/netlink.h struct nla_policy(9)struct nl_info(9)enum netlink_validation(9)
nlmsg_* girlies (the fact-checkers)
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)
nlmsg_*parse* and validation crew
__nlmsg_parse(9),nlmsg_parse(9),nlmsg_parse_deprecated(9),nlmsg_parse_deprecated_strict(9),nlmsg_find_attr(9),nlmsg_validate_deprecated(9)
nla_parse* / nla_validate* squad
nla_parse(9),nla_parse_deprecated(9),nla_parse_deprecated_strict(9),nla_validate_deprecated(9),nla_validate(9)
bookkeeping & sending
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(9),nlmsg_unicast(9),nlmsg_for_each_msg(9)
dump & attribute helpers
nl_dump_check_consistent(9),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)
the nla_put_* putters (yes, all of them π)
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)
the nla_get_* getters (even more of them π)
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, padding & iteration 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),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)
ngl bestie, if you're here just for the multicast part, nlmsg_multicast(9) is the no-filter version. This page is the one that actually does the vibe check. π§
That's the whole page, and it lives in <code>./include/net</code>, dated <strong>October 2026</strong>. Go forth and multicast responsibly, my love β mwah πβ¨π
π¦ 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