On Fri, Dec 28, 2018 at 07:50:08PM +0100, Denis Fondras wrote: > On Fri, Dec 28, 2018 at 06:08:16PM +0100, Klemens Nanni wrote: > > On Fri, Dec 28, 2018 at 05:21:02PM +0100, Denis Fondras wrote: > > > int > > > +krVPN6_change(struct ktable *kt, struct kroute_full *kl, u_int8_t > > > fib_prio) > > > +{ > > > + struct kroute6_node *kr6; > > > + struct in6_addr lo6 = IN6ADDR_LOOPBACK_INIT; > > > + int action = RTM_ADD; > > > + u_int32_t mplslabel = 0; > > > + u_int16_t labelid; > > > + > > > + if ((kr6 = kroute6_find(kt, &kl->prefix.vpn6.addr, kl->prefixlen, > > > + fib_prio)) != NULL) > > > + action = RTM_CHANGE; > > Can this be moved below the conditional returns or does kroute6_find() > > have side effects? `actions' is not used until much later. > > > > > + /* nexthop to loopback -> ignore silently */ > > > + if (IN6_IS_ADDR_LOOPBACK(&kl->nexthop.v6)) > > > + return (0); > > > + > > > + /* only single MPLS label are supported for now */ > > > + if (kl->prefix.vpn6.labellen != 3) { > > > + log_warnx("%s: %s/%u has not a single label", __func__, > > > + log_addr(&kl->prefix), kl->prefixlen); > > > + return (0); > > > + } > > Here. > > > > > + mplslabel = (kl->prefix.vpn6.labelstack[0] << 24) | > > > + (kl->prefix.vpn6.labelstack[1] << 16) | > > > + (kl->prefix.vpn6.labelstack[2] << 8); > > > + mplslabel = htonl(mplslabel); > > > + > > > + /* for blackhole and reject routes nexthop needs to be ::1 */ > > > + if (kl->flags & (F_BLACKHOLE|F_REJECT)) > > > + bcopy(&lo6, &kl->nexthop.v6, sizeof(kl->nexthop.v6)); > > > + > > > + labelid = rtlabel_name2id(kl->label); > > Or even here right before it's used. `kr6' is not used above. > > > > > + if (action == RTM_ADD) { > > Yes, we can, it may save a few cycles. Here is a diff to update the current > revision (I updated my MPLS diff with similar change). > > Index: kroute.c > =================================================================== > RCS file: /cvs/src/usr.sbin/bgpd/kroute.c,v > retrieving revision 1.226 > diff -u -p -r1.226 kroute.c > --- kroute.c 6 Dec 2018 13:04:40 -0000 1.226 > +++ kroute.c 28 Dec 2018 18:46:07 -0000 > @@ -487,10 +487,6 @@ kr4_change(struct ktable *kt, struct kro > int action = RTM_ADD; > u_int16_t labelid; > > - if ((kr = kroute_find(kt, kl->prefix.v4.s_addr, kl->prefixlen, > - fib_prio)) != NULL) > - action = RTM_CHANGE; > - > /* for blackhole and reject routes nexthop needs to be 127.0.0.1 */ > if (kl->flags & (F_BLACKHOLE|F_REJECT)) > kl->nexthop.v4.s_addr = htonl(INADDR_LOOPBACK); > @@ -501,6 +497,10 @@ kr4_change(struct ktable *kt, struct kro > > labelid = rtlabel_name2id(kl->label); > > + if ((kr = kroute_find(kt, kl->prefix.v4.s_addr, kl->prefixlen, > + fib_prio)) != NULL) > + action = RTM_CHANGE; > + > if (action == RTM_ADD) { > if ((kr = calloc(1, sizeof(struct kroute_node))) == NULL) { > log_warn("%s", __func__); > @@ -545,10 +545,6 @@ kr6_change(struct ktable *kt, struct kro > int action = RTM_ADD; > u_int16_t labelid; > > - if ((kr6 = kroute6_find(kt, &kl->prefix.v6, kl->prefixlen, fib_prio)) != > - NULL) > - action = RTM_CHANGE; > - > /* for blackhole and reject routes nexthop needs to be ::1 */ > if (kl->flags & (F_BLACKHOLE|F_REJECT)) > bcopy(&lo6, &kl->nexthop.v6, sizeof(kl->nexthop.v6)); > @@ -558,6 +554,10 @@ kr6_change(struct ktable *kt, struct kro > > labelid = rtlabel_name2id(kl->label); > > + if ((kr6 = kroute6_find(kt, &kl->prefix.v6, kl->prefixlen, fib_prio)) != > + NULL) > + action = RTM_CHANGE; > + > if (action == RTM_ADD) { > if ((kr6 = calloc(1, sizeof(struct kroute6_node))) == NULL) { > log_warn("%s", __func__); > @@ -604,10 +604,6 @@ krVPN4_change(struct ktable *kt, struct > u_int32_t mplslabel = 0; > u_int16_t labelid; > > - if ((kr = kroute_find(kt, kl->prefix.vpn4.addr.s_addr, kl->prefixlen, > - fib_prio)) != NULL) > - action = RTM_CHANGE; > - > /* nexthop within 127/8 -> ignore silently */ > if ((kl->nexthop.v4.s_addr & htonl(IN_CLASSA_NET)) == > htonl(INADDR_LOOPBACK & IN_CLASSA_NET)) > @@ -629,6 +625,10 @@ krVPN4_change(struct ktable *kt, struct > /* for blackhole and reject routes nexthop needs to be 127.0.0.1 */ > if (kl->flags & (F_BLACKHOLE|F_REJECT)) > kl->nexthop.v4.s_addr = htonl(INADDR_LOOPBACK); > + > + if ((kr = kroute_find(kt, kl->prefix.vpn4.addr.s_addr, kl->prefixlen, > + fib_prio)) != NULL) > + action = RTM_CHANGE; > > if (action == RTM_ADD) { > if ((kr = calloc(1, sizeof(struct kroute_node))) == NULL) { >
OK claudio@ -- :wq Claudio