]> The Tcpdump Group git mirrors - tcpdump/commitdiff
From From Carles Kishimoto <[email protected]>:
authorhannes <hannes>
Fri, 23 Mar 2007 08:12:00 +0000 (08:12 +0000)
committerhannes <hannes>
Fri, 23 Mar 2007 08:12:00 +0000 (08:12 +0000)
  add support for the cisco propriatry 'dynamic trunking protocol'

FILES
Makefile.in
interface.h
print-dtp.c [new file with mode: 0644]
print-llc.c
win32/prj/GNUmakefile
win32/prj/WinDump.dsp

diff --git a/FILES b/FILES
index fbc096d0f49b1f535bcd44a4e76e44d973667e5c..14176745ead78526be5c3e70a0259b2f2779df7b 100644 (file)
--- a/FILES
+++ b/FILES
@@ -134,6 +134,7 @@ print-dccp.c
 print-decnet.c
 print-dhcp6.c
 print-domain.c
+print-dtp.c
 print-dvmrp.c
 print-eap.c
 print-egp.c
index d1235b16f7ea3d0f6a4629287cf9508eb981dbfc..dd0a892ae53cc39f95cef4535e6e7b27131e4606 100644 (file)
@@ -17,7 +17,7 @@
 #  WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
 #  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
 #
-# @(#) $Header: /tcpdump/master/tcpdump/Makefile.in,v 1.307 2007-03-21 07:35:00 hannes Exp $ (LBL)
+# @(#) $Header: /tcpdump/master/tcpdump/Makefile.in,v 1.308 2007-03-23 08:12:00 hannes Exp $ (LBL)
 
 #
 # Various configurable paths (remember to edit Makefile.in, not Makefile)
@@ -71,7 +71,7 @@ CSRC =        addrtoname.c af.c checksum.c cpack.c gmpls.c oui.c gmt2local.c ipproto.c
        print-aodv.c print-arp.c print-ascii.c print-atalk.c print-atm.c \
        print-beep.c print-bfd.c print-bgp.c print-bootp.c print-cdp.c \
        print-cfm.c print-chdlc.c print-cip.c print-cnfp.c print-dccp.c print-decnet.c \
-       print-domain.c print-dvmrp.c print-enc.c print-egp.c \
+       print-domain.c print-dtp.c print-dvmrp.c print-enc.c print-egp.c \
        print-eap.c print-eigrp.c\
        print-esp.c print-ether.c print-fddi.c print-fr.c \
        print-gre.c print-hsrp.c print-icmp.c print-igmp.c \
index ff9c61647827864cdc9c9c869a7ed563fa742a59..da54ef19ec0ee30dd161a2b11ff9fc4d722126e3 100644 (file)
@@ -18,7 +18,7 @@
  * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  *
- * @(#) $Header: /tcpdump/master/tcpdump/interface.h,v 1.273 2007-03-21 07:58:55 hannes Exp $ (LBL)
+ * @(#) $Header: /tcpdump/master/tcpdump/interface.h,v 1.274 2007-03-23 08:12:00 hannes Exp $ (LBL)
  */
 
 #ifndef tcpdump_interface_h
@@ -283,6 +283,7 @@ extern u_int symantec_if_print(const struct pcap_pkthdr *, const u_char *);
 extern void tcp_print(const u_char *, u_int, const u_char *, int);
 extern void tftp_print(const u_char *, u_int);
 extern void timed_print(const u_char *);
+extern void udld_print(const u_char *, u_int);
 extern void udp_print(const u_char *, u_int, const u_char *, int);
 extern void vtp_print(const u_char *, u_int);
 extern void wb_print(const void *, u_int);
@@ -304,6 +305,7 @@ extern void mpcp_print(const u_char *, u_int);
 extern void cfm_print(const u_char *, u_int);
 extern void pgm_print(const u_char *, u_int, const u_char *);
 extern void cdp_print(const u_char *, u_int, u_int);
+extern void dtp_print(const u_char *, u_int);
 extern void stp_print(const u_char *, u_int);
 extern void radius_print(const u_char *, u_int);
 extern void lwres_print(const u_char *, u_int);
diff --git a/print-dtp.c b/print-dtp.c
new file mode 100644 (file)
index 0000000..c358a89
--- /dev/null
@@ -0,0 +1,123 @@
+/*
+ * Copyright (c) 1998-2007 The TCPDUMP project
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code
+ * distributions retain the above copyright notice and this paragraph
+ * in its entirety, and (2) distributions including binary code include
+ * the above copyright notice and this paragraph in its entirety in
+ * the documentation or other materials provided with the distribution.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND
+ * WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT
+ * LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE.
+ *
+ * Dynamic Trunk Protocol (DTP)
+ *
+ * Original code by Carles Kishimoto <[email protected]>
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <tcpdump-stdinc.h>
+
+#include <stdio.h>
+#include <string.h>
+
+#include "interface.h"
+#include "addrtoname.h"
+#include "extract.h"           
+#include "nlpid.h"
+
+#define DTP_HEADER_LEN                 1
+#define DTP_DOMAIN_TLV                 0x0001
+#define DTP_STATUS_TLV                 0x0002
+#define DTP_DTP_TYPE_TLV               0x0003
+#define DTP_NEIGHBOR_TLV               0x0004
+
+static struct tok dtp_tlv_values[] = {
+    { DTP_DOMAIN_TLV, "Domain TLV"},
+    { DTP_STATUS_TLV, "Status TLV"},
+    { DTP_DTP_TYPE_TLV, "DTP type TLV"},
+    { DTP_NEIGHBOR_TLV, "Neighbor TLV"},
+    { 0, NULL}
+};
+
+void
+dtp_print (const u_char *pptr, u_int length)
+{
+    int type, len;
+    const u_char *tptr;
+
+    if (length < DTP_HEADER_LEN)
+        goto trunc;
+
+    tptr = pptr; 
+
+    if (!TTEST2(*tptr, DTP_HEADER_LEN))        
+       goto trunc;
+
+    printf("DTPv%u, length %u", 
+           (*tptr),
+           length);
+
+    /*
+     * In non-verbose mode, just print version.
+     */
+    if (vflag < 1) {
+       return;
+    }
+
+    tptr += DTP_HEADER_LEN;
+
+    while (tptr < (pptr+length)) {
+
+        if (!TTEST2(*tptr, 4)) 
+            goto trunc;
+
+       type = EXTRACT_16BITS(tptr);
+        len  = EXTRACT_16BITS(tptr+2); 
+
+        /* infinite loop check */
+        if (type == 0 || len == 0) {
+            return;
+        }
+
+        printf("\n\t%s (0x%04x) TLV, length %u",
+               tok2str(dtp_tlv_values, "Unknown", type),
+               type, len);
+
+        switch (type) {
+       case DTP_DOMAIN_TLV:
+               printf(", %s", tptr+4);
+               break;
+
+       case DTP_STATUS_TLV:            
+       case DTP_DTP_TYPE_TLV:
+                printf(", 0x%x", *(tptr+4));
+                break;
+
+       case DTP_NEIGHBOR_TLV:
+                printf(", %s", etheraddr_string(tptr+4));
+                break;
+
+        default:
+            break;
+        }      
+        tptr += len;
+    }
+
+    return;
+
+ trunc:
+    printf("[|dtp]");
+}
+
+/*
+ * Local Variables:
+ * c-style: whitesmith
+ * c-basic-offset: 4
+ * End:
+ */
index 4425e846262a0823f04ba864ead3b7f4ce9c18a4..8dc88b277fc20173691050ee0b30b44053089e83 100644 (file)
@@ -24,7 +24,7 @@
 
 #ifndef lint
 static const char rcsid[] _U_ =
-    "@(#) $Header: /tcpdump/master/tcpdump/print-llc.c,v 1.73 2007-03-21 07:35:00 hannes Exp $";
+    "@(#) $Header: /tcpdump/master/tcpdump/print-llc.c,v 1.74 2007-03-23 08:12:00 hannes Exp $";
 #endif
 
 #ifdef HAVE_CONFIG_H
@@ -446,6 +446,9 @@ snap_print(const u_char *p, u_int length, u_int caplen,
                 case PID_CISCO_CDP:
                         cdp_print(p, length, caplen);
                         return (1);
+                case PID_CISCO_DTP:
+                        dtp_print(p, length); 
+                        return (1);
                 case PID_CISCO_UDLD:
                         udld_print(p, length);
                         return (1);
index 14de9205f88fd546382a5fbfbac5c70c612155c8..ba3cc9a41d2c4b418b2609f7af9e6db40fca9251 100644 (file)
@@ -64,6 +64,7 @@ OBJS = \
        ../../print-decnet.o \
        ../../print-dhcp6.o \
        ../../print-domain.o \
+       ../../print-dtp.o \
        ../../print-dvmrp.o \
        ../../print-egp.o \
        ../../print-enc.o \
index ec55737f4430fbf323589c813e55317fe7b62f0b..f835fe59125882046b271b88c0ff4e253805ae43 100644 (file)
@@ -249,6 +249,10 @@ SOURCE="..\..\print-domain.c"
 # End Source File
 # Begin Source File
 
+SOURCE="..\..\print-dtp.c"
+# End Source File
+# Begin Source File
+
 SOURCE="..\..\print-dvmrp.c"
 # End Source File
 # Begin Source File