diff options
author | Renato Westphal <renato@opensourcerouting.org> | 2023-03-01 21:31:56 +0100 |
---|---|---|
committer | Renato Westphal <renato@opensourcerouting.org> | 2023-03-02 23:38:03 +0100 |
commit | cb1f47c2eb46c3ca7bd485c15fed024f31c50be6 (patch) | |
tree | 3597e37abb9aea4eff6516c695a7465418af8d69 | |
parent | ospf6d: fix missing intra-area-prefix-LSA after a graceful restart (diff) | |
download | frr-cb1f47c2eb46c3ca7bd485c15fed024f31c50be6.tar.xz frr-cb1f47c2eb46c3ca7bd485c15fed024f31c50be6.zip |
ospfd, ospf6d: perform GR consistency check only when necessary
The GR code should check for topology changes only upon the receipt
of Router-LSAs and Network-LSAs. Other LSAs types don't affect the
topology as far as a restarting router is concerned.
This optimization reduces unnecessary computations when the
restarting router receives thousands of inter-area LSAs or external
LSAs while coming back up.
Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
-rw-r--r-- | ospf6d/ospf6_flood.c | 5 | ||||
-rw-r--r-- | ospfd/ospf_packet.c | 11 |
2 files changed, 12 insertions, 4 deletions
diff --git a/ospf6d/ospf6_flood.c b/ospf6d/ospf6_flood.c index 2d2069566..db1520ff2 100644 --- a/ospf6d/ospf6_flood.c +++ b/ospf6d/ospf6_flood.c @@ -1105,9 +1105,12 @@ void ospf6_receive_lsa(struct ospf6_neighbor *from, &new->refresh); } + /* GR: check for network topology change. */ struct ospf6 *ospf6 = from->ospf6_if->area->ospf6; struct ospf6_area *area = from->ospf6_if->area; - if (ospf6->gr_info.restart_in_progress) + if (ospf6->gr_info.restart_in_progress && + (new->header->type == ntohs(OSPF6_LSTYPE_ROUTER) || + new->header->type == ntohs(OSPF6_LSTYPE_NETWORK))) ospf6_gr_check_lsdb_consistency(ospf6, area); return; diff --git a/ospfd/ospf_packet.c b/ospfd/ospf_packet.c index 5268c9896..2937c4ec0 100644 --- a/ospfd/ospf_packet.c +++ b/ospfd/ospf_packet.c @@ -2102,6 +2102,14 @@ static void ospf_ls_upd(struct ospf *ospf, struct ip *iph, if (ospf_flood(oi->ospf, nbr, current, lsa) < 0) /* Trap NSSA later. */ DISCARD_LSA(lsa, 5); + + /* GR: check for network topology change. */ + if (ospf->gr_info.restart_in_progress && + ((lsa->data->type == OSPF_ROUTER_LSA || + lsa->data->type == OSPF_NETWORK_LSA))) + ospf_gr_check_lsdb_consistency(oi->ospf, + oi->area); + continue; } @@ -2214,9 +2222,6 @@ static void ospf_ls_upd(struct ospf *ospf, struct ip *iph, assert(listcount(lsas) == 0); list_delete(&lsas); - - if (ospf->gr_info.restart_in_progress) - ospf_gr_check_lsdb_consistency(oi->ospf, oi->area); } /* OSPF Link State Acknowledgment message read -- RFC2328 Section 13.7. */ |