diff options
| author | rgirada <rgirada@vmware.com> | 2023-03-17 09:17:39 +0000 |
|---|---|---|
| committer | rgirada <rgirada@vmware.com> | 2023-03-17 10:11:28 +0000 |
| commit | e6f3d0811d8f160f0e7cd27100d03cf1c0f5aec2 (patch) | |
| tree | a63171000d7b640a029eb80a4a89a2603660b14a | |
| parent | 090109617ef3e010345ce6e1a2e422f43f0bbdcd (diff) | |
ospfd: Ospf ABR doesnt Advertise LSA summary
Description:
OSPF ABR will summarise the networks based on configured range
and re-advtertise the summarised route. But if configured range
prefix id is same as one of the subset of routes prefix id then
as per rcf2328 Appendex-E recommendation, it will prepare the LSID and originate.
While re-advertising, it is using ospf LSDB instead of area specific
LSDB which is making it fail to re-advertise the summary lsa.
Fixed this by passing correct LSDB pointer.
Issue: #12995
Signed-off-by: Rajesh Girada <rgirada@vmware.com>
| -rw-r--r-- | ospfd/ospf_lsa.c | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/ospfd/ospf_lsa.c b/ospfd/ospf_lsa.c index 49e342d72b..f41e303efb 100644 --- a/ospfd/ospf_lsa.c +++ b/ospfd/ospf_lsa.c @@ -38,7 +38,7 @@ #include "ospfd/ospf_abr.h" #include "ospfd/ospf_errors.h" -static struct ospf_lsa *ospf_handle_summarylsa_lsId_chg(struct ospf *ospf, +static struct ospf_lsa *ospf_handle_summarylsa_lsId_chg(struct ospf_area *area, struct prefix_ipv4 *p, uint8_t type, uint32_t metric, @@ -1283,7 +1283,7 @@ ospf_summary_lsa_prepare_and_flood(struct prefix_ipv4 *p, uint32_t metric, return new; } -static struct ospf_lsa *ospf_handle_summarylsa_lsId_chg(struct ospf *ospf, +static struct ospf_lsa *ospf_handle_summarylsa_lsId_chg(struct ospf_area *area, struct prefix_ipv4 *p, uint8_t type, uint32_t metric, @@ -1293,13 +1293,14 @@ static struct ospf_lsa *ospf_handle_summarylsa_lsId_chg(struct ospf *ospf, struct ospf_lsa *new = NULL; struct summary_lsa *sl = NULL; struct ospf_area *old_area = NULL; + struct ospf *ospf = area->ospf; struct prefix_ipv4 old_prefix; uint32_t old_metric; struct in_addr mask; uint32_t metric_val; char *metric_buf; - lsa = ospf_lsdb_lookup_by_id(ospf->lsdb, type, p->prefix, + lsa = ospf_lsdb_lookup_by_id(area->lsdb, type, p->prefix, ospf->router_id); if (!lsa) { @@ -1358,8 +1359,8 @@ struct ospf_lsa *ospf_summary_lsa_originate(struct prefix_ipv4 *p, if (IS_DEBUG_OSPF(lsa, LSA_GENERATE)) zlog_debug("Link ID has to be changed."); - new = ospf_handle_summarylsa_lsId_chg( - area->ospf, p, OSPF_SUMMARY_LSA, metric, id); + new = ospf_handle_summarylsa_lsId_chg(area, p, OSPF_SUMMARY_LSA, + metric, id); return new; } else if (status == LSID_NOT_AVAILABLE) { /* Link State ID not available. */ @@ -1521,7 +1522,7 @@ struct ospf_lsa *ospf_summary_asbr_lsa_originate(struct prefix_ipv4 *p, zlog_debug("Link ID has to be changed."); new = ospf_handle_summarylsa_lsId_chg( - area->ospf, p, OSPF_ASBR_SUMMARY_LSA, metric, id); + area, p, OSPF_ASBR_SUMMARY_LSA, metric, id); return new; } else if (status == LSID_NOT_AVAILABLE) { /* Link State ID not available. */ |
