Re: bgpd, retire F_RTLABEL flag
On Tue, Jun 07, 2022 at 05:47:52PM +0200, Theo Buehler wrote: > On Tue, Jun 07, 2022 at 05:09:30PM +0200, Claudio Jeker wrote: > > The F_RTLABEL flag does nothing. So just remove it. > > Checking the rtlabelid != 0 is equivalent. > > Doesn't twiddling the F_RTLABEL potentially change the outcome of the two > > if (flags != oflags) > changed = 1; > > bits in dispatch_rtmsg_addr()? If that's not a concern or if it's desired, > then this is ok. Nice find. "changes" is only used once: if (kr->r.flags & F_NEXTHOP && changed) knexthop_track(kt, kr); So this triggers a check for nexthops that depend on this route. rtlabels have no influence on this check so the side-effect so this actually fixes some inefficency. > Two minor nits below. Ah, yes those checks. I have those fixed in a different tree. I should probably remove them right now as well. > > -- > > :wq Claudio > > > > Index: bgpd.h > > === > > RCS file: /cvs/src/usr.sbin/bgpd/bgpd.h,v > > retrieving revision 1.426 > > diff -u -p -r1.426 bgpd.h > > --- bgpd.h 5 Jun 2022 12:43:13 - 1.426 > > +++ bgpd.h 7 Jun 2022 15:04:14 - > > @@ -90,7 +90,6 @@ > > #defineF_CTL_ADJ_IN0x2000 /* only set on requests */ > > #defineF_CTL_ADJ_OUT 0x4000 /* only set on requests */ > > #defineF_CTL_BEST 0x8000 > > -#defineF_RTLABEL 0x1 > > #defineF_CTL_SSV 0x2 /* only used by bgpctl */ > > #defineF_CTL_INVALID 0x4 /* only set on requests */ > > #defineF_CTL_OVS_VALID 0x8 > > Index: kroute.c > > === > > RCS file: /cvs/src/usr.sbin/bgpd/kroute.c,v > > retrieving revision 1.248 > > diff -u -p -r1.248 kroute.c > > --- kroute.c5 Jun 2022 12:43:13 - 1.248 > > +++ kroute.c7 Jun 2022 15:05:00 - > > @@ -3268,7 +3268,6 @@ fetchtable(struct ktable *kt) > > kr->r.labelid = 0; > > if ((label = (struct sockaddr_rtlabel *) > > rti_info[RTAX_LABEL]) != NULL) { > > - kr->r.flags |= F_RTLABEL; > > kr->r.labelid = > > rtlabel_name2id(label->sr_label); > > } > > @@ -3309,7 +3308,6 @@ fetchtable(struct ktable *kt) > > kr6->r.labelid = 0; > > if ((label = (struct sockaddr_rtlabel *) > > rti_info[RTAX_LABEL]) != NULL) { > > - kr6->r.flags |= F_RTLABEL; > > kr6->r.labelid = > > rtlabel_name2id(label->sr_label); > > } > > @@ -3702,15 +3700,12 @@ dispatch_rtmsg_addr(struct rt_msghdr *rt > > rtlabel_name2id(label->sr_label); > > if (kr->r.labelid != new_labelid) { > > rtlabel_unref(kr->r.labelid); > > - kr->r.labelid = 0; > > - flags |= F_RTLABEL; > > kr->r.labelid = new_labelid; > > rtlabel_changed = 1; > > } > > } else if (kr->r.labelid && label == NULL) { > > The 'else' corresponds to an 'if (label != NULL)' check, so the > '&& label == NULL' part could go without changing the logic. > > > rtlabel_unref(kr->r.labelid); > > kr->r.labelid = 0; > > - flags &= ~F_RTLABEL; > > rtlabel_changed = 1; > > } > > > > @@ -3760,7 +3755,6 @@ add4: > > kr->r.priority = prio; > > > > if (label) { > > - kr->r.flags |= F_RTLABEL; > > kr->r.labelid = > > rtlabel_name2id(label->sr_label); > > } > > @@ -3809,14 +3803,12 @@ add4: > > if (kr6->r.labelid != new_labelid) { > > rtlabel_unref(kr6->r.labelid); > > kr6->r.labelid = 0; > > - flags |= F_RTLABEL; > > kr6->r.labelid = new_labelid; > > rtlabel_changed = 1; > > } > > } else if (kr6->r.labelid && label == NULL) { > > ditto re label == NULL. > > >
Re: bgpd, retire F_RTLABEL flag
On Tue, Jun 07, 2022 at 05:09:30PM +0200, Claudio Jeker wrote: > The F_RTLABEL flag does nothing. So just remove it. > Checking the rtlabelid != 0 is equivalent. Doesn't twiddling the F_RTLABEL potentially change the outcome of the two if (flags != oflags) changed = 1; bits in dispatch_rtmsg_addr()? If that's not a concern or if it's desired, then this is ok. Two minor nits below. > -- > :wq Claudio > > Index: bgpd.h > === > RCS file: /cvs/src/usr.sbin/bgpd/bgpd.h,v > retrieving revision 1.426 > diff -u -p -r1.426 bgpd.h > --- bgpd.h5 Jun 2022 12:43:13 - 1.426 > +++ bgpd.h7 Jun 2022 15:04:14 - > @@ -90,7 +90,6 @@ > #define F_CTL_ADJ_IN0x2000 /* only set on requests */ > #define F_CTL_ADJ_OUT 0x4000 /* only set on requests */ > #define F_CTL_BEST 0x8000 > -#define F_RTLABEL 0x1 > #define F_CTL_SSV 0x2 /* only used by bgpctl */ > #define F_CTL_INVALID 0x4 /* only set on requests */ > #define F_CTL_OVS_VALID 0x8 > Index: kroute.c > === > RCS file: /cvs/src/usr.sbin/bgpd/kroute.c,v > retrieving revision 1.248 > diff -u -p -r1.248 kroute.c > --- kroute.c 5 Jun 2022 12:43:13 - 1.248 > +++ kroute.c 7 Jun 2022 15:05:00 - > @@ -3268,7 +3268,6 @@ fetchtable(struct ktable *kt) > kr->r.labelid = 0; > if ((label = (struct sockaddr_rtlabel *) > rti_info[RTAX_LABEL]) != NULL) { > - kr->r.flags |= F_RTLABEL; > kr->r.labelid = > rtlabel_name2id(label->sr_label); > } > @@ -3309,7 +3308,6 @@ fetchtable(struct ktable *kt) > kr6->r.labelid = 0; > if ((label = (struct sockaddr_rtlabel *) > rti_info[RTAX_LABEL]) != NULL) { > - kr6->r.flags |= F_RTLABEL; > kr6->r.labelid = > rtlabel_name2id(label->sr_label); > } > @@ -3702,15 +3700,12 @@ dispatch_rtmsg_addr(struct rt_msghdr *rt > rtlabel_name2id(label->sr_label); > if (kr->r.labelid != new_labelid) { > rtlabel_unref(kr->r.labelid); > - kr->r.labelid = 0; > - flags |= F_RTLABEL; > kr->r.labelid = new_labelid; > rtlabel_changed = 1; > } > } else if (kr->r.labelid && label == NULL) { The 'else' corresponds to an 'if (label != NULL)' check, so the '&& label == NULL' part could go without changing the logic. > rtlabel_unref(kr->r.labelid); > kr->r.labelid = 0; > - flags &= ~F_RTLABEL; > rtlabel_changed = 1; > } > > @@ -3760,7 +3755,6 @@ add4: > kr->r.priority = prio; > > if (label) { > - kr->r.flags |= F_RTLABEL; > kr->r.labelid = > rtlabel_name2id(label->sr_label); > } > @@ -3809,14 +3803,12 @@ add4: > if (kr6->r.labelid != new_labelid) { > rtlabel_unref(kr6->r.labelid); > kr6->r.labelid = 0; > - flags |= F_RTLABEL; > kr6->r.labelid = new_labelid; > rtlabel_changed = 1; > } > } else if (kr6->r.labelid && label == NULL) { ditto re label == NULL. > rtlabel_unref(kr6->r.labelid); > kr6->r.labelid = 0; > - flags &= ~F_RTLABEL; > rtlabel_changed = 1; > } > > @@ -3870,7 +3862,6 @@ add6: > kr6->r.priority = prio; > > if (label) { > - kr6->r.flags |= F_RTLABEL; > kr6->r.labelid = > rtlabel_name2id(label->sr_label); > } >
bgpd, retire F_RTLABEL flag
The F_RTLABEL flag does nothing. So just remove it. Checking the rtlabelid != 0 is equivalent. -- :wq Claudio Index: bgpd.h === RCS file: /cvs/src/usr.sbin/bgpd/bgpd.h,v retrieving revision 1.426 diff -u -p -r1.426 bgpd.h --- bgpd.h 5 Jun 2022 12:43:13 - 1.426 +++ bgpd.h 7 Jun 2022 15:04:14 - @@ -90,7 +90,6 @@ #defineF_CTL_ADJ_IN0x2000 /* only set on requests */ #defineF_CTL_ADJ_OUT 0x4000 /* only set on requests */ #defineF_CTL_BEST 0x8000 -#defineF_RTLABEL 0x1 #defineF_CTL_SSV 0x2 /* only used by bgpctl */ #defineF_CTL_INVALID 0x4 /* only set on requests */ #defineF_CTL_OVS_VALID 0x8 Index: kroute.c === RCS file: /cvs/src/usr.sbin/bgpd/kroute.c,v retrieving revision 1.248 diff -u -p -r1.248 kroute.c --- kroute.c5 Jun 2022 12:43:13 - 1.248 +++ kroute.c7 Jun 2022 15:05:00 - @@ -3268,7 +3268,6 @@ fetchtable(struct ktable *kt) kr->r.labelid = 0; if ((label = (struct sockaddr_rtlabel *) rti_info[RTAX_LABEL]) != NULL) { - kr->r.flags |= F_RTLABEL; kr->r.labelid = rtlabel_name2id(label->sr_label); } @@ -3309,7 +3308,6 @@ fetchtable(struct ktable *kt) kr6->r.labelid = 0; if ((label = (struct sockaddr_rtlabel *) rti_info[RTAX_LABEL]) != NULL) { - kr6->r.flags |= F_RTLABEL; kr6->r.labelid = rtlabel_name2id(label->sr_label); } @@ -3702,15 +3700,12 @@ dispatch_rtmsg_addr(struct rt_msghdr *rt rtlabel_name2id(label->sr_label); if (kr->r.labelid != new_labelid) { rtlabel_unref(kr->r.labelid); - kr->r.labelid = 0; - flags |= F_RTLABEL; kr->r.labelid = new_labelid; rtlabel_changed = 1; } } else if (kr->r.labelid && label == NULL) { rtlabel_unref(kr->r.labelid); kr->r.labelid = 0; - flags &= ~F_RTLABEL; rtlabel_changed = 1; } @@ -3760,7 +3755,6 @@ add4: kr->r.priority = prio; if (label) { - kr->r.flags |= F_RTLABEL; kr->r.labelid = rtlabel_name2id(label->sr_label); } @@ -3809,14 +3803,12 @@ add4: if (kr6->r.labelid != new_labelid) { rtlabel_unref(kr6->r.labelid); kr6->r.labelid = 0; - flags |= F_RTLABEL; kr6->r.labelid = new_labelid; rtlabel_changed = 1; } } else if (kr6->r.labelid && label == NULL) { rtlabel_unref(kr6->r.labelid); kr6->r.labelid = 0; - flags &= ~F_RTLABEL; rtlabel_changed = 1; } @@ -3870,7 +3862,6 @@ add6: kr6->r.priority = prio; if (label) { - kr6->r.flags |= F_RTLABEL; kr6->r.labelid = rtlabel_name2id(label->sr_label); }