When setting the default routing table for bgpd make sure that ktable_exists() does not fail. Also improve the warning message in ktable_exists() a bit.
-- :wq Claudio Index: kroute.c =================================================================== RCS file: /cvs/src/usr.sbin/bgpd/kroute.c,v retrieving revision 1.246 diff -u -p -r1.246 kroute.c --- kroute.c 23 May 2022 13:40:12 -0000 1.246 +++ kroute.c 2 Jun 2022 08:59:10 -0000 @@ -440,7 +440,7 @@ ktable_exists(u_int rtableid, u_int *rdo if (errno == ENOENT) /* table nonexistent */ return (0); - log_warn("%s: sysctl", __func__); + log_warn("sysctl net.route.rtableid"); /* must return 0 so that the table is considered non-existent */ return (0); } Index: parse.y =================================================================== RCS file: /cvs/src/usr.sbin/bgpd/parse.y,v retrieving revision 1.425 diff -u -p -r1.425 parse.y --- parse.y 31 May 2022 09:45:33 -0000 1.425 +++ parse.y 2 Jun 2022 08:53:43 -0000 @@ -3496,7 +3496,9 @@ init_config(struct bgpd_config *c) c->bgpid = get_bgpid(); c->fib_priority = RTP_BGP; c->default_tableid = getrtable(); - ktable_exists(c->default_tableid, &rdomid); + if (!ktable_exists(c->default_tableid, &rdomid)) + fatalx("current routing table %u does not exist", + c->default_tableid); if (rdomid != c->default_tableid) fatalx("current routing table %u is not a routing domain", c->default_tableid);