]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
OSPF: Fixes handling of external routes with immediate gw
authorOndrej Zajicek <santiago@crfreenet.org>
Sat, 18 Apr 2015 11:22:41 +0000 (13:22 +0200)
committerOndrej Zajicek <santiago@crfreenet.org>
Sat, 18 Apr 2015 11:26:45 +0000 (13:26 +0200)
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

index b616c0d15a521eecc8d613d3f5cd5760d75a6270..74d10c7b414123c812341d7490ccab6c574f2e19 100644 (file)
@@ -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. */