RTSOLD(8)

πŸ“¦ version 15.1, in freebsd 14.5, freebsd 15.1

πŸ’– rtsold(8) β€” the router solicitation daemon, explained by your fave πŸŽ€

okay so bestie, this is from the System Manager's Manual section, page RTSOLD(8) β€” and no cap, it's lowkey iconic once you get past the scary name. let's get into it ✨


🌸 NAME 🌸

rtsold, rtsol β€” router solicitation daemon πŸ’…

like… it solicits routers. respectfully. on purpose.


πŸ¦‹ SYNOPSIS πŸ¦‹

rtsold [-dDfFimu1] [-M script-name] [-O script-name] [-A script-name]
       [-p pidfile] [-R script-name] interface ...
rtsold [-dDfFimu1] [-M script-name] [-O script-name] [-A script-name]
       [-p pidfile] [-R script-name] -a
rtsol [-dDiu] [-M script-name] [-O script-name] [-A script-name]
       [-R script-name] interface ...
rtsol [-dDiu] [-M script-name] [-O script-name] [-A script-name]
      [-R script-name] -a

(yes, rtsol gets a smaller flag set than rtsold β€” she's the ✨limited edition✨ version, more on that in a sec)


πŸ’œ DESCRIPTION πŸ’œ

so rtsold is the daemon program whose whole job is to send ICMPv6 Router Solicitation messages out on the interfaces you point it at 🫢. think of it like: if a node (re)attaches to a link, rtsold fires off a few Router Solicitations on that link β€” destined to the link-local scope all-routers multicast address β€” so it can discover new routers and get non link-local addresses. main character energy, fr fr πŸ‘‘

heads up: rtsold should be used on IPv6 hosts (non-router nodes) only. read that again. it's not a router thing.

if you invoke the program as rtsol, bestie, it will transmit probes from the specified interface without becoming a daemon. like, same vibes, no commitment. in other words, rtsol behaves as rtsold -f1 interfaces. periodt.


⭐ the three (3) moments she sends solicitations

specifically, rtsold sends at most 3 Router Solicitations on an interface after one of these events:

  • just after invocation of the rtsold daemon πŸ’«
  • the interface is up after a temporary interface failure 😭. rtsold detects such failures by periodically probing to see if the status of the interface is active or not. note that some network cards and drivers do not allow the extraction of link state β€” in such cases, rtsold cannot detect the change of the interface status. (not her fault, blame the driver πŸ’€)
  • every 60 seconds if the -m option is specified and the rtsold daemon cannot get the interface status ⏰. this feature does not conform to the IPv6 neighbor discovery specification, but is provided for mobile stations. the default interval for router advertisements β€” which is on the order of 10 minutes β€” is slightly long for mobile stations. so this feature is provided for such stations so they can find new routers as soon as possible when they attach to another link. thoughtful queen 🌸

once rtsold has sent a Router Solicitation, and has received a valid Router Advertisement, it refrains from sending additional solicitations on that interface β€” until the next time one of the above events occurs. she's chill like that 😌

when sending a Router Solicitation on an interface, rtsold includes a Source Link-layer address option if the interface has a link-layer address ✨


🧚 the per-interface parameter (iykyk)

rtsold manages a per-interface parameter to detect if a separate protocol is needed for configuration parameters other than host's addresses. at invocation time, the flag is FALSE, and it becomes TRUE when the daemon receives a router advertisement with the OtherConfig flag being set. a script file can be specified to deal with the case (see below πŸ‘‡). when rtsold starts resending router solicitation messages by one of the conditions events, the daemon resets the parameter β€” because the event may indicate a change on the attached link. she resets, she refreshes, she moves on πŸ’…


🩷 the dump file moment

upon receipt of signal SIGUSR1, rtsold will dump the current internal state into /var/run/rtsold.dump. journaling! we love to see it πŸŽ€


the options are as follows:

✨ OPTIONS ✨

  • -a β€” Autoprobe outgoing interfaces. rtsold will try to find any non-loopback, IPv6-capable interfaces and send router solicitation messages on all of them. she'll find them herself, bestie πŸ•΅οΈβ€β™€οΈ
  • -d β€” Enable debugging. πŸ”
  • -D β€” Enable more debugging including the printing of internal timer information. we're going deeper πŸ”₯
  • -f β€” Prevent rtsold from becoming a daemon (foreground mode). warning messages are generated to standard error instead of syslog(3). she stays right there with you 🫢
  • -F β€” Explicitly configure the kernel to accept Router Advertisements and disable IPv6 forwarding. these settings are required for proper rtsold operation. without this option, the current settings will be obeyed; if they are incompatible with proper operation, warning messages will be generated, but Router Solicitations will still be sent. the settings may be changed manually with sysctl(8) and ifconfig(8).
  • -i β€” Transmit Router Solicitation packets immediately, without waiting the normal random (between 0 and 1 second) delay. ⚑ do not use this option on networks where it might result in congestion due to many hosts simultaneously (re)connecting and sending such packets β€” not the move, ngl πŸ™ˆ
  • -m β€” Enable mobility support. if this option is specified, rtsold sends probing packets to default routers that have advertised Router Advertisements when the node (re)attaches to an interface. moreover, if the option is specified, rtsold periodically sends Router Solicitation on an interface that does not support SIOCGIFMEDIA ioctl. mobile station behavior, activated πŸ›°οΈ
  • -1 β€” Perform only one probe. transmit Router Solicitation packets until at least one valid Router Advertisement packet has arrived on each interface, then exit. one and done, she's out ✌️
  • -M script-name β€” Specifies a supplement script file to handle the Managed Configuration flag of the router advertisement. when the flag changes from FALSE to TRUE, rtsold will invoke script-name with a first argument of the receiving interface name and a second argument of the sending router address, expecting the script will then start a protocol for the managed configuration. script-name must be the absolute path from root to the script file, be a regular file, and be created by the same owner who runs rtsold. ✨rules are rules✨
  • -O script-name β€” Specifies a supplement script file to handle the Other Configuration flag of the router advertisement. when the flag changes from FALSE to TRUE, rtsold will invoke script-name with a first argument of the receiving interface name and a second argument of the sending router address, expecting the script will then start a protocol for the other configuration. the script will not be run if the Managed Configuration flag in the router advertisement is also TRUE. script-name must be the absolute path from root to the script file, be a regular file, and be created by the same owner who runs rtsold.
  • -A script-name β€” Specifies a supplement script file to always be called for the router advertisement. rtsold will invoke script-name with a first argument of the receiving interface name and a second argument of the sending router address. script-name must be the absolute path from root to the script file, be a regular file, and be created by the same owner who runs rtsold. always-on bestie energy 🫢
  • -p pidfile β€” Writes the process ID of rtsold to pidfile instead of the default PID file /var/run/rtsold.pid. custom home for the pid 🏑
  • -R script-name β€” Specifies a script to run when router advertisement options RDNSS (Recursive DNS Server) or DNSSL (DNS Search List) are encountered. the information of DNS servers and DNS search domains will be sent to standard input of this script. the resolvconf(8) script is used by default. 🌈
  • -u β€” Specifies whether to add the source address of Router Advertisement messages to the interface name in the parameters of the RDNSS and DNSSL scripts.
    • if -u is specified, the interface name in the script parameters will be ifname:slaac:[RA-source-address].
    • otherwise it will be ifname:slaac.

πŸŽ€ FILES πŸŽ€

  • /var/run/rtsold.pid β€” the PID of the currently running rtsold.
  • /var/run/rtsold.dump β€” internal state dump file.

πŸ‘‘ EXIT STATUS πŸ‘‘

the rtsold utility exits 0 on success, and >0 if an error occurs. simple. clean. slay. ✨


πŸ”₯ SEE ALSO πŸ”₯

resolvconf(8), rtadvd(8), sysctl(8) β€” go read those too, bestie, they're all part of the ecosystem πŸ’œ


🌸 HISTORY 🌸

the rtsold command is based on the rtsol command, which first appeared in WIDE/KAME IPv6 protocol stack kit. rtsol is now integrated into rtsold(8). glow-up complete, honestly πŸ¦‹


πŸ’€ BUGS πŸ’€

okay so this part is important, don't skip it:

when a network card is removed and reinserted, the corresponding interface index may change. however, rtsold assumes such changes will not occur, and always uses the index that it got at invocation. as a result, rtsold may not work if you reinsert a network card. in such a case, rtsold should be killed and restarted. 😭 (she's trying her best, but the index is locked in)

the IPv6 autoconfiguration specification assumes a single-interface host. you may see kernel error messages if you try to autoconfigure a host with multiple interfaces. also, it seems contradictory for rtsold to accept multiple interface arguments. πŸ™ˆ yeah… we know.


and that's the whole page, bestie 🫢 this one comes to you courtesy of the Debian folks, dated May 2, 2023 β€” go forth and solicit those routers responsibly πŸ’…βœ¨πŸŽ€

πŸ“¦ where this page comes from