diff options
author | Maria Matejka <mq@ucw.cz> | 2022-05-30 17:36:36 +0200 |
---|---|---|
committer | Maria Matejka <mq@ucw.cz> | 2022-05-30 17:37:08 +0200 |
commit | 1493695c6ba2b169523f7c2097fac8e8343352fe (patch) | |
tree | 0a0e5296b7b53d79a99aa3ebf254c124e1373414 /proto/ospf/topology.c | |
parent | 7b0c89a47fa1f63248ceaa1e9c1b3948dd29a68d (diff) | |
parent | f15f2fcee7eeb5a100bd204a0e67018e25953420 (diff) |
Merge commit 'f15f2fcee7eeb5a100bd204a0e67018e25953420' into haugesund
Diffstat (limited to 'proto/ospf/topology.c')
-rw-r--r-- | proto/ospf/topology.c | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/proto/ospf/topology.c b/proto/ospf/topology.c index 81207e68..c2b12cfc 100644 --- a/proto/ospf/topology.c +++ b/proto/ospf/topology.c @@ -1366,8 +1366,20 @@ ospf_rt_notify(struct proto *P, struct channel *ch UNUSED, const net_addr *n, rt uint tag = ea_get_int(a->eattrs, &ea_ospf_tag, 0); ip_addr fwd = IPA_NONE; - if ((a->dest == RTD_UNICAST) && use_gw_for_fwaddr(p, a->nh.gw, a->nh.iface)) - fwd = a->nh.gw; + if (a->dest == RTD_UNICAST) + { + eattr *nhea = ea_find(a->eattrs, &ea_gen_nexthop); + if (!nhea) + { + log(L_ERR "%s: Unicast route without nexthop for %N", + p->p.name, n); + return; + } + + struct nexthop_adata *nhad = (struct nexthop_adata *) nhea->u.ptr; + if (use_gw_for_fwaddr(p, nhad->nh.gw, nhad->nh.iface)) + fwd = nhad->nh.gw; + } /* NSSA-LSA with P-bit set must have non-zero forwarding address */ if (oa && ipa_zero(fwd)) |