X-Git-Url: https://git.tcpdump.org/tcpdump/blobdiff_plain/6c93708db1cd314ab4e6511596c625d617a15853..5ef0bcb5edd748de9d9af13c40da0395dfdd94e8:/print-cdp.c diff --git a/print-cdp.c b/print-cdp.c index e63ce911..0ab646e5 100644 --- a/print-cdp.c +++ b/print-cdp.c @@ -21,7 +21,7 @@ * Code by Gert Doering, SpaceNet GmbH, gert@space.net * * Reference documentation: - * http://www.cisco.com/univercd/cc/td/doc/product/lan/trsrb/frames.htm + * https://web.archive.org/web/20000914194913/http://www.cisco.com/univercd/cc/td/doc/product/lan/trsrb/frames.pdf */ /* \summary: Cisco Discovery Protocol (CDP) printer */ @@ -87,13 +87,13 @@ static const struct tok cdp_capability_values[] = { static int cdp_print_addr(netdissect_options *, const u_char *, u_int); static int cdp_print_prefixes(netdissect_options *, const u_char *, u_int); -static unsigned int cdp_get_number(const u_char *, u_int); +static unsigned int cdp_get_number(netdissect_options *, const u_char *, u_int); void cdp_print(netdissect_options *ndo, const u_char *pptr, u_int length, u_int caplen) { - u_int type, len, i, j; + u_int type, len, i; const u_char *tptr; ndo->ndo_protocol = "cdp"; @@ -105,16 +105,19 @@ cdp_print(netdissect_options *ndo, tptr = pptr; /* temporary pointer */ ND_TCHECK_LEN(tptr, CDP_HEADER_LEN); - ND_PRINT("CDPv%u, ttl: %us", EXTRACT_U_1((tptr + CDP_HEADER_VERSION_OFFSET)), - EXTRACT_U_1(tptr + CDP_HEADER_TTL_OFFSET)); + ND_PRINT("CDPv%u, ttl: %us", + GET_U_1((tptr + CDP_HEADER_VERSION_OFFSET)), + GET_U_1(tptr + CDP_HEADER_TTL_OFFSET)); if (ndo->ndo_vflag) - ND_PRINT(", checksum: 0x%04x (unverified), length %u", EXTRACT_BE_U_2(tptr + CDP_HEADER_CHECKSUM_OFFSET), length); + ND_PRINT(", checksum: 0x%04x (unverified), length %u", + GET_BE_U_2(tptr + CDP_HEADER_CHECKSUM_OFFSET), + length); tptr += CDP_HEADER_LEN; while (tptr < (pptr+length)) { ND_TCHECK_LEN(tptr, CDP_TLV_HEADER_LEN); /* read out Type and Length */ - type = EXTRACT_BE_U_2(tptr + CDP_TLV_TYPE_OFFSET); - len = EXTRACT_BE_U_2(tptr + CDP_TLV_LEN_OFFSET); /* object length includes the 4 bytes header length */ + type = GET_BE_U_2(tptr + CDP_TLV_TYPE_OFFSET); + len = GET_BE_U_2(tptr + CDP_TLV_LEN_OFFSET); /* object length includes the 4 bytes header length */ if (len < CDP_TLV_HEADER_LEN) { if (ndo->ndo_vflag) ND_PRINT("\n\t%s (0x%02x), TLV length: %u byte%s (too short)", @@ -164,18 +167,20 @@ cdp_print(netdissect_options *ndo, if (len < 4) goto trunc; ND_PRINT("(0x%08x): %s", - EXTRACT_BE_U_4(tptr), - bittok2str(cdp_capability_values, "none", EXTRACT_BE_U_4(tptr))); + GET_BE_U_4(tptr), + bittok2str(cdp_capability_values, "none", GET_BE_U_4(tptr))); break; case 0x05: /* Version */ ND_PRINT("\n\t "); for (i=0;i 1) { ND_PRINT("/"); (void)nd_printn(ndo, tptr + 1, len - 1, NULL); @@ -305,23 +312,23 @@ cdp_print_addr(netdissect_options *ndo, ND_TCHECK_4(p); if (p + 4 > endp) goto trunc; - num = EXTRACT_BE_U_4(p); + num = GET_BE_U_4(p); p += 4; while (p < endp && num != 0) { ND_TCHECK_2(p); if (p + 2 > endp) goto trunc; - pt = EXTRACT_U_1(p); /* type of "protocol" field */ - pl = EXTRACT_U_1(p + 1); /* length of "protocol" field */ + pt = GET_U_1(p); /* type of "protocol" field */ + pl = GET_U_1(p + 1); /* length of "protocol" field */ p += 2; ND_TCHECK_2(p + pl); if (p + pl + 2 > endp) goto trunc; - al = EXTRACT_BE_U_2(p + pl); /* address length */ + al = GET_BE_U_2(p + pl); /* address length */ - if (pt == PT_NLPID && pl == 1 && EXTRACT_U_1(p) == NLPID_IP && + if (pt == PT_NLPID && pl == 1 && GET_U_1(p) == NLPID_IP && al == 4) { /* * IPv4: protocol type = NLPID, protocol length = 1 @@ -330,10 +337,9 @@ cdp_print_addr(netdissect_options *ndo, */ p += 3; - ND_TCHECK_4(p); if (p + 4 > endp) goto trunc; - ND_PRINT("IPv4 (%u) %s", num, ipaddr_string(ndo, p)); + ND_PRINT("IPv4 (%u) %s", num, GET_IPADDR_STRING(p)); p += 4; } else if (pt == PT_IEEE_802_2 && pl == 8 && @@ -349,7 +355,7 @@ cdp_print_addr(netdissect_options *ndo, if (p + al > endp) goto trunc; - ND_PRINT("IPv6 (%u) %s", num, ip6addr_string(ndo, p)); + ND_PRINT("IPv6 (%u) %s", num, GET_IP6ADDR_STRING(p)); p += al; } else { @@ -359,9 +365,10 @@ cdp_print_addr(netdissect_options *ndo, ND_TCHECK_LEN(p, pl); if (p + pl > endp) goto trunc; - ND_PRINT("pt=0x%02x, pl=%u, pb=", EXTRACT_U_1((p - 2)), pl); + ND_PRINT("pt=0x%02x, pl=%u, pb=", GET_U_1((p - 2)), + pl); while (pl != 0) { - ND_PRINT(" %02x", EXTRACT_U_1(p)); + ND_PRINT(" %02x", GET_U_1(p)); p++; pl--; } @@ -374,7 +381,7 @@ cdp_print_addr(netdissect_options *ndo, if (p + al > endp) goto trunc; while (al != 0) { - ND_PRINT(" %02x", EXTRACT_U_1(p)); + ND_PRINT(" %02x", GET_U_1(p)); p++; al--; } @@ -402,8 +409,8 @@ cdp_print_prefixes(netdissect_options *ndo, while (l > 0) { ND_PRINT(" %u.%u.%u.%u/%u", - EXTRACT_U_1(p), EXTRACT_U_1(p + 1), EXTRACT_U_1(p + 2), - EXTRACT_U_1(p + 3), EXTRACT_U_1(p + 4)); + GET_U_1(p), GET_U_1(p + 1), GET_U_1(p + 2), + GET_U_1(p + 3), GET_U_1(p + 4)); l -= 5; p += 5; } @@ -417,12 +424,13 @@ trunc: /* read in a -byte number, MSB first * (of course this can handle max sizeof(int)) */ -static unsigned int cdp_get_number(const u_char * p, u_int l) +static unsigned int +cdp_get_number(netdissect_options *ndo, const u_char * p, u_int l) { unsigned int res=0; while( l>0 ) { - res = (res<<8) + EXTRACT_U_1(p); + res = (res<<8) + GET_U_1(p); p++; l--; } return res;