Skip to content

Commit

Permalink
Merge pull request #1649 from donaldsharp/ospfd_lsdb_loop
Browse files Browse the repository at this point in the history
ospfd: LSDB_LOOP treat it as a loop.
  • Loading branch information
rwestphal authored Jan 17, 2018
2 parents 7c0c85a + 044506e commit a23df59
Show file tree
Hide file tree
Showing 9 changed files with 102 additions and 91 deletions.
2 changes: 2 additions & 0 deletions .clang-format
Original file line number Diff line number Diff line change
Expand Up @@ -57,3 +57,5 @@ ForEachMacros:
- SUBGRP_FOREACH_ADJ_SAFE
- AF_FOREACH
- FOREACH_AFI_SAFI
# ospfd
- LSDB_LOOP
67 changes: 33 additions & 34 deletions ospfd/ospf_abr.c
Original file line number Diff line number Diff line change
Expand Up @@ -327,8 +327,7 @@ static int ospf_abr_nssa_am_elected(struct ospf_area *area)
struct router_lsa *rlsa;
struct in_addr *best = NULL;

LSDB_LOOP(ROUTER_LSDB(area), rn, lsa)
{
LSDB_LOOP (ROUTER_LSDB(area), rn, lsa) {
/* sanity checks */
if (!lsa || (lsa->data->type != OSPF_ROUTER_LSA)
|| IS_LSA_SELF(lsa))
Expand Down Expand Up @@ -978,7 +977,7 @@ static void ospf_abr_process_nssa_translates(struct ospf *ospf)
inet_ntoa(area->area_id));

LSDB_LOOP(NSSA_LSDB(area), rn, lsa)
ospf_abr_translate_nssa(area, lsa);
ospf_abr_translate_nssa(area, lsa);
}

if (IS_DEBUG_OSPF_NSSA)
Expand Down Expand Up @@ -1325,14 +1324,14 @@ ospf_abr_unapprove_translates(struct ospf *ospf) /* For NSSA Translations */
and we would want to flush any residuals anyway */

LSDB_LOOP(EXTERNAL_LSDB(ospf), rn, lsa)
if (CHECK_FLAG(lsa->flags, OSPF_LSA_LOCAL_XLT)) {
UNSET_FLAG(lsa->flags, OSPF_LSA_APPROVED);
if (IS_DEBUG_OSPF_NSSA)
zlog_debug(
"ospf_abr_unapprove_translates(): "
"approved unset on link id %s",
inet_ntoa(lsa->data->id));
}
if (CHECK_FLAG(lsa->flags, OSPF_LSA_LOCAL_XLT)) {
UNSET_FLAG(lsa->flags, OSPF_LSA_APPROVED);
if (IS_DEBUG_OSPF_NSSA)
zlog_debug(
"ospf_abr_unapprove_translates(): "
"approved unset on link id %s",
inet_ntoa(lsa->data->id));
}

if (IS_DEBUG_OSPF_NSSA)
zlog_debug("ospf_abr_unapprove_translates(): Stop");
Expand All @@ -1355,24 +1354,24 @@ static void ospf_abr_unapprove_summaries(struct ospf *ospf)
"considering area %s",
inet_ntoa(area->area_id));
LSDB_LOOP(SUMMARY_LSDB(area), rn, lsa)
if (ospf_lsa_is_self_originated(ospf, lsa)) {
if (IS_DEBUG_OSPF_EVENT)
zlog_debug(
"ospf_abr_unapprove_summaries(): "
"approved unset on summary link id %s",
inet_ntoa(lsa->data->id));
UNSET_FLAG(lsa->flags, OSPF_LSA_APPROVED);
}
if (ospf_lsa_is_self_originated(ospf, lsa)) {
if (IS_DEBUG_OSPF_EVENT)
zlog_debug(
"ospf_abr_unapprove_summaries(): "
"approved unset on summary link id %s",
inet_ntoa(lsa->data->id));
UNSET_FLAG(lsa->flags, OSPF_LSA_APPROVED);
}

LSDB_LOOP(ASBR_SUMMARY_LSDB(area), rn, lsa)
if (ospf_lsa_is_self_originated(ospf, lsa)) {
if (IS_DEBUG_OSPF_EVENT)
zlog_debug(
"ospf_abr_unapprove_summaries(): "
"approved unset on asbr-summary link id %s",
inet_ntoa(lsa->data->id));
UNSET_FLAG(lsa->flags, OSPF_LSA_APPROVED);
}
if (ospf_lsa_is_self_originated(ospf, lsa)) {
if (IS_DEBUG_OSPF_EVENT)
zlog_debug(
"ospf_abr_unapprove_summaries(): "
"approved unset on asbr-summary link id %s",
inet_ntoa(lsa->data->id));
UNSET_FLAG(lsa->flags, OSPF_LSA_APPROVED);
}
}

if (IS_DEBUG_OSPF_EVENT)
Expand Down Expand Up @@ -1633,7 +1632,7 @@ static void ospf_abr_remove_unapproved_translates(struct ospf *ospf)
zlog_debug("ospf_abr_remove_unapproved_translates(): Start");

LSDB_LOOP(EXTERNAL_LSDB(ospf), rn, lsa)
ospf_abr_remove_unapproved_translates_apply(ospf, lsa);
ospf_abr_remove_unapproved_translates_apply(ospf, lsa);

if (IS_DEBUG_OSPF_NSSA)
zlog_debug("ospf_abr_remove_unapproved_translates(): Stop");
Expand All @@ -1657,14 +1656,14 @@ static void ospf_abr_remove_unapproved_summaries(struct ospf *ospf)
inet_ntoa(area->area_id));

LSDB_LOOP(SUMMARY_LSDB(area), rn, lsa)
if (ospf_lsa_is_self_originated(ospf, lsa))
if (!CHECK_FLAG(lsa->flags, OSPF_LSA_APPROVED))
ospf_lsa_flush_area(lsa, area);
if (ospf_lsa_is_self_originated(ospf, lsa))
if (!CHECK_FLAG(lsa->flags, OSPF_LSA_APPROVED))
ospf_lsa_flush_area(lsa, area);

LSDB_LOOP(ASBR_SUMMARY_LSDB(area), rn, lsa)
if (ospf_lsa_is_self_originated(ospf, lsa))
if (!CHECK_FLAG(lsa->flags, OSPF_LSA_APPROVED))
ospf_lsa_flush_area(lsa, area);
if (ospf_lsa_is_self_originated(ospf, lsa))
if (!CHECK_FLAG(lsa->flags, OSPF_LSA_APPROVED))
ospf_lsa_flush_area(lsa, area);
}

if (IS_DEBUG_OSPF_EVENT)
Expand Down
33 changes: 22 additions & 11 deletions ospfd/ospf_apiserver.c
Original file line number Diff line number Diff line change
Expand Up @@ -1313,37 +1313,45 @@ int ospf_apiserver_handle_sync_lsdb(struct ospf_apiserver *apiserv,
/* Check msg type. */
if (mask & Power2[OSPF_ROUTER_LSA])
LSDB_LOOP(ROUTER_LSDB(area), rn, lsa)
apiserver_sync_callback(lsa, (void *)&param, seqnum);
apiserver_sync_callback(
lsa, (void *)&param, seqnum);
if (mask & Power2[OSPF_NETWORK_LSA])
LSDB_LOOP(NETWORK_LSDB(area), rn, lsa)
apiserver_sync_callback(lsa, (void *)&param, seqnum);
apiserver_sync_callback(
lsa, (void *)&param, seqnum);
if (mask & Power2[OSPF_SUMMARY_LSA])
LSDB_LOOP(SUMMARY_LSDB(area), rn, lsa)
apiserver_sync_callback(lsa, (void *)&param, seqnum);
apiserver_sync_callback(
lsa, (void *)&param, seqnum);
if (mask & Power2[OSPF_ASBR_SUMMARY_LSA])
LSDB_LOOP(ASBR_SUMMARY_LSDB(area), rn, lsa)
apiserver_sync_callback(lsa, (void *)&param, seqnum);
apiserver_sync_callback(
lsa, (void *)&param, seqnum);
if (mask & Power2[OSPF_OPAQUE_LINK_LSA])
LSDB_LOOP(OPAQUE_LINK_LSDB(area), rn, lsa)
apiserver_sync_callback(lsa, (void *)&param, seqnum);
apiserver_sync_callback(
lsa, (void *)&param, seqnum);
if (mask & Power2[OSPF_OPAQUE_AREA_LSA])
LSDB_LOOP(OPAQUE_AREA_LSDB(area), rn, lsa)
apiserver_sync_callback(lsa, (void *)&param, seqnum);
apiserver_sync_callback(
lsa, (void *)&param, seqnum);
}
}

/* For AS-external LSAs */
if (ospf->lsdb) {
if (mask & Power2[OSPF_AS_EXTERNAL_LSA])
LSDB_LOOP(EXTERNAL_LSDB(ospf), rn, lsa)
apiserver_sync_callback(lsa, (void *)&param, seqnum);
apiserver_sync_callback(lsa, (void *)&param,
seqnum);
}

/* For AS-external opaque LSAs */
if (ospf->lsdb) {
if (mask & Power2[OSPF_OPAQUE_AS_LSA])
LSDB_LOOP(OPAQUE_AS_LSDB(ospf), rn, lsa)
apiserver_sync_callback(lsa, (void *)&param, seqnum);
apiserver_sync_callback(lsa, (void *)&param,
seqnum);
}

/* Send a reply back to client with return code */
Expand Down Expand Up @@ -1945,16 +1953,19 @@ void ospf_apiserver_flush_opaque_lsa(struct ospf_apiserver *apiserv,
case OSPF_OPAQUE_LINK_LSA:
for (ALL_LIST_ELEMENTS(ospf->areas, node, nnode, area))
LSDB_LOOP(OPAQUE_LINK_LSDB(area), rn, lsa)
apiserver_flush_opaque_type_callback(lsa, (void *)&param, 0);
apiserver_flush_opaque_type_callback(
lsa, (void *)&param, 0);
break;
case OSPF_OPAQUE_AREA_LSA:
for (ALL_LIST_ELEMENTS(ospf->areas, node, nnode, area))
LSDB_LOOP(OPAQUE_AREA_LSDB(area), rn, lsa)
apiserver_flush_opaque_type_callback(lsa, (void *)&param, 0);
apiserver_flush_opaque_type_callback(
lsa, (void *)&param, 0);
break;
case OSPF_OPAQUE_AS_LSA:
LSDB_LOOP(OPAQUE_LINK_LSDB(ospf), rn, lsa)
apiserver_flush_opaque_type_callback(lsa, (void *)&param, 0);
apiserver_flush_opaque_type_callback(lsa,
(void *)&param, 0);
break;
default:
break;
Expand Down
7 changes: 4 additions & 3 deletions ospfd/ospf_ase.c
Original file line number Diff line number Diff line change
Expand Up @@ -649,7 +649,7 @@ static int ospf_ase_calculate_timer(struct thread *t)

/* Calculate external route for each AS-external-LSA */
LSDB_LOOP(EXTERNAL_LSDB(ospf), rn, lsa)
ospf_ase_calculate_route(ospf, lsa);
ospf_ase_calculate_route(ospf, lsa);

/* This version simple adds to the table all NSSA areas */
if (ospf->anyNSSA)
Expand All @@ -661,11 +661,12 @@ static int ospf_ase_calculate_timer(struct thread *t)

if (area->external_routing == OSPF_AREA_NSSA)
LSDB_LOOP(NSSA_LSDB(area), rn, lsa)
ospf_ase_calculate_route(ospf, lsa);
ospf_ase_calculate_route(ospf,
lsa);
}
/* kevinm: And add the NSSA routes in ospf_top */
LSDB_LOOP(NSSA_LSDB(ospf), rn, lsa)
ospf_ase_calculate_route(ospf, lsa);
ospf_ase_calculate_route(ospf, lsa);

/* Compare old and new external routing table and install the
difference info zebra/kernel */
Expand Down
4 changes: 2 additions & 2 deletions ospfd/ospf_ia.c
Original file line number Diff line number Diff line change
Expand Up @@ -283,7 +283,7 @@ static void ospf_examine_summaries(struct ospf_area *area,
struct route_node *rn;

LSDB_LOOP(lsdb_rt, rn, lsa)
process_summary_lsa(area, rt, rtrs, lsa);
process_summary_lsa(area, rt, rtrs, lsa);
}

int ospf_area_is_transit(struct ospf_area *area)
Expand Down Expand Up @@ -583,7 +583,7 @@ static void ospf_examine_transit_summaries(struct ospf_area *area,
struct route_node *rn;

LSDB_LOOP(lsdb_rt, rn, lsa)
process_transit_summary_lsa(area, rt, rtrs, lsa);
process_transit_summary_lsa(area, rt, rtrs, lsa);
}

void ospf_ia_routing(struct ospf *ospf, struct route_table *rt,
Expand Down
33 changes: 16 additions & 17 deletions ospfd/ospf_lsa.c
Original file line number Diff line number Diff line change
Expand Up @@ -1872,8 +1872,7 @@ struct ospf_lsa *ospf_translated_nssa_refresh(struct ospf *ospf,
if (area->external_routing != OSPF_AREA_NSSA && !type7)
continue;

LSDB_LOOP(NSSA_LSDB(area), rn, lsa)
{
LSDB_LOOP (NSSA_LSDB(area), rn, lsa) {
if (lsa->data->id.s_addr
== type5->data->id.s_addr) {
type7 = lsa;
Expand Down Expand Up @@ -3007,27 +3006,27 @@ int ospf_lsa_maxage_walker(struct thread *thread)

for (ALL_LIST_ELEMENTS(ospf->areas, node, nnode, area)) {
LSDB_LOOP(ROUTER_LSDB(area), rn, lsa)
ospf_lsa_maxage_walker_remover(ospf, lsa);
ospf_lsa_maxage_walker_remover(ospf, lsa);
LSDB_LOOP(NETWORK_LSDB(area), rn, lsa)
ospf_lsa_maxage_walker_remover(ospf, lsa);
ospf_lsa_maxage_walker_remover(ospf, lsa);
LSDB_LOOP(SUMMARY_LSDB(area), rn, lsa)
ospf_lsa_maxage_walker_remover(ospf, lsa);
ospf_lsa_maxage_walker_remover(ospf, lsa);
LSDB_LOOP(ASBR_SUMMARY_LSDB(area), rn, lsa)
ospf_lsa_maxage_walker_remover(ospf, lsa);
ospf_lsa_maxage_walker_remover(ospf, lsa);
LSDB_LOOP(OPAQUE_AREA_LSDB(area), rn, lsa)
ospf_lsa_maxage_walker_remover(ospf, lsa);
ospf_lsa_maxage_walker_remover(ospf, lsa);
LSDB_LOOP(OPAQUE_LINK_LSDB(area), rn, lsa)
ospf_lsa_maxage_walker_remover(ospf, lsa);
ospf_lsa_maxage_walker_remover(ospf, lsa);
LSDB_LOOP(NSSA_LSDB(area), rn, lsa)
ospf_lsa_maxage_walker_remover(ospf, lsa);
ospf_lsa_maxage_walker_remover(ospf, lsa);
}

/* for AS-external-LSAs. */
if (ospf->lsdb) {
LSDB_LOOP(EXTERNAL_LSDB(ospf), rn, lsa)
ospf_lsa_maxage_walker_remover(ospf, lsa);
ospf_lsa_maxage_walker_remover(ospf, lsa);
LSDB_LOOP(OPAQUE_AS_LSDB(ospf), rn, lsa)
ospf_lsa_maxage_walker_remover(ospf, lsa);
ospf_lsa_maxage_walker_remover(ospf, lsa);
}

OSPF_TIMER_ON(ospf->t_maxage_walker, ospf_lsa_maxage_walker,
Expand Down Expand Up @@ -3350,20 +3349,20 @@ void ospf_flush_self_originated_lsas_now(struct ospf *ospf)
}

LSDB_LOOP(SUMMARY_LSDB(area), rn, lsa)
ospf_lsa_flush_schedule(ospf, lsa);
ospf_lsa_flush_schedule(ospf, lsa);
LSDB_LOOP(ASBR_SUMMARY_LSDB(area), rn, lsa)
ospf_lsa_flush_schedule(ospf, lsa);
ospf_lsa_flush_schedule(ospf, lsa);
LSDB_LOOP(OPAQUE_LINK_LSDB(area), rn, lsa)
ospf_lsa_flush_schedule(ospf, lsa);
ospf_lsa_flush_schedule(ospf, lsa);
LSDB_LOOP(OPAQUE_AREA_LSDB(area), rn, lsa)
ospf_lsa_flush_schedule(ospf, lsa);
ospf_lsa_flush_schedule(ospf, lsa);
}

if (need_to_flush_ase) {
LSDB_LOOP(EXTERNAL_LSDB(ospf), rn, lsa)
ospf_lsa_flush_schedule(ospf, lsa);
ospf_lsa_flush_schedule(ospf, lsa);
LSDB_LOOP(OPAQUE_AS_LSDB(ospf), rn, lsa)
ospf_lsa_flush_schedule(ospf, lsa);
ospf_lsa_flush_schedule(ospf, lsa);
}

/*
Expand Down
18 changes: 9 additions & 9 deletions ospfd/ospf_nsm.c
Original file line number Diff line number Diff line change
Expand Up @@ -280,37 +280,37 @@ static int nsm_negotiation_done(struct ospf_neighbor *nbr)
ospf_proactively_arp(nbr);

LSDB_LOOP(ROUTER_LSDB(area), rn, lsa)
ospf_db_summary_add(nbr, lsa);
ospf_db_summary_add(nbr, lsa);
LSDB_LOOP(NETWORK_LSDB(area), rn, lsa)
ospf_db_summary_add(nbr, lsa);
ospf_db_summary_add(nbr, lsa);
LSDB_LOOP(SUMMARY_LSDB(area), rn, lsa)
ospf_db_summary_add(nbr, lsa);
ospf_db_summary_add(nbr, lsa);
LSDB_LOOP(ASBR_SUMMARY_LSDB(area), rn, lsa)
ospf_db_summary_add(nbr, lsa);
ospf_db_summary_add(nbr, lsa);

/* Process only if the neighbor is opaque capable. */
if (CHECK_FLAG(nbr->options, OSPF_OPTION_O)) {
LSDB_LOOP(OPAQUE_LINK_LSDB(area), rn, lsa)
ospf_db_summary_add(nbr, lsa);
ospf_db_summary_add(nbr, lsa);
LSDB_LOOP(OPAQUE_AREA_LSDB(area), rn, lsa)
ospf_db_summary_add(nbr, lsa);
ospf_db_summary_add(nbr, lsa);
}

if (CHECK_FLAG(nbr->options, OSPF_OPTION_NP)) {
LSDB_LOOP(NSSA_LSDB(area), rn, lsa)
ospf_db_summary_add(nbr, lsa);
ospf_db_summary_add(nbr, lsa);
}

if (nbr->oi->type != OSPF_IFTYPE_VIRTUALLINK
&& area->external_routing == OSPF_AREA_DEFAULT)
LSDB_LOOP(EXTERNAL_LSDB(nbr->oi->ospf), rn, lsa)
ospf_db_summary_add(nbr, lsa);
ospf_db_summary_add(nbr, lsa);

if (CHECK_FLAG(nbr->options, OSPF_OPTION_O)
&& (nbr->oi->type != OSPF_IFTYPE_VIRTUALLINK
&& area->external_routing == OSPF_AREA_DEFAULT))
LSDB_LOOP(OPAQUE_AS_LSDB(nbr->oi->ospf), rn, lsa)
ospf_db_summary_add(nbr, lsa);
ospf_db_summary_add(nbr, lsa);

return 0;
}
Expand Down
4 changes: 2 additions & 2 deletions ospfd/ospf_vty.c
Original file line number Diff line number Diff line change
Expand Up @@ -6167,7 +6167,7 @@ static void show_ip_ospf_database_summary(struct vty *vty, struct ospf *ospf,
show_database_header[type]);

LSDB_LOOP(AREA_LSDB(area, type), rn, lsa)
show_lsa_summary(vty, lsa, self);
show_lsa_summary(vty, lsa, self);

vty_out(vty, "\n");
}
Expand All @@ -6189,7 +6189,7 @@ static void show_ip_ospf_database_summary(struct vty *vty, struct ospf *ospf,
vty_out(vty, "%s\n", show_database_header[type]);

LSDB_LOOP(AS_LSDB(ospf, type), rn, lsa)
show_lsa_summary(vty, lsa, self);
show_lsa_summary(vty, lsa, self);

vty_out(vty, "\n");
}
Expand Down
Loading

0 comments on commit a23df59

Please sign in to comment.