From 34f74c7a37fbae349a4a2721443417cb3bc89f05 Mon Sep 17 00:00:00 2001 From: Donald Sharp Date: Mon, 20 Aug 2018 19:26:59 -0400 Subject: [PATCH] lib: Convert ospf_opaque.c to use the err-card system Signed-off-by: Donald Sharp --- ospfd/ospf_errors.c | 13 +++ ospfd/ospf_errors.h | 2 + ospfd/ospf_opaque.c | 198 ++++++++++++++++++++++++-------------------- 3 files changed, 122 insertions(+), 91 deletions(-) diff --git a/ospfd/ospf_errors.c b/ospfd/ospf_errors.c index ea6199bb44..7c885a8cd0 100644 --- a/ospfd/ospf_errors.c +++ b/ospfd/ospf_errors.c @@ -49,6 +49,18 @@ static struct log_ref ferr_ospf_warn[] = { .description = "OSPF has received data that is causing it to recalculate how large packets should be and has discovered that the packet size needed would be too large and we will need to fragment packets", .suggestion = "Further divide up your network with areas", }, + { + .code = OSPF_WARN_LSA_UNEXPECTED, + .title = "OSPF has received a LSA-type that it was not expecting", + .description = "OSPF has received a LSA-type that it was not expecting during processing", + .suggestion = "Gather log data from this machine and it's peer and open an Issue", + }, + { + .code = OSPF_WARN_LSA, + .title = "OSPF has discovered inconsistent internal state for a LSA", + .description = "During handling of a LSA, OSPF has discovered that the LSA's internal state is inconsistent", + .suggestion = "Gather log data and open an Issue", + }, { .code = END_FERR, } @@ -107,6 +119,7 @@ static struct log_ref ferr_ospf_err[] = { .code = END_FERR, } }; +/* clang-format on */ void ospf_error_init(void) { diff --git a/ospfd/ospf_errors.h b/ospfd/ospf_errors.h index da7ef0dd8e..5d7531687d 100644 --- a/ospfd/ospf_errors.h +++ b/ospfd/ospf_errors.h @@ -36,6 +36,8 @@ enum ospf_log_refs { OSPF_WARN_MD5, OSPF_WARN_PACKET, OSPF_WARN_LARGE_LSA, + OSPF_WARN_LSA_UNEXPECTED, + OSPF_WARN_LSA, }; extern void ospf_error_init(void); diff --git a/ospfd/ospf_opaque.c b/ospfd/ospf_opaque.c index be62eb3906..9066dda738 100644 --- a/ospfd/ospf_opaque.c +++ b/ospfd/ospf_opaque.c @@ -54,6 +54,7 @@ #include "ospfd/ospf_sr.h" #include "ospfd/ospf_ri.h" #include "ospfd/ospf_ext.h" +#include "ospfd/ospf_errors.h" DEFINE_MTYPE_STATIC(OSPFD, OSPF_OPAQUE_FUNCTAB, "OSPF opaque function table") DEFINE_MTYPE_STATIC(OSPFD, OPAQUE_INFO_PER_TYPE, "OSPF opaque per-type info") @@ -352,7 +353,8 @@ static struct list *ospf_get_opaque_funclist(uint8_t lsa_type) funclist = ospf_opaque_type11_funclist; break; default: - zlog_warn("ospf_get_opaque_funclist: Unexpected LSA-type(%u)", + flog_warn(OSPF_WARN_LSA_UNEXPECTED, + "ospf_get_opaque_funclist: Unexpected LSA-type(%u)", lsa_type); break; } @@ -377,27 +379,21 @@ int ospf_register_opaque_functab( { struct list *funclist; struct ospf_opaque_functab *new; - int rc = -1; - if ((funclist = ospf_get_opaque_funclist(lsa_type)) == NULL) { - zlog_warn( - "ospf_register_opaque_functab: Cannot get funclist" - " for Type-%u LSAs?", - lsa_type); - goto out; - } else { - struct listnode *node, *nnode; - struct ospf_opaque_functab *functab; + if ((funclist = ospf_get_opaque_funclist(lsa_type)) == NULL) + return -1; - for (ALL_LIST_ELEMENTS(funclist, node, nnode, functab)) - if (functab->opaque_type == opaque_type) { - zlog_warn( - "ospf_register_opaque_functab: Duplicated entry?:" - " lsa_type(%u), opaque_type(%u)", - lsa_type, opaque_type); - goto out; - } - } + struct listnode *node, *nnode; + struct ospf_opaque_functab *functab; + + for (ALL_LIST_ELEMENTS(funclist, node, nnode, functab)) + if (functab->opaque_type == opaque_type) { + flog_warn( + OSPF_WARN_LSA, + "ospf_register_opaque_functab: Duplicated entry?: lsa_type(%u), opaque_type(%u)", + lsa_type, opaque_type); + return -1; + } new = XCALLOC(MTYPE_OSPF_OPAQUE_FUNCTAB, sizeof(struct ospf_opaque_functab)); @@ -418,10 +414,8 @@ int ospf_register_opaque_functab( new->del_lsa_hook = del_lsa_hook; listnode_add(funclist, new); - rc = 0; -out: - return rc; + return 0; } void ospf_delete_opaque_functab(uint8_t lsa_type, uint8_t opaque_type) @@ -573,7 +567,8 @@ register_opaque_info_per_type(struct ospf_opaque_functab *functab, listnode_add(top->opaque_lsa_self, oipt); break; default: - zlog_warn( + flog_warn( + OSPF_WARN_LSA_UNEXPECTED, "register_opaque_info_per_type: Unexpected LSA-type(%u)", new->data->type); free_opaque_info_per_type((void *)oipt); @@ -618,7 +613,8 @@ static void free_opaque_info_owner(void *val) break; } default: - zlog_warn("free_opaque_info_owner: Unexpected LSA-type(%u)", + flog_warn(OSPF_WARN_LSA_UNEXPECTED, + "free_opaque_info_owner: Unexpected LSA-type(%u)", oipt->lsa_type); break; /* This case may not exist. */ } @@ -662,27 +658,31 @@ lookup_opaque_info_by_type(struct ospf_lsa *lsa) if ((oi = lsa->oi) != NULL) listtop = oi->opaque_lsa_self; else - zlog_warn( + flog_warn( + OSPF_WARN_LSA, "Type-9 Opaque-LSA: Reference to OI is missing?"); break; case OSPF_OPAQUE_AREA_LSA: if ((area = lsa->area) != NULL) listtop = area->opaque_lsa_self; else - zlog_warn( + flog_warn( + OSPF_WARN_LSA, "Type-10 Opaque-LSA: Reference to AREA is missing?"); break; case OSPF_OPAQUE_AS_LSA: top = ospf_lookup_by_vrf_id(lsa->vrf_id); if ((area = lsa->area) != NULL && (top = area->ospf) == NULL) { - zlog_warn( + flog_warn( + OSPF_WARN_LSA, "Type-11 Opaque-LSA: Reference to OSPF is missing?"); break; /* Unlikely to happen. */ } listtop = top->opaque_lsa_self; break; default: - zlog_warn("lookup_opaque_info_by_type: Unexpected LSA-type(%u)", + flog_warn(OSPF_WARN_LSA_UNEXPECTED, + "lookup_opaque_info_by_type: Unexpected LSA-type(%u)", lsa->data->type); break; } @@ -1286,9 +1286,10 @@ void ospf_opaque_lsa_originate_schedule(struct ospf_interface *oi, int *delay0) int delay = 0; if ((top = oi_to_top(oi)) == NULL || (area = oi->area) == NULL) { - zlog_warn( - "ospf_opaque_lsa_originate_schedule: Invalid argument?"); - goto out; + if (IS_DEBUG_OSPF_EVENT) + zlog_debug( + "ospf_opaque_lsa_originate_schedule: Invalid argument?"); + return; } /* It may not a right time to schedule origination now. */ @@ -1296,7 +1297,7 @@ void ospf_opaque_lsa_originate_schedule(struct ospf_interface *oi, int *delay0) if (IS_DEBUG_OSPF_EVENT) zlog_debug( "ospf_opaque_lsa_originate_schedule: Not operational."); - goto out; /* This is not an error. */ + return; /* This is not an error. */ } if (delay0 != NULL) @@ -1443,9 +1444,6 @@ void ospf_opaque_lsa_originate_schedule(struct ospf_interface *oi, int *delay0) if (delay0 != NULL) *delay0 = delay; - -out: - return; } static int ospf_opaque_type9_lsa_originate(struct thread *t) @@ -1524,7 +1522,8 @@ static void ospf_opaque_lsa_reoriginate_resume(struct list *listtop, void *arg) continue; if ((*functab->lsa_originator)(arg) != 0) { - zlog_warn( + flog_warn( + OSPF_WARN_LSA, "ospf_opaque_lsa_reoriginate_resume: Failed (opaque-type=%u)", oipt->opaque_type); continue; @@ -1564,7 +1563,8 @@ struct ospf_lsa *ospf_opaque_lsa_install(struct ospf_lsa *lsa, int rt_recalc) } /* Register the new lsa entry and get its control info. */ else if ((oipi = register_opaque_lsa(lsa)) == NULL) { - zlog_warn("ospf_opaque_lsa_install: register_opaque_lsa() ?"); + flog_warn(OSPF_WARN_LSA, + "ospf_opaque_lsa_install: register_opaque_lsa() ?"); goto out; } @@ -1576,14 +1576,16 @@ struct ospf_lsa *ospf_opaque_lsa_install(struct ospf_lsa *lsa, int rt_recalc) case OSPF_OPAQUE_LINK_LSA: if ((top = oi_to_top(lsa->oi)) == NULL) { /* Above conditions must have passed. */ - zlog_warn("ospf_opaque_lsa_install: Sonmething wrong?"); + flog_warn(OSPF_WARN_LSA, + "ospf_opaque_lsa_install: Something wrong?"); goto out; } break; case OSPF_OPAQUE_AREA_LSA: if (lsa->area == NULL || (top = lsa->area->ospf) == NULL) { /* Above conditions must have passed. */ - zlog_warn("ospf_opaque_lsa_install: Sonmething wrong?"); + flog_warn(OSPF_WARN_LSA, + "ospf_opaque_lsa_install: Something wrong?"); goto out; } break; @@ -1591,12 +1593,14 @@ struct ospf_lsa *ospf_opaque_lsa_install(struct ospf_lsa *lsa, int rt_recalc) top = ospf_lookup_by_vrf_id(lsa->vrf_id); if (lsa->area != NULL && (top = lsa->area->ospf) == NULL) { /* Above conditions must have passed. */ - zlog_warn("ospf_opaque_lsa_install: Sonmething wrong?"); + flog_warn(OSPF_WARN_LSA, + "ospf_opaque_lsa_install: Something wrong?"); goto out; } break; default: - zlog_warn("ospf_opaque_lsa_install: Unexpected LSA-type(%u)", + flog_warn(OSPF_WARN_LSA_UNEXPECTED, + "ospf_opaque_lsa_install: Unexpected LSA-type(%u)", lsa->data->type); goto out; } @@ -1668,13 +1672,14 @@ void ospf_opaque_lsa_reoriginate_schedule(void *lsa_type_dependent, case OSPF_OPAQUE_LINK_LSA: if ((oi = (struct ospf_interface *)lsa_type_dependent) == NULL) { - zlog_warn( - "ospf_opaque_lsa_reoriginate_schedule:" - " Type-9 Opaque-LSA: Invalid parameter?"); + flog_warn( + OSPF_WARN_LSA, + "ospf_opaque_lsa_reoriginate_schedule: Type-9 Opaque-LSA: Invalid parameter?"); goto out; } if ((top = oi_to_top(oi)) == NULL) { - zlog_warn( + flog_warn( + OSPF_WARN_LSA, "ospf_opaque_lsa_reoriginate_schedule: OI(%s) -> TOP?", IF_NAME(oi)); goto out; @@ -1682,9 +1687,9 @@ void ospf_opaque_lsa_reoriginate_schedule(void *lsa_type_dependent, if (!list_isempty(ospf_opaque_type9_funclist) && list_isempty(oi->opaque_lsa_self) && oi->t_opaque_lsa_self != NULL) { - zlog_warn( - "Type-9 Opaque-LSA (opaque_type=%u):" - " Common origination for OI(%s) has already started", + flog_warn( + OSPF_WARN_LSA, + "Type-9 Opaque-LSA (opaque_type=%u): Common origination for OI(%s) has already started", opaque_type, IF_NAME(oi)); goto out; } @@ -1692,24 +1697,24 @@ void ospf_opaque_lsa_reoriginate_schedule(void *lsa_type_dependent, break; case OSPF_OPAQUE_AREA_LSA: if ((area = (struct ospf_area *)lsa_type_dependent) == NULL) { - zlog_warn( - "ospf_opaque_lsa_reoriginate_schedule:" - " Type-10 Opaque-LSA: Invalid parameter?"); + flog_warn( + OSPF_WARN_LSA, + "ospf_opaque_lsa_reoriginate_schedule: Type-10 Opaque-LSA: Invalid parameter?"); goto out; } if ((top = area->ospf) == NULL) { - zlog_warn( - "ospf_opaque_lsa_reoriginate_schedule:" - " AREA(%s) -> TOP?", + flog_warn( + OSPF_WARN_LSA, + "ospf_opaque_lsa_reoriginate_schedule: AREA(%s) -> TOP?", inet_ntoa(area->area_id)); goto out; } if (!list_isempty(ospf_opaque_type10_funclist) && list_isempty(area->opaque_lsa_self) && area->t_opaque_lsa_self != NULL) { - zlog_warn( - "Type-10 Opaque-LSA (opaque_type=%u):" - " Common origination for AREA(%s) has already started", + flog_warn( + OSPF_WARN_LSA, + "Type-10 Opaque-LSA (opaque_type=%u): Common origination for AREA(%s) has already started", opaque_type, inet_ntoa(area->area_id)); goto out; } @@ -1717,17 +1722,17 @@ void ospf_opaque_lsa_reoriginate_schedule(void *lsa_type_dependent, break; case OSPF_OPAQUE_AS_LSA: if ((top = (struct ospf *)lsa_type_dependent) == NULL) { - zlog_warn( - "ospf_opaque_lsa_reoriginate_schedule:" - " Type-11 Opaque-LSA: Invalid parameter?"); + flog_warn( + OSPF_WARN_LSA, + "ospf_opaque_lsa_reoriginate_schedule: Type-11 Opaque-LSA: Invalid parameter?"); goto out; } if (!list_isempty(ospf_opaque_type11_funclist) && list_isempty(top->opaque_lsa_self) && top->t_opaque_lsa_self != NULL) { - zlog_warn( - "Type-11 Opaque-LSA (opaque_type=%u):" - " Common origination has already started", + flog_warn( + OSPF_WARN_LSA, + "Type-11 Opaque-LSA (opaque_type=%u): Common origination has already started", opaque_type); goto out; } @@ -1739,9 +1744,9 @@ void ospf_opaque_lsa_reoriginate_schedule(void *lsa_type_dependent, func = ospf_opaque_type11_lsa_reoriginate_timer; break; default: - zlog_warn( - "ospf_opaque_lsa_reoriginate_schedule:" - " Unexpected LSA-type(%u)", + flog_warn( + OSPF_WARN_LSA_UNEXPECTED, + "ospf_opaque_lsa_reoriginate_schedule: Unexpected LSA-type(%u)", lsa_type); goto out; } @@ -1761,19 +1766,17 @@ void ospf_opaque_lsa_reoriginate_schedule(void *lsa_type_dependent, if ((oipt = lookup_opaque_info_by_type(lsa)) == NULL) { struct ospf_opaque_functab *functab; if ((functab = ospf_opaque_functab_lookup(lsa)) == NULL) { - zlog_warn( - "ospf_opaque_lsa_reoriginate_schedule:" - " No associated function?: lsa_type(%u)," - " opaque_type(%u)", + flog_warn( + OSPF_WARN_LSA, + "ospf_opaque_lsa_reoriginate_schedule: No associated function?: lsa_type(%u), opaque_type(%u)", lsa_type, opaque_type); goto out; } if ((oipt = register_opaque_info_per_type(functab, lsa)) == NULL) { - zlog_warn( - "ospf_opaque_lsa_reoriginate_schedule:" - " Cannot get a control info?: lsa_type(%u)," - " opaque_type(%u)", + flog_warn( + OSPF_WARN_LSA, + "ospf_opaque_lsa_reoriginate_schedule: Cannot get a control info?: lsa_type(%u), opaque_type(%u)", lsa_type, opaque_type); goto out; } @@ -1844,14 +1847,16 @@ static int ospf_opaque_type9_lsa_reoriginate_timer(struct thread *t) if ((functab = oipt->functab) == NULL || functab->lsa_originator == NULL) { - zlog_warn( + flog_warn( + OSPF_WARN_LSA, "ospf_opaque_type9_lsa_reoriginate_timer: No associated function?"); goto out; } oi = (struct ospf_interface *)oipt->owner; if ((top = oi_to_top(oi)) == NULL) { - zlog_warn( + flog_warn( + OSPF_WARN_LSA, "ospf_opaque_type9_lsa_reoriginate_timer: Something wrong?"); goto out; } @@ -1894,14 +1899,16 @@ static int ospf_opaque_type10_lsa_reoriginate_timer(struct thread *t) if ((functab = oipt->functab) == NULL || functab->lsa_originator == NULL) { - zlog_warn( + flog_warn( + OSPF_WARN_LSA, "ospf_opaque_type10_lsa_reoriginate_timer: No associated function?"); goto out; } area = (struct ospf_area *)oipt->owner; if (area == NULL || (top = area->ospf) == NULL) { - zlog_warn( + flog_warn( + OSPF_WARN_LSA, "ospf_opaque_type10_lsa_reoriginate_timer: Something wrong?"); goto out; } @@ -1948,14 +1955,15 @@ static int ospf_opaque_type11_lsa_reoriginate_timer(struct thread *t) if ((functab = oipt->functab) == NULL || functab->lsa_originator == NULL) { - zlog_warn( - "ospf_opaque_type11_lsa_reoriginate_timer:" - " No associated function?"); + flog_warn( + OSPF_WARN_LSA, + "ospf_opaque_type11_lsa_reoriginate_timer: No associated function?"); goto out; } if ((top = (struct ospf *)oipt->owner) == NULL) { - zlog_warn( + flog_warn( + OSPF_WARN_LSA, "ospf_opaque_type11_lsa_reoriginate_timer: Something wrong?"); goto out; } @@ -1991,14 +1999,16 @@ void ospf_opaque_lsa_refresh_schedule(struct ospf_lsa *lsa0) if ((oipt = lookup_opaque_info_by_type(lsa0)) == NULL || (oipi = lookup_opaque_info_by_id(oipt, lsa0)) == NULL) { - zlog_warn( + flog_warn( + OSPF_WARN_LSA, "ospf_opaque_lsa_refresh_schedule: Invalid parameter?"); goto out; } /* Given "lsa0" and current "oipi->lsa" may different, but harmless. */ if ((lsa = oipi->lsa) == NULL) { - zlog_warn("ospf_opaque_lsa_refresh_schedule: Something wrong?"); + flog_warn(OSPF_WARN_LSA, + "ospf_opaque_lsa_refresh_schedule: Something wrong?"); goto out; } @@ -2025,7 +2035,8 @@ void ospf_opaque_lsa_refresh_schedule(struct ospf_lsa *lsa0) ospf_ls_retransmit_delete_nbr_as(top, lsa); break; default: - zlog_warn( + flog_warn( + OSPF_WARN_LSA_UNEXPECTED, "ospf_opaque_lsa_refresh_schedule: Unexpected LSA-type(%u)", lsa->data->type); goto out; @@ -2077,13 +2088,15 @@ void ospf_opaque_lsa_flush_schedule(struct ospf_lsa *lsa0) if ((oipt = lookup_opaque_info_by_type(lsa0)) == NULL || (oipi = lookup_opaque_info_by_id(oipt, lsa0)) == NULL) { - zlog_warn("ospf_opaque_lsa_flush_schedule: Invalid parameter?"); + flog_warn(OSPF_WARN_LSA, + "ospf_opaque_lsa_flush_schedule: Invalid parameter?"); goto out; } /* Given "lsa0" and current "oipi->lsa" may different, but harmless. */ if ((lsa = oipi->lsa) == NULL) { - zlog_warn("ospf_opaque_lsa_flush_schedule: Something wrong?"); + flog_warn(OSPF_WARN_LSA, + "ospf_opaque_lsa_flush_schedule: Something wrong?"); goto out; } @@ -2099,7 +2112,8 @@ void ospf_opaque_lsa_flush_schedule(struct ospf_lsa *lsa0) ospf_ls_retransmit_delete_nbr_as(top, lsa); break; default: - zlog_warn( + flog_warn( + OSPF_WARN_LSA_UNEXPECTED, "ospf_opaque_lsa_flush_schedule: Unexpected LSA-type(%u)", lsa->data->type); goto out; @@ -2156,7 +2170,8 @@ void ospf_opaque_self_originated_lsa_received(struct ospf_neighbor *nbr, ospf_flood_through_as(top, NULL /*inbr*/, lsa); break; default: - zlog_warn( + flog_warn( + OSPF_WARN_LSA_UNEXPECTED, "ospf_opaque_self_originated_lsa_received: Unexpected LSA-type(%u)", lsa->data->type); return; @@ -2175,7 +2190,8 @@ struct ospf *oi_to_top(struct ospf_interface *oi) if (oi == NULL || (area = oi->area) == NULL || (top = area->ospf) == NULL) - zlog_warn("Broken relationship for \"OI -> AREA -> OSPF\"?"); + flog_warn(OSPF_WARN_LSA, + "Broken relationship for \"OI -> AREA -> OSPF\"?"); return top; } -- 2.39.5