summaryrefslogtreecommitdiff
path: root/ospf6d/ospf6_lsa.c
diff options
context:
space:
mode:
authorVincent JARDIN <vincent.jardin@6wind.com>2017-10-08 18:20:12 +0200
committerVincent JARDIN <vincent.jardin@6wind.com>2017-10-08 23:06:57 +0200
commit3981b5c7f3232086aecd35e56bbeb4b5116c8469 (patch)
treead2a5bb75b4b5b831641a343cd34a99a534a4707 /ospf6d/ospf6_lsa.c
parent21cf6b211badb0a4a2de8995e562f815255c2ab7 (diff)
ospf6d: fix clang warning, NULL() calls
Avoid show() methods from being a NULL function when it is called. Meanwhile, I did const'ify the handlers so only its debug field can be changed. Signed-off-by: Vincent Jardin <vincent.jardin@6wind.com>
Diffstat (limited to 'ospf6d/ospf6_lsa.c')
-rw-r--r--ospf6d/ospf6_lsa.c68
1 files changed, 39 insertions, 29 deletions
diff --git a/ospf6d/ospf6_lsa.c b/ospf6d/ospf6_lsa.c
index a0dad9344a..82f75b153e 100644
--- a/ospf6d/ospf6_lsa.c
+++ b/ospf6d/ospf6_lsa.c
@@ -68,19 +68,25 @@ static int ospf6_unknown_lsa_show(struct vty *vty, struct ospf6_lsa *lsa)
return 0;
}
-struct ospf6_lsa_handler unknown_handler = {
- OSPF6_LSTYPE_UNKNOWN, "Unknown", "Unk", ospf6_unknown_lsa_show, NULL};
+static struct ospf6_lsa_handler unknown_handler = {
+ .lh_type = OSPF6_LSTYPE_UNKNOWN,
+ .lh_name = "Unknown",
+ .lh_short_name = "Unk",
+ .lh_show = ospf6_unknown_lsa_show,
+ .lh_get_prefix_str = NULL,
+ .lh_debug = 0 /* No default debug */
+};
-void ospf6_install_lsa_handler(struct ospf6_lsa_handler *handler)
+void ospf6_install_lsa_handler(const struct ospf6_lsa_handler *handler)
{
/* type in handler is host byte order */
- int index = handler->type & OSPF6_LSTYPE_FCODE_MASK;
- vector_set_index(ospf6_lsa_handler_vector, index, handler);
+ int index = handler->lh_type & OSPF6_LSTYPE_FCODE_MASK;
+ vector_set_index(ospf6_lsa_handler_vector, index, (void *)handler);
}
-struct ospf6_lsa_handler *ospf6_get_lsa_handler(u_int16_t type)
+const struct ospf6_lsa_handler *ospf6_get_lsa_handler(u_int16_t type)
{
- struct ospf6_lsa_handler *handler = NULL;
+ const struct ospf6_lsa_handler *handler = NULL;
unsigned int index = ntohs(type) & OSPF6_LSTYPE_FCODE_MASK;
if (index >= vector_active(ospf6_lsa_handler_vector))
@@ -97,11 +103,11 @@ struct ospf6_lsa_handler *ospf6_get_lsa_handler(u_int16_t type)
const char *ospf6_lstype_name(u_int16_t type)
{
static char buf[8];
- struct ospf6_lsa_handler *handler;
+ const struct ospf6_lsa_handler *handler;
handler = ospf6_get_lsa_handler(type);
if (handler && handler != &unknown_handler)
- return handler->name;
+ return handler->lh_name;
snprintf(buf, sizeof(buf), "0x%04hx", ntohs(type));
return buf;
@@ -110,11 +116,11 @@ const char *ospf6_lstype_name(u_int16_t type)
const char *ospf6_lstype_short_name(u_int16_t type)
{
static char buf[8];
- struct ospf6_lsa_handler *handler;
+ const struct ospf6_lsa_handler *handler;
handler = ospf6_get_lsa_handler(type);
if (handler && handler != &unknown_handler)
- return handler->short_name;
+ return handler->lh_short_name;
snprintf(buf, sizeof(buf), "0x%04hx", ntohs(type));
return buf;
@@ -122,7 +128,7 @@ const char *ospf6_lstype_short_name(u_int16_t type)
u_char ospf6_lstype_debug(u_int16_t type)
{
- struct ospf6_lsa_handler *handler;
+ const struct ospf6_lsa_handler *handler;
handler = ospf6_get_lsa_handler(type);
return handler->debug;
}
@@ -369,7 +375,7 @@ void ospf6_lsa_show_summary(struct vty *vty, struct ospf6_lsa *lsa)
{
char adv_router[16], id[16];
int type;
- struct ospf6_lsa_handler *handler;
+ const struct ospf6_lsa_handler *handler;
char buf[64], tmpbuf[80];
int cnt = 0;
@@ -389,14 +395,14 @@ void ospf6_lsa_show_summary(struct vty *vty, struct ospf6_lsa *lsa)
ospf6_lstype_short_name(lsa->header->type), id,
adv_router, ospf6_lsa_age_current(lsa),
(u_long)ntohl(lsa->header->seqnum),
- handler->get_prefix_str(lsa, buf, sizeof(buf), 0));
+ handler->lh_get_prefix_str(lsa, buf, sizeof(buf), 0));
} else if (type != OSPF6_LSTYPE_UNKNOWN) {
sprintf(tmpbuf, "%-4s %-15s%-15s%4hu %8lx",
ospf6_lstype_short_name(lsa->header->type), id,
adv_router, ospf6_lsa_age_current(lsa),
(u_long)ntohl(lsa->header->seqnum));
- while (handler->get_prefix_str(lsa, buf, sizeof(buf), cnt)
+ while (handler->lh_get_prefix_str(lsa, buf, sizeof(buf), cnt)
!= NULL) {
vty_out(vty, "%s %30s\n", tmpbuf, buf);
cnt++;
@@ -465,7 +471,7 @@ void ospf6_lsa_show_internal(struct vty *vty, struct ospf6_lsa *lsa)
void ospf6_lsa_show(struct vty *vty, struct ospf6_lsa *lsa)
{
char adv_router[64], id[64];
- struct ospf6_lsa_handler *handler;
+ const struct ospf6_lsa_handler *handler;
struct timeval now, res;
char duration[64];
@@ -490,9 +496,13 @@ void ospf6_lsa_show(struct vty *vty, struct ospf6_lsa *lsa)
vty_out(vty, "Duration: %s\n", duration);
handler = ospf6_get_lsa_handler(lsa->header->type);
- if (handler->show == NULL)
- handler = &unknown_handler;
- (*handler->show)(vty, lsa);
+
+ if (handler->lh_show != NULL)
+ handler->lh_show(vty, lsa);
+ else {
+ assert(unknown_handler.lh_show != NULL);
+ unknown_handler.lh_show(vty, lsa);
+ }
vty_out(vty, "\n");
}
@@ -739,22 +749,22 @@ void ospf6_lsa_terminate(void)
vector_free(ospf6_lsa_handler_vector);
}
-static char *ospf6_lsa_handler_name(struct ospf6_lsa_handler *h)
+static char *ospf6_lsa_handler_name(const struct ospf6_lsa_handler *h)
{
static char buf[64];
unsigned int i;
- unsigned int size = strlen(h->name);
+ unsigned int size = strlen(h->lh_name);
- if (!strcmp(h->name, "unknown") && h->type != OSPF6_LSTYPE_UNKNOWN) {
- snprintf(buf, sizeof(buf), "%#04hx", h->type);
+ if (!strcmp(h->lh_name, "unknown") && h->lh_type != OSPF6_LSTYPE_UNKNOWN) {
+ snprintf(buf, sizeof(buf), "%#04hx", h->lh_type);
return buf;
}
for (i = 0; i < MIN(size, sizeof(buf)); i++) {
- if (!islower((unsigned char)h->name[i]))
- buf[i] = tolower((unsigned char)h->name[i]);
+ if (!islower((unsigned char)h->lh_name[i]))
+ buf[i] = tolower((unsigned char)h->lh_name[i]);
else
- buf[i] = h->name[i];
+ buf[i] = h->lh_name[i];
}
buf[size] = '\0';
return buf;
@@ -791,7 +801,7 @@ DEFUN (debug_ospf6_lsa_type,
strlen(argv[idx_lsa]->arg))
== 0)
break;
- if (!strcasecmp(argv[idx_lsa]->arg, handler->name))
+ if (!strcasecmp(argv[idx_lsa]->arg, handler->lh_name))
break;
handler = NULL;
}
@@ -844,7 +854,7 @@ DEFUN (no_debug_ospf6_lsa_type,
strlen(argv[idx_lsa]->arg))
== 0)
break;
- if (!strcasecmp(argv[idx_lsa]->arg, handler->name))
+ if (!strcasecmp(argv[idx_lsa]->arg, handler->lh_name))
break;
}
@@ -875,7 +885,7 @@ void install_element_ospf6_debug_lsa(void)
int config_write_ospf6_debug_lsa(struct vty *vty)
{
u_int i;
- struct ospf6_lsa_handler *handler;
+ const struct ospf6_lsa_handler *handler;
for (i = 0; i < vector_active(ospf6_lsa_handler_vector); i++) {
handler = vector_slot(ospf6_lsa_handler_vector, i);