Sebastian Benoit([email protected]) on 2018.07.10 00:06:06 +0200:
> Claudio Jeker([email protected]) on 2018.07.10 00:05:08 +0200:
> > On Mon, Jul 09, 2018 at 11:58:05PM +0200, Sebastian Benoit wrote:
> > >
> > > compare the right things here: we want to know if the flag has changed.
> > > Found with claudios help and patience.
> > >
> > > ok?
> >
> > This is fucked up. :)
>
fixed
Index: rde.c
===================================================================
RCS file: /cvs/src/usr.sbin/bgpd/rde.c,v
retrieving revision 1.386
diff -u -p -u -1 -2 -r1.386 rde.c
--- rde.c 9 Jul 2018 14:44:02 -0000 1.386
+++ rde.c 9 Jul 2018 22:05:31 -0000
@@ -758,25 +758,25 @@ rde_dispatch_imsg_parent(struct imsgbuf
}
break;
case IMSG_RECONF_RIB:
if (imsg.hdr.len - IMSG_HEADER_SIZE !=
sizeof(struct rde_rib))
fatalx("IMSG_RECONF_RIB bad len");
memcpy(&rn, imsg.data, sizeof(rn));
rib = rib_find(rn.name);
if (rib == NULL)
rib = rib_new(rn.name, rn.rtableid, rn.flags);
else if (rib->rtableid != rn.rtableid ||
(rib->flags & F_RIB_HASNOFIB) !=
- (rib->flags & F_RIB_HASNOFIB)) {
+ (rn.flags & F_RIB_HASNOFIB)) {
struct filter_head *in_rules;
struct rib_desc *ribd = rib_desc(rib);
/*
* Big hammer in the F_RIB_HASNOFIB case but
* not often enough used to optimise it more.
* Need to save the filters so that they're not
* lost.
*/
in_rules = ribd->in_rules;
ribd->in_rules = NULL;
rde_rib_free(ribd);
rib = rib_new(rn.name, rn.rtableid, rn.flags);