xref: /openbsd-src/lib/libpcap/pcap-int.h (revision 346f594f33ee3e8eaab18406f620d914faf99259)
1*346f594fSlteo /*	$OpenBSD: pcap-int.h,v 1.14 2018/04/05 03:47:27 lteo Exp $	*/
2df930be7Sderaadt 
3df930be7Sderaadt /*
401efc7efSderaadt  * Copyright (c) 1994, 1995, 1996
5df930be7Sderaadt  *	The Regents of the University of California.  All rights reserved.
6df930be7Sderaadt  *
7df930be7Sderaadt  * Redistribution and use in source and binary forms, with or without
8df930be7Sderaadt  * modification, are permitted provided that the following conditions
9df930be7Sderaadt  * are met:
10df930be7Sderaadt  * 1. Redistributions of source code must retain the above copyright
11df930be7Sderaadt  *    notice, this list of conditions and the following disclaimer.
12df930be7Sderaadt  * 2. Redistributions in binary form must reproduce the above copyright
13df930be7Sderaadt  *    notice, this list of conditions and the following disclaimer in the
14df930be7Sderaadt  *    documentation and/or other materials provided with the distribution.
15df930be7Sderaadt  * 3. All advertising materials mentioning features or use of this software
16df930be7Sderaadt  *    must display the following acknowledgement:
17df930be7Sderaadt  *	This product includes software developed by the Computer Systems
18df930be7Sderaadt  *	Engineering Group at Lawrence Berkeley Laboratory.
19df930be7Sderaadt  * 4. Neither the name of the University nor of the Laboratory may be used
20df930be7Sderaadt  *    to endorse or promote products derived from this software without
21df930be7Sderaadt  *    specific prior written permission.
22df930be7Sderaadt  *
23df930be7Sderaadt  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
24df930be7Sderaadt  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
25df930be7Sderaadt  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
26df930be7Sderaadt  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
27df930be7Sderaadt  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
28df930be7Sderaadt  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
29df930be7Sderaadt  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
30df930be7Sderaadt  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
31df930be7Sderaadt  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
32df930be7Sderaadt  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
33df930be7Sderaadt  * SUCH DAMAGE.
34df930be7Sderaadt  */
35df930be7Sderaadt 
36df930be7Sderaadt #ifndef pcap_int_h
37df930be7Sderaadt #define pcap_int_h
38df930be7Sderaadt 
39df930be7Sderaadt #include <pcap.h>
40df930be7Sderaadt 
41df930be7Sderaadt /*
4211297935Slteo  * Stuff to do when we close.
4311297935Slteo  */
4411297935Slteo #define MUST_CLEAR_RFMON	0x00000002	/* clear rfmon (monitor) mode */
4511297935Slteo 
4611297935Slteo struct pcap_opt {
4711297935Slteo 	int	buffer_size;
4811297935Slteo 	char	*source;
4911297935Slteo 	int	promisc;
5011297935Slteo 	int	rfmon;
51*346f594fSlteo 	int	immediate;	/* immediate mode - deliver packets as soon as they arrive */
5211297935Slteo };
5311297935Slteo 
5411297935Slteo /*
55df930be7Sderaadt  * Savefile
56df930be7Sderaadt  */
57df930be7Sderaadt struct pcap_sf {
58df930be7Sderaadt 	FILE *rfile;
59df930be7Sderaadt 	int swapped;
60df930be7Sderaadt 	int version_major;
61df930be7Sderaadt 	int version_minor;
62df930be7Sderaadt 	u_char *base;
63df930be7Sderaadt };
64df930be7Sderaadt 
65df930be7Sderaadt struct pcap_md {
66df930be7Sderaadt 	struct pcap_stat stat;
679b113833Smickey 	/*XXX*/
68df930be7Sderaadt 	int use_bpf;
69df930be7Sderaadt 	u_long	TotPkts;	/* can't oflow for 79 hrs on ether */
70df930be7Sderaadt 	u_long	TotAccepted;	/* count accepted by filter */
71df930be7Sderaadt 	u_long	TotDrops;	/* count of dropped packets */
72df930be7Sderaadt 	long	TotMissed;	/* missed by i/f during this run */
73df930be7Sderaadt 	long	OrigMissed;	/* missed by i/f before this run */
7411297935Slteo 	int	timeout;	/* timeout for buffering */
7511297935Slteo 	int	must_do_on_close; /* stuff we must do when we close */
7611297935Slteo 	struct pcap *next;	/* list of open pcaps that need stuff cleared on close */
77df930be7Sderaadt };
78df930be7Sderaadt 
79df930be7Sderaadt struct pcap {
80df930be7Sderaadt 	int fd;
81df930be7Sderaadt 	int snapshot;
82df930be7Sderaadt 	int linktype;
83df930be7Sderaadt 	int tzoff;		/* timezone offset */
8401efc7efSderaadt 	int offset;		/* offset for proper alignment */
8511297935Slteo 	int activated;		/* true if the capture is really started */
8611297935Slteo 	int oldstyle;		/* if we're opening with pcap_open_live() */
87a878b819Sdjm 	int break_loop;		/* force break from packet-reading loop */
88df930be7Sderaadt 
89df930be7Sderaadt 	struct pcap_sf sf;
90df930be7Sderaadt 	struct pcap_md md;
9111297935Slteo 	struct pcap_opt opt;
92df930be7Sderaadt 
93df930be7Sderaadt 	/*
94df930be7Sderaadt 	 * Read buffer.
95df930be7Sderaadt 	 */
96df930be7Sderaadt 	int bufsize;
97df930be7Sderaadt 	u_char *buffer;
98df930be7Sderaadt 	u_char *bp;
99df930be7Sderaadt 	int cc;
100df930be7Sderaadt 
101df930be7Sderaadt 	/*
102df930be7Sderaadt 	 * Place holder for pcap_next().
103df930be7Sderaadt 	 */
104df930be7Sderaadt 	u_char *pkt;
105df930be7Sderaadt 
106df930be7Sderaadt 
107df930be7Sderaadt 	/*
108df930be7Sderaadt 	 * Placeholder for filter code if bpf not in kernel.
109df930be7Sderaadt 	 */
110df930be7Sderaadt 	struct bpf_program fcode;
111df930be7Sderaadt 
112a878b819Sdjm 	/*
113a878b819Sdjm 	 * Datalink types supported on underlying fd
114a878b819Sdjm 	 */
115a878b819Sdjm 	int dlt_count;
116a878b819Sdjm 	u_int *dlt_list;
117a878b819Sdjm 
118df930be7Sderaadt 	char errbuf[PCAP_ERRBUF_SIZE];
119c1bf1209Sdjm 
120c1bf1209Sdjm 	struct pcap_pkthdr pcap_header;	/* This is needed for the pcap_next_ex() to work */
121df930be7Sderaadt };
122df930be7Sderaadt 
123a9b0695fSjakob /*
124a9b0695fSjakob  * How a `pcap_pkthdr' is actually stored in the dumpfile.
125a9b0695fSjakob  */
126a9b0695fSjakob 
127a9b0695fSjakob struct pcap_sf_pkthdr {
128eb867ec1Sderaadt     struct bpf_timeval ts;	/* time stamp */
129a9b0695fSjakob     bpf_u_int32 caplen;		/* length of portion present */
130a9b0695fSjakob     bpf_u_int32 len;		/* length this packet (off wire) */
131a9b0695fSjakob };
132a9b0695fSjakob 
1339b113833Smickey int	yylex(void);
1349b113833Smickey 
13501efc7efSderaadt #ifndef min
13601efc7efSderaadt #define min(a, b) ((a) > (b) ? (b) : (a))
13701efc7efSderaadt #endif
13801efc7efSderaadt 
139a878b819Sdjm /* Not all systems have IFF_LOOPBACK */
140a878b819Sdjm #ifdef IFF_LOOPBACK
141a878b819Sdjm #define ISLOOPBACK(name, flags) ((flags) & IFF_LOOPBACK)
142a878b819Sdjm #else
143a878b819Sdjm #define ISLOOPBACK(name, flags) ((name)[0] == 'l' && (name)[1] == 'o' && \
144a878b819Sdjm     (isdigit((unsigned char)((name)[2])) || (name)[2] == '\0'))
145a878b819Sdjm #endif
146a878b819Sdjm 
147df930be7Sderaadt /* XXX should these be in pcap.h? */
148df930be7Sderaadt int	pcap_offline_read(pcap_t *, int, pcap_handler, u_char *);
149df930be7Sderaadt int	pcap_read(pcap_t *, int cnt, pcap_handler, u_char *);
1509b113833Smickey 
15111297935Slteo int	pcap_do_addexit(pcap_t *);
15211297935Slteo void	pcap_add_to_pcaps_to_close(pcap_t *);
15311297935Slteo void	pcap_remove_from_pcaps_to_close(pcap_t *);
15411297935Slteo int	pcap_check_activated(pcap_t *);
15511297935Slteo 
1569b113833Smickey /* Ultrix pads to make everything line up on a nice boundary */
1579b113833Smickey #if defined(ultrix) || defined(__alpha)
1589b113833Smickey #define       PCAP_FDDIPAD 3
1599b113833Smickey #endif
16001efc7efSderaadt 
16101efc7efSderaadt /* XXX */
16201efc7efSderaadt extern int pcap_fddipad;
163df930be7Sderaadt #endif
164