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.
This commit is contained in:
Ondrej Zajicek 2015-04-18 13:22:41 +02:00
parent 304ac2e861
commit ef3cac669c

View file

@ -95,6 +95,8 @@ merge_nexthops(struct ospf_proto *p, struct mpnh *s1, struct mpnh *s2, int r1, i
struct mpnh **n = &root; struct mpnh **n = &root;
int count = p->ecmp; int count = p->ecmp;
ASSERT(p->ecmp);
/* /*
* r1, r2 signalize whether we can reuse nexthops from s1, s2. * r1, r2 signalize whether we can reuse nexthops from s1, s2.
* New nexthops (s2, new) can be reused if they are not inherited * 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 **nn1 = &root1;
struct mpnh **nn2 = &root2; 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, /* 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 because the list should stay sorted, so we create two lists, one with new
gateways and one with old ones, and then merge them. */ gateways and one with old ones, and then merge them. */