print-enc.c revision 1.2
1/* $OpenBSD: print-enc.c,v 1.7 2002/02/19 19:39:40 millert Exp $ */ 2 3/* 4 * Copyright (c) 1990, 1991, 1993, 1994, 1995, 1996 5 * The Regents of the University of California. All rights reserved. 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that: (1) source code distributions 9 * retain the above copyright notice and this paragraph in its entirety, (2) 10 * distributions including binary code include the above copyright notice and 11 * this paragraph in its entirety in the documentation or other materials 12 * provided with the distribution, and (3) all advertising materials mentioning 13 * features or use of this software display the following acknowledgement: 14 * ``This product includes software developed by the University of California, 15 * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of 16 * the University nor the names of its contributors may be used to endorse 17 * or promote products derived from this software without specific prior 18 * written permission. 19 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED 20 * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF 21 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 22 */ 23 24#include <sys/cdefs.h> 25#ifndef lint 26#if 0 27static const char rcsid[] _U_ = 28 "@(#) Header: /tcpdump/master/tcpdump/print-enc.c,v 1.6 2008-11-18 07:35:32 guy Exp (LBL)"; 29#else 30__RCSID("$NetBSD: print-enc.c,v 1.2 2010/12/05 05:11:30 christos Exp $"); 31#endif 32#endif 33 34#ifdef HAVE_CONFIG_H 35#include "config.h" 36#endif 37 38#include <tcpdump-stdinc.h> 39 40#include <pcap.h> 41 42#include "interface.h" 43#include "extract.h" 44#include "addrtoname.h" 45 46#include "enc.h" 47 48#define ENC_PRINT_TYPE(wh, xf, nam) \ 49 if ((wh) & (xf)) { \ 50 printf("%s%s", nam, (wh) == (xf) ? "): " : ","); \ 51 (wh) &= ~(xf); \ 52 } 53 54u_int 55enc_if_print(const struct pcap_pkthdr *h, register const u_char *p) 56{ 57 register u_int length = h->len; 58 register u_int caplen = h->caplen; 59 int flags; 60 const struct enchdr *hdr; 61 62 if (caplen < ENC_HDRLEN) { 63 printf("[|enc]"); 64 goto out; 65 } 66 67 hdr = (struct enchdr *)p; 68 flags = hdr->flags; 69 if (flags == 0) 70 printf("(unprotected): "); 71 else 72 printf("("); 73 ENC_PRINT_TYPE(flags, M_AUTH, "authentic"); 74 ENC_PRINT_TYPE(flags, M_CONF, "confidential"); 75 /* ENC_PRINT_TYPE(flags, M_TUNNEL, "tunnel"); */ 76 printf("SPI 0x%08x: ", EXTRACT_32BITS(&hdr->spi)); 77 78 length -= ENC_HDRLEN; 79 caplen -= ENC_HDRLEN; 80 p += ENC_HDRLEN; 81 82 switch (hdr->af) { 83 case AF_INET: 84 ip_print(gndo, p, length); 85 break; 86#ifdef INET6 87 case AF_INET6: 88 ip6_print(p, length); 89 break; 90#endif /*INET6*/ 91 } 92 93out: 94 return (ENC_HDRLEN); 95} 96 97 98/* 99 * Local Variables: 100 * c-style: whitesmith 101 * c-basic-offset: 8 102 * End: 103 */ 104