1478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project/* -*- Mode: c; tab-width: 8; indent-tabs-mode: 1; c-basic-offset: 8; -*- */
2478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project/*
3478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * Copyright (c) 1993, 1994, 1995, 1996, 1997
4478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project *	The Regents of the University of California.  All rights reserved.
5478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project *
6478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * Redistribution and use in source and binary forms, with or without
7478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * modification, are permitted provided that the following conditions
8478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * are met:
9478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * 1. Redistributions of source code must retain the above copyright
10478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project *    notice, this list of conditions and the following disclaimer.
11478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright
12478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project *    notice, this list of conditions and the following disclaimer in the
13478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project *    documentation and/or other materials provided with the distribution.
14478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * 3. All advertising materials mentioning features or use of this software
15478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project *    must display the following acknowledgement:
16478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project *	This product includes software developed by the Computer Systems
17478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project *	Engineering Group at Lawrence Berkeley Laboratory.
18478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * 4. Neither the name of the University nor of the Laboratory may be used
19478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project *    to endorse or promote products derived from this software without
20478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project *    specific prior written permission.
21478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project *
22478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
23478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
24478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
25478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
26478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
27478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
28478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
29478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
31478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
32478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * SUCH DAMAGE.
33478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project *
34511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * @(#) $Header: /tcpdump/master/libpcap/pcap1.h,v 1.5 2008-05-30 01:43:21 guy Exp $ (LBL)
35478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project */
36478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
37478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#ifndef lib_pcap_h
38478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define lib_pcap_h
39478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
40478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#ifdef WIN32
41478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#include <pcap-stdinc.h>
42478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#else /* WIN32 */
43478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#include <sys/types.h>
44478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#include <sys/time.h>
45478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#endif /* WIN32 */
46478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
47478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#ifndef PCAP_DONT_INCLUDE_PCAP_BPF_H
48511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#include <pcap/bpf.h>
49478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#endif
50478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
51478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#include <stdio.h>
52478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
53478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#ifdef __cplusplus
54478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectextern "C" {
55478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#endif
56478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
57478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define PCAP_VERSION_MAJOR 3
58478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define PCAP_VERSION_MINOR 0
59478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
60478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define PCAP_ERRBUF_SIZE 256
61478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
62478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project/*
63478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * Compatibility for systems that have a bpf.h that
64478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * predates the bpf typedefs for 64-bit support.
65478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project */
66478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#if BPF_RELEASE - 0 < 199406
67478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projecttypedef	int bpf_int32;
68478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projecttypedef	u_int bpf_u_int32;
69478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#endif
70478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
71478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projecttypedef struct pcap pcap_t;
72478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projecttypedef struct pcap_dumper pcap_dumper_t;
73478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projecttypedef struct pcap_if pcap_if_t;
74478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projecttypedef struct pcap_addr pcap_addr_t;
75478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
76478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project/*
77478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * The first record in the file contains saved values for some
78478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * of the flags used in the printout phases of tcpdump.
79478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * Many fields here are 32 bit ints so compilers won't insert unwanted
80478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * padding; these files need to be interchangeable across architectures.
81478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project *
82478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * Do not change the layout of this structure, in any way (this includes
83478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * changes that only affect the length of fields in this structure).
84478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project *
85478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * Also, do not change the interpretation of any of the members of this
86478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * structure, in any way (this includes using values other than
87478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * LINKTYPE_ values, as defined in "savefile.c", in the "linktype"
88478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * field).
89478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project *
90478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * Instead:
91478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project *
92478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project *	introduce a new structure for the new format, if the layout
93478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project *	of the structure changed;
94478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project *
95511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall *	send mail to "tcpdump-workers@lists.tcpdump.org", requesting
96511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall *	a new magic number for your new capture file format, and, when
97478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project *	you get the new magic number, put it in "savefile.c";
98478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project *
99478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project *	use that magic number for save files with the changed file
100478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project *	header;
101478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project *
102478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project *	make the code in "savefile.c" capable of reading files with
103478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project *	the old file header as well as files with the new file header
104478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project *	(using the magic number to determine the header format).
105478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project *
106511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * Then supply the changes by forking the branch at
107511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall *
108511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall *	https://github.com/the-tcpdump-group/libpcap/issues
109511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall *
110511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * and issuing a pull request, so that future versions of libpcap and
111511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * programs that use it (such as tcpdump) will be able to read your new
112511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * capture file format.
113478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project */
114478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
115478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectenum pcap1_info_types {
116478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project        PCAP_DATACAPTURE,
117478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	PCAP_TIMESTAMP,
118478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	PCAP_WALLTIME,
119478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	PCAP_TIMESKEW,
120478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	PCAP_PROBEPLACE,              /* aka direction */
121478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	PCAP_COMMENT,                 /* comment */
122478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project};
123478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
124478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct pcap1_info_container {
125478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	bpf_u_int32 info_len;         /* in bytes */
126478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	bpf_u_int32 info_type;        /* enum pcap1_info_types */
127478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	unsigned char info_data[0];
128478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project};
129478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
130478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct pcap1_info_timestamp {
131478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	struct pcap1_info_container pic;
132478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	bpf_u_int32    nanoseconds;   /* 10^-9 of seconds */
133478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	bpf_u_int32    seconds;       /* seconds since Unix epoch - GMT */
134478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	bpf_u_int16    macroseconds;  /* 16 bits more of MSB of time */
135478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	bpf_u_int16    sigfigs;	      /* accuracy of timestamps - LSB bits */
136478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project};
137478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
138478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct pcap1_info_packet {
139478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	struct pcap1_info_container pic;
140478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	bpf_u_int32 caplen;	/* length of portion present */
141478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	bpf_u_int32 len;	/* length this packet (off wire) */
142478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	bpf_u_int32 linktype;	/* data link type (LINKTYPE_*) */
143478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	bpf_u_int32 ifIndex;	/* abstracted interface index */
144478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	unsigned char packet_data[0];
145478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project};
146478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
147478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectenum pcap1_probe {
148478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	INBOUND  =1,
149478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	OUTBOUND =2,
150478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	FORWARD  =3,
151478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	PREENCAP =4,
152478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	POSTDECAP=5,
153478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project};
154478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
155478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct pcap1_info_probe {
156478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	struct pcap1_info_container pic;
157478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	bpf_u_int32                 probeloc;   /* enum pcap1_probe */
158478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project        unsigned char               probe_desc[0];
159478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project};
160478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
161478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct pcap1_info_comment {
162478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	struct pcap1_info_container pic;
163478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project        unsigned char               comment[0];
164478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project};
165478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
166478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct pcap1_packet_header {
167478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	bpf_u_int32 magic;
168478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	u_short     version_major;
169478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	u_short     version_minor;
170478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project        bpf_u_int32 block_len;
171478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	struct pcap1_info_container pics[0];
172478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project};
173478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
174478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project/*
175478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * Each packet in the dump file is prepended with this generic header.
176478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * This gets around the problem of different headers for different
177478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * packet interfaces.
178478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project */
179478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
180478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project/*
181478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * As returned by the pcap_stats()
182478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project */
183478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct pcap_stat {
184478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	u_int ps_recv;		/* number of packets received */
185478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	u_int ps_drop;		/* number of packets dropped */
186478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	u_int ps_ifdrop;	/* drops by interface XXX not yet supported */
187478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#ifdef WIN32
188478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	u_int bs_capt;		/* number of packets that reach the application */
189478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#endif /* WIN32 */
190478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project};
191478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
192478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project/*
193478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * Item in a list of interfaces.
194478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project */
195478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct pcap_if {
196478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	struct pcap_if *next;
197478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	char *name;		/* name to hand to "pcap_open_live()" */
198478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	char *description;	/* textual description of interface, or NULL */
199478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	struct pcap_addr *addresses;
200478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	bpf_u_int32 flags;	/* PCAP_IF_ interface flags */
201478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project};
202478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
203478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define PCAP_IF_LOOPBACK	0x00000001	/* interface is loopback */
204478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
205478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project/*
206478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * Representation of an interface address.
207478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project */
208478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct pcap_addr {
209478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	struct pcap_addr *next;
210478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	struct sockaddr *addr;		/* address */
211478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	struct sockaddr *netmask;	/* netmask for that address */
212478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	struct sockaddr *broadaddr;	/* broadcast address for that address */
213478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	struct sockaddr *dstaddr;	/* P2P destination address for that address */
214478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project};
215478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
216478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projecttypedef void (*pcap_handler)(u_char *, const struct pcap_pkthdr *,
217478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project			     const u_char *);
218478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
219478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectchar	*pcap_lookupdev(char *);
220478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectint	pcap_lookupnet(const char *, bpf_u_int32 *, bpf_u_int32 *, char *);
221478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectpcap_t	*pcap_open_live(const char *, int, int, int, char *);
222478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectpcap_t	*pcap_open_dead(int, int);
223478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectpcap_t	*pcap_open_offline(const char *, char *);
224478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectvoid	pcap_close(pcap_t *);
225478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectint	pcap_loop(pcap_t *, int, pcap_handler, u_char *);
226478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectint	pcap_dispatch(pcap_t *, int, pcap_handler, u_char *);
227478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectconst u_char*
228478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	pcap_next(pcap_t *, struct pcap_pkthdr *);
229478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectint 	pcap_next_ex(pcap_t *, struct pcap_pkthdr **, const u_char **);
230478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectvoid	pcap_breakloop(pcap_t *);
231478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectint	pcap_stats(pcap_t *, struct pcap_stat *);
232478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectint	pcap_setfilter(pcap_t *, struct bpf_program *);
233478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectint	pcap_getnonblock(pcap_t *, char *);
234478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectint	pcap_setnonblock(pcap_t *, int, char *);
235478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectvoid	pcap_perror(pcap_t *, char *);
236478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectchar	*pcap_strerror(int);
237478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectchar	*pcap_geterr(pcap_t *);
238478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectint	pcap_compile(pcap_t *, struct bpf_program *, char *, int,
239478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	    bpf_u_int32);
240478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectint	pcap_compile_nopcap(int, int, struct bpf_program *,
241478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	    char *, int, bpf_u_int32);
242478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectvoid	pcap_freecode(struct bpf_program *);
243478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectint	pcap_datalink(pcap_t *);
244478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectint	pcap_list_datalinks(pcap_t *, int **);
245478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectint	pcap_set_datalink(pcap_t *, int);
246478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectint	pcap_datalink_name_to_val(const char *);
247478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectconst char *pcap_datalink_val_to_name(int);
248478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectconst char *pcap_datalink_val_to_description(int);
249478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectint	pcap_snapshot(pcap_t *);
250478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectint	pcap_is_swapped(pcap_t *);
251478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectint	pcap_major_version(pcap_t *);
252478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectint	pcap_minor_version(pcap_t *);
253478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
254478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project/* XXX */
255478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source ProjectFILE	*pcap_file(pcap_t *);
256478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectint	pcap_fileno(pcap_t *);
257478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
258478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectpcap_dumper_t *pcap_dump_open(pcap_t *, const char *);
259478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectint	pcap_dump_flush(pcap_dumper_t *);
260478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectvoid	pcap_dump_close(pcap_dumper_t *);
261478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectvoid	pcap_dump(u_char *, const struct pcap_pkthdr *, const u_char *);
262478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source ProjectFILE	*pcap_dump_file(pcap_dumper_t *);
263478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
264478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectint	pcap_findalldevs(pcap_if_t **, char *);
265478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectvoid	pcap_freealldevs(pcap_if_t *);
266478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
267478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectconst char *pcap_lib_version(void);
268478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
269478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project/* XXX this guy lives in the bpf tree */
270478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectu_int	bpf_filter(struct bpf_insn *, u_char *, u_int, u_int);
271478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectint	bpf_validate(struct bpf_insn *f, int len);
272478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectchar	*bpf_image(struct bpf_insn *, int);
273478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectvoid	bpf_dump(struct bpf_program *, int);
274478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
275478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#ifdef WIN32
276478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project/*
277478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * Win32 definitions
278478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project */
279478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
280478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectint pcap_setbuff(pcap_t *p, int dim);
281478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectint pcap_setmode(pcap_t *p, int mode);
282478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectint pcap_sendpacket(pcap_t *p, u_char *buf, int size);
283478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectint pcap_setmintocopy(pcap_t *p, int size);
284478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
285478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#ifdef WPCAP
286478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project/* Include file with the wpcap-specific extensions */
287478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#include <Win32-Extensions.h>
288478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#endif
289478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
290478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define MODE_CAPT 0
291478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define MODE_STAT 1
292478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
293478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#else
294478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project/*
295478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * UN*X definitions
296478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project */
297478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
298478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectint	pcap_get_selectable_fd(pcap_t *);
299478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
300478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#endif /* WIN32 */
301478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
302478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#ifdef __cplusplus
303478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project}
304478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#endif
305478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
306478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#endif
307