]> The Tcpdump Group git mirrors - tcpdump/commitdiff
Add MS NLB heartbeat ethertype, as well as a basic printer
authorRomain Francoise <[email protected]>
Sat, 23 Feb 2013 17:48:52 +0000 (18:48 +0100)
committerRomain Francoise <[email protected]>
Sat, 23 Feb 2013 17:48:52 +0000 (18:48 +0100)
The protocol is undocumented but Wireshark extracts some useful bits of
info from the packet, so it was used as a reference.

Makefile.in
ethertype.h
netdissect.h
print-ether.c
print-msnlb.c [new file with mode: 0644]

index 06ff410da5006b29d5a1155bee4a2b2e8682c4d5..b52d662bd162818d9f637de84c6d71f235942546 100644 (file)
@@ -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 \
index 8c063396d9ec9b242e93a6b63c23133c07b13c0b..385da5d7169d39132dab98fbb02ed4d515777ed0 100644 (file)
 #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
index f187fd5d9db912693e615d27d578a6b41b5d3a82..cc24d36c930a1a1e5c71bade6cb8bb6a7efc15ed 100644 (file)
@@ -286,6 +286,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 *,
index e2f487c2a36ac49bbb486789e6b0ac4ef74b0418..f783341d56b78b0570b7214eed100df7c80268d8 100644 (file)
@@ -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 (file)
index 0000000..4c5fb0c
--- /dev/null
@@ -0,0 +1,66 @@
+/*
+ * Copyright (c) 2013 Romain Francoise <[email protected]>
+ *
+ * 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]"));
+}