diff options
author | Donald Sharp <sharpd@cumulusnetworks.com> | 2020-10-15 01:19:39 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-10-15 01:19:39 +0200 |
commit | 2c6592c1405808e95dc43e298a9ec4446e9cbdd1 (patch) | |
tree | a463d7ee9ad743025636f354fa6b1efefb19e3dc /ospfd | |
parent | Merge pull request #7308 from mjstapp/fix_ospf_gr_sa (diff) | |
parent | ospfd: make reason string production safer (diff) | |
download | frr-2c6592c1405808e95dc43e298a9ec4446e9cbdd1.tar.xz frr-2c6592c1405808e95dc43e298a9ec4446e9cbdd1.zip |
Merge pull request #7309 from mjstapp/fix_ospf_gr_reasons
ospfd: make GR reason string production safer
Diffstat (limited to 'ospfd')
-rw-r--r-- | ospfd/ospf_gr_helper.c | 50 | ||||
-rw-r--r-- | ospfd/ospf_gr_helper.h | 6 | ||||
-rw-r--r-- | ospfd/ospf_vty.c | 45 |
3 files changed, 66 insertions, 35 deletions
diff --git a/ospfd/ospf_gr_helper.c b/ospfd/ospf_gr_helper.c index bf6a45bcd..616013fb9 100644 --- a/ospfd/ospf_gr_helper.c +++ b/ospfd/ospf_gr_helper.c @@ -50,26 +50,26 @@ #include "ospfd/ospf_ism.h" #include "ospfd/ospf_gr_helper.h" -const char *ospf_exit_reason_desc[] = { +static const char * const ospf_exit_reason_desc[] = { "Unknown reason", "Helper inprogress", "Topology Change", - "Grace timer expairy", + "Grace timer expiry", "Successful graceful restart", }; -const char *ospf_restart_reason_desc[] = { +static const char * const ospf_restart_reason_desc[] = { "Unknown restart", "Software restart", "Software reload/upgrade", "Switch to redundant control processor", }; -const char *ospf_rejected_reason_desc[] = { +static const char * const ospf_rejected_reason_desc[] = { "Unknown reason", "Helper support disabled", "Neighbour is not in FULL state", - "Supports only planned restart but received for unplanned", + "Supports only planned restart but received unplanned", "Topo change due to change in lsa rxmt list", "LSA age is more than Grace interval", }; @@ -118,6 +118,39 @@ static void ospf_enable_rtr_hash_destroy(struct ospf *ospf) } /* + * GR exit reason strings + */ +const char *ospf_exit_reason2str(unsigned int reason) +{ + if (reason < array_size(ospf_exit_reason_desc)) + return(ospf_exit_reason_desc[reason]); + else + return "Invalid reason"; +} + +/* + * GR restart reason strings + */ +const char *ospf_restart_reason2str(unsigned int reason) +{ + if (reason < array_size(ospf_restart_reason_desc)) + return(ospf_restart_reason_desc[reason]); + else + return "Invalid reason"; +} + +/* + * GR rejected reason strings + */ +const char *ospf_rejected_reason2str(unsigned int reason) +{ + if (reason < array_size(ospf_rejected_reason_desc)) + return(ospf_rejected_reason_desc[reason]); + else + return "Invalid reason"; +} + +/* * Initialize GR helper config data structures. * * OSPF @@ -346,7 +379,8 @@ int ospf_process_grace_lsa(struct ospf *ospf, struct ospf_lsa *lsa, zlog_debug( "%s, Grace LSA received from %s, grace interval:%u, restartreason :%s", __PRETTY_FUNCTION__, inet_ntoa(restart_addr), - grace_interval, ospf_restart_reason_desc[restart_reason]); + grace_interval, + ospf_restart_reason2str(restart_reason)); /* Incase of broadcast links, if RESTARTER is DR_OTHER, * grace LSA might be received from DR, so need to get @@ -638,7 +672,7 @@ void ospf_gr_helper_exit(struct ospf_neighbor *nbr, if (IS_DEBUG_OSPF_GR_HELPER) zlog_debug("%s, Exiting from HELPER support to %s, due to %s", __PRETTY_FUNCTION__, inet_ntoa(nbr->src), - ospf_exit_reason_desc[reason]); + ospf_exit_reason2str(reason)); /* Reset helper status*/ nbr->gr_helper_info.gr_helper_status = OSPF_GR_NOT_HELPER; @@ -1018,7 +1052,7 @@ static void show_ospf_grace_lsa_info(struct vty *vty, struct ospf_lsa *lsa) sum += TLV_SIZE(tlvh); vty_out(vty, " Restart reason:%s\n", - ospf_restart_reason_desc[grReason->reason]); + ospf_restart_reason2str(grReason->reason)); break; case RESTARTER_IP_ADDR_TYPE: if (TLV_SIZE(tlvh) < diff --git a/ospfd/ospf_gr_helper.h b/ospfd/ospf_gr_helper.h index 4e83028fe..c355bb4f3 100644 --- a/ospfd/ospf_gr_helper.h +++ b/ospfd/ospf_gr_helper.h @@ -152,9 +152,9 @@ struct advRtr { #define OSPF_GR_FAILURE 0 #define OSPF_GR_INVALID -1 -extern const char *ospf_exit_reason_desc[]; -extern const char *ospf_restart_reason_desc[]; -extern const char *ospf_rejected_reason_desc[]; +const char *ospf_exit_reason2str(unsigned int reason); +const char *ospf_restart_reason2str(unsigned int reason); +const char *ospf_rejected_reason2str(unsigned int reason); extern void ospf_gr_helper_init(struct ospf *ospf); extern void ospf_gr_helper_stop(struct ospf *ospf); diff --git a/ospfd/ospf_vty.c b/ospfd/ospf_vty.c index 87c1c91af..5c82e1139 100644 --- a/ospfd/ospf_vty.c +++ b/ospfd/ospf_vty.c @@ -5132,9 +5132,8 @@ static void show_ip_ospf_neighbor_detail_sub(struct vty *vty, " Graceful Restart grace period time: %d (seconds).\n", nbr->gr_helper_info.recvd_grace_period); vty_out(vty, " Graceful Restart reason: %s.\n", - ospf_restart_reason_desc - [nbr->gr_helper_info - .gr_restart_reason]); + ospf_restart_reason2str( + nbr->gr_helper_info.gr_restart_reason)); } else { vty_out(vty, " Graceful Restart HELPER Status : None\n"); @@ -5143,15 +5142,14 @@ static void show_ip_ospf_neighbor_detail_sub(struct vty *vty, if (nbr->gr_helper_info.rejected_reason != OSPF_HELPER_REJECTED_NONE) vty_out(vty, " Helper rejected reason: %s.\n", - ospf_rejected_reason_desc - [nbr->gr_helper_info.rejected_reason]); + ospf_rejected_reason2str( + nbr->gr_helper_info.rejected_reason)); if (nbr->gr_helper_info.helper_exit_reason != OSPF_GR_HELPER_EXIT_NONE) vty_out(vty, " Last helper exit reason: %s.\n\n", - ospf_exit_reason_desc - [nbr->gr_helper_info - .helper_exit_reason]); + ospf_exit_reason2str( + nbr->gr_helper_info.helper_exit_reason)); else vty_out(vty, "\n"); } else { @@ -5165,25 +5163,24 @@ static void show_ip_ospf_neighbor_detail_sub(struct vty *vty, nbr->gr_helper_info.recvd_grace_period); json_object_string_add( json_neigh, "grRestartReason", - ospf_restart_reason_desc - [nbr->gr_helper_info - .gr_restart_reason]); + ospf_restart_reason2str( + nbr->gr_helper_info.gr_restart_reason)); } if (nbr->gr_helper_info.rejected_reason != OSPF_HELPER_REJECTED_NONE) json_object_string_add( json_neigh, "helperRejectReason", - ospf_rejected_reason_desc - [nbr->gr_helper_info.rejected_reason]); + ospf_rejected_reason2str( + nbr->gr_helper_info.rejected_reason)); if (nbr->gr_helper_info.helper_exit_reason != OSPF_GR_HELPER_EXIT_NONE) json_object_string_add( json_neigh, "helperExitReason", - ospf_exit_reason_desc - [nbr->gr_helper_info - .helper_exit_reason]); + ospf_exit_reason2str( + nbr->gr_helper_info + .helper_exit_reason)); } ospf_bfd_show_info(vty, nbr->bfd_info, json_neigh, use_json, 0); @@ -9308,7 +9305,7 @@ static int ospf_show_gr_helper_details(struct vty *vty, struct ospf *ospf, if (ospf->last_exit_reason != OSPF_GR_HELPER_EXIT_NONE) { vty_out(vty, " Last Helper exit Reason :%s\n", - ospf_exit_reason_desc[ospf->last_exit_reason]); + ospf_exit_reason2str(ospf->last_exit_reason)); } if (ospf->active_restarter_cnt) @@ -9337,7 +9334,7 @@ static int ospf_show_gr_helper_details(struct vty *vty, struct ospf *ospf, if (ospf->last_exit_reason != OSPF_GR_HELPER_EXIT_NONE) json_object_string_add( json_vrf, "LastExitReason", - ospf_exit_reason_desc[ospf->last_exit_reason]); + ospf_exit_reason2str(ospf->last_exit_reason)); if (ospf->active_restarter_cnt) json_object_int_add(json_vrf, "activeRestarterCnt", @@ -9402,9 +9399,9 @@ static int ospf_show_gr_helper_details(struct vty *vty, struct ospf *ospf, .t_grace_timer)); vty_out(vty, " Graceful Restart reason: %s.\n\n", - ospf_restart_reason_desc - [nbr->gr_helper_info - .gr_restart_reason]); + ospf_restart_reason2str( + nbr->gr_helper_info + .gr_restart_reason)); cnt++; } else { json_neigh = json_object_new_object(); @@ -9432,9 +9429,9 @@ static int ospf_show_gr_helper_details(struct vty *vty, struct ospf *ospf, .t_grace_timer)); json_object_string_add( json_neigh, "restartReason", - ospf_restart_reason_desc - [nbr->gr_helper_info - .gr_restart_reason]); + ospf_restart_reason2str( + nbr->gr_helper_info + .gr_restart_reason)); json_object_object_add( json_neighbors, inet_ntoa(nbr->src), |