1999-10-07 23:46:40 +00:00
|
|
|
/*
|
|
|
|
* Copyright (c) 1994, 1995, 1996
|
|
|
|
* The Regents of the University of California. All rights reserved.
|
|
|
|
*
|
|
|
|
* Redistribution and use in source and binary forms, with or without
|
|
|
|
* modification, are permitted provided that the following conditions
|
|
|
|
* are met:
|
|
|
|
* 1. Redistributions of source code must retain the above copyright
|
|
|
|
* notice, this list of conditions and the following disclaimer.
|
|
|
|
* 2. Redistributions in binary form must reproduce the above copyright
|
|
|
|
* notice, this list of conditions and the following disclaimer in the
|
|
|
|
* documentation and/or other materials provided with the distribution.
|
|
|
|
* 3. All advertising materials mentioning features or use of this software
|
|
|
|
* must display the following acknowledgement:
|
|
|
|
* This product includes software developed by the Computer Systems
|
|
|
|
* Engineering Group at Lawrence Berkeley Laboratory.
|
|
|
|
* 4. Neither the name of the University nor of the Laboratory may be used
|
|
|
|
* to endorse or promote products derived from this software without
|
|
|
|
* specific prior written permission.
|
|
|
|
*
|
|
|
|
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
|
|
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
|
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
|
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
|
|
|
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
|
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|
|
|
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
|
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
|
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
|
|
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
|
|
* SUCH DAMAGE.
|
|
|
|
*
|
2000-11-04 10:09:55 +00:00
|
|
|
* @(#) $Header: /tcpdump/master/libpcap/pcap-int.h,v 1.30 2000-11-04 10:09:55 guy Exp $ (LBL)
|
1999-10-07 23:46:40 +00:00
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef pcap_int_h
|
|
|
|
#define pcap_int_h
|
|
|
|
|
2000-07-29 07:36:41 +00:00
|
|
|
#ifdef __cplusplus
|
|
|
|
extern "C" {
|
|
|
|
#endif
|
|
|
|
|
1999-10-07 23:46:40 +00:00
|
|
|
#include <pcap.h>
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Savefile
|
|
|
|
*/
|
|
|
|
struct pcap_sf {
|
|
|
|
FILE *rfile;
|
|
|
|
int swapped;
|
2000-07-18 03:43:47 +00:00
|
|
|
int hdrsize;
|
1999-10-07 23:46:40 +00:00
|
|
|
int version_major;
|
|
|
|
int version_minor;
|
|
|
|
u_char *base;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct pcap_md {
|
|
|
|
struct pcap_stat stat;
|
|
|
|
/*XXX*/
|
2000-06-08 06:40:09 +00:00
|
|
|
int use_bpf; /* using kernel filter */
|
1999-10-07 23:46:40 +00:00
|
|
|
u_long TotPkts; /* can't oflow for 79 hrs on ether */
|
|
|
|
u_long TotAccepted; /* count accepted by filter */
|
|
|
|
u_long TotDrops; /* count of dropped packets */
|
|
|
|
long TotMissed; /* missed by i/f during this run */
|
|
|
|
long OrigMissed; /* missed by i/f before this run */
|
|
|
|
#ifdef linux
|
2000-06-08 06:40:09 +00:00
|
|
|
int sock_packet; /* using Linux 2.0 compatible interface */
|
|
|
|
int timeout; /* timeout specified to pcap_open_live */
|
|
|
|
int promisc; /* running in promiscuous mode */
|
If we're receiving packets from a PF_PACKET socket, check whether the
interface index of the interface for the packet is the interface index
of the loopback interface and, if it is, check if the packet is an
outgoing packet; if so, ignore it, as we'll also be seeing that packet
as a received packet.
If we don't handle the arphrd type of an interface, and fall back on
cooked mode, report the arphrd type, so we know what type we should
consider supporting (if that type can't be supported well, e.g. if you
don't get any link-layer header, as happens with PPP, we'd be silent).
2000-10-25 07:46:49 +00:00
|
|
|
int lo_ifindex; /* interface index of the loopback device */
|
2000-06-08 06:40:09 +00:00
|
|
|
char *device; /* device name */
|
1999-10-07 23:46:40 +00:00
|
|
|
#endif
|
|
|
|
};
|
|
|
|
|
|
|
|
struct pcap {
|
|
|
|
int fd;
|
|
|
|
int snapshot;
|
|
|
|
int linktype;
|
|
|
|
int tzoff; /* timezone offset */
|
|
|
|
int offset; /* offset for proper alignment */
|
|
|
|
|
|
|
|
struct pcap_sf sf;
|
|
|
|
struct pcap_md md;
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Read buffer.
|
|
|
|
*/
|
|
|
|
int bufsize;
|
|
|
|
u_char *buffer;
|
|
|
|
u_char *bp;
|
|
|
|
int cc;
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Place holder for pcap_next().
|
|
|
|
*/
|
|
|
|
u_char *pkt;
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Placeholder for filter code if bpf not in kernel.
|
|
|
|
*/
|
|
|
|
struct bpf_program fcode;
|
|
|
|
|
|
|
|
char errbuf[PCAP_ERRBUF_SIZE];
|
|
|
|
};
|
|
|
|
|
1999-11-21 01:10:20 +00:00
|
|
|
/*
|
|
|
|
* This is a timeval as stored in disk in a dumpfile.
|
|
|
|
* It has to use the same types everywhere, independent of the actual
|
|
|
|
* `struct timeval'
|
|
|
|
*/
|
|
|
|
|
|
|
|
struct pcap_timeval {
|
|
|
|
bpf_int32 tv_sec; /* seconds */
|
|
|
|
bpf_int32 tv_usec; /* microseconds */
|
|
|
|
};
|
|
|
|
|
|
|
|
/*
|
|
|
|
* How a `pcap_pkthdr' is actually stored in the dumpfile.
|
2000-09-14 09:49:28 +00:00
|
|
|
*
|
|
|
|
* Do not change the format of this structure, in any way (this includes
|
|
|
|
* changes that only affect the length of fields in this structure),
|
|
|
|
* and do not make the time stamp anything other than seconds and
|
|
|
|
* microseconds (e.g., seconds and nanoseconds). Instead:
|
|
|
|
*
|
|
|
|
* introduce a new structure for the new format;
|
|
|
|
*
|
|
|
|
* send mail to "tcpdump-workers@tcpdump.org", requesting a new
|
|
|
|
* magic number for your new capture file format, and, when
|
|
|
|
* you get the new magic number, put it in "savefile.c";
|
|
|
|
*
|
|
|
|
* use that magic number for save files with the changed record
|
|
|
|
* header;
|
|
|
|
*
|
|
|
|
* make the code in "savefile.c" capable of reading files with
|
|
|
|
* the old record header as well as files with the new record header
|
|
|
|
* (using the magic number to determine the header format).
|
|
|
|
*
|
|
|
|
* Then supply the changes to "patches@tcpdump.org", so that future
|
|
|
|
* versions of libpcap and programs that use it (such as tcpdump) will
|
|
|
|
* be able to read your new capture file format.
|
1999-11-21 01:10:20 +00:00
|
|
|
*/
|
|
|
|
|
|
|
|
struct pcap_sf_pkthdr {
|
|
|
|
struct pcap_timeval ts; /* time stamp */
|
|
|
|
bpf_u_int32 caplen; /* length of portion present */
|
|
|
|
bpf_u_int32 len; /* length this packet (off wire) */
|
|
|
|
};
|
|
|
|
|
2000-07-18 03:43:47 +00:00
|
|
|
/*
|
|
|
|
* How a `pcap_pkthdr' is actually stored in dumpfiles written
|
|
|
|
* by some patched versions of libpcap (e.g. the ones in Red
|
|
|
|
* Hat Linux 6.1 and 6.2).
|
2000-09-14 09:49:28 +00:00
|
|
|
*
|
|
|
|
* Do not change the format of this structure, in any way (this includes
|
|
|
|
* changes that only affect the length of fields in this structure).
|
|
|
|
* Instead, introduce a new structure, as per the above.
|
2000-07-18 03:43:47 +00:00
|
|
|
*/
|
|
|
|
|
|
|
|
struct pcap_sf_patched_pkthdr {
|
|
|
|
struct pcap_timeval ts; /* time stamp */
|
|
|
|
bpf_u_int32 caplen; /* length of portion present */
|
|
|
|
bpf_u_int32 len; /* length this packet (off wire) */
|
|
|
|
int index;
|
|
|
|
unsigned short protocol;
|
|
|
|
unsigned char pkt_type;
|
|
|
|
};
|
|
|
|
|
1999-10-07 23:46:40 +00:00
|
|
|
int yylex(void);
|
|
|
|
|
|
|
|
#ifndef min
|
|
|
|
#define min(a, b) ((a) > (b) ? (b) : (a))
|
|
|
|
#endif
|
|
|
|
|
|
|
|
/* XXX should these be in pcap.h? */
|
|
|
|
int pcap_offline_read(pcap_t *, int, pcap_handler, u_char *);
|
|
|
|
int pcap_read(pcap_t *, int cnt, pcap_handler, u_char *);
|
|
|
|
|
2000-09-19 03:28:10 +00:00
|
|
|
/*
|
|
|
|
* Ultrix, DEC OSF/1^H^H^H^H^H^H^H^H^HDigital UNIX^H^H^H^H^H^H^H^H^H^H^H^H
|
|
|
|
* Tru64 UNIX, and NetBSD pad to make everything line up on a nice boundary.
|
|
|
|
*/
|
|
|
|
#if defined(ultrix) || defined(__osf__) || defined(__NetBSD__)
|
1999-10-07 23:46:40 +00:00
|
|
|
#define PCAP_FDDIPAD 3
|
|
|
|
#endif
|
|
|
|
|
2000-05-04 13:34:24 +00:00
|
|
|
#ifndef HAVE_STRLCPY
|
|
|
|
#define strlcpy(x, y, z) \
|
2000-07-04 00:22:03 +00:00
|
|
|
(strncpy((x), (y), (z)), \
|
|
|
|
((z) <= 0 ? 0 : ((x)[(z) - 1] = '\0')), \
|
|
|
|
strlen((y)))
|
2000-05-04 13:34:24 +00:00
|
|
|
#endif
|
|
|
|
|
1999-10-07 23:46:40 +00:00
|
|
|
/* XXX */
|
|
|
|
extern int pcap_fddipad;
|
2000-07-29 07:36:41 +00:00
|
|
|
|
2000-11-04 10:09:55 +00:00
|
|
|
int install_bpf_program(pcap_t *, struct bpf_program *);
|
|
|
|
|
2000-07-29 07:36:41 +00:00
|
|
|
#ifdef __cplusplus
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
1999-10-07 23:46:40 +00:00
|
|
|
#endif
|