From 60e04f041303fdafd0abf0dec003a9745345c68a Mon Sep 17 00:00:00 2001 From: Ondrej Filip Date: Fri, 18 Feb 2005 18:51:42 +0000 Subject: Minor bugfix: Summary LSA for aggregated area was always propagated with metric = 1. Now it's metric of most distant component. --- proto/ospf/ospf.h | 1 + proto/ospf/rt.c | 6 +++++- proto/ospf/rt.h | 4 ++-- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/proto/ospf/ospf.h b/proto/ospf/ospf.h index 352cd76..44ba10f 100644 --- a/proto/ospf/ospf.h +++ b/proto/ospf/ospf.h @@ -83,6 +83,7 @@ struct area_net struct fib_node fn; int hidden; int active; + u32 metric; }; struct ospf_area_config diff --git a/proto/ospf/rt.c b/proto/ospf/rt.c index 7f7f463..b3de8bf 100644 --- a/proto/ospf/rt.c +++ b/proto/ospf/rt.c @@ -119,7 +119,10 @@ ri_install(struct proto_ospf *po, ip_addr prefix, int pxlen, int dest, old->efn = ipath; } if ((new->type == RTS_OSPF) && (anet = (struct area_net *)fib_route(&oa->net_fib, prefix, pxlen))) + { anet->active = 1; + if (new->metric1 < anet->metric) anet->metric = new->metric1; + } } else { @@ -585,6 +588,7 @@ ospf_rt_spf(struct proto_ospf *po) { anet = (struct area_net *) nftmp; anet->active = 0; + anet->metric = LSINFINITY; } FIB_WALK_END; ospf_rt_spfa(oa); @@ -1046,7 +1050,7 @@ again2: if ((oa == po->backbone) && oaa->trcap) fl = 1; if(fl) flush_sum_lsa(oaa, &anet->fn, ORT_NET); - else originate_sum_lsa(oaa, &anet->fn, ORT_NET, 1); + else originate_sum_lsa(oaa, &anet->fn, ORT_NET, anet->metric); } } FIB_WALK_END; diff --git a/proto/ospf/rt.h b/proto/ospf/rt.h index ea2f28f..acb0a1a 100644 --- a/proto/ospf/rt.h +++ b/proto/ospf/rt.h @@ -21,8 +21,8 @@ typedef struct orta #define ORTA_ASBR 1 #define ORTA_ABR 2 struct ospf_area *oa; - int metric1; - int metric2; + u32 metric1; + u32 metric2; ip_addr nh; /* Next hop */ struct ospf_iface *ifa; /* Outgoing interface */ struct top_hash_entry *ar; /* Advertising router */ -- cgit v1.2.3