This repository contains the artifacts we used for our paper called Intradomain Multicast Routing for Modern Routers, published at ANRW 2026.
IP multicast was designed in an era of software-based routers, when forwarding state lived in expandable RAM. Today, multicast relies on hardware for efficient replication of packets across interfaces, which has hard, fixed limits on the number of multicast forwarding entries it may hold. We argue that the limited available multicast state calls for a redefinition of the multicast protocol stack.
In our paper, we survey multicast forwarding-state capacity across ISP core routers and enterprise routers to highlight their hardware limits. We then propose to extend existing routing protocols (OSPF and IS-IS) to expose the hardware replication capacities of nodes to the control plane. Building on these exposed capacities, we propose a capacity-aware path-selection algorithm for PIM-SSM based on Shortest Widest Path (SWP), allowing to load-balance multicast joins over paths with remaining multicast hardware entries. Our results show that, by exposing multicast capacities, we can not only improve the join acceptance rate by up to 22%, but our solution also allows to reach a two times higher join rate without rejecting any join. By increasing the join acceptance rate, more concurrent multicast flows can coexist in networks.
Our artifacts are organised as follows:
sim: directory containing all the code related to the simulation.sim/swp_sim.py: Core code of the simulator, which generates groups, joins and track multicast state usage across routerssim/run_sweep.py: run our simulator with varying parameterssim/stats.py: show some statistics about the resultssim/all.sh: run all our experiments, allowing to reproduce the obtained results
plot: directory containing all the code related to plotting.plot/plot_paper.py: generate all the results plots of the paper, taking as input the csv generated bysim/all.shplot/plot_capacity.py: generate the plot showcasing the number of multicast entries for various routers
results: directory containing all the CSV files produced by our simulationsdata: directory containing the topologies we used for the paperfigures: directory containing the raw figures we used in the paper
To rerun our experiments, simply run sim/all.sh. This script will relaunch all our experiments, and save the results in dedicated csv files in the results directory.
Once simulations have been run, you can plot the results with the following commands:
python3 plot/plot_capacity.py
python3 plot/plot_paper.pyYou can cite this paper from the associated page
# BibTex here