]> The Tcpdump Group git mirrors - tcpdump/blobdiff - print-ahcp.c
More UNALIGNED_MEM{CPY,CMP} on IP addresses.
[tcpdump] / print-ahcp.c
index a62b26968db82baebe48ccd32affff0d24933c9d..b3abaa7b62c121edf0448c40290ce3614fb4db3e 100644 (file)
@@ -39,8 +39,8 @@
 #include "extract.h"
 #include "addrtoname.h"
 
-static const char *corrupt_str = "(corrupt)";
-static const char *trunc_str = "[|ahcp]";
+static const char tstr[] = " [|ahcp]";
+static const char cstr[] = "(corrupt)";
 
 #define AHCP_MAGIC_NUMBER 43
 #define AHCP_VERSION_1 1
@@ -117,11 +117,11 @@ ahcp_time_print(const u_char *cp, const u_char *ep) {
        return 0;
 
 corrupt:
-       printf(": %s", corrupt_str);
+       printf(": %s", cstr);
        TCHECK2(*cp, ep - cp);
        return 0;
 trunc:
-       printf(" %s", trunc_str);
+       printf("%s", tstr);
        return -1;
 }
 
@@ -134,11 +134,11 @@ ahcp_seconds_print(const u_char *cp, const u_char *ep) {
        return 0;
 
 corrupt:
-       printf(": %s", corrupt_str);
+       printf(": %s", cstr);
        TCHECK2(*cp, ep - cp);
        return 0;
 trunc:
-       printf(" %s", trunc_str);
+       printf("%s", tstr);
        return -1;
 }
 
@@ -150,18 +150,24 @@ ahcp_ipv6_addresses_print(const u_char *cp, const u_char *ep) {
                if (cp + 16 > ep)
                        goto corrupt;
                TCHECK2(*cp, 16);
-               printf("%s%s", sep, ip6addr_string(cp));
+               printf("%s%s", sep,
+#ifdef INET6
+                      ip6addr_string(cp)
+#else
+                      "(compiled w/o IPv6)"
+#endif /* INET6 */
+                      );
                cp += 16;
                sep = ", ";
        }
        return 0;
 
 corrupt:
-       printf(": %s", corrupt_str);
+       printf(": %s", cstr);
        TCHECK2(*cp, ep - cp);
        return 0;
 trunc:
-       printf(" %s", trunc_str);
+       printf("%s", tstr);
        return -1;
 }
 
@@ -180,11 +186,11 @@ ahcp_ipv4_addresses_print(const u_char *cp, const u_char *ep) {
        return 0;
 
 corrupt:
-       printf(": %s", corrupt_str);
+       printf(": %s", cstr);
        TCHECK2(*cp, ep - cp);
        return 0;
 trunc:
-       printf(" %s", trunc_str);
+       printf("%s", tstr);
        return -1;
 }
 
@@ -196,18 +202,24 @@ ahcp_ipv6_prefixes_print(const u_char *cp, const u_char *ep) {
                if (cp + 17 > ep)
                        goto corrupt;
                TCHECK2(*cp, 17);
-               printf("%s%s/%u", sep, ip6addr_string(cp), *(cp + 16));
+               printf("%s%s/%u", sep,
+#ifdef INET6
+                      ip6addr_string(cp),
+#else
+                      "(compiled w/o IPv6)",
+#endif /* INET6 */
+                      *(cp + 16));
                cp += 17;
                sep = ", ";
        }
        return 0;
 
 corrupt:
-       printf(": %s", corrupt_str);
+       printf(": %s", cstr);
        TCHECK2(*cp, ep - cp);
        return 0;
 trunc:
-       printf(" %s", trunc_str);
+       printf("%s", tstr);
        return -1;
 }
 
@@ -226,28 +238,31 @@ ahcp_ipv4_prefixes_print(const u_char *cp, const u_char *ep) {
        return 0;
 
 corrupt:
-       printf(": %s", corrupt_str);
+       printf(": %s", cstr);
        TCHECK2(*cp, ep - cp);
        return 0;
 trunc:
-       printf(" %s", trunc_str);
+       printf("%s", tstr);
        return -1;
 }
 
 /* Data decoders signal truncated data with -1. */
 static int
 (* const data_decoders[AHCP1_OPT_MAX + 1])(const u_char *, const u_char *) = {
-       [AHCP1_OPT_ORIGIN_TIME]            = ahcp_time_print,
-       [AHCP1_OPT_EXPIRES]                = ahcp_seconds_print,
-       [AHCP1_OPT_MY_IPV6_ADDRESS]        = ahcp_ipv6_addresses_print,
-       [AHCP1_OPT_MY_IPV4_ADDRESS]        = ahcp_ipv4_addresses_print,
-       [AHCP1_OPT_IPV6_PREFIX]            = ahcp_ipv6_prefixes_print,
-       [AHCP1_OPT_IPV6_ADDRESS]           = ahcp_ipv6_addresses_print,
-       [AHCP1_OPT_IPV4_ADDRESS]           = ahcp_ipv4_addresses_print,
-       [AHCP1_OPT_IPV6_PREFIX_DELEGATION] = ahcp_ipv6_prefixes_print,
-       [AHCP1_OPT_IPV4_PREFIX_DELEGATION] = ahcp_ipv4_prefixes_print,
-       [AHCP1_OPT_NAME_SERVER]            = ahcp_ipv6_addresses_print,
-       [AHCP1_OPT_NTP_SERVER]             = ahcp_ipv6_addresses_print,
+       /* [AHCP1_OPT_PAD]                    = */  NULL,
+       /* [AHCP1_OPT_MANDATORY]              = */  NULL,
+       /* [AHCP1_OPT_ORIGIN_TIME]            = */  ahcp_time_print,
+       /* [AHCP1_OPT_EXPIRES]                = */  ahcp_seconds_print,
+       /* [AHCP1_OPT_MY_IPV6_ADDRESS]        = */  ahcp_ipv6_addresses_print,
+       /* [AHCP1_OPT_MY_IPV4_ADDRESS]        = */  ahcp_ipv4_addresses_print,
+       /* [AHCP1_OPT_IPV6_PREFIX]            = */  ahcp_ipv6_prefixes_print,
+       /* [AHCP1_OPT_IPV4_PREFIX]            = */  NULL,
+       /* [AHCP1_OPT_IPV6_ADDRESS]           = */  ahcp_ipv6_addresses_print,
+       /* [AHCP1_OPT_IPV4_ADDRESS]           = */  ahcp_ipv4_addresses_print,
+       /* [AHCP1_OPT_IPV6_PREFIX_DELEGATION] = */  ahcp_ipv6_prefixes_print,
+       /* [AHCP1_OPT_IPV4_PREFIX_DELEGATION] = */  ahcp_ipv4_prefixes_print,
+       /* [AHCP1_OPT_NAME_SERVER]            = */  ahcp_ipv6_addresses_print,
+       /* [AHCP1_OPT_NTP_SERVER]             = */  ahcp_ipv6_addresses_print,
 };
 
 static void
@@ -283,11 +298,11 @@ ahcp1_options_print(const u_char *cp, const u_char *ep) {
        return;
 
 corrupt:
-       printf(" %s", corrupt_str);
+       printf(" %s", cstr);
        TCHECK2(*cp, ep - cp);
        return;
 trunc:
-       printf(" %s", trunc_str);
+       printf("%s", tstr);
 }
 
 static void
@@ -327,11 +342,11 @@ ahcp1_body_print(const u_char *cp, const u_char *ep) {
        return;
 
 corrupt:
-       printf(" %s", corrupt_str);
+       printf(" %s", cstr);
        TCHECK2(*cp, ep - cp);
        return;
 trunc:
-       printf(" %s", trunc_str);
+       printf("%s", tstr);
 }
 
 void
@@ -392,10 +407,10 @@ ahcp_print(const u_char *cp, const u_int len) {
        return;
 
 corrupt:
-       printf(" %s", corrupt_str);
+       printf(" %s", cstr);
        TCHECK2(*cp, ep - cp);
        return;
 trunc:
-       printf(" %s", trunc_str);
+       printf("%s", tstr);
 }