summaryrefslogtreecommitdiff
path: root/ospfd/ospf_dump_api.c
diff options
context:
space:
mode:
authorQuentin Young <qlyoung@cumulusnetworks.com>2017-06-20 23:56:50 +0000
committerQuentin Young <qlyoung@cumulusnetworks.com>2017-06-21 15:22:21 +0000
commit56b40679304df9c4bfcfd5764af24f1d35b86142 (patch)
tree755de54cbc890545f73efe5f1f4d1843506d1860 /ospfd/ospf_dump_api.c
parentd368cd48b94cb9a22b9733200d8cfd94c71338ce (diff)
*: simplify log message lookup
log.c provides functionality for associating a constant (typically a protocol constant) with a string and finding the string given the constant. However this is highly delicate code that is extremely prone to stack overflows and off-by-one's due to requiring the developer to always remember to update the array size constant and to do so correctly which, as shown by example, is never a good idea.b The original goal of this code was to try to implement lookups in O(1) time without a linear search through the message array. Since this code is used 99% of the time for debugs, it's worth the 5-6 additional cmp's worst case if it means we avoid explitable bugs due to oversights... Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
Diffstat (limited to 'ospfd/ospf_dump_api.c')
-rw-r--r--ospfd/ospf_dump_api.c15
1 files changed, 7 insertions, 8 deletions
diff --git a/ospfd/ospf_dump_api.c b/ospfd/ospf_dump_api.c
index 54cc7fb666..09f5422ef5 100644
--- a/ospfd/ospf_dump_api.c
+++ b/ospfd/ospf_dump_api.c
@@ -40,8 +40,8 @@ const struct message ospf_ism_state_msg[] =
{ ISM_DROther, "DROther" },
{ ISM_Backup, "Backup" },
{ ISM_DR, "DR" },
+ { 0 }
};
-const int ospf_ism_state_msg_max = OSPF_ISM_STATE_MAX;
const struct message ospf_nsm_state_msg[] =
{
@@ -55,8 +55,8 @@ const struct message ospf_nsm_state_msg[] =
{ NSM_Exchange, "Exchange" },
{ NSM_Loading, "Loading" },
{ NSM_Full, "Full" },
+ { 0 }
};
-const int ospf_nsm_state_msg_max = OSPF_NSM_STATE_MAX;
const struct message ospf_lsa_type_msg[] =
{
@@ -72,8 +72,8 @@ const struct message ospf_lsa_type_msg[] =
{ OSPF_OPAQUE_LINK_LSA, "Link-Local Opaque-LSA" },
{ OSPF_OPAQUE_AREA_LSA, "Area-Local Opaque-LSA" },
{ OSPF_OPAQUE_AS_LSA, "AS-external Opaque-LSA" },
+ { 0 }
};
-const int ospf_lsa_type_msg_max = OSPF_MAX_LSA;
const struct message ospf_link_state_id_type_msg[] =
{
@@ -89,8 +89,8 @@ const struct message ospf_link_state_id_type_msg[] =
{ OSPF_OPAQUE_LINK_LSA, "(Link-Local Opaque-Type/ID)" },
{ OSPF_OPAQUE_AREA_LSA, "(Area-Local Opaque-Type/ID)" },
{ OSPF_OPAQUE_AS_LSA, "(AS-external Opaque-Type/ID)" },
+ { 0 }
};
-const int ospf_link_state_id_type_msg_max = OSPF_MAX_LSA;
const struct message ospf_network_type_msg[] =
{
@@ -100,8 +100,8 @@ const struct message ospf_network_type_msg[] =
{ OSPF_IFTYPE_NBMA, "NBMA" },
{ OSPF_IFTYPE_POINTOMULTIPOINT, "Point-to-MultiPoint" },
{ OSPF_IFTYPE_VIRTUALLINK, "Virtual-Link" },
+ { 0 }
};
-const int ospf_network_type_msg_max = OSPF_IFTYPE_MAX;
/* AuType */
const struct message ospf_auth_type_str[] =
@@ -109,9 +109,8 @@ const struct message ospf_auth_type_str[] =
{ OSPF_AUTH_NULL, "Null" },
{ OSPF_AUTH_SIMPLE, "Simple" },
{ OSPF_AUTH_CRYPTOGRAPHIC, "Cryptographic" },
+ { 0 }
};
-const size_t ospf_auth_type_str_max = sizeof (ospf_auth_type_str) /
- sizeof (ospf_auth_type_str[0]);
#define OSPF_OPTION_STR_MAXLEN 24
@@ -135,7 +134,7 @@ ospf_options_dump (u_char options)
void
ospf_lsa_header_dump (struct lsa_header *lsah)
{
- const char *lsah_type = LOOKUP (ospf_lsa_type_msg, lsah->type);
+ const char *lsah_type = lookup_msg(ospf_lsa_type_msg, lsah->type, NULL);
zlog_debug (" LSA Header");
zlog_debug (" LS age %d", ntohs (lsah->ls_age));