]> git.puffer.fish Git - mirror/frr.git/commitdiff
2004-05-05 Paul Jakma <paul@dishone.st>
authorpaul <paul>
Wed, 5 May 2004 17:26:55 +0000 (17:26 +0000)
committerpaul <paul>
Wed, 5 May 2004 17:26:55 +0000 (17:26 +0000)
* ospf_interface.c: (ospf_vl_set_params) Catch changes of interface
          address for either end of a virtual-link, and hence potential cost
          changes.

ospfd/ChangeLog
ospfd/ospf_interface.c

index 6b15fe64dd0b511cf98e95c670534b855cee8bf4..7bff0a366eb1379415b0d7004d686263618bc826 100644 (file)
          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
index b48729142f31671cfe74ac876037073d09237650..4787ca6f4f4c89915ada1bed9062ad8999125d33 100644 (file)
@@ -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!");
            }