nexmon – Blame information for rev 1
?pathlinks?
Rev | Author | Line No. | Line |
---|---|---|---|
1 | office | 1 | /* $OpenBSD: print-carp.c,v 1.6 2009/10/27 23:59:55 deraadt 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 | * Copyright (c) 2011 Advanced Computing Technologies |
||
15 | * George V. Neille-Neil |
||
16 | * |
||
17 | * Modified to: |
||
18 | * - work correctly with CARP |
||
19 | * - compile into the latest tcpdump |
||
20 | * - print out the counter |
||
21 | * |
||
22 | * Redistribution and use in source and binary forms, with or without |
||
23 | * modification, are permitted provided that: (1) source code |
||
24 | * distributions retain the above copyright notice and this paragraph |
||
25 | * in its entirety, and (2) distributions including binary code include |
||
26 | * the above copyright notice and this paragraph in its entirety in |
||
27 | * the documentation or other materials provided with the distribution. |
||
28 | * The name of William C. Fenner may not be used to endorse or |
||
29 | * promote products derived from this software without specific prior |
||
30 | * written permission. THIS SOFTWARE IS PROVIDED ``AS IS'' AND |
||
31 | * WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT |
||
32 | * LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS |
||
33 | * FOR A PARTICULAR PURPOSE. |
||
34 | * |
||
35 | */ |
||
36 | |||
37 | #define NETDISSECT_REWORKED |
||
38 | #ifdef HAVE_CONFIG_H |
||
39 | #include "config.h" |
||
40 | #endif |
||
41 | |||
42 | #include <tcpdump-stdinc.h> |
||
43 | |||
44 | #include "interface.h" /* for checksum structure and functions */ |
||
45 | #include "extract.h" |
||
46 | |||
47 | void |
||
48 | carp_print(netdissect_options *ndo, register const u_char *bp, register u_int len, int ttl) |
||
49 | { |
||
50 | int version, type; |
||
51 | const char *type_s; |
||
52 | |||
53 | ND_TCHECK(bp[0]); |
||
54 | version = (bp[0] & 0xf0) >> 4; |
||
55 | type = bp[0] & 0x0f; |
||
56 | if (type == 1) |
||
57 | type_s = "advertise"; |
||
58 | else |
||
59 | type_s = "unknown"; |
||
60 | ND_PRINT((ndo, "CARPv%d-%s %d: ", version, type_s, len)); |
||
61 | if (ttl != 255) |
||
62 | ND_PRINT((ndo, "[ttl=%d!] ", ttl)); |
||
63 | if (version != 2 || type != 1) |
||
64 | return; |
||
65 | ND_TCHECK(bp[2]); |
||
66 | ND_TCHECK(bp[5]); |
||
67 | ND_PRINT((ndo, "vhid=%d advbase=%d advskew=%d authlen=%d ", |
||
68 | bp[1], bp[5], bp[2], bp[3])); |
||
69 | if (ndo->ndo_vflag) { |
||
70 | struct cksum_vec vec[1]; |
||
71 | vec[0].ptr = (const uint8_t *)bp; |
||
72 | vec[0].len = len; |
||
73 | if (ND_TTEST2(bp[0], len) && in_cksum(vec, 1)) |
||
74 | ND_PRINT((ndo, " (bad carp cksum %x!)", |
||
75 | EXTRACT_16BITS(&bp[6]))); |
||
76 | } |
||
77 | ND_PRINT((ndo, "counter=%" PRIu64, EXTRACT_64BITS(&bp[8]))); |
||
78 | |||
79 | return; |
||
80 | trunc: |
||
81 | ND_PRINT((ndo, "[|carp]")); |
||
82 | } |