ospfd: do not install blackhole routes for ranges with "not-advertise"

Adding blackhole routes is unnecessary in that case.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
This commit is contained in:
Renato Westphal 2023-03-07 21:13:53 -03:00
parent 4312d66f9f
commit 271588ace0

View File

@ -76,7 +76,8 @@ static void ospf_area_range_delete(struct ospf_area *area,
{ {
struct ospf_area_range *range = rn->info; struct ospf_area_range *range = rn->info;
if (ospf_area_range_active(range)) if (ospf_area_range_active(range) &&
CHECK_FLAG(range->flags, OSPF_AREA_RANGE_ADVERTISE))
ospf_delete_discard_route(area->ospf, area->ospf->new_table, ospf_delete_discard_route(area->ospf, area->ospf->new_table,
(struct prefix_ipv4 *)&rn->p); (struct prefix_ipv4 *)&rn->p);
@ -1933,24 +1934,26 @@ static void ospf_abr_manage_discard_routes(struct ospf *ospf)
struct listnode *node, *nnode; struct listnode *node, *nnode;
struct route_node *rn; struct route_node *rn;
struct ospf_area *area; struct ospf_area *area;
for (ALL_LIST_ELEMENTS(ospf->areas, node, nnode, area)) {
for (rn = route_top(area->ranges); rn; rn = route_next(rn)) {
struct ospf_area_range *range; struct ospf_area_range *range;
for (ALL_LIST_ELEMENTS(ospf->areas, node, nnode, area)) range = rn->info;
for (rn = route_top(area->ranges); rn; rn = route_next(rn)) if (!range)
if ((range = rn->info) != NULL) continue;
if (CHECK_FLAG(range->flags,
OSPF_AREA_RANGE_ADVERTISE)) { if (ospf_area_range_active(range)
if (ospf_area_range_active(range)) && CHECK_FLAG(range->flags,
OSPF_AREA_RANGE_ADVERTISE))
ospf_add_discard_route( ospf_add_discard_route(
ospf, ospf->new_table, ospf, ospf->new_table, area,
area, (struct prefix_ipv4 *)&rn->p);
(struct prefix_ipv4
*)&rn->p);
else else
ospf_delete_discard_route( ospf_delete_discard_route(
ospf, ospf->new_table, ospf, ospf->new_table,
(struct prefix_ipv4 (struct prefix_ipv4 *)&rn->p);
*)&rn->p); }
} }
} }