mirror of
https://github.com/openbsd/src.git
synced 2025-01-10 06:47:55 -08:00
add vrrp printing; from tcpdump.org
This commit is contained in:
parent
1ac40323a1
commit
f366d6b49b
@ -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
|
# Copyright (c) 1988, 1989, 1990, 1991, 1992, 1993, 1994
|
||||||
# The Regents of the University of California. All rights reserved.
|
# 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-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-snmp.c print-ntp.c print-null.c print-egp.c print-ospf.c \
|
||||||
print-fddi.c print-llc.c print-sunrpc.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 \
|
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 \
|
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 \
|
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
|
* Copyright (c) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997
|
||||||
@ -20,7 +20,7 @@
|
|||||||
* WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
|
* WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
|
||||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
* 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
|
#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 *);
|
const u_char *);
|
||||||
extern void krb_print(const u_char *, u_int);
|
extern void krb_print(const u_char *, u_int);
|
||||||
extern void l2tp_print(const u_char *dat, u_int length);
|
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 nfsreply_print(const u_char *, u_int, const u_char *);
|
||||||
extern void nfsreq_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);
|
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 ospf6_print(const u_char *, u_int);
|
||||||
extern void dhcp6_print(const u_char *, u_int, u_short, u_short);
|
extern void dhcp6_print(const u_char *, u_int, u_short, u_short);
|
||||||
#endif /*INET6*/
|
#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
|
* Copyright (c) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997
|
||||||
@ -23,7 +23,7 @@
|
|||||||
|
|
||||||
#ifndef lint
|
#ifndef lint
|
||||||
static const char rcsid[] =
|
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
|
#endif
|
||||||
|
|
||||||
#include <sys/param.h>
|
#include <sys/param.h>
|
||||||
@ -318,23 +318,34 @@ ip_optprint(register const u_char *cp, u_int length)
|
|||||||
* compute an IP header checksum.
|
* compute an IP header checksum.
|
||||||
* don't modifiy the packet.
|
* don't modifiy the packet.
|
||||||
*/
|
*/
|
||||||
static int
|
u_short
|
||||||
in_cksum(const struct ip *ip)
|
in_cksum(const u_short *addr, register int len, u_short csum)
|
||||||
{
|
{
|
||||||
register const u_short *sp = (u_short *)ip;
|
int nleft = len;
|
||||||
register u_int32_t sum = 0;
|
const u_short *w = addr;
|
||||||
register int count;
|
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 = (sum >> 16) + (sum & 0xffff); /* add hi 16 to low 16 */
|
||||||
sum += *sp++;
|
sum += (sum >> 16); /* add carry */
|
||||||
while (sum > 0xffff)
|
answer = ~sum; /* truncate to 16 bits */
|
||||||
sum = (sum & 0xffff) + (sum >> 16);
|
return (answer);
|
||||||
sum = ~sum & 0xffff;
|
|
||||||
|
|
||||||
return (sum);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -520,6 +531,12 @@ ip_print(register const u_char *bp, register u_int length)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
#ifndef IPPROTO_VRRP
|
||||||
|
#define IPPROTO_VRRP 112
|
||||||
|
#endif
|
||||||
|
case IPPROTO_VRRP:
|
||||||
|
vrrp_print(cp, len, ip->ip_ttl);
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
(void)printf("%s > %s:", ipaddr_string(&ip->ip_src),
|
(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 = ", ";
|
sep = ", ";
|
||||||
}
|
}
|
||||||
if ((u_char *)ip + hlen <= snapend) {
|
if ((u_char *)ip + hlen <= snapend) {
|
||||||
sum = in_cksum(ip);
|
sum = in_cksum((const u_short *)ip, hlen, 0);
|
||||||
if (sum != 0) {
|
if (sum != 0) {
|
||||||
(void)printf("%sbad cksum %x!", sep,
|
(void)printf("%sbad cksum %x!", sep,
|
||||||
ntohs(ip->ip_sum));
|
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