From ef3cac669ca0f6f2b983e33ab6d553705c35f3df Mon Sep 17 00:00:00 2001 From: Ondrej Zajicek Date: Sat, 18 Apr 2015 13:22:41 +0200 Subject: [PATCH] OSPF: Fixes handling of external routes with immediate gw The bug caused that received external LSAs with locally reachable next hops were ignored. I wonder why nobody noticed it sooner. --- proto/ospf/rt.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/proto/ospf/rt.c b/proto/ospf/rt.c index b616c0d1..74d10c7b 100644 --- a/proto/ospf/rt.c +++ b/proto/ospf/rt.c @@ -95,6 +95,8 @@ merge_nexthops(struct ospf_proto *p, struct mpnh *s1, struct mpnh *s2, int r1, i struct mpnh **n = &root; int count = p->ecmp; + ASSERT(p->ecmp); + /* * r1, r2 signalize whether we can reuse nexthops from s1, s2. * New nexthops (s2, new) can be reused if they are not inherited @@ -153,6 +155,9 @@ fix_device_nexthops(struct ospf_proto *p, const struct mpnh *n, ip_addr gw) struct mpnh **nn1 = &root1; struct mpnh **nn2 = &root2; + if (!p->ecmp) + return new_nexthop(p, gw, n->iface, n->weight); + /* This is a bit tricky. We cannot just copy the list and update n->gw, because the list should stay sorted, so we create two lists, one with new gateways and one with old ones, and then merge them. */