Expand PMF_FN_* macros.
[netbsd-mini2440.git] / dist / tcpdump / print-ipcomp.c
blobbc34b9794b113ec9b48c9dcbe03befee186b1cee
1 /* $NetBSD: print-ipcomp.c,v 1.4 2007/07/24 11:53:44 drochner Exp $ */
3 /*
4 * Copyright (c) 1988, 1989, 1990, 1991, 1993, 1994
5 * The Regents of the University of California. All rights reserved.
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.
24 #include <sys/cdefs.h>
25 #ifndef lint
26 #if 0
27 static const char rcsid[] _U_ =
28 "@(#) Header: /tcpdump/master/tcpdump/print-ipcomp.c,v 1.20 2003/11/19 00:36:08 guy Exp";
29 #else
30 __RCSID("$NetBSD: print-ipcomp.c,v 1.4 2007/07/24 11:53:44 drochner Exp $");
31 #endif
32 #endif
34 #ifdef HAVE_CONFIG_H
35 #include "config.h"
36 #endif
38 #include <string.h>
39 #include <tcpdump-stdinc.h>
41 #include <stdio.h>
43 struct ipcomp {
44 u_int8_t comp_nxt; /* Next Header */
45 u_int8_t comp_flags; /* Length of data, in 32bit */
46 u_int16_t comp_cpi; /* Compression parameter index */
49 #if defined(HAVE_LIBZ) && defined(HAVE_ZLIB_H)
50 #include <zlib.h>
51 #endif
53 #include "interface.h"
54 #include "addrtoname.h"
55 #include "extract.h"
57 int
58 ipcomp_print(register const u_char *bp, int *nhdr _U_)
60 register const struct ipcomp *ipcomp;
61 register const u_char *ep;
62 u_int16_t cpi;
63 #if defined(HAVE_LIBZ) && defined(HAVE_ZLIB_H)
64 int advance;
65 #endif
67 ipcomp = (struct ipcomp *)bp;
68 cpi = EXTRACT_16BITS(&ipcomp->comp_cpi);
70 /* 'ep' points to the end of available data. */
71 ep = snapend;
73 if ((u_char *)(ipcomp + 1) >= ep - sizeof(struct ipcomp)) {
74 fputs("[|IPCOMP]", stdout);
75 goto fail;
77 printf("IPComp(cpi=0x%04x)", cpi);
79 #if defined(HAVE_LIBZ) && defined(HAVE_ZLIB_H)
80 if (1)
81 goto fail;
84 * We may want to decompress the packet here. Packet buffer
85 * management is a headache (if we decompress, packet will become
86 * larger).
88 if (nhdr)
89 *nhdr = ipcomp->comp_nxt;
90 advance = sizeof(struct ipcomp);
92 printf(": ");
93 return advance;
95 #endif
96 fail:
97 return -1;