X-Git-Url: https://git.tcpdump.org/tcpdump/blobdiff_plain/d36fb168059f237781059e0130c8748873c1a279..296d466cd6bbf2f7e75e15bb6a01268e88c76ed0:/print-eigrp.c diff --git a/print-eigrp.c b/print-eigrp.c index 36158231..9116cf68 100644 --- a/print-eigrp.c +++ b/print-eigrp.c @@ -23,9 +23,7 @@ * RFC 7868 */ -#ifdef HAVE_CONFIG_H #include -#endif #include "netdissect-stdinc.h" @@ -43,7 +41,8 @@ struct eigrp_common_header { nd_uint32_t flags; nd_uint32_t seq; nd_uint32_t ack; - nd_uint32_t asn; + nd_uint16_t vrid; + nd_uint16_t asn; }; #define EIGRP_VERSION 2 @@ -68,6 +67,8 @@ static const struct tok eigrp_opcode_values[] = { static const struct tok eigrp_common_header_flag_values[] = { { 0x01, "Init" }, { 0x02, "Conditionally Received" }, + { 0x04, "Restart" }, + { 0x08, "End-of-Table" }, { 0, NULL} }; @@ -236,9 +237,9 @@ eigrp_print(netdissect_options *ndo, const u_char *pptr, u_int len) * Sanity checking of the header. */ if (GET_U_1(eigrp_com_header->version) != EIGRP_VERSION) { - ND_PRINT("EIGRP version %u packet not supported", + ND_PRINT("EIGRP version %u packet not supported", GET_U_1(eigrp_com_header->version)); - return; + return; } /* in non-verbose mode just lets print the basic Message Type*/ @@ -252,25 +253,26 @@ eigrp_print(netdissect_options *ndo, const u_char *pptr, u_int len) /* ok they seem to want to know everything - lets fully decode it */ if (len < sizeof(struct eigrp_common_header)) { - ND_PRINT("EIGRP %s, length: %u (too short, < %u)", + ND_PRINT("EIGRP %s, length: %u (too short, < %zu)", tok2str(eigrp_opcode_values, "unknown (%u)",GET_U_1(eigrp_com_header->opcode)), - len, (u_int) sizeof(struct eigrp_common_header)); + len, sizeof(struct eigrp_common_header)); return; } tlen=len-sizeof(struct eigrp_common_header); - /* FIXME print other header info */ - ND_PRINT("\n\tEIGRP v%u, opcode: %s (%u), chksum: 0x%04x, Flags: [%s]\n\tseq: 0x%08x, ack: 0x%08x, AS: %u, length: %u", + ND_PRINT("\n\tEIGRP v%u, opcode: %s (%u), chksum: 0x%04x, Flags: [%s]" + "\n\tseq: 0x%08x, ack: 0x%08x, VRID: %u, AS: %u, length: %u", GET_U_1(eigrp_com_header->version), tok2str(eigrp_opcode_values, "unknown, type: %u",GET_U_1(eigrp_com_header->opcode)), GET_U_1(eigrp_com_header->opcode), GET_BE_U_2(eigrp_com_header->checksum), - tok2str(eigrp_common_header_flag_values, + bittok2str(eigrp_common_header_flag_values, "none", GET_BE_U_4(eigrp_com_header->flags)), GET_BE_U_4(eigrp_com_header->seq), GET_BE_U_4(eigrp_com_header->ack), - GET_BE_U_4(eigrp_com_header->asn), + GET_BE_U_2(eigrp_com_header->vrid), + GET_BE_U_2(eigrp_com_header->asn), tlen); tptr+=sizeof(struct eigrp_common_header); @@ -298,8 +300,8 @@ eigrp_print(netdissect_options *ndo, const u_char *pptr, u_int len) eigrp_tlv_len); if (eigrp_tlv_len < sizeof(struct eigrp_tlv_header)) { - ND_PRINT(" (too short, < %u)", - (u_int) sizeof(struct eigrp_tlv_header)); + ND_PRINT(" (too short, < %zu)", + sizeof(struct eigrp_tlv_header)); break; } tlv_tptr=tptr+sizeof(struct eigrp_tlv_header); @@ -313,8 +315,8 @@ eigrp_print(netdissect_options *ndo, const u_char *pptr, u_int len) case EIGRP_TLV_GENERAL_PARM: tlv_ptr.eigrp_tlv_general_parm = (const struct eigrp_tlv_general_parm_t *)tlv_tptr; if (tlv_tlen < sizeof(*tlv_ptr.eigrp_tlv_general_parm)) { - ND_PRINT(" (too short, < %u)", - (u_int) (sizeof(struct eigrp_tlv_header) + sizeof(*tlv_ptr.eigrp_tlv_general_parm))); + ND_PRINT(" (too short, < %zu)", + sizeof(struct eigrp_tlv_header) + sizeof(*tlv_ptr.eigrp_tlv_general_parm)); break; } @@ -330,8 +332,8 @@ eigrp_print(netdissect_options *ndo, const u_char *pptr, u_int len) case EIGRP_TLV_SW_VERSION: tlv_ptr.eigrp_tlv_sw_version = (const struct eigrp_tlv_sw_version_t *)tlv_tptr; if (tlv_tlen < sizeof(*tlv_ptr.eigrp_tlv_sw_version)) { - ND_PRINT(" (too short, < %u)", - (u_int) (sizeof(struct eigrp_tlv_header) + sizeof(*tlv_ptr.eigrp_tlv_sw_version))); + ND_PRINT(" (too short, < %zu)", + sizeof(struct eigrp_tlv_header) + sizeof(*tlv_ptr.eigrp_tlv_sw_version)); break; } @@ -345,8 +347,8 @@ eigrp_print(netdissect_options *ndo, const u_char *pptr, u_int len) case EIGRP_TLV_IP_INT: tlv_ptr.eigrp_tlv_ip_int = (const struct eigrp_tlv_ip_int_t *)tlv_tptr; if (tlv_tlen < sizeof(*tlv_ptr.eigrp_tlv_ip_int)) { - ND_PRINT(" (too short, < %u)", - (u_int) (sizeof(struct eigrp_tlv_header) + sizeof(*tlv_ptr.eigrp_tlv_ip_int))); + ND_PRINT(" (too short, < %zu)", + sizeof(struct eigrp_tlv_header) + sizeof(*tlv_ptr.eigrp_tlv_ip_int)); break; } @@ -380,8 +382,8 @@ eigrp_print(netdissect_options *ndo, const u_char *pptr, u_int len) case EIGRP_TLV_IP_EXT: tlv_ptr.eigrp_tlv_ip_ext = (const struct eigrp_tlv_ip_ext_t *)tlv_tptr; if (tlv_tlen < sizeof(*tlv_ptr.eigrp_tlv_ip_ext)) { - ND_PRINT(" (too short, < %u)", - (u_int) (sizeof(struct eigrp_tlv_header) + sizeof(*tlv_ptr.eigrp_tlv_ip_ext))); + ND_PRINT(" (too short, < %zu)", + sizeof(struct eigrp_tlv_header) + sizeof(*tlv_ptr.eigrp_tlv_ip_ext)); break; } @@ -423,8 +425,8 @@ eigrp_print(netdissect_options *ndo, const u_char *pptr, u_int len) case EIGRP_TLV_AT_CABLE_SETUP: tlv_ptr.eigrp_tlv_at_cable_setup = (const struct eigrp_tlv_at_cable_setup_t *)tlv_tptr; if (tlv_tlen < sizeof(*tlv_ptr.eigrp_tlv_at_cable_setup)) { - ND_PRINT(" (too short, < %u)", - (u_int) (sizeof(struct eigrp_tlv_header) + sizeof(*tlv_ptr.eigrp_tlv_at_cable_setup))); + ND_PRINT(" (too short, < %zu)", + sizeof(struct eigrp_tlv_header) + sizeof(*tlv_ptr.eigrp_tlv_at_cable_setup)); break; } @@ -437,8 +439,8 @@ eigrp_print(netdissect_options *ndo, const u_char *pptr, u_int len) case EIGRP_TLV_AT_INT: tlv_ptr.eigrp_tlv_at_int = (const struct eigrp_tlv_at_int_t *)tlv_tptr; if (tlv_tlen < sizeof(*tlv_ptr.eigrp_tlv_at_int)) { - ND_PRINT(" (too short, < %u)", - (u_int) (sizeof(struct eigrp_tlv_header) + sizeof(*tlv_ptr.eigrp_tlv_at_int))); + ND_PRINT(" (too short, < %zu)", + sizeof(struct eigrp_tlv_header) + sizeof(*tlv_ptr.eigrp_tlv_at_int)); break; } @@ -465,8 +467,8 @@ eigrp_print(netdissect_options *ndo, const u_char *pptr, u_int len) case EIGRP_TLV_AT_EXT: tlv_ptr.eigrp_tlv_at_ext = (const struct eigrp_tlv_at_ext_t *)tlv_tptr; if (tlv_tlen < sizeof(*tlv_ptr.eigrp_tlv_at_ext)) { - ND_PRINT(" (too short, < %u)", - (u_int) (sizeof(struct eigrp_tlv_header) + sizeof(*tlv_ptr.eigrp_tlv_at_ext))); + ND_PRINT(" (too short, < %zu)", + sizeof(struct eigrp_tlv_header) + sizeof(*tlv_ptr.eigrp_tlv_at_ext)); break; }