I have an OpenBSD box running 5.3 with multiple nics.

When I ifconfig down one of the transit links ospfd adds another route
instead of changing because the route is marked down in the kernel. When I
ifconfig up the link the original route and new one are both installed in
the routing table now. If I cycle down/up with ifconfig again now I get
multipath flags and eventually bgpd will freak out and quit because of this.

>From digging around in the code:

In send_rtmsg in kroute.c shows how the route gets added:
...
retry:
if (writev(fd, iov, iovcnt) == -1) {
if (errno == ESRCH) {
if (hdr.rtm_type == RTM_CHANGE) {
hdr.rtm_type = RTM_ADD;
goto retry;
} else if (hdr.rtm_type == RTM_DELETE) {
log_info("route %s/%u vanished before delete",
    inet_ntoa(kroute->prefix),
    kroute->prefixlen);
return (0);
}
}

It can't find the route because it's marked down and switches from CHANGE
to ADD and retries.

I see related threads but nothing with a definite fix:
http://marc.info/?l=openbsd-misc&m=130710530911754&w=2
http://marc.info/?l=openbsd-misc&m=133759959417744&w=2
http://marc.info/?l=openbsd-misc&m=134892435720437&w=2
^-- this one seems the most promising but it's a big patch for me to
integrate myself since it's for ospf6d

I've been banging my head all day trying to figure out a fix or workaround.
Let me know if you need more specifics/configs etc.

dmo

Reply via email to