diff options
author | Donald Sharp <sharpd@cumulusnetworks.com> | 2018-08-21 03:52:55 +0200 |
---|---|---|
committer | Quentin Young <qlyoung@cumulusnetworks.com> | 2018-09-06 22:50:58 +0200 |
commit | 89f60109a7fc7f8d5a1280379915cdd174af84c9 (patch) | |
tree | 1157c141284a3e48bbf7f0431e628d96457098fb /ospfd | |
parent | ospfd: Add OSPF_WARN_LSA_INSTALL_FAILURE error code (diff) | |
download | frr-89f60109a7fc7f8d5a1280379915cdd174af84c9.tar.xz frr-89f60109a7fc7f8d5a1280379915cdd174af84c9.zip |
ospfd: Convert ospf_ext.c to use new error-code subsystem
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Diffstat (limited to 'ospfd')
-rw-r--r-- | ospfd/ospf_errors.c | 14 | ||||
-rw-r--r-- | ospfd/ospf_errors.h | 4 | ||||
-rw-r--r-- | ospfd/ospf_ext.c | 92 | ||||
-rw-r--r-- | ospfd/ospf_sr.c | 2 |
4 files changed, 62 insertions, 50 deletions
diff --git a/ospfd/ospf_errors.c b/ospfd/ospf_errors.c index a597b075d..25c211cf6 100644 --- a/ospfd/ospf_errors.c +++ b/ospfd/ospf_errors.c @@ -80,6 +80,18 @@ static struct log_ref ferr_ospf_warn[] = { .suggestion = "Gather log data from this machine and open an Issue", }, { + .code = OSPF_WARN_LSA_NULL, + .title = "OSPF has received a NULL lsa pointer", + .description = "When processing a LSA update we have found and noticed an internal error where we are passing around a NULL pointer", + .suggestion = "Gather data from this machine and it's peer and open an Issue", + }, + { + .code = OSPF_WARN_EXT_LSA_UNEXPECTED, + .title = "OSPF has received EXT information that leaves it in an unexpected state", + .description = "While processing EXT LSA information, OSPF has noticed that the internal state of OSPF has gotten inconsistent", + .suggestion = "Gather data from this machine and it's peer and open an Issue", + }, + { .code = END_FERR, } }; @@ -128,7 +140,7 @@ static struct log_ref ferr_ospf_err[] = { .suggestion = "Restart OSPF instance, If the problem persists, report the problem for troubleshooting" }, { - .code = OSPF_ERR_SR_INVALID_ALGORITHM, + .code = OSPF_ERR_INVALID_ALGORITHM, .title = "OSPF SR Invalid Algorithm", .description = "OSPF Segment Routing invalid Algorithm", .suggestion = "Most likely a bug. If the problem persists, report the problem for troubleshooting" diff --git a/ospfd/ospf_errors.h b/ospfd/ospf_errors.h index 721d8e08d..d6f2eb753 100644 --- a/ospfd/ospf_errors.h +++ b/ospfd/ospf_errors.h @@ -31,7 +31,7 @@ enum ospf_log_refs { OSPF_ERR_SR_INVALID_DB, OSPF_ERR_SR_NODE_CREATE, OSPF_ERR_SR_INVALID_LSA_ID, - OSPF_ERR_SR_INVALID_ALGORITHM, + OSPF_ERR_INVALID_ALGORITHM, OSPF_WARN_SET_METRIC_PLUS, OSPF_WARN_MD5, OSPF_WARN_PACKET, @@ -41,6 +41,8 @@ enum ospf_log_refs { OSPF_WARN_OPAQUE_REGISTRATION, OSPF_WARN_TE_UNEXPECTED, OSPF_WARN_LSA_INSTALL_FAILURE, + OSPF_WARN_LSA_NULL, + OSPF_WARN_EXT_LSA_UNEXPECTED, }; extern void ospf_error_init(void); diff --git a/ospfd/ospf_ext.c b/ospfd/ospf_ext.c index 280c9b786..018ca5c0f 100644 --- a/ospfd/ospf_ext.c +++ b/ospfd/ospf_ext.c @@ -177,12 +177,8 @@ int ospf_ext_init(void) void ospf_ext_term(void) { - if ((OspfEXT.scope != OSPF_OPAQUE_AREA_LSA) - && (OspfEXT.scope != OSPF_OPAQUE_AS_LSA)) - zlog_warn( - "EXT: Unable to unregister Extended Prefix " - "Opaque LSA functions: Wrong scope!"); - else + if ((OspfEXT.scope == OSPF_OPAQUE_AREA_LSA) + || (OspfEXT.scope == OSPF_OPAQUE_AS_LSA)) ospf_delete_opaque_functab(OspfEXT.scope, OPAQUE_TYPE_EXTENDED_PREFIX_LSA); @@ -319,8 +315,9 @@ static void set_prefix_sid(struct ext_itf *exti, uint8_t algorithm, if ((algorithm != SR_ALGORITHM_SPF) && (algorithm != SR_ALGORITHM_STRICT_SPF)) { - zlog_warn("EXT (%s): unrecognized algorithm, not SPF or S-SPF", - __func__); + flog_err(OSPF_ERR_INVALID_ALGORITHM, + "EXT (%s): unrecognized algorithm, not SPF or S-SPF", + __func__); return; } @@ -574,7 +571,8 @@ static int ospf_ext_link_del_if(struct interface *ifp) rc = 0; } else { - zlog_warn("EXT (%s): interface %s is not found", __func__, + flog_warn(OSPF_WARN_EXT_LSA_UNEXPECTED, + "EXT (%s): interface %s is not found", __func__, ifp ? ifp->name : "-"); } @@ -591,11 +589,8 @@ static void ospf_ext_link_ism_change(struct ospf_interface *oi, int old_status) /* Get interface information for Segment Routing */ exti = lookup_ext_by_ifp(oi->ifp); - if (exti == NULL) { - zlog_warn("EXT (%s): Cannot get Extended info. from OI(%s)", - __func__, IF_NAME(oi)); + if (exti == NULL) return; - } /* Determine if interface is related to Adjacency or LAN Adj. SID */ if (oi->type != OSPF_IFTYPE_LOOPBACK) { @@ -624,7 +619,8 @@ static void ospf_ext_pref_ism_change(struct ospf_interface *oi, int old_status) /* Get interface information for Segment Routing */ exti = lookup_ext_by_ifp(oi->ifp); if (exti == NULL) { - zlog_warn("EXT (%s): Cannot get Extended info. from OI(%s)", + flog_warn(OSPF_WARN_EXT_LSA_UNEXPECTED, + "EXT (%s): Cannot get Extended info. from OI(%s)", __func__, IF_NAME(oi)); return; } @@ -661,13 +657,15 @@ static void ospf_ext_link_nsm_change(struct ospf_neighbor *nbr, int old_status) /* Get interface information for Segment Routing */ exti = lookup_ext_by_ifp(oi->ifp); if (exti == NULL) { - zlog_warn("EXT (%s): Cannot get Extended info. from OI(%s)", + flog_warn(OSPF_WARN_EXT_LSA_UNEXPECTED, + "EXT (%s): Cannot get Extended info. from OI(%s)", __func__, IF_NAME(oi)); return; } if (oi->area == NULL || oi->area->ospf == NULL) { - zlog_warn("EXT (%s): Cannot refer to OSPF from OI(%s)", + flog_warn(OSPF_WARN_EXT_LSA_UNEXPECTED, + "EXT (%s): Cannot refer to OSPF from OI(%s)", __func__, IF_NAME(oi)); return; } @@ -762,7 +760,8 @@ static int ospf_ext_link_lsa_update(struct ospf_lsa *lsa) { /* Sanity Check */ if (lsa == NULL) { - zlog_warn("EXT (%s): Abort! LSA is NULL", __func__); + flog_warn(OSPF_WARN_LSA_NULL, + "EXT (%s): Abort! LSA is NULL", __func__); return -1; } @@ -795,7 +794,8 @@ static int ospf_ext_pref_lsa_update(struct ospf_lsa *lsa) /* Sanity Check */ if (lsa == NULL) { - zlog_warn("EXT (%s): Abort! LSA is NULL", __func__); + flog_warn(OSPF_WARN_LSA_NULL, + "EXT (%s): Abort! LSA is NULL", __func__); return -1; } @@ -1062,7 +1062,8 @@ static int ospf_ext_pref_lsa_originate1(struct ospf_area *area, /* Create new Opaque-LSA/Extended Prefix Opaque LSA instance. */ new = ospf_ext_pref_lsa_new(area, exti); if (new == NULL) { - zlog_warn("EXT (%s): ospf_ext_pref_lsa_new() error", __func__); + flog_warn(OSPF_WARN_EXT_LSA_UNEXPECTED, + "EXT (%s): ospf_ext_pref_lsa_new() error", __func__); return rc; } @@ -1115,7 +1116,8 @@ static int ospf_ext_link_lsa_originate1(struct ospf_area *area, /* Create new Opaque-LSA/Extended Link Opaque LSA instance. */ new = ospf_ext_link_lsa_new(area, exti); if (new == NULL) { - zlog_warn("EXT (%s): ospf_ext_link_lsa_new() error", __func__); + flog_warn(OSPF_WARN_EXT_LSA_UNEXPECTED, + "EXT (%s): ospf_ext_link_lsa_new() error", __func__); return rc; } @@ -1188,9 +1190,8 @@ static int ospf_ext_pref_lsa_originate(void *arg) if (CHECK_FLAG(exti->flags, EXT_LPFLG_LSA_ENGAGED)) { if (CHECK_FLAG(exti->flags, EXT_LPFLG_LSA_FORCED_REFRESH)) { - zlog_warn( - "EXT (%s): Refresh instead of " - "Originate", + flog_warn(OSPF_WARN_EXT_LSA_UNEXPECTED, + "EXT (%s): Refresh instead of Originate", __func__); UNSET_FLAG(exti->flags, EXT_LPFLG_LSA_FORCED_REFRESH); @@ -1246,10 +1247,9 @@ static int ospf_ext_link_lsa_originate(void *arg) if (CHECK_FLAG(exti->flags, EXT_LPFLG_LSA_ENGAGED)) { if (CHECK_FLAG(exti->flags, EXT_LPFLG_LSA_FORCED_REFRESH)) { - zlog_warn( - "EXT (%s): Refresh instead of " - "Originate", - __func__); + flog_warn(OSPF_WARN_EXT_LSA_UNEXPECTED, + "EXT (%s): Refresh instead of Originate", + __func__); UNSET_FLAG(exti->flags, EXT_LPFLG_LSA_FORCED_REFRESH); ospf_ext_link_lsa_schedule(exti, @@ -1298,14 +1298,16 @@ static struct ospf_lsa *ospf_ext_pref_lsa_refresh(struct ospf_lsa *lsa) /* Lookup this lsa corresponding Extended parameters */ exti = lookup_ext_by_instance(lsa); if (exti == NULL) { - zlog_warn("EXT (%s): Invalid parameter LSA ID", __func__); + flog_warn(OSPF_WARN_EXT_LSA_UNEXPECTED, + "EXT (%s): Invalid parameter LSA ID", __func__); /* Flush it anyway. */ lsa->data->ls_age = htons(OSPF_LSA_MAXAGE); } /* Check if Interface was not disable in the interval */ if ((exti != NULL) && !CHECK_FLAG(exti->flags, EXT_LPFLG_LSA_ACTIVE)) { - zlog_warn("EXT (%s): Interface was Disabled: Flush it!", + flog_warn(OSPF_WARN_EXT_LSA_UNEXPECTED, + "EXT (%s): Interface was Disabled: Flush it!", __func__); /* Flush it anyway. */ lsa->data->ls_age = htons(OSPF_LSA_MAXAGE); @@ -1323,7 +1325,8 @@ static struct ospf_lsa *ospf_ext_pref_lsa_refresh(struct ospf_lsa *lsa) new = ospf_ext_pref_lsa_new(area, exti); if (new == NULL) { - zlog_warn("EXT (%s): ospf_ext_pref_lsa_new() error", __func__); + flog_warn(OSPF_WARN_EXT_LSA_UNEXPECTED, + "EXT (%s): ospf_ext_pref_lsa_new() error", __func__); return NULL; } new->data->ls_seqnum = lsa_seqnum_increment(lsa); @@ -1382,14 +1385,16 @@ static struct ospf_lsa *ospf_ext_link_lsa_refresh(struct ospf_lsa *lsa) /* Lookup this LSA corresponding Extended parameters */ exti = lookup_ext_by_instance(lsa); if (exti == NULL) { - zlog_warn("EXT (%s): Invalid parameter LSA ID", __func__); + flog_warn(OSPF_WARN_EXT_LSA_UNEXPECTED, + "EXT (%s): Invalid parameter LSA ID", __func__); /* Flush it anyway. */ lsa->data->ls_age = htons(OSPF_LSA_MAXAGE); } /* Check if Interface was not disable in the interval */ if ((exti != NULL) && !CHECK_FLAG(exti->flags, EXT_LPFLG_LSA_ACTIVE)) { - zlog_warn("EXT (%s): Interface was Disabled: Flush it!", + flog_warn(OSPF_WARN_EXT_LSA_UNEXPECTED, + "EXT (%s): Interface was Disabled: Flush it!", __func__); lsa->data->ls_age = htons(OSPF_LSA_MAXAGE); } @@ -1405,7 +1410,8 @@ static struct ospf_lsa *ospf_ext_link_lsa_refresh(struct ospf_lsa *lsa) /* Create new Opaque-LSA/Extended Link instance */ new = ospf_ext_link_lsa_new(area, exti); if (new == NULL) { - zlog_warn("EXT (%s): Error creating new LSA", __func__); + flog_warn(OSPF_WARN_EXT_LSA_UNEXPECTED, + "EXT (%s): Error creating new LSA", __func__); return NULL; } new->data->ls_seqnum = lsa_seqnum_increment(lsa); @@ -1461,10 +1467,9 @@ static void ospf_ext_pref_lsa_schedule(struct ext_itf *exti, /* Set LSA header information */ if (exti->area == NULL) { - zlog_warn( - "EXT (%s): Flooding is Area scope but area is not yet " - "set", - __func__); + flog_warn(OSPF_WARN_EXT_LSA_UNEXPECTED, + "EXT (%s): Flooding is Area scope but area is not yet set", + __func__); if (OspfEXT.area == NULL) { top = ospf_lookup_by_vrf_id(VRF_DEFAULT); OspfEXT.area = ospf_area_lookup_by_area_id( @@ -1491,9 +1496,6 @@ static void ospf_ext_pref_lsa_schedule(struct ext_itf *exti, UNSET_FLAG(exti->flags, EXT_LPFLG_LSA_ENGAGED); ospf_opaque_lsa_flush_schedule(&lsa); break; - default: - zlog_warn("EXT (%s): Unknown opcode", __func__); - break; } } @@ -1525,10 +1527,9 @@ static void ospf_ext_link_lsa_schedule(struct ext_itf *exti, /* Set LSA header information */ if (exti->area == NULL) { - zlog_warn( - "EXT (%s): Flooding is Area scope but area is not " - "yet set", - __func__); + flog_warn(OSPF_WARN_EXT_LSA_UNEXPECTED, + "EXT (%s): Flooding is Area scope but area is not yet set", + __func__); if (OspfEXT.area == NULL) { top = ospf_lookup_by_vrf_id(VRF_DEFAULT); OspfEXT.area = ospf_area_lookup_by_area_id( @@ -1555,9 +1556,6 @@ static void ospf_ext_link_lsa_schedule(struct ext_itf *exti, UNSET_FLAG(exti->flags, EXT_LPFLG_LSA_ENGAGED); ospf_opaque_lsa_flush_schedule(&lsa); break; - default: - zlog_warn("EXT (%s): Unknown opcode", __func__); - break; } } diff --git a/ospfd/ospf_sr.c b/ospfd/ospf_sr.c index fc8899cc8..2c6b3499e 100644 --- a/ospfd/ospf_sr.c +++ b/ospfd/ospf_sr.c @@ -817,7 +817,7 @@ static struct sr_prefix *get_ext_prefix_sid(struct tlv_header *tlvh) case EXT_SUBTLV_PREFIX_SID: psid = (struct ext_subtlv_prefix_sid *)sub_tlvh; if (psid->algorithm != SR_ALGORITHM_SPF) { - flog_err(OSPF_ERR_SR_INVALID_ALGORITHM, + flog_err(OSPF_ERR_INVALID_ALGORITHM, "SR (%s): Unsupported Algorithm", __func__); XFREE(MTYPE_OSPF_SR_PARAMS, srp); |