mirror of
https://github.com/openbsd/src.git
synced 2025-01-09 22:38:01 -08:00
add vrrp printing; from tcpdump.org
This commit is contained in:
parent
1ac40323a1
commit
f366d6b49b
usr.sbin/tcpdump
@ -1,4 +1,4 @@
|
||||
# $OpenBSD: Makefile,v 1.23 2000/10/19 16:31:41 jason Exp $
|
||||
# $OpenBSD: Makefile,v 1.24 2000/12/07 21:52:38 mickey Exp $
|
||||
#
|
||||
# Copyright (c) 1988, 1989, 1990, 1991, 1992, 1993, 1994
|
||||
# The Regents of the University of California. All rights reserved.
|
||||
@ -39,7 +39,7 @@ SRCS= tcpdump.c addrtoname.c \
|
||||
print-icmp.c print-sl.c print-ppp.c print-rip.c \
|
||||
print-snmp.c print-ntp.c print-null.c print-egp.c print-ospf.c \
|
||||
print-fddi.c print-llc.c print-sunrpc.c \
|
||||
print-wb.c print-decnet.c print-isoclns.c print-ipx.c \
|
||||
print-vrrp.c print-wb.c print-decnet.c print-isoclns.c print-ipx.c \
|
||||
print-atm.c print-dvmrp.c print-krb.c print-pim.c print-netbios.c \
|
||||
util.c bpf_dump.c parsenfsfh.c version.c machdep.c print-igrp.c \
|
||||
print-gre.c print-radius.c print-enc.c print-cnfp.c \
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $OpenBSD: interface.h,v 1.18 2000/10/19 16:31:42 jason Exp $ */
|
||||
/* $OpenBSD: interface.h,v 1.19 2000/12/07 21:52:38 mickey Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997
|
||||
@ -20,7 +20,7 @@
|
||||
* WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
* @(#) $Header: /home/cvs/src/usr.sbin/tcpdump/interface.h,v 1.18 2000/10/19 16:31:42 jason Exp $ (LBL)
|
||||
* @(#) $Header: /home/cvs/src/usr.sbin/tcpdump/interface.h,v 1.19 2000/12/07 21:52:38 mickey Exp $ (LBL)
|
||||
*/
|
||||
|
||||
#ifndef tcpdump_interface_h
|
||||
@ -199,6 +199,7 @@ extern void isoclns_print(const u_char *, u_int, u_int, const u_char *,
|
||||
const u_char *);
|
||||
extern void krb_print(const u_char *, u_int);
|
||||
extern void l2tp_print(const u_char *dat, u_int length);
|
||||
extern void vrrp_print(const u_char *bp, u_int len, int ttl);
|
||||
extern void nfsreply_print(const u_char *, u_int, const u_char *);
|
||||
extern void nfsreq_print(const u_char *, u_int, const u_char *);
|
||||
extern void ns_print(const u_char *, u_int);
|
||||
@ -238,3 +239,5 @@ extern int rt6_print(const u_char *, const u_char *);
|
||||
extern void ospf6_print(const u_char *, u_int);
|
||||
extern void dhcp6_print(const u_char *, u_int, u_short, u_short);
|
||||
#endif /*INET6*/
|
||||
|
||||
extern u_short in_cksum(const u_short *addr, register int len, u_short csum);
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $OpenBSD: print-ip.c,v 1.11 2000/10/03 14:31:57 ho Exp $ */
|
||||
/* $OpenBSD: print-ip.c,v 1.12 2000/12/07 21:52:38 mickey Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997
|
||||
@ -23,7 +23,7 @@
|
||||
|
||||
#ifndef lint
|
||||
static const char rcsid[] =
|
||||
"@(#) $Header: /home/cvs/src/usr.sbin/tcpdump/print-ip.c,v 1.11 2000/10/03 14:31:57 ho Exp $ (LBL)";
|
||||
"@(#) $Header: /home/cvs/src/usr.sbin/tcpdump/print-ip.c,v 1.12 2000/12/07 21:52:38 mickey Exp $ (LBL)";
|
||||
#endif
|
||||
|
||||
#include <sys/param.h>
|
||||
@ -318,23 +318,34 @@ ip_optprint(register const u_char *cp, u_int length)
|
||||
* compute an IP header checksum.
|
||||
* don't modifiy the packet.
|
||||
*/
|
||||
static int
|
||||
in_cksum(const struct ip *ip)
|
||||
u_short
|
||||
in_cksum(const u_short *addr, register int len, u_short csum)
|
||||
{
|
||||
register const u_short *sp = (u_short *)ip;
|
||||
register u_int32_t sum = 0;
|
||||
register int count;
|
||||
int nleft = len;
|
||||
const u_short *w = addr;
|
||||
u_short answer;
|
||||
int sum = csum;
|
||||
|
||||
/*
|
||||
* Our algorithm is simple, using a 32 bit accumulator (sum),
|
||||
* we add sequential 16 bit words to it, and at the end, fold
|
||||
* back all the carry bits from the top 16 bits into the lower
|
||||
* 16 bits.
|
||||
*/
|
||||
while (nleft > 1) {
|
||||
sum += *w++;
|
||||
nleft -= 2;
|
||||
}
|
||||
if (nleft == 1)
|
||||
sum += htons(*(u_char *)w<<8);
|
||||
|
||||
/*
|
||||
* No need for endian conversions.
|
||||
* add back carry outs from top 16 bits to low 16 bits
|
||||
*/
|
||||
for (count = ip->ip_hl * 2; --count >= 0; )
|
||||
sum += *sp++;
|
||||
while (sum > 0xffff)
|
||||
sum = (sum & 0xffff) + (sum >> 16);
|
||||
sum = ~sum & 0xffff;
|
||||
|
||||
return (sum);
|
||||
sum = (sum >> 16) + (sum & 0xffff); /* add hi 16 to low 16 */
|
||||
sum += (sum >> 16); /* add carry */
|
||||
answer = ~sum; /* truncate to 16 bits */
|
||||
return (answer);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -520,6 +531,12 @@ ip_print(register const u_char *bp, register u_int length)
|
||||
return;
|
||||
}
|
||||
break;
|
||||
#ifndef IPPROTO_VRRP
|
||||
#define IPPROTO_VRRP 112
|
||||
#endif
|
||||
case IPPROTO_VRRP:
|
||||
vrrp_print(cp, len, ip->ip_ttl);
|
||||
break;
|
||||
|
||||
default:
|
||||
(void)printf("%s > %s:", ipaddr_string(&ip->ip_src),
|
||||
@ -581,7 +598,7 @@ ip_print(register const u_char *bp, register u_int length)
|
||||
sep = ", ";
|
||||
}
|
||||
if ((u_char *)ip + hlen <= snapend) {
|
||||
sum = in_cksum(ip);
|
||||
sum = in_cksum((const u_short *)ip, hlen, 0);
|
||||
if (sum != 0) {
|
||||
(void)printf("%sbad cksum %x!", sep,
|
||||
ntohs(ip->ip_sum));
|
||||
|
125
usr.sbin/tcpdump/print-vrrp.c
Normal file
125
usr.sbin/tcpdump/print-vrrp.c
Normal file
@ -0,0 +1,125 @@
|
||||
/* $OpenBSD: print-vrrp.c,v 1.1 2000/12/07 21:52:38 mickey Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2000 William C. Fenner.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Kevin Steves <ks@hp.se> July 2000
|
||||
* Modified to:
|
||||
* - print version, type string and packet length
|
||||
* - print IP address count if > 1 (-v)
|
||||
* - verify checksum (-v)
|
||||
* - print authentication string (-v)
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* from tcpdump.org:
|
||||
* Header: /tcpdump/master/tcpdump/print-vrrp.c,v 1.3 2000/10/10 05:05:08 guy Exp
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
static const char rcsid[] =
|
||||
"@(#) $Header: /home/cvs/src/usr.sbin/tcpdump/print-vrrp.c,v 1.1 2000/12/07 21:52:38 mickey Exp $";
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include <netinet/in.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)
|
||||
{
|
||||
int version, type, auth_type;
|
||||
char *type_s;
|
||||
|
||||
TCHECK(bp[0]);
|
||||
version = (bp[0] & 0xf0) >> 4;
|
||||
type = bp[0] & 0x0f;
|
||||
if (type == 1)
|
||||
type_s = "advertise";
|
||||
else
|
||||
type_s = "unknown";
|
||||
printf("VRRPv%d-%s %d: ", version, type_s, len);
|
||||
if (ttl != 255)
|
||||
printf("[ttl=%d!] ", ttl);
|
||||
if (version != 2 || type != 1)
|
||||
return;
|
||||
TCHECK(bp[2]);
|
||||
printf("vrid=%d prio=%d", bp[1], bp[2]);
|
||||
TCHECK(bp[5]);
|
||||
auth_type = bp[4];
|
||||
if (auth_type != 0)
|
||||
printf(" authtype=%d", auth_type);
|
||||
printf(" intvl=%d", bp[5]);
|
||||
if (vflag) {
|
||||
int naddrs = bp[3];
|
||||
int i;
|
||||
char c;
|
||||
|
||||
if (TTEST2(bp[0], len) && in_cksum((const u_short*)bp, len, 0))
|
||||
printf(" (bad vrrp cksum %x!)",
|
||||
EXTRACT_16BITS(&bp[6]));
|
||||
printf(" addrs");
|
||||
if (naddrs > 1)
|
||||
printf("(%d)", naddrs);
|
||||
printf(":");
|
||||
c = ' ';
|
||||
bp += 8;
|
||||
for (i = 0; i < naddrs; i++) {
|
||||
TCHECK(bp[3]);
|
||||
printf("%c%s", c, ipaddr_string(bp));
|
||||
c = ',';
|
||||
bp += 4;
|
||||
}
|
||||
if (auth_type == 1) { /* simple text password */
|
||||
TCHECK(bp[7]);
|
||||
printf(" auth %.8s", bp);
|
||||
}
|
||||
}
|
||||
return;
|
||||
trunc:
|
||||
printf("[|vrrp]");
|
||||
}
|
Loading…
Reference in New Issue
Block a user