]> The Tcpdump Group git mirrors - tcpdump/commitdiff
Initial VRRP printer (ip proto 112, RFC 2338).
authorfenner <fenner>
Mon, 1 May 2000 17:35:44 +0000 (17:35 +0000)
committerfenner <fenner>
Mon, 1 May 2000 17:35:44 +0000 (17:35 +0000)
Makefile.in
print-ip.c
print-vrrp.c [new file with mode: 0644]

index 79775d093545acf17b0ab6e5517e69b04b995ac3..0b36c10d6afa30495dae77cff9c4b4a72bf26e6a 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.228 2000-04-27 10:05:30 itojun Exp $ (LBL)
+# @(#) $Header: /tcpdump/master/tcpdump/Makefile.in,v 1.229 2000-05-01 17:35:45 fenner Exp $ (LBL)
 
 #
 # Various configurable paths (remember to edit Makefile.in, not Makefile)
@@ -76,7 +76,8 @@ CSRC =        tcpdump.c \
        print-esp.c print-ah.c print-vjc.c print-isakmp.c print-chdlc.c \
        print-ipcomp.c print-mobile.c print-l2tp.c print-bgp.c print-rx.c \
        print-lane.c print-cip.c print-pppoe.c print-lcp.c \
-       print-smb.c smbutil.c print-ascii.c print-telnet.c print-cnfp.c
+       print-smb.c smbutil.c print-ascii.c print-telnet.c print-cnfp.c \
+       print-vrrp.c
 
 LOCALSRC = @LOCALSRC@
 GENSRC = version.c
index 1effe0d693774bef4b9466f67ec2bcdc1f5e4dac..09ae810599ef0f67d09f8e90d6feff9e9d532e2c 100644 (file)
@@ -21,7 +21,7 @@
 
 #ifndef lint
 static const char rcsid[] =
-    "@(#) $Header: /tcpdump/master/tcpdump/print-ip.c,v 1.80 2000-01-25 01:03:23 fenner Exp $ (LBL)";
+    "@(#) $Header: /tcpdump/master/tcpdump/print-ip.c,v 1.81 2000-05-01 17:35:45 fenner Exp $ (LBL)";
 #endif
 
 #ifdef HAVE_CONFIG_H
@@ -630,6 +630,13 @@ again:
                        pim_print(cp, len);
                        break;
 
+#ifndef IPPROTO_VRRP
+#define IPPROTO_VRRP   112
+#endif
+               case IPPROTO_VRRP:
+                       vrrp_print(cp, len, ip->ip_ttl);
+                       break;
+
                default:
 #if 0
                        (void)printf("%s > %s:", ipaddr_string(&ip->ip_src),
diff --git a/print-vrrp.c b/print-vrrp.c
new file mode 100644 (file)
index 0000000..442823f
--- /dev/null
@@ -0,0 +1,99 @@
+/*
+ * Copyright (c) 2000 William C. Fenner.
+ *                All rights reserved.
+ *
+ * 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.
+ * The name of William C. Fenner may not be used to endorse or
+ * promote products derived from this software without specific prior
+ * written permission.  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.
+ */
+
+#ifndef lint
+static const char rcsid[] =
+    "@(#) $Header: /tcpdump/master/tcpdump/print-vrrp.c,v 1.1 2000-05-01 17:35:44 fenner Exp $";
+#endif
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+#include "interface.h"
+#include "extract.h"
+#include "addrtoname.h"
+
+/*
+ * RFC 2338:
+ *     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
+ *    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ *    |Version| Type  | Virtual Rtr ID|   Priority    | Count IP Addrs|
+ *    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ *    |   Auth Type   |   Adver Int   |          Checksum             |
+ *    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ *    |                         IP Address (1)                        |
+ *    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ *    |                            .                                  |
+ *    |                            .                                  |
+ *    |                            .                                  |
+ *    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ *    |                         IP Address (n)                        |
+ *    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ *    |                     Authentication Data (1)                   |
+ *    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ *    |                     Authentication Data (2)                   |
+ *    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ */
+void
+vrrp_print(register const u_char *bp, register u_int len, int ttl)
+{
+       printf("vrrp ");
+       if (ttl != 255)
+               printf("[ttl=%d!] ", ttl);
+       TCHECK(bp[3]);
+       if ((bp[0] & 0xf0) != 0x20) {
+               printf("[v=%d]", bp[0] >> 4);
+               return;
+       }
+       if ((bp[0] & 0x0f) != 1) {
+               printf("[t=%d]", bp[0] & 0x0f);
+               return;
+       }
+       printf("vrid=%d prio=%d", bp[1], bp[2]);
+       TCHECK(bp[5]);
+       if (bp[4] != 0) {
+               printf(" [authtype %d]", bp[4]);
+       }
+       printf(" intvl=%d", bp[5]);
+       if (vflag) {
+               int naddrs = bp[3];
+               int i;
+               char c;
+
+               /* check checksum? */
+               printf(" addrs:");
+               c = ' ';
+               bp += 8;
+               for (i = 0; i < naddrs; i++) {
+                       TCHECK(bp[3]);
+                       printf("%c%s", c, ipaddr_string(bp));
+                       c = ',';
+                       bp += 4;
+               }
+               /* auth data? */
+       }
+       return;
+trunc:
+       printf("[|vrrp]");
+}