STRUCT BATADV_PRIV_MCAST(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

🌸 struct batadv_priv_mcast(9) 🌸

okay so this is from the Kernel API Manual, and it's literally the per mesh interface mcast data situation β€” yes that's the whole vibe, bestie. it's the struct that holds all the multicast bookkeeping for a mesh interface. buckle up πŸ’…


✨ SYNOPSIS ✨

struct batadv_priv_mcast {
    struct hlist_head mla_list;
    struct hlist_head want_all_unsnoopables_list;
    struct hlist_head want_all_ipv4_list;
    struct hlist_head want_all_ipv6_list;
    struct hlist_head want_all_rtr4_list;
    struct hlist_head want_all_rtr6_list;
    struct batadv_mcast_mla_flags mla_flags;
    spinlock_t mla_lock;
    atomic_t num_want_all_unsnoopables;
    atomic_t num_want_all_ipv4;
    atomic_t num_want_all_ipv6;
    atomic_t num_want_all_rtr4;
    atomic_t num_want_all_rtr6;
    atomic_t num_no_mc_ptype_capa;
    spinlock_t want_lists_lock;
    struct delayed_work work;
};

like, just look at it. it's giving organized. it's giving listener energy. πŸŽ€


πŸ¦‹ Members πŸ¦‹

okay so member by member, no skips, no cap:

  • mla_list β€” the list of multicast addresses we're currently announcing via TT. our little announcement roster πŸ’–
  • want_all_unsnoopables_list β€” a list of orig_nodes wanting all unsnoopable multicast traffic. they want everything unsnoopable, iconic honestly.
  • want_all_ipv4_list β€” a list of orig_nodes wanting all IPv4 multicast traffic
  • want_all_ipv6_list β€” a list of orig_nodes wanting all IPv6 multicast traffic
  • want_all_rtr4_list β€” a list of orig_nodes wanting all routable IPv4 multicast traffic
  • want_all_rtr6_list β€” a list of orig_nodes wanting all routable IPv6 multicast traffic
  • mla_flags β€” flags for the querier, bridge and tvlv state. the state-of-mind flags 🧚
  • mla_lock β€” a lock protecting mla_list and mla_flags. protect the babies!!
  • num_want_all_unsnoopables β€” number of nodes wanting unsnoopable IP traffic
  • num_want_all_ipv4 β€” counter for items in want_all_ipv4_list
  • num_want_all_ipv6 β€” counter for items in want_all_ipv6_list
  • num_want_all_rtr4 β€” counter for items in want_all_rtr4_list
  • num_want_all_rtr6 β€” counter for items in want_all_rtr6_list
  • num_no_mc_ptype_capa β€” counter for number of nodes without the BATADV_MCAST_HAVE_MC_PTYPE_CAPA flag. not me being the node without the flag 😭
  • want_lists_lock β€” lock for protecting modifications to mcasts want_all_{unsnoopables,ipv4,ipv6}_list (traversals are rcu-locked). note the curly braces, they're doing the work for us 🫢
  • work β€” work queue callback item for multicast TT and TVLV updates. the little worker bee 🐝
lowkey important: traversals are rcu-locked while this lock covers the modifications β€” don't mix those up, that's the whole point of the parenthetical, bestie.

πŸ‘‘ SEE ALSO πŸ‘‘

Kernel file ./net/batman-adv/types.h, plus the entire extended friend group:

  • batadv_dat_addr_t(9)
  • enum batadv_dhcp_recipient(9)
  • BATADV_TT_REMOTE_MASK(9)
  • BATADV_TT_SYNC_MASK(9)
  • struct batadv_ogm_buf(9)
  • struct batadv_hard_iface_bat_iv(9)
  • enum batadv_v_hard_iface_flags(9)
  • struct batadv_hard_iface_bat_v(9)
  • enum batadv_hard_iface_wifi_flags(9)
  • struct batadv_wifi_net_device_state(9)
  • struct batadv_hard_iface(9)
  • struct batadv_orig_ifinfo_bat_iv(9)
  • struct batadv_orig_ifinfo(9)
  • struct batadv_frag_table_entry(9)
  • struct batadv_frag_list_entry(9)
  • struct batadv_vlan_tt(9)
  • struct batadv_orig_node_vlan(9)
  • struct batadv_orig_bat_iv(9)
  • struct batadv_orig_node(9)
  • enum batadv_orig_capabilities(9)
  • struct batadv_gw_node(9)
  • struct batadv_hardif_neigh_node_bat_v(9)
  • struct batadv_hardif_neigh_node(9)
  • struct batadv_neigh_node(9)
  • struct batadv_neigh_ifinfo_bat_iv(9)
  • struct batadv_neigh_ifinfo_bat_v(9)
  • struct batadv_neigh_ifinfo(9)
  • struct batadv_bcast_duplist_entry(9)
  • enum batadv_counters(9)
  • struct batadv_priv_tt(9)
  • struct batadv_priv_bla(9)
  • struct batadv_priv_gw(9)
  • struct batadv_priv_tvlv(9)
  • struct batadv_priv_dat(9)
  • struct batadv_mcast_querier_state(9)
  • struct batadv_mcast_mla_flags(9)
  • struct batadv_tp_unacked(9)
  • struct batadv_tp_vars_common(9)
  • struct batadv_tp_sender_cc(9)
  • struct batadv_tp_sender(9)
  • struct batadv_tp_receiver(9)
  • struct batadv_meshif_vlan(9)
  • struct batadv_priv_bat_v(9)
  • struct batadv_priv(9)
  • enum batadv_bla_backbone_gw_state(9)
  • struct batadv_bla_backbone_gw(9)
  • struct batadv_bla_claim(9)
  • struct batadv_tt_common_entry(9)
  • struct batadv_tt_local_entry(9)
  • struct batadv_tt_global_entry(9)
  • struct batadv_tt_orig_list_entry(9)
  • struct batadv_tt_change_node(9)
  • struct batadv_tt_req_node(9)
  • struct batadv_tt_roam_node(9)
  • struct batadv_skb_cb(9)
  • struct batadv_forw_packet(9)
  • struct batadv_algo_iface_ops(9)
  • struct batadv_algo_neigh_ops(9)
  • struct batadv_algo_orig_ops(9)
  • struct batadv_algo_gw_ops(9)
  • struct batadv_algo_ops(9)
  • struct batadv_dat_entry(9)
  • struct batadv_hw_addr(9)
  • struct batadv_dat_candidate(9)
  • struct batadv_tvlv_container(9)
  • struct batadv_tvlv_handler(9)
  • enum batadv_tvlv_handler_flags(9)

and that's the whole page, bestie, we ate and left no crumbs πŸ’…βœ¨

source/version is ./net/batman-adv and it's dated October 2026, so yeah β€” go read the rest of the manual, struct batadv_priv_mcast(9) out πŸ«ΆπŸ’–

πŸ“¦ where this page comes from