summaryrefslogtreecommitdiff
path: root/proto/ospf/topology.c
diff options
context:
space:
mode:
Diffstat (limited to 'proto/ospf/topology.c')
-rw-r--r--proto/ospf/topology.c16
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))