summaryrefslogtreecommitdiff
path: root/ospfd/ospf_spf.c
diff options
context:
space:
mode:
Diffstat (limited to 'ospfd/ospf_spf.c')
-rw-r--r--ospfd/ospf_spf.c18
1 files changed, 16 insertions, 2 deletions
diff --git a/ospfd/ospf_spf.c b/ospfd/ospf_spf.c
index a5242b68..bd9564d9 100644
--- a/ospfd/ospf_spf.c
+++ b/ospfd/ospf_spf.c
@@ -568,8 +568,22 @@ ospf_nexthop_calculation (struct ospf_area *area, struct vertex *v,
*/
if (oi->type == OSPF_IFTYPE_POINTOPOINT)
{
- added = 1;
- nexthop.s_addr = 0; /* Nexthop not required */
+ /* Having nexthop = 0 is tempting, but NOT acceptable.
+ It breaks AS-External routes with a forwarding address,
+ since ospf_ase_complete_direct_routes() will mistakenly
+ assume we've reached the last hop and should place the
+ forwarding address as nexthop.
+ Also, users may configure multi-access links in p2p mode,
+ so we need the IP to ARP the nexthop.
+ */
+ struct ospf_neighbor *nbr_w;
+
+ nbr_w = ospf_nbr_lookup_by_routerid (oi->nbrs, &l->link_id);
+ if (nbr_w != NULL)
+ {
+ added = 1;
+ nexthop = nbr_w->src;
+ }
}
else if (oi->type == OSPF_IFTYPE_POINTOMULTIPOINT)
{