We have never been able to remove an rtable; until claudio moved them explicitly with rtable_l2set() in if_loop.c:loop_clone_destroy(), i.e.
revision 1.90 date: 2020/01/08 09:09:10; author: claudio; state: Exp; lines: +6 -2; In loop_clone_destroy() reset the rdomain with rtable_l2set() after the if_detach() call. In if_detach() various route messages are generated and during that time the rtable_l2() mapping needs to stay. OK kn@ it would still exist but not be assigned to any valid rdomain. Back then this could be obvserved with `route -T1 ...' still "working" after having destroyed lo1. Reverting claudio's commit on -CURRENT, that is with `netstat -R' now available, confirms this: # sysctl kern.version kern.version=OpenBSD 6.8-beta (GENERIC) #0: Tue Sep 22 21:24:48 CEST 2020 kn@eru:/sys/arch/amd64/compile/GENERIC # ifconfig lo1 rdomain 1 # netstat -R Rdomain 0 Interfaces: lo0 vio0 Routing table: 0 Rdomain 1 Interface: lo1 Routing table: 1 # ifconfig lo1 destroy # netstat -R Rdomain 0 Interfaces: lo0 vio0 Routing table: 0 # route -T1 show Routing tables # echo $? 0 This is not documented anywhere and I'd certainly not expect it after reading rtable(4). The manual says we can delete rdomains and is quiet about deleting rtables, which can imply that rtables cannot be deleted but might also imply that rtables are deleted automatically when rdomains are deleted. Either way, explicit is better here, I think. Feedback? OK? Index: rdomain.4 =================================================================== RCS file: /cvs/src/share/man/man4/rdomain.4,v retrieving revision 1.14 diff -u -p -r1.14 rdomain.4 --- rdomain.4 30 Jul 2020 21:44:34 -0000 1.14 +++ rdomain.4 22 Sep 2020 19:58:57 -0000 @@ -146,3 +146,5 @@ and IPv6 support first appeared in .Sh CAVEATS No tool is available to assign more than one rtable to an rdomain other than to the default one (0). +An rtable cannot be deleted. +Deleting an rdomain will move its rtable into the default rdomain.