summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Richardson <mcr@sandelman.ca>2013-03-24 17:49:18 -0400
committerMichael Richardson <mcr@sandelman.ca>2013-03-24 17:49:18 -0400
commit624c208a6b5da63a928c08426065fe89ea68c947 (patch)
treeec325cafcbfe715b8b6c5e3e16bd7bdca5b5f195
parenta7820fc2ab7a1075ac70923051dcf071a82138a1 (diff)
parent8117cc7e3db0a18f7a64882a754419947d9f6d17 (diff)
downloadtcpdump_4_4rel0.tar.gz
Merge remote-tracking branch 'origin/master' into tcpdump_4_4rel0tcpdump_4_4rel0tcpdump-4.4.0
-rw-r--r--Makefile.in98
-rw-r--r--README22
-rw-r--r--ethertype.h3
-rw-r--r--interface.h1
-rw-r--r--netdissect.h2
-rw-r--r--print-bgp.c4
-rw-r--r--print-ether.c5
-rw-r--r--print-msnlb.c66
-rw-r--r--print-otv.c79
-rw-r--r--print-udp.c7
-rw-r--r--print-vxlan.c74
-rw-r--r--tcpdump.1.in3
-rw-r--r--tcpdump.c2
-rw-r--r--tests/TESTLIST10
-rw-r--r--tests/igmpv3-queries.out6
-rw-r--r--tests/igmpv3-queries.pcapbin0 -> 420 bytes
-rw-r--r--tests/mpbgp-linklocal-nexthop.out10
-rw-r--r--tests/mpbgp-linklocal-nexthop.pcapbin0 -> 196 bytes
-rw-r--r--tests/msnlb.out2
-rw-r--r--tests/msnlb.pcapbin0 -> 248 bytes
-rw-r--r--tests/msnlb2.out2
-rw-r--r--tests/msnlb2.pcapbin0 -> 188 bytes
-rw-r--r--udp.h1
-rw-r--r--win32/Include/bittypes.h (renamed from Win32/Include/bittypes.h)0
24 files changed, 298 insertions, 99 deletions
diff --git a/Makefile.in b/Makefile.in
index 16b45ecb..dda4eb5e 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -84,7 +84,7 @@ CSRC = addrtoname.c af.c checksum.c cpack.c gmpls.c oui.c gmt2local.c ipproto.c
print-l2tp.c print-lane.c print-ldp.c print-lldp.c print-llc.c \
print-lmp.c print-lspping.c print-lwapp.c \
print-lwres.c print-mobile.c print-mpcp.c print-mpls.c print-msdp.c \
- print-nfs.c print-ntp.c print-null.c print-olsr.c print-ospf.c \
+ print-msnlb.c print-nfs.c print-ntp.c print-null.c print-olsr.c print-ospf.c \
print-pgm.c print-pim.c \
print-ppi.c print-ppp.c print-pppoe.c print-pptp.c \
print-radius.c print-raw.c print-rip.c print-rpki-rtr.c print-rrcp.c print-rsvp.c \
@@ -93,7 +93,7 @@ CSRC = addrtoname.c af.c checksum.c cpack.c gmpls.c oui.c gmt2local.c ipproto.c
print-symantec.c print-syslog.c print-tcp.c print-telnet.c print-tftp.c \
print-timed.c print-tipc.c print-token.c print-udld.c print-udp.c \
print-usb.c print-vjc.c print-vqp.c print-vrrp.c print-vtp.c \
- print-wb.c print-zephyr.c print-zeromq.c signature.c setsignal.c tcpdump.c util.c
+ print-wb.c print-zephyr.c print-zeromq.c print-vxlan.c print-otv.c signature.c setsignal.c tcpdump.c util.c
LIBNETDISSECT_SRC=print-isakmp.c
LIBNETDISSECT_OBJ=$(LIBNETDISSECT_SRC:.c=.o)
@@ -263,93 +263,8 @@ EXTRA_DIST = \
stime.awk \
strcasecmp.c \
tcpdump.1.in \
- tests/02-sunrise-sunset-esp.pcap \
- tests/08-sunrise-sunset-aes.pcap \
- tests/08-sunrise-sunset-esp2.pcap \
- tests/QinQpacket.out \
- tests/QinQpacket.pcap \
- tests/QinQpacketv.out \
- tests/TESTLIST \
- tests/TESTonce \
- tests/TESTrun.sh \
- tests/babel.pcap \
- tests/babel1.out \
- tests/babel1v.out \
- tests/bgp-infinite-loop.pcap \
- tests/bgp_vpn_attrset.out \
- tests/bgp_vpn_attrset.pcap \
- tests/chdlc-slarp-short.pcap \
- tests/chdlc-slarp.pcap \
- tests/dio.out \
- tests/dio.pcap \
- tests/e1000g.out \
- tests/e1000g.pcap \
- tests/eapon1.gdbinit \
- tests/eapon1.out \
- tests/eapon1.pcap \
- tests/empty.uu \
- tests/esp-secrets.txt \
- tests/esp0.out \
- tests/esp1.gdbinit \
- tests/esp1.out \
- tests/esp2.gdbinit \
- tests/esp2.out \
- tests/esp3.gdbinit \
- tests/esp4.gdbinit \
- tests/esp5.gdbinit \
- tests/esp5.out \
- tests/espudp1.out \
- tests/espudp1.pcap \
- tests/forces1.out \
- tests/forces1.pcap \
- tests/forces1vvv.out \
- tests/forces1vvvv.out \
- tests/forces2v.out \
- tests/forces2vv.out \
- tests/forces3vvv.out \
- tests/icmpv6.out \
- tests/icmpv6.pcap \
- tests/ikev2four.out \
- tests/ikev2four.pcap \
- tests/ikev2fourv.out \
- tests/ikev2fourv4.out \
- tests/ikev2pI2-secrets.txt \
- tests/ikev2pI2.out \
- tests/ikev2pI2.pcap \
- tests/isakmp-delete-segfault.pcap \
- tests/isakmp-identification-segfault.pcap \
- tests/isakmp-pointer-loop.pcap \
- tests/isakmp1.out \
- tests/isakmp2.out \
- tests/isakmp3.out \
- tests/isakmp4.out \
- tests/isakmp4500.pcap \
- tests/isis-infinite-loop.pcap \
- tests/ldp-infinite-loop.pcap \
- tests/lmp.out \
- tests/lmp.pcap \
- tests/lmp.sh \
- tests/lspping-fec-ldp.pcap \
- tests/lspping-fec-rsvp.pcap \
- tests/mpls-ldp-hello.out \
- tests/mpls-ldp-hello.pcap \
- tests/mpls-traceroute.pcap \
- tests/ospf-gmpls.out \
- tests/ospf-gmpls.pcap \
- tests/pppoe.out \
- tests/pppoe.pcap \
- tests/print-A.out \
- tests/print-AA.out \
- tests/print-capX.out \
- tests/print-capXX.out \
- tests/print-flags.pcap \
- tests/print-flags.sh \
- tests/print-x.out \
- tests/print-xx.out \
- tests/rsvp-infinite-loop.pcap \
- tests/sflow_multiple_counter_30_pdus.out \
- tests/sflow_multiple_counter_30_pdus.pcap \
vfprintf.c \
+ win32/Include/bittypes.h \
win32/Include/errno.h \
win32/Include/getopt.h \
win32/Include/w32_fzs.h \
@@ -358,6 +273,8 @@ EXTRA_DIST = \
win32/prj/WinDump.dsp \
win32/prj/WinDump.dsw
+TEST_DIST= `find tests \( -name 'DIFF' -prune \) -o \( -name NEW -prune \) -o -type f \! -name '.*' \! -name '*~' -print`
+
all: $(PROG)
$(PROG): $(OBJ) @V_PCAPDEP@
@@ -443,9 +360,12 @@ TAGS: $(TAGFILES)
releasetar:
@cwd=`pwd` ; dir=`basename $$cwd` ; name=$(PROG)-`cat VERSION` ; \
mkdir $$name; \
- tar cf - $(CSRC) $(HDR) $(LIBNETDISSECT_SRC) $(EXTRA_DIST) | (cd $$name; tar xf -); \
+ tar cf - $(CSRC) $(HDR) $(LIBNETDISSECT_SRC) $(EXTRA_DIST) $(TEST_DIST) | (cd $$name; tar xf -); \
tar -c -z -f $$name.tar.gz $$name; \
rm -rf $$name
+testlist:
+ echo $(TEST_DIST)
+
depend: $(GENSRC)
${srcdir}/mkdep -c $(CC) $(DEFS) $(INCLS) $(SRC)
diff --git a/README b/README
index ed657c1e..e7b5d65c 100644
--- a/README
+++ b/README
@@ -13,8 +13,11 @@ Anonymous Git is available via:
Version 4.x.y of TCPDUMP can be retrieved with the CVS tag "tcpdump_4_xrely":
cvs -d :pserver:cvs.tcpdump.org:/tcpdump/master checkout -r tcpdump_4_xrely tcpdump
-Please submit patches against the master copy to the tcpdump project on
-sourceforge.net.
+Please submit patches by forking the branch on GitHub at
+
+ http://github.com/mcr/tcpdump/tree/master
+
+and issuing a pull request.
formerly from Lawrence Berkeley National Laboratory
Network Research Group <tcpdump@ee.lbl.gov>
@@ -68,16 +71,19 @@ documentation.
Problems, bugs, questions, desirable enhancements, etc. should be sent
to the address "tcpdump-workers@lists.tcpdump.org". Bugs, support
-requests, and feature requests may also be submitted on the SourceForge
-site for tcpdump at
+requests, and feature requests may also be submitted on the GitHub issue
+tracker for tcpdump at
- http://sourceforge.net/projects/tcpdump/
+ https://github.com/mcr/tcpdump/issues
Source code contributions, etc. should be sent to the email address
-submitted as patches on the SourceForge site for tcpdump.
+above or submitted by forking the branch on GitHub at
+
+ http://github.com/mcr/tcpdump/tree/master
+
+and issuing a pull request.
-Current versions can be found at www.tcpdump.org, or the SourceForge
-site for tcpdump.
+Current versions can be found at www.tcpdump.org.
- The TCPdump team
diff --git a/ethertype.h b/ethertype.h
index 8c063396..385da5d7 100644
--- a/ethertype.h
+++ b/ethertype.h
@@ -153,6 +153,9 @@
#ifndef ETHERTYPE_PPPOES2
#define ETHERTYPE_PPPOES2 0x3c13
#endif
+#ifndef ETHERTYPE_MS_NLB_HB
+#define ETHERTYPE_MS_NLB_HB 0x886f /* MS Network Load Balancing Heartbeat */
+#endif
#ifndef ETHERTYPE_JUMBO
#define ETHERTYPE_JUMBO 0x8870
#endif
diff --git a/interface.h b/interface.h
index 57d4636d..2dff9d81 100644
--- a/interface.h
+++ b/interface.h
@@ -73,6 +73,7 @@ extern char *strsep(char **, const char *);
#define PT_CARP 10 /* Common Address Redundancy Protocol */
#define PT_RADIUS 11 /* RADIUS authentication Protocol */
#define PT_ZMTP1 12 /* ZeroMQ Message Transport Protocol 1.0 */
+#define PT_VXLAN 13 /* Virtual eXtensible Local Area Network */
#ifndef min
#define min(a,b) ((a)>(b)?(b):(a))
diff --git a/netdissect.h b/netdissect.h
index f187fd5d..be6fb119 100644
--- a/netdissect.h
+++ b/netdissect.h
@@ -182,6 +182,7 @@ struct netdissect_options {
#define PT_CARP 10 /* Common Address Redundancy Protocol */
#define PT_RADIUS 11 /* RADIUS authentication Protocol */
#define PT_ZMTP1 12 /* ZeroMQ Message Transport Protocol 1.0 */
+#define PT_VXLAN 13 /* Virtual eXtensible Local Area Network */
#ifndef min
#define min(a,b) ((a)>(b)?(b):(a))
@@ -286,6 +287,7 @@ extern int esp_print(netdissect_options *,
int *nhdr, int *padlen);
extern void arp_print(netdissect_options *,const u_char *, u_int, u_int);
extern void tipc_print(netdissect_options *, const u_char *, u_int, u_int);
+extern void msnlb_print(netdissect_options *, const u_char *, u_int);
extern void icmp6_print(netdissect_options *ndo, const u_char *,
u_int, const u_char *, int);
extern void isakmp_print(netdissect_options *,const u_char *,
diff --git a/print-bgp.c b/print-bgp.c
index c1e382fd..4f7053c2 100644
--- a/print-bgp.c
+++ b/print-bgp.c
@@ -1531,8 +1531,12 @@ bgp_attr_print(u_int atype, const u_char *pptr, u_int len)
tptr++;
if (tlen) {
+ int nnh = 0;
printf("\n\t nexthop: ");
while (tlen > 0) {
+ if ( nnh++ > 0 ) {
+ printf( ", " );
+ }
switch(af<<8 | safi) {
case (AFNUM_INET<<8 | SAFNUM_UNICAST):
case (AFNUM_INET<<8 | SAFNUM_MULTICAST):
diff --git a/print-ether.c b/print-ether.c
index e2f487c2..f783341d 100644
--- a/print-ether.c
+++ b/print-ether.c
@@ -76,6 +76,7 @@ const struct tok ethertype_values[] = {
{ ETHERTYPE_PPPOES, "PPPoE S" },
{ ETHERTYPE_EAPOL, "EAPOL" },
{ ETHERTYPE_RRCP, "RRCP" },
+ { ETHERTYPE_MS_NLB_HB, "MS NLB heartbeat" },
{ ETHERTYPE_JUMBO, "Jumbo" },
{ ETHERTYPE_LOOPBACK, "Loopback" },
{ ETHERTYPE_ISO, "OSI" },
@@ -412,6 +413,10 @@ ethertype_print(netdissect_options *ndo,
tipc_print(ndo, p, length, caplen);
return (1);
+ case ETHERTYPE_MS_NLB_HB:
+ msnlb_print(ndo, p, length);
+ return (1);
+
case ETHERTYPE_LAT:
case ETHERTYPE_SCA:
case ETHERTYPE_MOPRC:
diff --git a/print-msnlb.c b/print-msnlb.c
new file mode 100644
index 00000000..4c5fb0cb
--- /dev/null
+++ b/print-msnlb.c
@@ -0,0 +1,66 @@
+/*
+ * Copyright (c) 2013 Romain Francoise <romain@orebokech.com>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the project nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <tcpdump-stdinc.h>
+
+#include <stdio.h>
+#include <string.h>
+
+#include "netdissect.h"
+#include "addrtoname.h"
+#include "extract.h"
+
+struct msnlb_heartbeat_pkt {
+ u_int32_t unknown1;
+ u_int32_t unknown2;
+ u_int32_t host_prio; /* little-endian */
+ u_int32_t virtual_ip;
+ u_int32_t host_ip;
+ /* the protocol is undocumented so we ignore the rest */
+};
+
+void
+msnlb_print(netdissect_options *ndo, const u_char *bp, u_int length)
+{
+ const struct msnlb_heartbeat_pkt *hb;
+
+ hb = (struct msnlb_heartbeat_pkt *)bp;
+ ND_TCHECK(*hb);
+
+ ND_PRINT((ndo, "MS NLB heartbeat, host priority: %u,",
+ EXTRACT_LE_32BITS(&(hb->host_prio))));
+ ND_PRINT((ndo, " cluster IP: %s,", ipaddr_string(&(hb->virtual_ip))));
+ ND_PRINT((ndo, " host IP: %s", ipaddr_string(&(hb->host_ip))));
+ return;
+trunc:
+ ND_PRINT((ndo, "[|MS NLB]"));
+}
diff --git a/print-otv.c b/print-otv.c
new file mode 100644
index 00000000..f312b0ba
--- /dev/null
+++ b/print-otv.c
@@ -0,0 +1,79 @@
+/*
+ * 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.
+ *
+ * Original code by Francesco Fondelli (francesco dot fondelli, gmail dot com)
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <tcpdump-stdinc.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "interface.h"
+#include "extract.h"
+#include "addrtoname.h"
+
+#include "udp.h"
+
+/*
+ * OTV header, draft-hasmit-otv-04
+ *
+ * 0 1 2 3
+ * 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
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * |R|R|R|R|I|R|R|R| Overlay ID |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Instance ID | Reserved |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ */
+
+void
+otv_print(const u_char *bp, u_int len, u_int port)
+{
+ u_int8_t flags;
+ u_int32_t overlay_id;
+ u_int32_t instance_id;
+
+ if (len < 8) {
+ printf("[|OTV]");
+ return;
+ }
+
+ flags = *bp;
+ bp += 1;
+
+ overlay_id = EXTRACT_24BITS(bp);
+ bp += 3;
+
+ instance_id = EXTRACT_24BITS(bp);
+ bp += 4;
+
+ printf("OTV, ");
+
+ fputs("flags [", stdout);
+ if (flags & 0x08)
+ fputs("I", stdout);
+ else
+ fputs(".", stdout);
+ fputs("] ", stdout);
+
+ printf("(0x%02x), ", flags);
+ printf("overlay %u, ", overlay_id);
+ printf("instance %u\n", instance_id);
+
+ ether_print(gndo, bp, len - 8, len - 8, NULL, NULL);
+ return;
+}
diff --git a/print-udp.c b/print-udp.c
index e321f218..3c5ed8bc 100644
--- a/print-udp.c
+++ b/print-udp.c
@@ -474,6 +474,11 @@ udp_print(register const u_char *bp, u_int length,
udpipaddr_print(ip, sport, dport);
radius_print(cp, length);
break;
+
+ case PT_VXLAN:
+ udpipaddr_print(ip, sport, dport);
+ vxlan_print((const u_char *)(up + 1), length);
+ break;
}
return;
}
@@ -663,6 +668,8 @@ udp_print(register const u_char *bp, u_int length,
sip_print((const u_char *)(up + 1), length);
else if (ISPORT(SYSLOG_PORT))
syslog_print((const u_char *)(up + 1), length);
+ else if (ISPORT(OTV_PORT))
+ otv_print((const u_char *)(up + 1), length);
else
(void)printf("UDP, length %u",
(u_int32_t)(ulen - sizeof(*up)));
diff --git a/print-vxlan.c b/print-vxlan.c
new file mode 100644
index 00000000..9f8c3fb4
--- /dev/null
+++ b/print-vxlan.c
@@ -0,0 +1,74 @@
+/*
+ * 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.
+ *
+ * Original code by Francesco Fondelli (francesco dot fondelli, gmail dot com)
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <tcpdump-stdinc.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "interface.h"
+#include "extract.h"
+#include "addrtoname.h"
+
+#include "udp.h"
+
+/*
+ * VXLAN header, draft-mahalingam-dutt-dcops-vxlan-03
+ *
+ * 0 1 2 3
+ * 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
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * |R|R|R|R|I|R|R|R| Reserved |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | VXLAN Network Identifier (VNI) | Reserved |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ */
+
+void
+vxlan_print(const u_char *bp, u_int len, u_int port)
+{
+ u_int8_t flags;
+ u_int32_t vni;
+
+ if (len < 8) {
+ printf("[|VXLAN]");
+ return;
+ }
+
+ flags = *bp;
+ bp += 4;
+
+ vni = EXTRACT_24BITS(bp);
+ bp += 4;
+
+ printf("VXLAN, ");
+
+ fputs("flags [", stdout);
+ if (flags & 0x08)
+ fputs("I", stdout);
+ else
+ fputs(".", stdout);
+ fputs("] ", stdout);
+
+ printf("(0x%02x), ", flags);
+ printf("vni %u\n", vni);
+
+ ether_print(gndo, bp, len - 8, len - 8, NULL, NULL);
+ return;
+}
diff --git a/tcpdump.1.in b/tcpdump.1.in
index d2223261..cb2fbdd3 100644
--- a/tcpdump.1.in
+++ b/tcpdump.1.in
@@ -527,8 +527,9 @@ Currently known types are
\fBtftp\fR (Trivial File Transfer Protocol),
\fBvat\fR (Visual Audio Tool),
\fBwb\fR (distributed White Board),
+\fBzmtp1\fR (ZeroMQ Message Transport Protocol 1.0)
and
-\fBzmtp1\fR (ZeroMQ Message Transport Protocol 1.0).
+\fBvxlan\fR (Virtual eXtensible Local Area Network).
.TP
.B \-t
\fIDon't\fP print a timestamp on each dump line.
diff --git a/tcpdump.c b/tcpdump.c
index ad07df6f..66d81bbf 100644
--- a/tcpdump.c
+++ b/tcpdump.c
@@ -1013,6 +1013,8 @@ main(int argc, char **argv)
packettype = PT_RADIUS;
else if (strcasecmp(optarg, "zmtp1") == 0)
packettype = PT_ZMTP1;
+ else if (strcasecmp(optarg, "vxlan") == 0)
+ packettype = PT_VXLAN;
else
error("unknown packet type `%s'", optarg);
break;
diff --git a/tests/TESTLIST b/tests/TESTLIST
index aed8e064..4ee9633d 100644
--- a/tests/TESTLIST
+++ b/tests/TESTLIST
@@ -1,5 +1,6 @@
-# BGP test
+# BGP tests
bgp_vpn_attrset bgp_vpn_attrset.pcap bgp_vpn_attrset.out -t -v
+mpbgp-linklocal-nexthop mpbgp-linklocal-nexthop.pcap mpbgp-linklocal-nexthop.out -t -v
# EAP tests
eapon1 eapon1.pcap eapon1.out -t
@@ -65,6 +66,9 @@ babel_auth babel_auth.pcap babel_auth.out -t -v
# PPPoE tests
pppoe pppoe.pcap pppoe.out -t
+# IGMP tests
+igmpv3-queries igmpv3-queries.pcap igmpv3-queries.out -t
+
# ICMPv6
icmpv6 icmpv6.pcap icmpv6.out -t -vv
@@ -86,3 +90,7 @@ dhcpv6-ia-ta dhcpv6-ia-ta.pcap dhcpv6-ia-ta.out -t -v
# ZeroMQ tests
zmtp1v zmtp1.pcap zmtp1.out -t -v -T zmtp1
+
+# MS NLB tests
+msnlb msnlb.pcap msnlb.out -t
+msnlb2 msnlb2.pcap msnlb2.out -t
diff --git a/tests/igmpv3-queries.out b/tests/igmpv3-queries.out
new file mode 100644
index 00000000..9db6f9bf
--- /dev/null
+++ b/tests/igmpv3-queries.out
@@ -0,0 +1,6 @@
+IP 192.2.0.2 > 224.0.0.1: igmp query v3
+IP 192.2.0.2 > 224.0.0.1: igmp query v3 [max resp time 51m12s]
+IP 192.2.0.2 > 224.0.0.1: igmp query v3 [max resp time 51m12s]
+IP 192.2.0.2 > 224.0.0.1: igmp query v3 [max resp time 1.0s]
+IP 192.2.0.2 > 224.0.0.1: igmp query v3 [max resp time 1.0s]
+IP 192.2.0.2 > 224.0.0.1: igmp query v3 [max resp time 1.0s]
diff --git a/tests/igmpv3-queries.pcap b/tests/igmpv3-queries.pcap
new file mode 100644
index 00000000..df653ce6
--- /dev/null
+++ b/tests/igmpv3-queries.pcap
Binary files differ
diff --git a/tests/mpbgp-linklocal-nexthop.out b/tests/mpbgp-linklocal-nexthop.out
new file mode 100644
index 00000000..337f0d8d
--- /dev/null
+++ b/tests/mpbgp-linklocal-nexthop.out
@@ -0,0 +1,10 @@
+IP (tos 0xc0, ttl 64, id 22725, offset 0, flags [DF], proto TCP (6), length 142)
+ 30.0.0.1.49038 > 30.0.0.2.179: Flags [P.], cksum 0xd6dc (correct), seq 1284816775:1284816865, ack 1288709908, win 29, options [nop,nop,TS val 184150022 ecr 184150021], length 90: BGP, length: 90
+ Update Message (2), length: 90
+ Origin (1), length: 1, Flags [T]: Incomplete
+ AS Path (2), length: 4, Flags [T]: 1
+ Next Hop (3), length: 4, Flags [T]: 0.0.0.0
+ Multi-Protocol Reach NLRI (14), length: 46, Flags [O]:
+ AFI: IPv6 (2), SAFI: Unicast (1)
+ nexthop: dead:beef::1, fe80::1ff:fe01:0, nh-length: 32, no SNPA
+ 4:5::/64
diff --git a/tests/mpbgp-linklocal-nexthop.pcap b/tests/mpbgp-linklocal-nexthop.pcap
new file mode 100644
index 00000000..1ac823de
--- /dev/null
+++ b/tests/mpbgp-linklocal-nexthop.pcap
Binary files differ
diff --git a/tests/msnlb.out b/tests/msnlb.out
new file mode 100644
index 00000000..194dbcd1
--- /dev/null
+++ b/tests/msnlb.out
@@ -0,0 +1,2 @@
+MS NLB heartbeat, host priority: 2, cluster IP: 192.168.100.80, host IP: 192.168.100.82
+MS NLB heartbeat, host priority: 1, cluster IP: 192.168.100.80, host IP: 192.168.100.81
diff --git a/tests/msnlb.pcap b/tests/msnlb.pcap
new file mode 100644
index 00000000..dab88fe2
--- /dev/null
+++ b/tests/msnlb.pcap
Binary files differ
diff --git a/tests/msnlb2.out b/tests/msnlb2.out
new file mode 100644
index 00000000..00fc1a66
--- /dev/null
+++ b/tests/msnlb2.out
@@ -0,0 +1,2 @@
+[|MS NLB]
+[|MS NLB]
diff --git a/tests/msnlb2.pcap b/tests/msnlb2.pcap
new file mode 100644
index 00000000..270476d2
--- /dev/null
+++ b/tests/msnlb2.pcap
Binary files differ
diff --git a/udp.h b/udp.h
index ad1d8506..b07cdd43 100644
--- a/udp.h
+++ b/udp.h
@@ -85,6 +85,7 @@ struct udphdr {
#define SFLOW_PORT 6343 /* http://www.sflow.org/developers/specifications.php */
#define LWAPP_DATA_PORT 12222 /* draft-ohara-capwap-lwapp-04.txt */
#define LWAPP_CONTROL_PORT 12223 /* draft-ohara-capwap-lwapp-04.txt */
+#define OTV_PORT 8472 /* draft-hasmit-otv-04 */
#ifdef INET6
#define RIPNG_PORT 521 /*XXX*/
diff --git a/Win32/Include/bittypes.h b/win32/Include/bittypes.h
index 95aa9faa..95aa9faa 100644
--- a/Win32/Include/bittypes.h
+++ b/win32/Include/bittypes.h