You can run multiple copies of bgpd in seperate rdomains.
authorbenno <benno@openbsd.org>
Tue, 10 Jul 2018 12:40:41 +0000 (12:40 +0000)
committerbenno <benno@openbsd.org>
Tue, 10 Jul 2018 12:40:41 +0000 (12:40 +0000)
However, the processes will see each others route messages. Some
structures are not initialized correctly for that, causing at least
useless log messages.

This is an attempt to use the default_tableid where its needed.

A few hardcoded uses of rtable 0 remain.

ok claudio@

usr.sbin/bgpd/bgpd.c
usr.sbin/bgpd/bgpd.h
usr.sbin/bgpd/parse.y

index 44ba070..03dec71 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: bgpd.c,v 1.192 2018/02/10 01:24:28 benno Exp $ */
+/*     $OpenBSD: bgpd.c,v 1.193 2018/07/10 12:40:41 benno Exp $ */
 
 /*
  * Copyright (c) 2003, 2004 Henning Brauer <henning@openbsd.org>
@@ -500,7 +500,7 @@ reconfigure(char *conffile, struct bgpd_config *conf, struct peer **peer_l)
        }
 
        /* networks go via kroute to the RDE */
-       if (kr_net_reload(0, &conf->networks))
+       if (kr_net_reload(conf->default_tableid, &conf->networks))
                return (-1);
 
        /* prefixsets for filters in the RDE */
index 01eee6b..f18dcf4 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: bgpd.h,v 1.320 2018/06/29 11:45:50 claudio Exp $ */
+/*     $OpenBSD: bgpd.h,v 1.321 2018/07/10 12:40:41 benno Exp $ */
 
 /*
  * Copyright (c) 2003, 2004 Henning Brauer <henning@openbsd.org>
@@ -340,7 +340,7 @@ struct peer_config {
 #define PEERFLAG_LOG_UPDATES   0x02
 
 enum network_type {
-       NETWORK_DEFAULT,
+       NETWORK_DEFAULT,        /* from network statements */
        NETWORK_STATIC,
        NETWORK_CONNECTED,
        NETWORK_RTLABEL,
index 2b845b5..2257473 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: parse.y,v 1.326 2018/07/10 09:55:14 benno Exp $ */
+/*     $OpenBSD: parse.y,v 1.327 2018/07/10 12:40:41 benno Exp $ */
 
 /*
  * Copyright (c) 2002, 2003, 2004 Henning Brauer <henning@openbsd.org>
@@ -2994,9 +2994,10 @@ parse_config(char *filename, struct bgpd_config *xconf, struct peer **xpeers)
 
        netconf = &conf->networks;
 
-       /* the Adj-RIB-In/Out have no fib so no need to set the tableid */
-       add_rib("Adj-RIB-In", 0, F_RIB_NOFIB | F_RIB_NOEVALUATE);
-       add_rib("Adj-RIB-Out", 0, F_RIB_NOFIB | F_RIB_NOEVALUATE);
+       add_rib("Adj-RIB-In", conf->default_tableid,
+           F_RIB_NOFIB | F_RIB_NOEVALUATE);
+       add_rib("Adj-RIB-Out", conf->default_tableid,
+           F_RIB_NOFIB | F_RIB_NOEVALUATE);
        add_rib("Loc-RIB", conf->default_tableid, F_RIB_LOCAL);
 
        if ((file = pushfile(filename, 1)) == NULL) {
@@ -3586,8 +3587,8 @@ add_rib(char *name, u_int rtableid, u_int16_t flags)
                        free(rr);
                        return (-1);
                }
-               rr->rtableid = rtableid;
        }
+       rr->rtableid = rtableid;
        SIMPLEQ_INSERT_TAIL(&ribnames, rr, entry);
        return (0);
 }