summaryrefslogtreecommitdiffstats
path: root/ospfd
diff options
context:
space:
mode:
authorDonald Sharp <sharpd@cumulusnetworks.com>2018-08-21 03:52:55 +0200
committerQuentin Young <qlyoung@cumulusnetworks.com>2018-09-06 22:50:58 +0200
commit89f60109a7fc7f8d5a1280379915cdd174af84c9 (patch)
tree1157c141284a3e48bbf7f0431e628d96457098fb /ospfd
parentospfd: Add OSPF_WARN_LSA_INSTALL_FAILURE error code (diff)
downloadfrr-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.c14
-rw-r--r--ospfd/ospf_errors.h4
-rw-r--r--ospfd/ospf_ext.c92
-rw-r--r--ospfd/ospf_sr.c2
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);