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) {

Reply via email to