On Mon, Dec 03, 2018 at 09:19:10PM +0100, Denis Fondras wrote:
> On Mon, Dec 03, 2018 at 05:59:26PM +0100, Julien Dhaille wrote:
> > Hi. I am using bgpd within a rdomain (1).
> > After the upgrade to 6.4 stable, I can’t announce prefixes anymore via
> > bgpctl :
> >
> > router# ps aux -o rtable|grep bgp
> >
> > root 4039 0.0 0.1 300 1292 p0 S+p 5:12PM 0:00.00 grep
> > bgp 0
> > root 68170 0.0 0.2 1056 2060 p2 I+ 4:52PM 0:00.01 bgpd
> > -dvv 1
> > _bgpd 80238 0.0 0.4 4160 4264 p2 I+p 4:52PM 0:00.01 bgpd:
> > route deci 1
> > _bgpd 26255 0.0 0.2 1456 2164 p2 S+p 4:52PM 0:00.04 bgpd:
> > session en 1
> >
> > router# route -T1 exec bgpctl network add 10.0.0.1/32 nexthop 10.0.0.20
> > prepend-self 11
> > or
> > router# route -T1 exec bgpctl -s /var/run/bgpd.sock.1 network add
> > 10.0.0.1/32 nexthop 10.0.0.20 prepend-self 11
> >
> > results in :
> >
> > network_add: prefix 10.0.0.1/32 in non-existing rdomain 0
> >
> > Am I missing a change or something ?
> >
>
> rde.c,v1.389 from Jul 10, 2018 introduced this "regression".
>
> Can you try this diff :
>
Well, a bit too fast...
Index: bgpctl.c
===================================================================
RCS file: /cvs/src/usr.sbin/bgpctl/bgpctl.c,v
retrieving revision 1.224
diff -u -p -r1.224 bgpctl.c
--- bgpctl.c 28 Nov 2018 08:33:59 -0000 1.224
+++ bgpctl.c 3 Dec 2018 20:24:41 -0000
@@ -101,6 +101,7 @@ const char *print_auth_method(enum auth_
struct imsgbuf *ibuf;
struct mrt_parser show_mrt = { show_mrt_dump, show_mrt_state, show_mrt_msg };
struct mrt_parser net_mrt = { network_mrt_dump, NULL, NULL };
+int tableid;
__dead void
usage(void)
@@ -116,7 +117,7 @@ int
main(int argc, char *argv[])
{
struct sockaddr_un sun;
- int fd, n, done, ch, nodescr = 0, verbose = 0, r;
+ int fd, n, done, ch, nodescr = 0, verbose = 0;
struct imsg imsg;
struct network_config net;
struct parse_result *res;
@@ -128,8 +129,8 @@ main(int argc, char *argv[])
if (pledge("stdio rpath wpath cpath unix inet dns", NULL) == -1)
err(1, "pledge");
- r = getrtable();
- if (asprintf(&sockname, "%s.%d", SOCKET_NAME, r) == -1)
+ tableid = getrtable();
+ if (asprintf(&sockname, "%s.%d", SOCKET_NAME, tableid) == -1)
err(1, "asprintf");
while ((ch = getopt(argc, argv, "ns:")) != -1) {
@@ -345,6 +346,7 @@ main(int argc, char *argv[])
bzero(&net, sizeof(net));
net.prefix = res->addr;
net.prefixlen = res->prefixlen;
+ net.rtableid = tableid;
/* attribute sets are not supported */
if (res->action == NETWORK_ADD) {
imsg_compose(ibuf, IMSG_NETWORK_ADD, 0, 0, -1,
@@ -1981,6 +1983,7 @@ network_bulk(struct parse_result *res)
errx(1, "bad prefix: %s", b);
net.prefix = h;
net.prefixlen = len;
+ net.rtableid = tableid;
if (res->action == NETWORK_BULK_ADD) {
imsg_compose(ibuf, IMSG_NETWORK_ADD,