summaryrefslogtreecommitdiff
path: root/ospf6d/ospf6_message.c
diff options
context:
space:
mode:
authorDenis Ovsienko <infrastation@yandex.ru>2011-10-14 21:59:58 +0400
committerDenis Ovsienko <infrastation@yandex.ru>2011-11-21 18:25:41 +0400
commited72156c9d4512217f5c80b8e20e4de024246502 (patch)
tree297f4cc8a0d6614c68e300b2b347f95b8ac6c939 /ospf6d/ospf6_message.c
parent8fee927850e9011b3bf46f2a8a0d54521d00a807 (diff)
ospf6d: decode message type with LOOKUP()
* ospf6_message.h * OSPF6_MESSAGE_TYPE_CANONICAL(): dismiss * OSPF6_MESSAGE_TYPE_NAME(): dismiss * ospf6_message.c * ospf6_message_type_str: rewrite as a message list, add max value * ospf6_packet_examin(): update to use LOOKUP() * ospf6_receive(): idem * ospf6_send(): idem
Diffstat (limited to 'ospf6d/ospf6_message.c')
-rw-r--r--ospf6d/ospf6_message.c24
1 files changed, 16 insertions, 8 deletions
diff --git a/ospf6d/ospf6_message.c b/ospf6d/ospf6_message.c
index 5760874d..8179fc14 100644
--- a/ospf6d/ospf6_message.c
+++ b/ospf6d/ospf6_message.c
@@ -50,8 +50,16 @@
#include <netinet/ip6.h>
unsigned char conf_debug_ospf6_message[6] = {0x03, 0, 0, 0, 0, 0};
-const char *ospf6_message_type_str[] =
- { "Unknown", "Hello", "DbDesc", "LSReq", "LSUpdate", "LSAck" };
+static const struct message ospf6_message_type_str [] =
+{
+ { OSPF6_MESSAGE_TYPE_HELLO, "Hello" },
+ { OSPF6_MESSAGE_TYPE_DBDESC, "DbDesc" },
+ { OSPF6_MESSAGE_TYPE_LSREQ, "LSReq" },
+ { OSPF6_MESSAGE_TYPE_LSUPDATE, "LSUpdate" },
+ { OSPF6_MESSAGE_TYPE_LSACK, "LSAck" },
+};
+static const size_t ospf6_message_type_str_max =
+ sizeof (ospf6_message_type_str) / sizeof (ospf6_message_type_str[0]);
/* Minimum (besides the standard OSPF packet header) lengths for OSPF
packets of particular types, offset is the "type" field. */
@@ -1194,7 +1202,7 @@ ospf6_packet_examin (struct ospf6_header *oh, const unsigned bytesonwire)
{
if (IS_OSPF6_DEBUG_MESSAGE (OSPF6_MESSAGE_TYPE_UNKNOWN, RECV))
zlog_debug ("%s: undersized (%u B) %s packet", __func__,
- bytesonwire, ospf6_message_type_str[oh->type]);
+ bytesonwire, LOOKUP (ospf6_message_type_str, oh->type));
return MSG_NG;
}
/* type-specific deeper validation */
@@ -1207,7 +1215,7 @@ ospf6_packet_examin (struct ospf6_header *oh, const unsigned bytesonwire)
return MSG_OK;
if (IS_OSPF6_DEBUG_MESSAGE (OSPF6_MESSAGE_TYPE_UNKNOWN, RECV))
zlog_debug ("%s: alignment error in %s packet",
- __func__, ospf6_message_type_str[oh->type]);
+ __func__, LOOKUP (ospf6_message_type_str, oh->type));
return MSG_NG;
case OSPF6_MESSAGE_TYPE_DBDESC:
/* RFC5340 A.3.3, packet header + OSPF6_DB_DESC_MIN_SIZE bytes followed
@@ -1226,7 +1234,7 @@ ospf6_packet_examin (struct ospf6_header *oh, const unsigned bytesonwire)
return MSG_OK;
if (IS_OSPF6_DEBUG_MESSAGE (OSPF6_MESSAGE_TYPE_UNKNOWN, RECV))
zlog_debug ("%s: alignment error in %s packet",
- __func__, ospf6_message_type_str[oh->type]);
+ __func__, LOOKUP (ospf6_message_type_str, oh->type));
return MSG_NG;
case OSPF6_MESSAGE_TYPE_LSUPDATE:
/* RFC5340 A.3.5, packet header + OSPF6_LS_UPD_MIN_SIZE bytes followed
@@ -1256,7 +1264,7 @@ ospf6_packet_examin (struct ospf6_header *oh, const unsigned bytesonwire)
return MSG_NG;
}
if (test != MSG_OK && IS_OSPF6_DEBUG_MESSAGE (OSPF6_MESSAGE_TYPE_UNKNOWN, RECV))
- zlog_debug ("%s: anomaly in %s packet", __func__, ospf6_message_type_str[oh->type]);
+ zlog_debug ("%s: anomaly in %s packet", __func__, LOOKUP (ospf6_message_type_str, oh->type));
return test;
}
@@ -1559,7 +1567,7 @@ ospf6_receive (struct thread *thread)
inet_ntop (AF_INET6, &src, srcname, sizeof (srcname));
inet_ntop (AF_INET6, &dst, dstname, sizeof (dstname));
zlog_debug ("%s received on %s",
- OSPF6_MESSAGE_TYPE_NAME (oh->type), oi->interface->name);
+ LOOKUP (ospf6_message_type_str, oh->type), oi->interface->name);
zlog_debug (" src: %s", srcname);
zlog_debug (" dst: %s", dstname);
@@ -1647,7 +1655,7 @@ ospf6_send (struct in6_addr *src, struct in6_addr *dst,
else
memset (srcname, 0, sizeof (srcname));
zlog_debug ("%s send on %s",
- OSPF6_MESSAGE_TYPE_NAME (oh->type), oi->interface->name);
+ LOOKUP (ospf6_message_type_str, oh->type), oi->interface->name);
zlog_debug (" src: %s", srcname);
zlog_debug (" dst: %s", dstname);