Remi Locherer([email protected]) on 2019.01.02 20:00:19 +0100:
> Hi tech,
>
> ospfd detects and removes routes in the kernel routing table with priority
> RTP_OSPF (or the configured fib-priority) that have been inserted by another
> program.
>
> Below diff adds the same behaviour to ospf6d.
>
> OK?
ok benno@
> Remi
>
>
> Index: kroute.c
> ===================================================================
> RCS file: /cvs/src/usr.sbin/ospf6d/kroute.c,v
> retrieving revision 1.59
> diff -u -p -r1.59 kroute.c
> --- kroute.c 29 Dec 2018 16:04:31 -0000 1.59
> +++ kroute.c 2 Jan 2019 12:37:25 -0000
> @@ -1347,6 +1347,7 @@ dispatch_rtmsg(void)
> int flags, mpath;
> unsigned int scope;
> u_short ifindex = 0;
> + int rv;
>
> if ((n = read(kr_state.fd, &buf, sizeof(buf))) == -1) {
> if (errno == EAGAIN || errno == EINTR)
> @@ -1512,15 +1513,27 @@ add:
> kr->r.ifindex = ifindex;
> kr->r.priority = prio;
>
> - if ((label = (struct sockaddr_rtlabel *)
> - rti_info[RTAX_LABEL]) != NULL) {
> - kr->r.rtlabel =
> - rtlabel_name2id(label->sr_label);
> - kr->r.ext_tag =
> - rtlabel_id2tag(kr->r.rtlabel);
> - }
> + if (rtm->rtm_priority == kr_state.fib_prio) {
> + log_warnx("alien OSPF route %s/%d",
> + log_in6addr(&prefix), prefixlen);
> + rv = send_rtmsg(kr_state.fd,
> + RTM_DELETE, &kr->r);
> + free(kr);
> + if (rv == -1)
> + return (-1);
> + } else {
> + if ((label = (struct sockaddr_rtlabel *)
> + rti_info[RTAX_LABEL]) != NULL) {
> + kr->r.rtlabel =
> + rtlabel_name2id(
> + label->sr_label);
> + kr->r.ext_tag =
> + rtlabel_id2tag(
> + kr->r.rtlabel);
> + }
>
> - kroute_insert(kr);
> + kroute_insert(kr);
> + }
> }
> break;
> case RTM_DELETE:
>
>