PIM6SD(8)

πŸ“¦ version 0-unstable-2024-12, in nixos 26.05, nixpkgs unstable

πŸ’– pim6sd(8) πŸ’–

okay so bestie, welcome to the System Manager's Manual page for pim6sd β€” yes it's a real one, yes it's from KAME, and yes we're gonna get through it together 🫢


✨ NAME ✨

pim6sd β€” the PIM for IPv6 sparse mode daemon. that's it, that's the whole name. icon behavior πŸ’…


✨ SYNOPSIS ✨

pim6sd [-hn] [-f FILE] [-d LEVEL[,LEVEL]]

look at that syntax. so clean. so crunchy. go off πŸ‘‘


🌸 DESCRIPTION 🌸

okay so pim6sd is an IPv6 multicast routing daemon, and she is booked and busy. she supports PIMv2 (that's Protocol Independent Multicast Version 2) sparse mode and SSM (Source-Specific-Multicast), both for IPv6. no cap, she does both πŸ”₯

πŸŽ€ the options she ships with πŸŽ€

  • -d β€” specify debug levels. -d all turns on every single one (main character energy fr). you can also pick just a subset of the messages you want printed by passing them as arguments, separated by commas β€” no space between them, i repeat, no space 😭. the valid debug levels are:
mld_proto, mld_timer, mld_member, mld, switch, trace,
                mtrace, traceroute,
timeout, callout, pkt, packets, interfaces, vif, kernel,
                cache, mfc,
k_cache, k_mfc, rsrr, pim_detail, pim_hello,
                pim_neighbors, pim_register,
registers, pim_join_prune, pim_j_p, pim_jp, pim_bootstrap,
                pim_bsr, bsr,
bootstrap, pim_asserts, pim_cand_rp, pim_c_rp, pim_rp, rp,
                pim_routes,
pim_routing, pim_mrt, pim_timers, pim_rpf, rpf, pim,
                routes, routing,
mrt, routers, mrouters, neighbors, timers, asserts

like… the whole alphabet soup of debugging, and honestly? we love a thorough queen πŸ’œ

  • -f FILE β€” points her at an alternate location for the configuration file. if you don't say anything, she defaults to /etc/pim6sd.conf πŸ“
  • -h β€” prints a help message and exits. the classic "hey bestie what do i do" flag 🌸
  • -n β€” do not become daemon, run in foreground. this one's for when you're starting her from service monitors like systemd or Finit. she stays in the room with you instead of running off πŸ™ˆ

so here's the tea β˜• β€” pim6sd automatically configures itself to forward on all multicast-capable interfaces, meaning interfaces that have the IFF_MULTICAST flag set. but she's got standards: she excludes the "loopback interface" and any interfaces that don't have an IPv6 address. not her type, sorry babe πŸ’…

wanna override that default configuration? just drop configuration commands in /etc/pim6sd.conf (or whatever alternative file you gave her with the -f FILE option). you're the boss 🫢

now if the multicast group address happens to be within the SSM range β€” that's ff20::/12 and ff30::/12 β€” then pim6sd will behave as an SSM routing daemon: speaking MLDv2 toward hosts and using only the Shortest Path Tree for these multicast addresses. periodt.

heads up bestie: pim6sd ignores interfaces that do not have an IPv6 address. such interfaces should not appear in the configuration file. don't set her up to fail 😭

πŸ¦‹ signals & dumping πŸ¦‹

the pim6sd program dumps its current routing information to a dump file when it receives a SIGUSR1 signal. what's in the dump? a whole little scrapbook: a list of PIM neighbors, pim6sd's internal multicast routing table, and BSR and RP related information ✨

also!! she dumps her internal statistics to a file when she receives a SIGINFO signal. she's an open book, we stan πŸ’–

when pim6sd receives a SIGHUP signal she restarts and rereads her configuration file. SIGUSR2 can also be used, but plot twist: that one also resets the debug level. choose wisely 😌

and the log level? configurable via the -d command line option or the configuration file. both work. she's flexible like that 🌈


πŸ’€ FILES πŸ’€

  • /etc/pim6sd.conf β€” the default configuration file πŸŽ€
  • /var/run/pim6sd.dump β€” the file to which pim6sd dumps its internal status
  • /var/run/pim6sd.stat β€” the file to which pim6sd dumps its internal statistics

⭐ SIGNALS ⭐

  • SIGHUP β€” reload the configuration file and restart πŸ”„
  • SIGUSR1 β€” dump internal status to the dump file

πŸ‘‘ SEE ALSO πŸ‘‘

daemon(3), pim6sd.conf(5)

go read those next, i'm literally begging you 🫢


🌈 HISTORY 🌈

the pim6sd command is developed by Mickael Hoerdt at LSIIT Laboratory. give her dad his flowers πŸ’

she's based on the IPv4 PIM sparse-mode pimd developed at the University of Southern California, which has also been derived from mrouted. and mrouted is COPYRIGHT 1989 by The Board of Trustees of Leland Stanford Junior University. a whole multigenerational lineage, iykyk 🧚


πŸ™ˆ BUGS πŸ™ˆ

  • pim6sd does not contain any unicast routing engine, so a unicast routing daemon needs to be running on the system. she can't do everything, bestie 😭
  • the kernel unicast routing table is periodically polled by pim6sd in order to follow changes of existing unicast routes. she's checking in on you. constantly.
  • pim6sd must be used on an IPv6 router. be sure to set the net.inet6.ip6.forwarding variable to 1 with sysctl(8). not optional, no cap πŸ”₯
  • pim6sd requires the node running the daemon to have an IPv6 global address. she's not doing local-only, sorry πŸ’…
  • pim6sd does not work properly when an interface is dynamically added or deleted (e.g. ifconfig gif0 create). so like… don't do that to her πŸ™ˆ

and that's the whole page, bestie!! πŸ’– this lil time capsule is brought to you by KAME, dated June 10, 1999 β€” she's vintage, she's iconic, she's pim6sd(8) πŸŽ€βœ¨πŸ¦‹

πŸ“¦ where this page comes from