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