153f17a9db278d33517d9888dd77848f554522a38JP Abgrall/* $OpenBSD: print-carp.c,v 1.6 2009/10/27 23:59:55 deraadt Exp $ */ 253f17a9db278d33517d9888dd77848f554522a38JP Abgrall 353f17a9db278d33517d9888dd77848f554522a38JP Abgrall/* 453f17a9db278d33517d9888dd77848f554522a38JP Abgrall * Copyright (c) 2000 William C. Fenner. 553f17a9db278d33517d9888dd77848f554522a38JP Abgrall * All rights reserved. 653f17a9db278d33517d9888dd77848f554522a38JP Abgrall * 753f17a9db278d33517d9888dd77848f554522a38JP Abgrall * Kevin Steves <ks@hp.se> July 2000 853f17a9db278d33517d9888dd77848f554522a38JP Abgrall * Modified to: 953f17a9db278d33517d9888dd77848f554522a38JP Abgrall * - print version, type string and packet length 1053f17a9db278d33517d9888dd77848f554522a38JP Abgrall * - print IP address count if > 1 (-v) 1153f17a9db278d33517d9888dd77848f554522a38JP Abgrall * - verify checksum (-v) 1253f17a9db278d33517d9888dd77848f554522a38JP Abgrall * - print authentication string (-v) 1353f17a9db278d33517d9888dd77848f554522a38JP Abgrall * 1453f17a9db278d33517d9888dd77848f554522a38JP Abgrall * Copyright (c) 2011 Advanced Computing Technologies 1553f17a9db278d33517d9888dd77848f554522a38JP Abgrall * George V. Neille-Neil 1653f17a9db278d33517d9888dd77848f554522a38JP Abgrall * 1753f17a9db278d33517d9888dd77848f554522a38JP Abgrall * Modified to: 1853f17a9db278d33517d9888dd77848f554522a38JP Abgrall * - work correctly with CARP 1953f17a9db278d33517d9888dd77848f554522a38JP Abgrall * - compile into the latest tcpdump 2053f17a9db278d33517d9888dd77848f554522a38JP Abgrall * - print out the counter 2153f17a9db278d33517d9888dd77848f554522a38JP Abgrall * 2253f17a9db278d33517d9888dd77848f554522a38JP Abgrall * Redistribution and use in source and binary forms, with or without 2353f17a9db278d33517d9888dd77848f554522a38JP Abgrall * modification, are permitted provided that: (1) source code 2453f17a9db278d33517d9888dd77848f554522a38JP Abgrall * distributions retain the above copyright notice and this paragraph 2553f17a9db278d33517d9888dd77848f554522a38JP Abgrall * in its entirety, and (2) distributions including binary code include 2653f17a9db278d33517d9888dd77848f554522a38JP Abgrall * the above copyright notice and this paragraph in its entirety in 2753f17a9db278d33517d9888dd77848f554522a38JP Abgrall * the documentation or other materials provided with the distribution. 2853f17a9db278d33517d9888dd77848f554522a38JP Abgrall * The name of William C. Fenner may not be used to endorse or 2953f17a9db278d33517d9888dd77848f554522a38JP Abgrall * promote products derived from this software without specific prior 3053f17a9db278d33517d9888dd77848f554522a38JP Abgrall * written permission. THIS SOFTWARE IS PROVIDED ``AS IS'' AND 3153f17a9db278d33517d9888dd77848f554522a38JP Abgrall * WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT 3253f17a9db278d33517d9888dd77848f554522a38JP Abgrall * LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 3353f17a9db278d33517d9888dd77848f554522a38JP Abgrall * FOR A PARTICULAR PURPOSE. 3453f17a9db278d33517d9888dd77848f554522a38JP Abgrall * 3553f17a9db278d33517d9888dd77848f554522a38JP Abgrall */ 3653f17a9db278d33517d9888dd77848f554522a38JP Abgrall 3753f17a9db278d33517d9888dd77848f554522a38JP Abgrall#ifdef HAVE_CONFIG_H 3853f17a9db278d33517d9888dd77848f554522a38JP Abgrall#include "config.h" 3953f17a9db278d33517d9888dd77848f554522a38JP Abgrall#endif 4053f17a9db278d33517d9888dd77848f554522a38JP Abgrall 4153f17a9db278d33517d9888dd77848f554522a38JP Abgrall#include <tcpdump-stdinc.h> 4253f17a9db278d33517d9888dd77848f554522a38JP Abgrall 4353f17a9db278d33517d9888dd77848f554522a38JP Abgrall#include <stdio.h> 4453f17a9db278d33517d9888dd77848f554522a38JP Abgrall#include <stdlib.h> 4553f17a9db278d33517d9888dd77848f554522a38JP Abgrall 4653f17a9db278d33517d9888dd77848f554522a38JP Abgrall#include "interface.h" 4753f17a9db278d33517d9888dd77848f554522a38JP Abgrall#include "extract.h" 4853f17a9db278d33517d9888dd77848f554522a38JP Abgrall#include "addrtoname.h" 4953f17a9db278d33517d9888dd77848f554522a38JP Abgrall 5053f17a9db278d33517d9888dd77848f554522a38JP Abgrallvoid 5153f17a9db278d33517d9888dd77848f554522a38JP Abgrallcarp_print(register const u_char *bp, register u_int len, int ttl) 5253f17a9db278d33517d9888dd77848f554522a38JP Abgrall{ 5353f17a9db278d33517d9888dd77848f554522a38JP Abgrall int version, type; 5453f17a9db278d33517d9888dd77848f554522a38JP Abgrall const char *type_s; 5553f17a9db278d33517d9888dd77848f554522a38JP Abgrall 5653f17a9db278d33517d9888dd77848f554522a38JP Abgrall TCHECK(bp[0]); 5753f17a9db278d33517d9888dd77848f554522a38JP Abgrall version = (bp[0] & 0xf0) >> 4; 5853f17a9db278d33517d9888dd77848f554522a38JP Abgrall type = bp[0] & 0x0f; 5953f17a9db278d33517d9888dd77848f554522a38JP Abgrall if (type == 1) 6053f17a9db278d33517d9888dd77848f554522a38JP Abgrall type_s = "advertise"; 6153f17a9db278d33517d9888dd77848f554522a38JP Abgrall else 6253f17a9db278d33517d9888dd77848f554522a38JP Abgrall type_s = "unknown"; 6353f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf("CARPv%d-%s %d: ", version, type_s, len); 6453f17a9db278d33517d9888dd77848f554522a38JP Abgrall if (ttl != 255) 6553f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf("[ttl=%d!] ", ttl); 6653f17a9db278d33517d9888dd77848f554522a38JP Abgrall if (version != 2 || type != 1) 6753f17a9db278d33517d9888dd77848f554522a38JP Abgrall return; 6853f17a9db278d33517d9888dd77848f554522a38JP Abgrall TCHECK(bp[2]); 6953f17a9db278d33517d9888dd77848f554522a38JP Abgrall TCHECK(bp[5]); 7053f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf("vhid=%d advbase=%d advskew=%d authlen=%d ", 7153f17a9db278d33517d9888dd77848f554522a38JP Abgrall bp[1], bp[5], bp[2], bp[3]); 7253f17a9db278d33517d9888dd77848f554522a38JP Abgrall if (vflag) { 7353f17a9db278d33517d9888dd77848f554522a38JP Abgrall struct cksum_vec vec[1]; 7453f17a9db278d33517d9888dd77848f554522a38JP Abgrall vec[0].ptr = (const u_int8_t *)bp; 7553f17a9db278d33517d9888dd77848f554522a38JP Abgrall vec[0].len = len; 7653f17a9db278d33517d9888dd77848f554522a38JP Abgrall if (TTEST2(bp[0], len) && in_cksum(vec, 1)) 7753f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf(" (bad carp cksum %x!)", 7853f17a9db278d33517d9888dd77848f554522a38JP Abgrall EXTRACT_16BITS(&bp[6])); 7953f17a9db278d33517d9888dd77848f554522a38JP Abgrall } 8053f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf("counter=%" PRIu64, EXTRACT_64BITS(&bp[8])); 8153f17a9db278d33517d9888dd77848f554522a38JP Abgrall 8253f17a9db278d33517d9888dd77848f554522a38JP Abgrall return; 8353f17a9db278d33517d9888dd77848f554522a38JP Abgralltrunc: 8453f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf("[|carp]"); 8553f17a9db278d33517d9888dd77848f554522a38JP Abgrall} 86