STRUCT MR_TABLE(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

🌸 NAME 🌸

struct mr_table β€” a multicast routing table, bestie πŸ’– (and yes, it's a 9 β€” kernel API manual, section 9, we're in the big leagues now)


✨ SYNOPSIS ✨

struct mr_table {
    struct rcu_work         work;
    struct list_head        list;
    possible_net_t net;
    struct mr_table_ops     ops;
    u32 id;
    struct sock *mroute_sk;
    struct timer_list       ipmr_expire_timer;
    struct list_head        mfc_unres_queue;
    struct vif_device       vif_table[MAXVIFS];
    struct rhltable         mfc_hash;
    struct list_head        mfc_cache_list;
    int maxvif;
    u32 cache_resolve_queue_len;
    bool mroute_do_assert;
    bool mroute_do_pim;
    bool mroute_do_wrvifwhole;
    int mroute_reg_vif_num;
 };

(that last brace is indented in the source and honestly? it's got main character energy, we don't touch it 🀭)


πŸŽ€ Members πŸŽ€

okay so here's the whole roster, one by one, no skips, we don't do that here 🫢

  • work β€” used for table destruction πŸ’€ (yes it literally does the goodbye shift)
  • list β€” entry within a list of multicast routing tables β€” it's on the list, literally
  • net β€” the net where this table belongs 🌐
  • ops β€” protocol specific operations
  • id β€” identifier of the table
  • mroute_sk β€” socket associated with the table
  • ipmr_expire_timer β€” timer for handling unresolved routes ⏰
  • mfc_unres_queue β€” list of unresolved MFC entries
  • vif_table β€” array containing all possible vifs (yes, all of them, MAXVIFS of them πŸ‘‘)
  • mfc_hash β€” Hash table of all resolved routes for easy lookup πŸ”
  • mfc_cache_list β€” list of resolved routes for possible traversal (the source page spells it "resovled" and honestly same, spelling is hard, the routes are resolved though fr fr)
  • maxvif β€” Identifier of highest value vif currently in use
  • cache_resolve_queue_len β€” current size of unresolved queue
  • mroute_do_assert β€” Whether to inform userspace on wrong ingress πŸ‘€
  • mroute_do_pim β€” Whether to receive IGMP PIMv1
  • mroute_reg_vif_num β€” PIM-device vif index
heads up bestie: the struct up there also declares mroute_do_wrvifwhole, and the Members list just... doesn't explain it. it's in the struct, it's iconically undocumented, that's the vibe check. πŸ™ˆ

πŸ¦‹ SEE ALSO πŸ¦‹

go read these next, i'm obsessed with them for you:

  • Kernel file ./include/linux/mroute_base.h
  • struct vif_device(9)
  • struct mr_mfc(9)
  • struct mr_table_ops(9)

and that's the whole page, no cap ✨ this one comes straight out of ./include/linux and it's dated October 2026 β€” so like, future-dated, time-traveling kernel lore, slay πŸ’…πŸŽ€

πŸ“¦ where this page comes from