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);

Reply via email to