1478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project/* 2478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * Copyright (c) 1994, 1995, 1996 3478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * The Regents of the University of California. All rights reserved. 4478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * 5478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * Redistribution and use in source and binary forms, with or without 6478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * modification, are permitted provided that the following conditions 7478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * are met: 8478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * 1. Redistributions of source code must retain the above copyright 9478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * notice, this list of conditions and the following disclaimer. 10478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright 11478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * notice, this list of conditions and the following disclaimer in the 12478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * documentation and/or other materials provided with the distribution. 13478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * 3. All advertising materials mentioning features or use of this software 14478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * must display the following acknowledgement: 15478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * This product includes software developed by the Computer Systems 16478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * Engineering Group at Lawrence Berkeley Laboratory. 17478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * 4. Neither the name of the University nor of the Laboratory may be used 18478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * to endorse or promote products derived from this software without 19478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * specific prior written permission. 20478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * 21478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 22478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 23478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 24478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 25478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 26478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 27478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 28478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 29478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 30478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 31478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * SUCH DAMAGE. 32478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * 33511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * @(#) $Header: /tcpdump/master/libpcap/pcap-int.h,v 1.94 2008-09-16 00:20:23 guy Exp $ (LBL) 34478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project */ 35478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 36478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#ifndef pcap_int_h 37511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define pcap_int_h 38511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 39511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#include <pcap/pcap.h> 40478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 41478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#ifdef __cplusplus 42478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectextern "C" { 43478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#endif 44478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 45478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#ifdef WIN32 46478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#include <Packet32.h> 47511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrallextern CRITICAL_SECTION g_PcapCompileCriticalSection; 48478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#endif /* WIN32 */ 49478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 50478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#ifdef MSDOS 51478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#include <fcntl.h> 52478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#include <io.h> 53478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#endif 54478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 55511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#if (defined(_MSC_VER) && (_MSC_VER <= 1200)) /* we are compiling with Visual Studio 6, that doesn't support the LL suffix*/ 56511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 57511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall/* 58511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * Swap byte ordering of unsigned long long timestamp on a big endian 59511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * machine. 60511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall */ 61511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define SWAPLL(ull) ((ull & 0xff00000000000000) >> 56) | \ 62511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall ((ull & 0x00ff000000000000) >> 40) | \ 63511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall ((ull & 0x0000ff0000000000) >> 24) | \ 64511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall ((ull & 0x000000ff00000000) >> 8) | \ 65511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall ((ull & 0x00000000ff000000) << 8) | \ 66511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall ((ull & 0x0000000000ff0000) << 24) | \ 67511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall ((ull & 0x000000000000ff00) << 40) | \ 68511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall ((ull & 0x00000000000000ff) << 56) 69511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 70511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#else /* A recent Visual studio compiler or not VC */ 71511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 72478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project/* 73478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * Swap byte ordering of unsigned long long timestamp on a big endian 74478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * machine. 75478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project */ 76478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define SWAPLL(ull) ((ull & 0xff00000000000000LL) >> 56) | \ 77478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project ((ull & 0x00ff000000000000LL) >> 40) | \ 78478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project ((ull & 0x0000ff0000000000LL) >> 24) | \ 79478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project ((ull & 0x000000ff00000000LL) >> 8) | \ 80478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project ((ull & 0x00000000ff000000LL) << 8) | \ 81478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project ((ull & 0x0000000000ff0000LL) << 24) | \ 82478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project ((ull & 0x000000000000ff00LL) << 40) | \ 83478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project ((ull & 0x00000000000000ffLL) << 56) 84478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 85511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#endif /* _MSC_VER */ 86511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 87511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrallstruct pcap_opt { 88511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall char *source; 89511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall int timeout; /* timeout for buffering */ 90511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall int buffer_size; 91511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall int promisc; 92511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall int rfmon; /* monitor mode */ 93511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall int immediate; /* immediate mode - deliver packets as soon as they arrive */ 94511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall int tstamp_type; 95511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall int tstamp_precision; 96478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project}; 97478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 98511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgralltypedef int (*activate_op_t)(pcap_t *); 99511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgralltypedef int (*can_set_rfmon_op_t)(pcap_t *); 100511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgralltypedef int (*read_op_t)(pcap_t *, int cnt, pcap_handler, u_char *); 101511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgralltypedef int (*inject_op_t)(pcap_t *, const void *, size_t); 102511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgralltypedef int (*setfilter_op_t)(pcap_t *, struct bpf_program *); 103511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgralltypedef int (*setdirection_op_t)(pcap_t *, pcap_direction_t); 104511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgralltypedef int (*set_datalink_op_t)(pcap_t *, int); 105511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgralltypedef int (*getnonblock_op_t)(pcap_t *, char *); 106511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgralltypedef int (*setnonblock_op_t)(pcap_t *, int, char *); 107511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgralltypedef int (*stats_op_t)(pcap_t *, struct pcap_stat *); 108511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#ifdef WIN32 109511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgralltypedef int (*setbuff_op_t)(pcap_t *, int); 110511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgralltypedef int (*setmode_op_t)(pcap_t *, int); 111511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgralltypedef int (*setmintocopy_op_t)(pcap_t *, int); 112511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgralltypedef Adapter *(*getadapter_op_t)(pcap_t *); 113478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#endif 114511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgralltypedef void (*cleanup_op_t)(pcap_t *); 115478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 116478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project/* 117511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * We put all the stuff used in the read code path at the beginning, 118511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * to try to keep it together in the same cache line or lines. 119478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project */ 120511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrallstruct pcap { 121511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall /* 122511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * Method to call to read packets on a live capture. 123511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall */ 124511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall read_op_t read_op; 125478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 126511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall /* 127511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * Method to call to read to read packets from a savefile. 128511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall */ 129511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall int (*next_packet_op)(pcap_t *, struct pcap_pkthdr *, u_char **); 130478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 131478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#ifdef WIN32 132478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project ADAPTER *adapter; 133478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project LPPACKET Packet; 134478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project int nonblock; 135478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#else 136478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project int fd; 137478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project int selectable_fd; 138478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#endif /* WIN32 */ 139478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 140478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project /* 141478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * Read buffer. 142478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project */ 143478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project int bufsize; 144478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project u_char *buffer; 145478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project u_char *bp; 146478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project int cc; 147478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 148511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall int break_loop; /* flag set to force break from packet-reading loop */ 149511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 150511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall void *priv; /* private data for methods */ 151511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 152511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall int swapped; 153511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall FILE *rfile; /* null if live capture, non-null if savefile */ 154511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall int fddipad; 155511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall struct pcap *next; /* list of open pcaps that need stuff cleared on close */ 156511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 157511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall /* 158511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * File version number; meaningful only for a savefile, but we 159511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * keep it here so that apps that (mistakenly) ask for the 160511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * version numbers will get the same zero values that they 161511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * always did. 162511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall */ 163511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall int version_major; 164511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall int version_minor; 165511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 166511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall int snapshot; 167511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall int linktype; /* Network linktype */ 168511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall int linktype_ext; /* Extended information stored in the linktype field of a file */ 169511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall int tzoff; /* timezone offset */ 170511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall int offset; /* offset for proper alignment */ 171511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall int activated; /* true if the capture is really started */ 172511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall int oldstyle; /* if we're opening with pcap_open_live() */ 173511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 174511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall struct pcap_opt opt; 175511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 176478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project /* 177478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * Place holder for pcap_next(). 178478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project */ 179478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project u_char *pkt; 180478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 181478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project /* We're accepting only packets in this direction/these directions. */ 182478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project pcap_direction_t direction; 183478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 184478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project /* 185478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * Placeholder for filter code if bpf not in kernel. 186478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project */ 187478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project struct bpf_program fcode; 188478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 189478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project char errbuf[PCAP_ERRBUF_SIZE + 1]; 190478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project int dlt_count; 191478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project u_int *dlt_list; 192511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall int tstamp_type_count; 193511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall u_int *tstamp_type_list; 194511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall int tstamp_precision_count; 195511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall u_int *tstamp_precision_list; 196478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 197478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project struct pcap_pkthdr pcap_header; /* This is needed for the pcap_next_ex() to work */ 198511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 199511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall /* 200511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * More methods. 201511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall */ 202511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall activate_op_t activate_op; 203511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall can_set_rfmon_op_t can_set_rfmon_op; 204511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall inject_op_t inject_op; 205511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall setfilter_op_t setfilter_op; 206511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall setdirection_op_t setdirection_op; 207511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall set_datalink_op_t set_datalink_op; 208511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall getnonblock_op_t getnonblock_op; 209511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall setnonblock_op_t setnonblock_op; 210511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall stats_op_t stats_op; 211511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 212511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall /* 213511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * Routine to use as callback for pcap_next()/pcap_next_ex(). 214511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall */ 215511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall pcap_handler oneshot_callback; 216511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 217511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#ifdef WIN32 218511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall /* 219511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * These are, at least currently, specific to the Win32 NPF 220511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * driver. 221511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall */ 222511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall setbuff_op_t setbuff_op; 223511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall setmode_op_t setmode_op; 224511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall setmintocopy_op_t setmintocopy_op; 225511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall getadapter_op_t getadapter_op; 226511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#endif 227511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall cleanup_op_t cleanup_op; 228478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project}; 229478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 230478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project/* 231478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * This is a timeval as stored in a savefile. 232478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * It has to use the same types everywhere, independent of the actual 233478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * `struct timeval'; `struct timeval' has 32-bit tv_sec values on some 234478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * platforms and 64-bit tv_sec values on other platforms, and writing 235478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * out native `struct timeval' values would mean files could only be 236478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * read on systems with the same tv_sec size as the system on which 237478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * the file was written. 238478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project */ 239478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 240478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct pcap_timeval { 241478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project bpf_int32 tv_sec; /* seconds */ 242478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project bpf_int32 tv_usec; /* microseconds */ 243478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project}; 244478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 245478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project/* 246478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * This is a `pcap_pkthdr' as actually stored in a savefile. 247478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * 248478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * Do not change the format of this structure, in any way (this includes 249478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * changes that only affect the length of fields in this structure), 250478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * and do not make the time stamp anything other than seconds and 251478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * microseconds (e.g., seconds and nanoseconds). Instead: 252478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * 253478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * introduce a new structure for the new format; 254478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * 255511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * send mail to "tcpdump-workers@lists.tcpdump.org", requesting 256511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * a new magic number for your new capture file format, and, when 257478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * you get the new magic number, put it in "savefile.c"; 258478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * 259478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * use that magic number for save files with the changed record 260478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * header; 261478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * 262478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * make the code in "savefile.c" capable of reading files with 263478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * the old record header as well as files with the new record header 264478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * (using the magic number to determine the header format). 265478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * 266511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * Then supply the changes by forking the branch at 267511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * 268511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * https://github.com/the-tcpdump-group/libpcap/issues 269511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * 270511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * and issuing a pull request, so that future versions of libpcap and 271511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * programs that use it (such as tcpdump) will be able to read your new 272511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * capture file format. 273478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project */ 274478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 275478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct pcap_sf_pkthdr { 276478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project struct pcap_timeval ts; /* time stamp */ 277478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project bpf_u_int32 caplen; /* length of portion present */ 278478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project bpf_u_int32 len; /* length this packet (off wire) */ 279478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project}; 280478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 281478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project/* 282478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * How a `pcap_pkthdr' is actually stored in savefiles written 283478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * by some patched versions of libpcap (e.g. the ones in Red 284478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * Hat Linux 6.1 and 6.2). 285478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * 286478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * Do not change the format of this structure, in any way (this includes 287478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * changes that only affect the length of fields in this structure). 288478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * Instead, introduce a new structure, as per the above. 289478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project */ 290478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 291478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct pcap_sf_patched_pkthdr { 292478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project struct pcap_timeval ts; /* time stamp */ 293478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project bpf_u_int32 caplen; /* length of portion present */ 294478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project bpf_u_int32 len; /* length this packet (off wire) */ 295478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project int index; 296478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project unsigned short protocol; 297478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project unsigned char pkt_type; 298478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project}; 299478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 300511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall/* 301511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * User data structure for the one-shot callback used for pcap_next() 302511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * and pcap_next_ex(). 303511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall */ 304511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrallstruct oneshot_userdata { 305511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall struct pcap_pkthdr *hdr; 306511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall const u_char **pkt; 307511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall pcap_t *pd; 308511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall}; 309511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 310478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectint yylex(void); 311478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 312478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#ifndef min 313478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define min(a, b) ((a) > (b) ? (b) : (a)) 314478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#endif 315478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 316478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project/* XXX should these be in pcap.h? */ 317478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectint pcap_offline_read(pcap_t *, int, pcap_handler, u_char *); 318478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectint pcap_read(pcap_t *, int cnt, pcap_handler, u_char *); 319478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 320478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#ifndef HAVE_STRLCPY 321478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define strlcpy(x, y, z) \ 322478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project (strncpy((x), (y), (z)), \ 323478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project ((z) <= 0 ? 0 : ((x)[(z) - 1] = '\0')), \ 324478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project strlen((y))) 325478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#endif 326478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 327478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#include <stdarg.h> 328478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 329478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#if !defined(HAVE_SNPRINTF) 330478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define snprintf pcap_snprintf 331478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectextern int snprintf (char *, size_t, const char *, ...); 332478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#endif 333478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 334478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#if !defined(HAVE_VSNPRINTF) 335478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define vsnprintf pcap_vsnprintf 336478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectextern int vsnprintf (char *, size_t, const char *, va_list ap); 337478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#endif 338478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 339478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project/* 340511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * Does the packet count argument to a module's read routine say 341511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * "supply packets until you run out of packets"? 342511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall */ 343511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define PACKET_COUNT_IS_UNLIMITED(count) ((count) <= 0) 344511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 345511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall/* 346478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * Routines that most pcap implementations can use for non-blocking mode. 347478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project */ 348478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#if !defined(WIN32) && !defined(MSDOS) 349478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectint pcap_getnonblock_fd(pcap_t *, char *); 350478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectint pcap_setnonblock_fd(pcap_t *p, int, char *); 351478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#endif 352478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 353511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall/* 354511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * Internal interfaces for "pcap_create()". 355511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * 356511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * "pcap_create_interface()" is the routine to do a pcap_create on 357511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * a regular network interface. There are multiple implementations 358511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * of this, one for each platform type (Linux, BPF, DLPI, etc.), 359511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * with the one used chosen by the configure script. 360511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * 361511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * "pcap_create_common()" allocates and fills in a pcap_t, for use 362511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * by pcap_create routines. 363511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall */ 364511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrallpcap_t *pcap_create_interface(const char *, char *); 365511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrallpcap_t *pcap_create_common(const char *, char *, size_t); 366511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrallint pcap_do_addexit(pcap_t *); 367511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrallvoid pcap_add_to_pcaps_to_close(pcap_t *); 368511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrallvoid pcap_remove_from_pcaps_to_close(pcap_t *); 369511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrallvoid pcap_cleanup_live_common(pcap_t *); 370511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrallint pcap_not_initialized(pcap_t *); 371511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrallint pcap_check_activated(pcap_t *); 372478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 373478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project/* 374478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * Internal interfaces for "pcap_findalldevs()". 375478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * 376511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * "pcap_findalldevs_interfaces()" finds interfaces using the 377511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * "standard" mechanisms (SIOCGIFCONF, "getifaddrs()", etc.). 378511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * 379478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * "pcap_platform_finddevs()" is a platform-dependent routine to 380511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * add devices not found by the "standard" mechanisms. 381478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * 382511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * "pcap_add_if()" adds an interface to the list of interfaces, for 383511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * use by various "find interfaces" routines. 384478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project */ 385511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrallint pcap_findalldevs_interfaces(pcap_if_t **, char *); 386478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectint pcap_platform_finddevs(pcap_if_t **, char *); 387478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectint add_addr_to_iflist(pcap_if_t **, const char *, u_int, struct sockaddr *, 388478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project size_t, struct sockaddr *, size_t, struct sockaddr *, size_t, 389478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project struct sockaddr *, size_t, char *); 390478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectint pcap_add_if(pcap_if_t **, const char *, u_int, const char *, char *); 391478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct sockaddr *dup_sockaddr(struct sockaddr *, size_t); 392478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectint add_or_find_if(pcap_if_t **, pcap_if_t **, const char *, u_int, 393478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project const char *, char *); 394478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 395511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall/* 396511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * Internal interfaces for "pcap_open_offline()". 397511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * 398511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * "pcap_open_offline_common()" allocates and fills in a pcap_t, for use 399511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * by pcap_open_offline routines. 400511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * 401511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * "sf_cleanup()" closes the file handle associated with a pcap_t, if 402511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * appropriate, and frees all data common to all modules for handling 403511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * savefile types. 404511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall */ 405511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrallpcap_t *pcap_open_offline_common(char *ebuf, size_t size); 406511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrallvoid sf_cleanup(pcap_t *p); 407511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 408511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall/* 409511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * Internal interfaces for both "pcap_create()" and routines that 410511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * open savefiles. 411511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * 412511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * "pcap_oneshot()" is the standard one-shot callback for "pcap_next()" 413511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * and "pcap_next_ex()". 414511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall */ 415511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrallvoid pcap_oneshot(u_char *, const struct pcap_pkthdr *, const u_char *); 416511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 417478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#ifdef WIN32 418478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectchar *pcap_win32strerror(void); 419478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#endif 420478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 421478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectint install_bpf_program(pcap_t *, struct bpf_program *); 422478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 423478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectint pcap_strcasecmp(const char *, const char *); 424478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 425478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#ifdef __cplusplus 426478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project} 427478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#endif 428478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 429478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#endif 430