GCC Code Coverage Report
Directory: ./ Exec Total Coverage
File: usr.sbin/tcpdump/print-carp.c Lines: 0 20 0.0 %
Date: 2017-11-13 Branches: 0 26 0.0 %

Line Branch Exec Source
1
/*	$OpenBSD: print-carp.c,v 1.7 2015/11/15 20:35:36 mmcc Exp $	*/
2
3
/*
4
 * Copyright (c) 2000 William C. Fenner.
5
 *                All rights reserved.
6
 *
7
 * Kevin Steves <ks@hp.se> July 2000
8
 * Modified to:
9
 * - print version, type string and packet length
10
 * - print IP address count if > 1 (-v)
11
 * - verify checksum (-v)
12
 * - print authentication string (-v)
13
 *
14
 * Redistribution and use in source and binary forms, with or without
15
 * modification, are permitted provided that: (1) source code
16
 * distributions retain the above copyright notice and this paragraph
17
 * in its entirety, and (2) distributions including binary code include
18
 * the above copyright notice and this paragraph in its entirety in
19
 * the documentation or other materials provided with the distribution.
20
 * The name of William C. Fenner may not be used to endorse or
21
 * promote products derived from this software without specific prior
22
 * written permission.  THIS SOFTWARE IS PROVIDED ``AS IS'' AND
23
 * WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT
24
 * LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
25
 * FOR A PARTICULAR PURPOSE.
26
 *
27
 * from tcpdump.org:
28
 * Header: /tcpdump/master/tcpdump/print-vrrp.c,v 1.3 2000/10/10 05:05:08 guy Exp
29
 */
30
31
#ifdef HAVE_CONFIG_H
32
#include "config.h"
33
#endif
34
35
#include <stdio.h>
36
#include <stdlib.h>
37
#include <unistd.h>
38
39
#include <netinet/in.h>
40
41
#include "interface.h"
42
#include "extract.h"
43
#include "addrtoname.h"
44
45
void
46
carp_print(const u_char *bp, u_int len, int ttl)
47
{
48
	int version, type;
49
	char *type_s;
50
51
	TCHECK(bp[0]);
52
	version = (bp[0] & 0xf0) >> 4;
53
	type = bp[0] & 0x0f;
54
	if (type == 1)
55
		type_s = "advertise";
56
	else
57
		type_s = "unknown";
58
	printf("CARPv%d-%s %d: ", version, type_s, len);
59
	if (ttl != 255)
60
		printf("[ttl=%d!] ", ttl);
61
	if (version != 2 || type != 1)
62
		return;
63
	TCHECK(bp[2]);
64
	TCHECK(bp[5]);
65
	printf("vhid=%d advbase=%d advskew=%d demote=%d",
66
	    bp[1], bp[5], bp[2], bp[4]);
67
	if (vflag) {
68
		if (TTEST2(bp[0], len) && in_cksum((const u_short*)bp, len, 0))
69
			printf(" (bad carp cksum %x!)",
70
				EXTRACT_16BITS(&bp[6]));
71
	}
72
	return;
73
trunc:
74
	printf("[|carp]");
75
}