On Mon, May 15, 2017 at 08:43:02PM +0200, Florian Riehm wrote:
> > The attached patch ports the multipath support from ospfd to ospf6d.

> @@ -171,48 +260,30 @@ kr_change(struct kroute *kroute)
>                        * - zero out ifindex (this is no longer relevant)
>                        */
>                       action = RTM_CHANGE;
> -                     kr->r.flags = kroute->flags | F_OSPFD_INSERTED;
> -                     kr->r.ifindex = 0;
> -                     rtlabel_unref(kr->r.rtlabel);
> -                     kr->r.ext_tag = kroute->ext_tag;
> -                     kr->r.rtlabel = kroute->rtlabel;
> -             }
> +             } else if (kr->next == NULL)    /* single path OSPF route */
> +                     action = RTM_CHANGE;

I wonder wether this check should be
                } else if (kr->next == NULL && krcount == 1)
At least this is what ospfd is doing.

>       RB_FOREACH(kr, kroute_tree, &krt)
>               if (!(kr->r.flags & F_KERNEL))
> -                     send_rtmsg(kr_state.fd, RTM_ADD, &kr->r);
> +                     for (kn = kr; kn != NULL; kn = kn->next) {
> +                             send_rtmsg(kr_state.fd, RTM_ADD, &kn->r);
> +                     }

> -     RB_FOREACH(kr, kroute_tree, &krt)
> +     RB_FOREACH(kr, kroute_tree, &krt) {
>               if (!(kr->r.flags & F_KERNEL))
> -                     send_rtmsg(kr_state.fd, RTM_DELETE, &kr->r);
> +                     for (kn = kr; kn != NULL; kn = kn->next) {
> +                             send_rtmsg(kr_state.fd, RTM_DELETE, &kn->r);
> +                     }
> +     }

The braces { } are used a bit inconsistently here.

Anyway I think this diff should go in as it is.

OK bluhm@

Reply via email to