bgpd, network add broken with rdomains ?

classic Classic list List threaded Threaded
6 messages Options
Reply | Threaded
Open this post in threaded view
|

bgpd, network add broken with rdomains ?

Julien Dhaille-2
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 ?

thanks

Reply | Threaded
Open this post in threaded view
|

Re: bgpd, network add broken with rdomains ?

Denis Fondras
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 :

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:16:45 -0000
@@ -345,6 +345,7 @@ main(int argc, char *argv[])
  bzero(&net, sizeof(net));
  net.prefix = res->addr;
  net.prefixlen = res->prefixlen;
+ net.rtableid = r;
  /* attribute sets are not supported */
  if (res->action == NETWORK_ADD) {
  imsg_compose(ibuf, IMSG_NETWORK_ADD, 0, 0, -1,

Reply | Threaded
Open this post in threaded view
|

Re: bgpd, network add broken with rdomains ?

Denis Fondras
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,



Reply | Threaded
Open this post in threaded view
|

Re: bgpd, network add broken with rdomains ?

Julien Dhaille-3
Thank you Denis, problem solved !

Le 03/12/2018 à 21:26, Denis Fondras a écrit :

> 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,
>
>
>
--
Julien Dhaille
AS16080 / AS34913 - Dalenys Group
https://www.peeringdb.com/asn/16080


pEpkey.asc (1K) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: bgpd, network add broken with rdomains ?

Julien Dhaille-2
In reply to this post by Denis Fondras
Thank you Denis, problem solved !


Le 03/12/2018 à 21:26, Denis Fondras a écrit :

> 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,
>
>
>

Reply | Threaded
Open this post in threaded view
|

Re: bgpd, network add broken with rdomains ?

Claudio Jeker
On Tue, Dec 04, 2018 at 10:06:19PM +0100, Julien Dhaille wrote:
> Thank you Denis, problem solved !
 
Btw. Denis, this diff is OK claudio@
 

> Le 03/12/2018 à 21:26, Denis Fondras a écrit :
> > 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,
> >
> >
> >
>

--
:wq Claudio