diff options
| -rw-r--r-- | ospfd/ChangeLog | 5 | ||||
| -rw-r--r-- | ospfd/ospf_interface.c | 27 | 
2 files changed, 22 insertions, 10 deletions
diff --git a/ospfd/ChangeLog b/ospfd/ChangeLog index 6b15fe64..7bff0a36 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 b4872914..4787ca6f 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!");             }  | 
