X-Git-Url: https://git.tcpdump.org/tcpdump/blobdiff_plain/11f73ad248fa22461ca040baa8dc94b864509efa..f085c93f59fb2332e09f3da20eef5fb2bbd04431:/print-ahcp.c diff --git a/print-ahcp.c b/print-ahcp.c index 5a60e4fe..06002903 100644 --- a/print-ahcp.c +++ b/print-ahcp.c @@ -1,8 +1,4 @@ /* - * This module implements decoding of AHCP (Ad Hoc Configuration Protocol) based - * on draft-chroboczek-ahcp-00 and source code of ahcpd-0.53. - * - * * Copyright (c) 2013 The TCPDUMP project * All rights reserved. * @@ -29,6 +25,10 @@ * POSSIBILITY OF SUCH DAMAGE. */ +/* \summary: Ad Hoc Configuration Protocol (AHCP) printer */ + +/* Based on draft-chroboczek-ahcp-00 and source code of ahcpd-0.53 */ + #ifdef HAVE_CONFIG_H #include "config.h" #endif @@ -40,7 +40,6 @@ #include "addrtoname.h" static const char tstr[] = " [|ahcp]"; -static const char istr[] = " (invalid)"; #define AHCP_MAGIC_NUMBER 43 #define AHCP_VERSION_1 1 @@ -107,8 +106,8 @@ ahcp_time_print(netdissect_options *ndo, const u_char *cp, const u_char *ep) if (cp + 4 != ep) goto invalid; - ND_TCHECK2(*cp, 4); - t = EXTRACT_32BITS(cp); + ND_TCHECK_4(cp); + t = EXTRACT_BE_U_4(cp); if (NULL == (tm = gmtime(&t))) ND_PRINT((ndo, ": gmtime() error")); else if (0 == strftime(buf, sizeof(buf), "%Y-%m-%d %H:%M:%S", tm)) @@ -131,8 +130,8 @@ ahcp_seconds_print(netdissect_options *ndo, const u_char *cp, const u_char *ep) { if (cp + 4 != ep) goto invalid; - ND_TCHECK2(*cp, 4); - ND_PRINT((ndo, ": %us", EXTRACT_32BITS(cp))); + ND_TCHECK_4(cp); + ND_PRINT((ndo, ": %us", EXTRACT_BE_U_4(cp))); return 0; invalid: @@ -152,7 +151,7 @@ ahcp_ipv6_addresses_print(netdissect_options *ndo, const u_char *cp, const u_cha while (cp < ep) { if (cp + 16 > ep) goto invalid; - ND_TCHECK2(*cp, 16); + ND_TCHECK_16(cp); ND_PRINT((ndo, "%s%s", sep, ip6addr_string(ndo, cp))); cp += 16; sep = ", "; @@ -176,7 +175,7 @@ ahcp_ipv4_addresses_print(netdissect_options *ndo, const u_char *cp, const u_cha while (cp < ep) { if (cp + 4 > ep) goto invalid; - ND_TCHECK2(*cp, 4); + ND_TCHECK_4(cp); ND_PRINT((ndo, "%s%s", sep, ipaddr_string(ndo, cp))); cp += 4; sep = ", "; @@ -201,7 +200,7 @@ ahcp_ipv6_prefixes_print(netdissect_options *ndo, const u_char *cp, const u_char if (cp + 17 > ep) goto invalid; ND_TCHECK2(*cp, 17); - ND_PRINT((ndo, "%s%s/%u", sep, ip6addr_string(ndo, cp), *(cp + 16))); + ND_PRINT((ndo, "%s%s/%u", sep, ip6addr_string(ndo, cp), EXTRACT_U_1(cp + 16))); cp += 17; sep = ", "; } @@ -224,8 +223,8 @@ ahcp_ipv4_prefixes_print(netdissect_options *ndo, const u_char *cp, const u_char while (cp < ep) { if (cp + 5 > ep) goto invalid; - ND_TCHECK2(*cp, 5); - ND_PRINT((ndo, "%s%s/%u", sep, ipaddr_string(ndo, cp), *(cp + 4))); + ND_TCHECK_5(cp); + ND_PRINT((ndo, "%s%s/%u", sep, ipaddr_string(ndo, cp), EXTRACT_U_1(cp + 4))); cp += 5; sep = ", "; } @@ -266,7 +265,7 @@ ahcp1_options_print(netdissect_options *ndo, const u_char *cp, const u_char *ep) while (cp < ep) { /* Option no */ - ND_TCHECK2(*cp, 1); + ND_TCHECK_1(cp); option_no = *cp; cp += 1; ND_PRINT((ndo, "\n\t %s", tok2str(ahcp1_opt_str, "Unknown-%u", option_no))); @@ -275,7 +274,7 @@ ahcp1_options_print(netdissect_options *ndo, const u_char *cp, const u_char *ep) /* Length */ if (cp + 1 > ep) goto invalid; - ND_TCHECK2(*cp, 1); + ND_TCHECK_1(cp); option_len = *cp; cp += 1; if (cp + option_len > ep) @@ -309,16 +308,16 @@ ahcp1_body_print(netdissect_options *ndo, const u_char *cp, const u_char *ep) if (cp + AHCP1_BODY_MIN_LEN > ep) goto invalid; /* Type */ - ND_TCHECK2(*cp, 1); + ND_TCHECK_1(cp); type = *cp; cp += 1; /* MBZ */ - ND_TCHECK2(*cp, 1); + ND_TCHECK_1(cp); mbz = *cp; cp += 1; /* Length */ - ND_TCHECK2(*cp, 2); - body_len = EXTRACT_16BITS(cp); + ND_TCHECK_2(cp); + body_len = EXTRACT_BE_U_2(cp); cp += 2; if (ndo->ndo_vflag) { @@ -355,12 +354,12 @@ ahcp_print(netdissect_options *ndo, const u_char *cp, const u_int len) if (len < 2) goto invalid; /* Magic */ - ND_TCHECK2(*cp, 1); + ND_TCHECK_1(cp); if (*cp != AHCP_MAGIC_NUMBER) goto invalid; cp += 1; /* Version */ - ND_TCHECK2(*cp, 1); + ND_TCHECK_1(cp); version = *cp; cp += 1; switch (version) { @@ -373,23 +372,23 @@ ahcp_print(netdissect_options *ndo, const u_char *cp, const u_int len) cp += AHCP1_HEADER_FIX_LEN - 2; } else { /* Hopcount */ - ND_TCHECK2(*cp, 1); - ND_PRINT((ndo, "\n\tHopcount %u", *cp)); + ND_TCHECK_1(cp); + ND_PRINT((ndo, "\n\tHopcount %u", EXTRACT_U_1(cp))); cp += 1; /* Original Hopcount */ - ND_TCHECK2(*cp, 1); - ND_PRINT((ndo, ", Original Hopcount %u", *cp)); + ND_TCHECK_1(cp); + ND_PRINT((ndo, ", Original Hopcount %u", EXTRACT_U_1(cp))); cp += 1; /* Nonce */ - ND_TCHECK2(*cp, 4); - ND_PRINT((ndo, ", Nonce 0x%08x", EXTRACT_32BITS(cp))); + ND_TCHECK_4(cp); + ND_PRINT((ndo, ", Nonce 0x%08x", EXTRACT_BE_U_4(cp))); cp += 4; /* Source Id */ - ND_TCHECK2(*cp, 8); + ND_TCHECK_8(cp); ND_PRINT((ndo, ", Source Id %s", linkaddr_string(ndo, cp, 0, 8))); cp += 8; /* Destination Id */ - ND_TCHECK2(*cp, 8); + ND_TCHECK_8(cp); ND_PRINT((ndo, ", Destination Id %s", linkaddr_string(ndo, cp, 0, 8))); cp += 8; }