From: fenner Date: Mon, 1 May 2000 17:35:44 +0000 (+0000) Subject: Initial VRRP printer (ip proto 112, RFC 2338). X-Git-Tag: tcpdump-3.5.1~312 X-Git-Url: https://git.tcpdump.org/tcpdump/commitdiff_plain/7fd1be1520c42204a6c7ec62ba34b1dd7b0884bb Initial VRRP printer (ip proto 112, RFC 2338). --- diff --git a/Makefile.in b/Makefile.in index 79775d09..0b36c10d 100644 --- a/Makefile.in +++ b/Makefile.in @@ -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 diff --git a/print-ip.c b/print-ip.c index 1effe0d6..09ae8105 100644 --- a/print-ip.c +++ b/print-ip.c @@ -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 index 00000000..442823f3 --- /dev/null +++ b/print-vrrp.c @@ -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 +#include +#include + +#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]"); +}