Remi Locherer(remi.loche...@relo.ch) 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: > >