diff options
| -rw-r--r-- | ospf6d/ospf6_abr.c | 47 | ||||
| -rw-r--r-- | ospf6d/ospf6_nssa.c | 73 | ||||
| -rw-r--r-- | ospf6d/ospf6_nssa.h | 4 | 
3 files changed, 43 insertions, 81 deletions
diff --git a/ospf6d/ospf6_abr.c b/ospf6d/ospf6_abr.c index 0b2c14bc54..690a0dd254 100644 --- a/ospf6d/ospf6_abr.c +++ b/ospf6d/ospf6_abr.c @@ -681,34 +681,31 @@ void ospf6_abr_range_update(struct ospf6_route *range, struct ospf6 *ospf6)  	 * if there  	 * were active ranges.  	 */ +	if (!ospf6_abr_range_summary_needs_update(range, cost)) +		return; -	if (ospf6_abr_range_summary_needs_update(range, cost)) { -		if (IS_OSPF6_DEBUG_ABR) -			zlog_debug("%s: range %pFX update", __func__, -				   &range->prefix); -		for (ALL_LIST_ELEMENTS(ospf6->area_list, node, nnode, oa)) -			summary_orig += -				ospf6_abr_originate_summary_to_area(range, oa); - -		if (CHECK_FLAG(range->flag, OSPF6_ROUTE_ACTIVE_SUMMARY) -		    && summary_orig) { -			if (!CHECK_FLAG(range->flag, -					OSPF6_ROUTE_BLACKHOLE_ADDED)) { -				if (IS_OSPF6_DEBUG_ABR) -					zlog_debug("Add discard route"); +	if (IS_OSPF6_DEBUG_ABR) +		zlog_debug("%s: range %pFX update", __func__, &range->prefix); -				ospf6_zebra_add_discard(range, ospf6); -			} -		} else { -			/* Summary removed or no summary generated as no -			 * specifics exist */ -			if (CHECK_FLAG(range->flag, -				       OSPF6_ROUTE_BLACKHOLE_ADDED)) { -				if (IS_OSPF6_DEBUG_ABR) -					zlog_debug("Delete discard route"); +	for (ALL_LIST_ELEMENTS(ospf6->area_list, node, nnode, oa)) +		summary_orig += ospf6_abr_originate_summary_to_area(range, oa); -				ospf6_zebra_delete_discard(range, ospf6); -			} +	if (CHECK_FLAG(range->flag, OSPF6_ROUTE_ACTIVE_SUMMARY) +	    && summary_orig) { +		if (!CHECK_FLAG(range->flag, OSPF6_ROUTE_BLACKHOLE_ADDED)) { +			if (IS_OSPF6_DEBUG_ABR) +				zlog_debug("Add discard route"); + +			ospf6_zebra_add_discard(range, ospf6); +		} +	} else { +		/* Summary removed or no summary generated as no +		 * specifics exist */ +		if (CHECK_FLAG(range->flag, OSPF6_ROUTE_BLACKHOLE_ADDED)) { +			if (IS_OSPF6_DEBUG_ABR) +				zlog_debug("Delete discard route"); + +			ospf6_zebra_delete_discard(range, ospf6);  		}  	}  } diff --git a/ospf6d/ospf6_nssa.c b/ospf6d/ospf6_nssa.c index c02e7fcbc0..7ab14fe4ad 100644 --- a/ospf6d/ospf6_nssa.c +++ b/ospf6d/ospf6_nssa.c @@ -596,27 +596,7 @@ struct ospf6_lsa *ospf6_translated_nssa_refresh(struct ospf6_area *area,  	return new;  } -/* Originate Translated Type-5 for supplied Type-7 NSSA LSA */ -struct ospf6_lsa *ospf6_translated_nssa_originate(struct ospf6_area *oa, -						  struct ospf6_lsa *type7) -{ -	struct ospf6_lsa *new; - -	if (ntohs(type7->header->type) != OSPF6_LSTYPE_TYPE_7) -		return NULL; - -	if ((new = ospf6_lsa_translated_nssa_new(oa, type7)) == NULL) { -		if (IS_OSPF6_DEBUG_NSSA) -			zlog_debug( -				"%s : Could not translate Type-7, Id %pI4, to Type-5", -				__func__, &type7->header->id); -		return NULL; -	} - -	return new; -} - -int ospf6_abr_translate_nssa(struct ospf6_area *area, struct ospf6_lsa *lsa) +static void ospf6_abr_translate_nssa(struct ospf6_area *area, struct ospf6_lsa *lsa)  {  	/* Incoming Type-7 or later aggregated Type-7  	 * @@ -645,7 +625,7 @@ int ospf6_abr_translate_nssa(struct ospf6_area *area, struct ospf6_lsa *lsa)  			zlog_debug(  				"%s : LSA Id %pI4, P-bit off, NO Translation",  				__func__, &lsa->header->id); -		return 1; +		return;  	}  	if (IS_OSPF6_DEBUG_NSSA) @@ -662,7 +642,7 @@ int ospf6_abr_translate_nssa(struct ospf6_area *area, struct ospf6_lsa *lsa)  			zlog_debug(  				"%s : LSA Id %pI4, Forward address is 0, NO Translation",  				__func__, &lsa->header->id); -		return 1; +		return;  	}  	/* Find the existing AS-External LSA for this prefix */ @@ -705,16 +685,14 @@ int ospf6_abr_translate_nssa(struct ospf6_area *area, struct ospf6_lsa *lsa)  		 * originate translated LSA  		 */ -		if (ospf6_translated_nssa_originate(area, lsa) == NULL) { +		if (ospf6_lsa_translated_nssa_new(area, lsa) == NULL) {  			if (IS_OSPF6_DEBUG_NSSA)  				zlog_debug(  					"%s : Could not translate Type-7 for %pI4 to Type-5",  					__func__, &lsa->header->id); -			return 1; +			return;  		}  	} - -	return 0;  }  static void ospf6_abr_process_nssa_translates(struct ospf6 *ospf6) @@ -734,6 +712,8 @@ static void ospf6_abr_process_nssa_translates(struct ospf6 *ospf6)  		zlog_debug("%s : Start", __func__);  	for (ALL_LIST_ELEMENTS_RO(ospf6->area_list, node, oa)) { +		if (!IS_AREA_NSSA(oa)) +			continue;  		/* skip if not translator */  		if (oa->NSSATranslatorState == OSPF6_NSSA_TRANSLATE_DISABLED) { @@ -743,13 +723,6 @@ static void ospf6_abr_process_nssa_translates(struct ospf6 *ospf6)  			continue;  		} -		/* skip if not Nssa Area */ -		if (!IS_AREA_NSSA(oa)) { -			zlog_debug("%s area %pI4 Flag %x", __func__, -				   &oa->area_id, oa->flag); -			continue; -		} -  		if (IS_OSPF6_DEBUG_NSSA)  			zlog_debug("%s : looking at area %pI4", __func__,  				   &oa->area_id); @@ -767,20 +740,6 @@ static void ospf6_abr_process_nssa_translates(struct ospf6 *ospf6)  		zlog_debug("%s : Stop", __func__);  } -/*Flood max age LSA's for the unapproved LSA's */ -static int ospf6_abr_remove_unapproved_translates_apply(struct ospf6_lsa *lsa) -{ -	if (CHECK_FLAG(lsa->flag, OSPF6_LSA_LOCAL_XLT) -	    && CHECK_FLAG(lsa->flag, OSPF6_LSA_UNAPPROVED)) { -		zlog_debug("%s : removing unapproved translates, lsa : %s", -			   __func__, lsa->name); - -		/* FLUSH THROUGHOUT AS */ -		ospf6_lsa_premature_aging(lsa); -	} -	return 0; -} -  static void ospf6_abr_remove_unapproved_translates(struct ospf6 *ospf6)  {  	struct ospf6_lsa *lsa; @@ -792,8 +751,16 @@ static void ospf6_abr_remove_unapproved_translates(struct ospf6 *ospf6)  		zlog_debug("ospf6_abr_remove_unapproved_translates(): Start");  	type = htons(OSPF6_LSTYPE_AS_EXTERNAL); -	for (ALL_LSDB_TYPED(ospf6->lsdb, type, lsa)) -		ospf6_abr_remove_unapproved_translates_apply(lsa); +	for (ALL_LSDB_TYPED(ospf6->lsdb, type, lsa)) { +		if (CHECK_FLAG(lsa->flag, OSPF6_LSA_LOCAL_XLT) +		    && CHECK_FLAG(lsa->flag, OSPF6_LSA_UNAPPROVED)) { +			zlog_debug( +				"%s : removing unapproved translates, lsa : %s", +				__func__, lsa->name); + +			ospf6_lsa_premature_aging(lsa); +		} +	}  	if (IS_OSPF6_DEBUG_NSSA)  		zlog_debug("ospf_abr_remove_unapproved_translates(): Stop"); @@ -1268,11 +1235,13 @@ void ospf6_abr_check_translate_nssa(struct ospf6_area *area,  	if (IS_OSPF6_DEBUG_NSSA)  		zlog_debug("%s : start", __func__); +	if (!ospf6_check_and_set_router_abr(ospf6)) +		return; +  	type5 = ospf6_lsdb_lookup(htons(OSPF6_LSTYPE_AS_EXTERNAL),  				  lsa->external_lsa_id, ospf6->router_id,  				  ospf6->lsdb); - -	if (ospf6_check_and_set_router_abr(ospf6) && (type5 == NULL)) { +	if (!type5) {  		if (IS_OSPF6_DEBUG_NSSA)  			zlog_debug("%s : Originating type5 LSA", __func__);  		ospf6_lsa_translated_nssa_new(area, lsa); diff --git a/ospf6d/ospf6_nssa.h b/ospf6d/ospf6_nssa.h index 99cb04c003..02234cc8bd 100644 --- a/ospf6d/ospf6_nssa.h +++ b/ospf6d/ospf6_nssa.h @@ -55,8 +55,6 @@ extern void ospf6_nssa_lsa_flush(struct ospf6 *ospf6, struct prefix_ipv6 *p);  extern struct ospf6_lsa *ospf6_translated_nssa_refresh(struct ospf6_area *oa,  						       struct ospf6_lsa *type7,  						       struct ospf6_lsa *type5); -extern struct ospf6_lsa * -ospf6_translated_nssa_originate(struct ospf6_area *oa, struct ospf6_lsa *type7);  extern void ospf6_asbr_nssa_redist_task(struct ospf6 *ospf6); @@ -69,8 +67,6 @@ extern void install_element_ospf6_debug_nssa(void);  extern void ospf6_abr_nssa_type_7_defaults(struct ospf6 *osof6);  int ospf6_redistribute_check(struct ospf6 *ospf6, struct ospf6_route *route,  			     int type); -extern int ospf6_abr_translate_nssa(struct ospf6_area *area, -				    struct ospf6_lsa *lsa);  extern void ospf6_abr_check_translate_nssa(struct ospf6_area *area,  					   struct ospf6_lsa *lsa);  extern void ospf6_abr_nssa_check_status(struct ospf6 *ospf6);  | 
