summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorpaul <paul>2004-05-05 19:26:55 +0200
committerpaul <paul>2004-05-05 19:26:55 +0200
commitcd59da682f2a68cc4b2d1ba272bf02bb4d9f60e2 (patch)
tree778dd44bb56e48fb6d127106cb7c769b54b11497
parent2004-05-05 Paul Jakma <paul@dishone.st> (diff)
downloadfrr-cd59da682f2a68cc4b2d1ba272bf02bb4d9f60e2.tar.xz
frr-cd59da682f2a68cc4b2d1ba272bf02bb4d9f60e2.zip
2004-05-05 Paul Jakma <paul@dishone.st>
* ospf_interface.c: (ospf_vl_set_params) Catch changes of interface address for either end of a virtual-link, and hence potential cost changes.
-rw-r--r--ospfd/ChangeLog5
-rw-r--r--ospfd/ospf_interface.c27
2 files changed, 22 insertions, 10 deletions
diff --git a/ospfd/ChangeLog b/ospfd/ChangeLog
index 6b15fe64d..7bff0a366 100644
--- a/ospfd/ChangeLog
+++ b/ospfd/ChangeLog
@@ -12,7 +12,10 @@
not by peer_addr (which breaks for asymmetric vlinks)
(ospf_nbr_lookup) add a wrapper for nbr lookups to deal with
above.
-
+ * ospf_interface.c: (ospf_vl_set_params) Catch changes of interface
+ address for either end of a virtual-link, and hence potential cost
+ changes.
+
2004-04-22 Hasso Tepper <hasso@estpak.ee>
* ospf_zebra.c: Don't ignore reject/bh routes, it's the only way
diff --git a/ospfd/ospf_interface.c b/ospfd/ospf_interface.c
index b48729142..4787ca6f4 100644
--- a/ospfd/ospf_interface.c
+++ b/ospfd/ospf_interface.c
@@ -917,6 +917,7 @@ ospf_vl_set_params (struct ospf_vl_data *vl_data, struct vertex *v)
if (voi->output_cost != v->distance)
{
+
voi->output_cost = v->distance;
changed = 1;
}
@@ -924,12 +925,16 @@ ospf_vl_set_params (struct ospf_vl_data *vl_data, struct vertex *v)
for (node = listhead (v->nexthop); node; nextnode (node))
if ((nh = getdata (node)) != NULL)
{
- vl_data->out_oi = (struct ospf_interface *) nh->oi;
-
- voi->address->u.prefix4 = vl_data->out_oi->address->u.prefix4;
- voi->address->prefixlen = vl_data->out_oi->address->prefixlen;
-
- break; /* We take the first interface. */
+ vl_data->out_oi = (struct ospf_interface *) nh->oi;
+
+ if (!IPV4_ADDR_SAME(&voi->address->u.prefix4,
+ &vl_data->out_oi->address->u.prefix4))
+ changed = 1;
+
+ voi->address->u.prefix4 = vl_data->out_oi->address->u.prefix4;
+ voi->address->prefixlen = vl_data->out_oi->address->prefixlen;
+
+ break; /* We take the first interface. */
}
rl = (struct router_lsa *)v->lsa;
@@ -961,9 +966,12 @@ ospf_vl_set_params (struct ospf_vl_data *vl_data, struct vertex *v)
zlog_info ("found back link through VL");
case LSA_LINK_TYPE_TRANSIT:
case LSA_LINK_TYPE_POINTOPOINT:
+ if (!IPV4_ADDR_SAME (&vl_data->peer_addr,
+ &rl->link[i].link_data))
+ changed = 1;
vl_data->peer_addr = rl->link[i].link_data;
if (IS_DEBUG_OSPF_EVENT)
- zlog_info ("%s peer address is %s\n",
+ zlog_info ("ospf_vl_set_params: %s peer address is %s\n",
vl_data->vl_oi->ifp->name,
inet_ntoa(vl_data->peer_addr));
return changed;
@@ -1030,9 +1038,10 @@ ospf_vl_up_check (struct ospf_area *area, struct in_addr rid,
if (ospf_vl_set_params (vl_data, v))
{
if (IS_DEBUG_OSPF (ism, ISM_EVENTS))
- zlog_info ("ospf_vl_up_check: VL cost change, scheduling router lsa refresh");
+ zlog_info ("ospf_vl_up_check: VL cost change,"
+ " scheduling router lsa refresh");
if(ospf->backbone)
- ospf_router_lsa_timer_add(ospf->backbone);
+ ospf_router_lsa_timer_add (ospf->backbone);
else if (IS_DEBUG_OSPF (ism, ISM_EVENTS))
zlog_info ("ospf_vl_up_check: VL cost change, no backbone!");
}