X-Git-Url: https://git.tcpdump.org/tcpdump/blobdiff_plain/a7cba3da8d9e39c0cd7bb5b605b6fc5ae628379d..5663cdab5ec8730ade9938c1ace64a4859d9ef7b:/print-vtp.c diff --git a/print-vtp.c b/print-vtp.c index 34c5c724..cbc5868e 100644 --- a/print-vtp.c +++ b/print-vtp.c @@ -15,8 +15,8 @@ * VLAN TRUNKING PROTOCOL (VTP) * * Reference documentation: - * http://www.cisco.com/en/US/tech/tk389/tk689/technologies_tech_note09186a0080094c52.shtml - * http://www.cisco.com/warp/public/473/21.html + * http://www.cisco.com/en/US/tech/tk389/tk689/technologies_tech_note09186a0080094c52.shtml + * http://www.cisco.com/warp/public/473/21.html * http://www.cisco.com/univercd/cc/td/doc/product/lan/trsrb/frames.htm * * Original code ode by Carles Kishimoto @@ -33,7 +33,7 @@ #include "interface.h" #include "addrtoname.h" -#include "extract.h" +#include "extract.h" #include "nlpid.h" #define VTP_HEADER_LEN 36 @@ -57,7 +57,7 @@ struct vtp_vlan_ { u_int32_t index; }; -static struct tok vtp_message_type_values[] = { +static const struct tok vtp_message_type_values[] = { { VTP_SUMMARY_ADV, "Summary advertisement"}, { VTP_SUBSET_ADV, "Subset advertisement"}, { VTP_ADV_REQUEST, "Advertisement request"}, @@ -65,7 +65,7 @@ static struct tok vtp_message_type_values[] = { { 0, NULL } }; -static struct tok vtp_header_values[] = { +static const struct tok vtp_header_values[] = { { 0x01, "Followers"}, /* On Summary advertisement, 3rd byte is Followers */ { 0x02, "Seq number"}, /* On Subset advertisement, 3rd byte is Sequence number */ { 0x03, "Rsvd"}, /* On Adver. requests 3rd byte is Rsvd */ @@ -73,7 +73,7 @@ static struct tok vtp_header_values[] = { { 0, NULL } }; -static struct tok vtp_vlan_type_values[] = { +static const struct tok vtp_vlan_type_values[] = { { 0x01, "Ethernet"}, { 0x02, "FDDI"}, { 0x03, "TrCRF"}, @@ -82,7 +82,7 @@ static struct tok vtp_vlan_type_values[] = { { 0, NULL } }; -static struct tok vtp_vlan_status[] = { +static const struct tok vtp_vlan_status[] = { { 0x00, "Operational"}, { 0x01, "Suspended"}, { 0, NULL } @@ -99,7 +99,7 @@ static struct tok vtp_vlan_status[] = { #define VTP_VLAN_STE_HOP_COUNT 0x09 #define VTP_VLAN_BACKUP_CRF_MODE 0x0A -static struct tok vtp_vlan_tlv_values[] = { +static const struct tok vtp_vlan_tlv_values[] = { { VTP_VLAN_SOURCE_ROUTING_RING_NUMBER, "Source-Routing Ring Number TLV"}, { VTP_VLAN_SOURCE_ROUTING_BRIDGE_NUMBER, "Source-Routing Bridge Number TLV"}, { VTP_VLAN_STP_TYPE, "STP type TLV"}, @@ -113,7 +113,7 @@ static struct tok vtp_vlan_tlv_values[] = { { 0, NULL } }; -static struct tok vtp_stp_type_values[] = { +static const struct tok vtp_stp_type_values[] = { { 1, "SRT"}, { 2, "SRB"}, { 3, "Auto"}, @@ -130,14 +130,14 @@ vtp_print (const u_char *pptr, u_int length) if (length < VTP_HEADER_LEN) goto trunc; - tptr = pptr; + tptr = pptr; - if (!TTEST2(*tptr, VTP_HEADER_LEN)) + if (!TTEST2(*tptr, VTP_HEADER_LEN)) goto trunc; type = *(tptr+1); printf("VTPv%u, Message %s (0x%02x), length %u", - *tptr, + *tptr, tok2str(vtp_message_type_values,"Unknown message type", type), *(tptr+1), length); @@ -148,7 +148,7 @@ vtp_print (const u_char *pptr, u_int length) } /* verbose mode print all fields */ - printf("\n\tDomain name: %s, %s: %u", + printf("\n\tDomain name: %s, %s: %u", (tptr+4), tok2str(vtp_header_values,"Unknown",*(tptr+1)), *(tptr+2)); @@ -176,13 +176,13 @@ vtp_print (const u_char *pptr, u_int length) * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * | MD5 digest (16 bytes) | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * + * */ printf("\n\t Config Rev %x, Updater %s", EXTRACT_32BITS(tptr), ipaddr_string(tptr+4)); - tptr += 8; + tptr += 8; printf(", Timestamp 0x%08x 0x%08x 0x%08x", EXTRACT_32BITS(tptr), EXTRACT_32BITS(tptr + 4), @@ -215,12 +215,12 @@ vtp_print (const u_char *pptr, u_int length) * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * | VLAN info field N | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * + * */ printf(", Config Rev %x", EXTRACT_32BITS(tptr)); - /* + /* * VLAN INFORMATION * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ @@ -264,9 +264,9 @@ vtp_print (const u_char *pptr, u_int length) while (len > 0) { - /* + /* * Cisco specs says 2 bytes for type + 2 bytes for length, take only 1 - * See: http://www.cisco.com/univercd/cc/td/doc/product/lan/trsrb/frames.htm + * See: http://www.cisco.com/univercd/cc/td/doc/product/lan/trsrb/frames.htm */ type = *tptr; tlv_len = *(tptr+1); @@ -316,12 +316,18 @@ vtp_print (const u_char *pptr, u_int length) tlv_value); break; + /* + * FIXME those are the defined TLVs that lack a decoder + * you are welcome to contribute code ;-) + */ + case VTP_VLAN_SOURCE_ROUTING_RING_NUMBER: case VTP_VLAN_SOURCE_ROUTING_BRIDGE_NUMBER: case VTP_VLAN_PARENT_VLAN: case VTP_VLAN_TRANS_BRIDGED_VLAN: case VTP_VLAN_ARP_HOP_COUNT: default: + print_unknown_data(gndo,tptr, "\n\t\t ", 2 + tlv_len*2); break; } len -= 2 + tlv_len*2;