pcap-bpf.h
上传用户:gzdtt123
上传日期:2022-01-26
资源大小:88k
文件大小:22k
开发平台:

Visual C++

  1. /*-
  2.  * Copyright (c) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997
  3.  * The Regents of the University of California.  All rights reserved.
  4.  *
  5.  * This code is derived from the Stanford/CMU enet packet filter,
  6.  * (net/enet.c) distributed as part of 4.3BSD, and code contributed
  7.  * to Berkeley by Steven McCanne and Van Jacobson both of Lawrence 
  8.  * Berkeley Laboratory.
  9.  *
  10.  * Redistribution and use in source and binary forms, with or without
  11.  * modification, are permitted provided that the following conditions
  12.  * are met:
  13.  * 1. Redistributions of source code must retain the above copyright
  14.  *    notice, this list of conditions and the following disclaimer.
  15.  * 2. Redistributions in binary form must reproduce the above copyright
  16.  *    notice, this list of conditions and the following disclaimer in the
  17.  *    documentation and/or other materials provided with the distribution.
  18.  * 3. All advertising materials mentioning features or use of this software
  19.  *    must display the following acknowledgement:
  20.  *      This product includes software developed by the University of
  21.  *      California, Berkeley and its contributors.
  22.  * 4. Neither the name of the University nor the names of its contributors
  23.  *    may be used to endorse or promote products derived from this software
  24.  *    without specific prior written permission.
  25.  *
  26.  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  27.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  28.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  29.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  30.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  31.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  32.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  33.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  34.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  35.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  36.  * SUCH DAMAGE.
  37.  *
  38.  *      @(#)bpf.h       7.1 (Berkeley) 5/7/91
  39.  *
  40.  * @(#) $Header: /tcpdump/master/libpcap/pcap-bpf.h,v 1.34.2.5 2005/05/27 23:33:00 guy Exp $ (LBL)
  41.  */
  42. /*
  43.  * This is libpcap's cut-down version of bpf.h; it includes only
  44.  * the stuff needed for the code generator and the userland BPF
  45.  * interpreter, and the libpcap APIs for setting filters, etc..
  46.  *
  47.  * "pcap-bpf.c" will include the native OS version, as it deals with
  48.  * the OS's BPF implementation.
  49.  *
  50.  * XXX - should this all just be moved to "pcap.h"?
  51.  */
  52. #ifndef BPF_MAJOR_VERSION
  53. #ifdef __cplusplus
  54. extern "C" {
  55. #endif
  56. /* BSD style release date */
  57. #define BPF_RELEASE 199606
  58. #ifdef MSDOS /* must be 32-bit */
  59. typedef long          bpf_int32;
  60. typedef unsigned long bpf_u_int32;
  61. #else
  62. typedef int bpf_int32;
  63. typedef u_int bpf_u_int32;
  64. #endif
  65. /*
  66.  * Alignment macros.  BPF_WORDALIGN rounds up to the next 
  67.  * even multiple of BPF_ALIGNMENT. 
  68.  */
  69. #ifndef __NetBSD__
  70. #define BPF_ALIGNMENT sizeof(bpf_int32)
  71. #else
  72. #define BPF_ALIGNMENT sizeof(long)
  73. #endif
  74. #define BPF_WORDALIGN(x) (((x)+(BPF_ALIGNMENT-1))&~(BPF_ALIGNMENT-1))
  75. #define BPF_MAXINSNS 512
  76. #define BPF_MAXBUFSIZE 0x8000
  77. #define BPF_MINBUFSIZE 32
  78. /*
  79.  * Structure for "pcap_compile()", "pcap_setfilter()", etc..
  80.  */
  81. struct bpf_program {
  82. u_int bf_len;
  83. struct bpf_insn *bf_insns;
  84. };
  85.  
  86. /*
  87.  * Struct return by BIOCVERSION.  This represents the version number of 
  88.  * the filter language described by the instruction encodings below.
  89.  * bpf understands a program iff kernel_major == filter_major &&
  90.  * kernel_minor >= filter_minor, that is, if the value returned by the
  91.  * running kernel has the same major number and a minor number equal
  92.  * equal to or less than the filter being downloaded.  Otherwise, the
  93.  * results are undefined, meaning an error may be returned or packets
  94.  * may be accepted haphazardly.
  95.  * It has nothing to do with the source code version.
  96.  */
  97. struct bpf_version {
  98. u_short bv_major;
  99. u_short bv_minor;
  100. };
  101. /* Current version number of filter architecture. */
  102. #define BPF_MAJOR_VERSION 1
  103. #define BPF_MINOR_VERSION 1
  104. /*
  105.  * Data-link level type codes.
  106.  *
  107.  * Do *NOT* add new values to this list without asking
  108.  * "tcpdump-workers@tcpdump.org" for a value.  Otherwise, you run the
  109.  * risk of using a value that's already being used for some other purpose,
  110.  * and of having tools that read libpcap-format captures not being able
  111.  * to handle captures with your new DLT_ value, with no hope that they
  112.  * will ever be changed to do so (as that would destroy their ability
  113.  * to read captures using that value for that other purpose).
  114.  */
  115. /*
  116.  * These are the types that are the same on all platforms, and that
  117.  * have been defined by <net/bpf.h> for ages.
  118.  */
  119. #define DLT_NULL 0 /* BSD loopback encapsulation */
  120. #define DLT_EN10MB 1 /* Ethernet (10Mb) */
  121. #define DLT_EN3MB 2 /* Experimental Ethernet (3Mb) */
  122. #define DLT_AX25 3 /* Amateur Radio AX.25 */
  123. #define DLT_PRONET 4 /* Proteon ProNET Token Ring */
  124. #define DLT_CHAOS 5 /* Chaos */
  125. #define DLT_IEEE802 6 /* IEEE 802 Networks */
  126. #define DLT_ARCNET 7 /* ARCNET, with BSD-style header */
  127. #define DLT_SLIP 8 /* Serial Line IP */
  128. #define DLT_PPP 9 /* Point-to-point Protocol */
  129. #define DLT_FDDI 10 /* FDDI */
  130. /*
  131.  * These are types that are different on some platforms, and that
  132.  * have been defined by <net/bpf.h> for ages.  We use #ifdefs to
  133.  * detect the BSDs that define them differently from the traditional
  134.  * libpcap <net/bpf.h>
  135.  *
  136.  * XXX - DLT_ATM_RFC1483 is 13 in BSD/OS, and DLT_RAW is 14 in BSD/OS,
  137.  * but I don't know what the right #define is for BSD/OS.
  138.  */
  139. #define DLT_ATM_RFC1483 11 /* LLC-encapsulated ATM */
  140. #ifdef __OpenBSD__
  141. #define DLT_RAW 14 /* raw IP */
  142. #else
  143. #define DLT_RAW 12 /* raw IP */
  144. #endif
  145. /*
  146.  * Given that the only OS that currently generates BSD/OS SLIP or PPP
  147.  * is, well, BSD/OS, arguably everybody should have chosen its values
  148.  * for DLT_SLIP_BSDOS and DLT_PPP_BSDOS, which are 15 and 16, but they
  149.  * didn't.  So it goes.
  150.  */
  151. #if defined(__NetBSD__) || defined(__FreeBSD__)
  152. #ifndef DLT_SLIP_BSDOS
  153. #define DLT_SLIP_BSDOS 13 /* BSD/OS Serial Line IP */
  154. #define DLT_PPP_BSDOS 14 /* BSD/OS Point-to-point Protocol */
  155. #endif
  156. #else
  157. #define DLT_SLIP_BSDOS 15 /* BSD/OS Serial Line IP */
  158. #define DLT_PPP_BSDOS 16 /* BSD/OS Point-to-point Protocol */
  159. #endif
  160. /*
  161.  * 17 is used for DLT_OLD_PFLOG in OpenBSD;
  162.  *     OBSOLETE: DLT_PFLOG is 117 in OpenBSD now as well. See below.
  163.  * 18 is used for DLT_PFSYNC in OpenBSD; don't use it for anything else.
  164.  */
  165. #define DLT_ATM_CLIP 19 /* Linux Classical-IP over ATM */
  166. /*
  167.  * Apparently Redback uses this for its SmartEdge 400/800.  I hope
  168.  * nobody else decided to use it, too.
  169.  */
  170. #define DLT_REDBACK_SMARTEDGE 32
  171. /*
  172.  * These values are defined by NetBSD; other platforms should refrain from
  173.  * using them for other purposes, so that NetBSD savefiles with link
  174.  * types of 50 or 51 can be read as this type on all platforms.
  175.  */
  176. #define DLT_PPP_SERIAL 50 /* PPP over serial with HDLC encapsulation */
  177. #define DLT_PPP_ETHER 51 /* PPP over Ethernet */
  178. /*
  179.  * The Axent Raptor firewall - now the Symantec Enterprise Firewall - uses
  180.  * a link-layer type of 99 for the tcpdump it supplies.  The link-layer
  181.  * header has 6 bytes of unknown data, something that appears to be an
  182.  * Ethernet type, and 36 bytes that appear to be 0 in at least one capture
  183.  * I've seen.
  184.  */
  185. #define DLT_SYMANTEC_FIREWALL 99
  186. /*
  187.  * Values between 100 and 103 are used in capture file headers as
  188.  * link-layer types corresponding to DLT_ types that differ
  189.  * between platforms; don't use those values for new DLT_ new types.
  190.  */
  191. /*
  192.  * This value was defined by libpcap 0.5; platforms that have defined
  193.  * it with a different value should define it here with that value -
  194.  * a link type of 104 in a save file will be mapped to DLT_C_HDLC,
  195.  * whatever value that happens to be, so programs will correctly
  196.  * handle files with that link type regardless of the value of
  197.  * DLT_C_HDLC.
  198.  *
  199.  * The name DLT_C_HDLC was used by BSD/OS; we use that name for source
  200.  * compatibility with programs written for BSD/OS.
  201.  *
  202.  * libpcap 0.5 defined it as DLT_CHDLC; we define DLT_CHDLC as well,
  203.  * for source compatibility with programs written for libpcap 0.5.
  204.  */
  205. #define DLT_C_HDLC 104 /* Cisco HDLC */
  206. #define DLT_CHDLC DLT_C_HDLC
  207. #define DLT_IEEE802_11 105 /* IEEE 802.11 wireless */
  208. /*
  209.  * 106 is reserved for Linux Classical IP over ATM; it's like DLT_RAW,
  210.  * except when it isn't.  (I.e., sometimes it's just raw IP, and
  211.  * sometimes it isn't.)  We currently handle it as DLT_LINUX_SLL,
  212.  * so that we don't have to worry about the link-layer header.)
  213.  */
  214. /*
  215.  * Frame Relay; BSD/OS has a DLT_FR with a value of 11, but that collides
  216.  * with other values.
  217.  * DLT_FR and DLT_FRELAY packets start with the Q.922 Frame Relay header
  218.  * (DLCI, etc.).
  219.  */
  220. #define DLT_FRELAY 107
  221. /*
  222.  * OpenBSD DLT_LOOP, for loopback devices; it's like DLT_NULL, except
  223.  * that the AF_ type in the link-layer header is in network byte order.
  224.  *
  225.  * OpenBSD defines it as 12, but that collides with DLT_RAW, so we
  226.  * define it as 108 here.  If OpenBSD picks up this file, it should
  227.  * define DLT_LOOP as 12 in its version, as per the comment above -
  228.  * and should not use 108 as a DLT_ value.
  229.  */
  230. #define DLT_LOOP 108
  231. /*
  232.  * Encapsulated packets for IPsec; DLT_ENC is 13 in OpenBSD, but that's
  233.  * DLT_SLIP_BSDOS in NetBSD, so we don't use 13 for it in OSes other
  234.  * than OpenBSD.
  235.  */
  236. #ifdef __OpenBSD__
  237. #define DLT_ENC 13
  238. #else
  239. #define DLT_ENC 109
  240. #endif
  241. /*
  242.  * Values between 110 and 112 are reserved for use in capture file headers
  243.  * as link-layer types corresponding to DLT_ types that might differ
  244.  * between platforms; don't use those values for new DLT_ types
  245.  * other than the corresponding DLT_ types.
  246.  */
  247. /*
  248.  * This is for Linux cooked sockets.
  249.  */
  250. #define DLT_LINUX_SLL 113
  251. /*
  252.  * Apple LocalTalk hardware.
  253.  */
  254. #define DLT_LTALK 114
  255. /*
  256.  * Acorn Econet.
  257.  */
  258. #define DLT_ECONET 115
  259. /*
  260.  * Reserved for use with OpenBSD ipfilter.
  261.  */
  262. #define DLT_IPFILTER 116
  263. /*
  264.  * OpenBSD DLT_PFLOG; DLT_PFLOG is 17 in OpenBSD, but that's DLT_LANE8023
  265.  * in SuSE 6.3, so we can't use 17 for it in capture-file headers.
  266.  *
  267.  * XXX: is there a conflict with DLT_PFSYNC 18 as well?
  268.  */
  269. #ifdef __OpenBSD__
  270. #define DLT_OLD_PFLOG 17
  271. #define DLT_PFSYNC 18
  272. #endif
  273. #define DLT_PFLOG 117
  274. /*
  275.  * Registered for Cisco-internal use.
  276.  */
  277. #define DLT_CISCO_IOS 118
  278. /*
  279.  * For 802.11 cards using the Prism II chips, with a link-layer
  280.  * header including Prism monitor mode information plus an 802.11
  281.  * header.
  282.  */
  283. #define DLT_PRISM_HEADER 119
  284. /*
  285.  * Reserved for Aironet 802.11 cards, with an Aironet link-layer header
  286.  * (see Doug Ambrisko's FreeBSD patches).
  287.  */
  288. #define DLT_AIRONET_HEADER 120
  289. /*
  290.  * Reserved for Siemens HiPath HDLC.
  291.  */
  292. #define DLT_HHDLC 121
  293. /*
  294.  * This is for RFC 2625 IP-over-Fibre Channel.
  295.  *
  296.  * This is not for use with raw Fibre Channel, where the link-layer
  297.  * header starts with a Fibre Channel frame header; it's for IP-over-FC,
  298.  * where the link-layer header starts with an RFC 2625 Network_Header
  299.  * field.
  300.  */
  301. #define DLT_IP_OVER_FC 122
  302. /*
  303.  * This is for Full Frontal ATM on Solaris with SunATM, with a
  304.  * pseudo-header followed by an AALn PDU.
  305.  *
  306.  * There may be other forms of Full Frontal ATM on other OSes,
  307.  * with different pseudo-headers.
  308.  *
  309.  * If ATM software returns a pseudo-header with VPI/VCI information
  310.  * (and, ideally, packet type information, e.g. signalling, ILMI,
  311.  * LANE, LLC-multiplexed traffic, etc.), it should not use
  312.  * DLT_ATM_RFC1483, but should get a new DLT_ value, so tcpdump
  313.  * and the like don't have to infer the presence or absence of a
  314.  * pseudo-header and the form of the pseudo-header.
  315.  */
  316. #define DLT_SUNATM 123 /* Solaris+SunATM */
  317. /* 
  318.  * Reserved as per request from Kent Dahlgren <kent@praesum.com>
  319.  * for private use.
  320.  */
  321. #define DLT_RIO                 124     /* RapidIO */
  322. #define DLT_PCI_EXP             125     /* PCI Express */
  323. #define DLT_AURORA              126     /* Xilinx Aurora link layer */
  324. /*
  325.  * Header for 802.11 plus a number of bits of link-layer information
  326.  * including radio information, used by some recent BSD drivers as
  327.  * well as the madwifi Atheros driver for Linux.
  328.  */
  329. #define DLT_IEEE802_11_RADIO 127 /* 802.11 plus radiotap radio header */
  330. /*
  331.  * Reserved for the TZSP encapsulation, as per request from
  332.  * Chris Waters <chris.waters@networkchemistry.com>
  333.  * TZSP is a generic encapsulation for any other link type,
  334.  * which includes a means to include meta-information
  335.  * with the packet, e.g. signal strength and channel
  336.  * for 802.11 packets.
  337.  */
  338. #define DLT_TZSP                128     /* Tazmen Sniffer Protocol */
  339. /*
  340.  * BSD's ARCNET headers have the source host, destination host,
  341.  * and type at the beginning of the packet; that's what's handed
  342.  * up to userland via BPF.
  343.  *
  344.  * Linux's ARCNET headers, however, have a 2-byte offset field
  345.  * between the host IDs and the type; that's what's handed up
  346.  * to userland via PF_PACKET sockets.
  347.  *
  348.  * We therefore have to have separate DLT_ values for them.
  349.  */
  350. #define DLT_ARCNET_LINUX 129 /* ARCNET */
  351. /*
  352.  * Juniper-private data link types, as per request from
  353.  * Hannes Gredler <hannes@juniper.net>.  The DLT_s are used
  354.  * for passing on chassis-internal metainformation such as
  355.  * QOS profiles, etc..
  356.  */
  357. #define DLT_JUNIPER_MLPPP       130
  358. #define DLT_JUNIPER_MLFR        131
  359. #define DLT_JUNIPER_ES          132
  360. #define DLT_JUNIPER_GGSN        133
  361. #define DLT_JUNIPER_MFR         134
  362. #define DLT_JUNIPER_ATM2        135
  363. #define DLT_JUNIPER_SERVICES    136
  364. #define DLT_JUNIPER_ATM1        137
  365. /*
  366.  * Apple IP-over-IEEE 1394, as per a request from Dieter Siegmund
  367.  * <dieter@apple.com>.  The header that's presented is an Ethernet-like
  368.  * header:
  369.  *
  370.  * #define FIREWIRE_EUI64_LEN 8
  371.  * struct firewire_header {
  372.  * u_char  firewire_dhost[FIREWIRE_EUI64_LEN];
  373.  * u_char  firewire_shost[FIREWIRE_EUI64_LEN];
  374.  * u_short firewire_type;
  375.  * };
  376.  *
  377.  * with "firewire_type" being an Ethernet type value, rather than,
  378.  * for example, raw GASP frames being handed up.
  379.  */
  380. #define DLT_APPLE_IP_OVER_IEEE1394 138
  381. /*
  382.  * Various SS7 encapsulations, as per a request from Jeff Morriss
  383.  * <jeff.morriss[AT]ulticom.com> and subsequent discussions.
  384.  */
  385. #define DLT_MTP2_WITH_PHDR 139 /* pseudo-header with various info, followed by MTP2 */
  386. #define DLT_MTP2 140 /* MTP2, without pseudo-header */
  387. #define DLT_MTP3 141 /* MTP3, without pseudo-header or MTP2 */
  388. #define DLT_SCCP 142 /* SCCP, without pseudo-header or MTP2 or MTP3 */
  389. /*
  390.  * DOCSIS MAC frames.
  391.  */
  392. #define DLT_DOCSIS 143
  393. /*
  394.  * Linux-IrDA packets. Protocol defined at http://www.irda.org.
  395.  * Those packets include IrLAP headers and above (IrLMP...), but
  396.  * don't include Phy framing (SOF/EOF/CRC & byte stuffing), because Phy
  397.  * framing can be handled by the hardware and depend on the bitrate.
  398.  * This is exactly the format you would get capturing on a Linux-IrDA
  399.  * interface (irdaX), but not on a raw serial port.
  400.  * Note the capture is done in "Linux-cooked" mode, so each packet include
  401.  * a fake packet header (struct sll_header). This is because IrDA packet
  402.  * decoding is dependant on the direction of the packet (incomming or
  403.  * outgoing).
  404.  * When/if other platform implement IrDA capture, we may revisit the
  405.  * issue and define a real DLT_IRDA...
  406.  * Jean II
  407.  */
  408. #define DLT_LINUX_IRDA 144
  409. /*
  410.  * Reserved for IBM SP switch and IBM Next Federation switch.
  411.  */
  412. #define DLT_IBM_SP 145
  413. #define DLT_IBM_SN 146
  414. /*
  415.  * Reserved for private use.  If you have some link-layer header type
  416.  * that you want to use within your organization, with the capture files
  417.  * using that link-layer header type not ever be sent outside your
  418.  * organization, you can use these values.
  419.  *
  420.  * No libpcap release will use these for any purpose, nor will any
  421.  * tcpdump release use them, either.
  422.  *
  423.  * Do *NOT* use these in capture files that you expect anybody not using
  424.  * your private versions of capture-file-reading tools to read; in
  425.  * particular, do *NOT* use them in products, otherwise you may find that
  426.  * people won't be able to use tcpdump, or snort, or Ethereal, or... to
  427.  * read capture files from your firewall/intrusion detection/traffic
  428.  * monitoring/etc. appliance, or whatever product uses that DLT_ value,
  429.  * and you may also find that the developers of those applications will
  430.  * not accept patches to let them read those files.
  431.  *
  432.  * Also, do not use them if somebody might send you a capture using them
  433.  * for *their* private type and tools using them for *your* private type
  434.  * would have to read them.
  435.  *
  436.  * Instead, ask "tcpdump-workers@tcpdump.org" for a new DLT_ value,
  437.  * as per the comment above, and use the type you're given.
  438.  */
  439. #define DLT_USER0 147
  440. #define DLT_USER1 148
  441. #define DLT_USER2 149
  442. #define DLT_USER3 150
  443. #define DLT_USER4 151
  444. #define DLT_USER5 152
  445. #define DLT_USER6 153
  446. #define DLT_USER7 154
  447. #define DLT_USER8 155
  448. #define DLT_USER9 156
  449. #define DLT_USER10 157
  450. #define DLT_USER11 158
  451. #define DLT_USER12 159
  452. #define DLT_USER13 160
  453. #define DLT_USER14 161
  454. #define DLT_USER15 162
  455. /*
  456.  * For future use with 802.11 captures - defined by AbsoluteValue
  457.  * Systems to store a number of bits of link-layer information
  458.  * including radio information:
  459.  *
  460.  * http://www.shaftnet.org/~pizza/software/capturefrm.txt
  461.  *
  462.  * but it might be used by some non-AVS drivers now or in the
  463.  * future.
  464.  */
  465. #define DLT_IEEE802_11_RADIO_AVS 163 /* 802.11 plus AVS radio header */
  466. /*
  467.  * Juniper-private data link type, as per request from
  468.  * Hannes Gredler <hannes@juniper.net>.  The DLT_s are used
  469.  * for passing on chassis-internal metainformation such as
  470.  * QOS profiles, etc..
  471.  */
  472. #define DLT_JUNIPER_MONITOR     164
  473. /*
  474.  * Reserved for BACnet MS/TP.
  475.  */
  476. #define DLT_BACNET_MS_TP 165
  477. /*
  478.  * Another PPP variant as per request from Karsten Keil <kkeil@suse.de>.
  479.  *
  480.  * This is used in some OSes to allow a kernel socket filter to distinguish
  481.  * between incoming and outgoing packets, on a socket intended to
  482.  * supply pppd with outgoing packets so it can do dial-on-demand and
  483.  * hangup-on-lack-of-demand; incoming packets are filtered out so they
  484.  * don't cause pppd to hold the connection up (you don't want random
  485.  * input packets such as port scans, packets from old lost connections,
  486.  * etc. to force the connection to stay up).
  487.  *
  488.  * The first byte of the PPP header (0xff03) is modified to accomodate
  489.  * the direction - 0x00 = IN, 0x01 = OUT.
  490.  */
  491. #define DLT_PPP_PPPD 166
  492. /*
  493.  * Names for backwards compatibility with older versions of some PPP
  494.  * software; new software should use DLT_PPP_PPPD.
  495.  */
  496. #define DLT_PPP_WITH_DIRECTION DLT_PPP_PPPD
  497. #define DLT_LINUX_PPP_WITHDIRECTION DLT_PPP_PPPD
  498. /*
  499.  * Juniper-private data link type, as per request from
  500.  * Hannes Gredler <hannes@juniper.net>.  The DLT_s are used
  501.  * for passing on chassis-internal metainformation such as
  502.  * QOS profiles, cookies, etc..
  503.  */
  504. #define DLT_JUNIPER_PPPOE       167
  505. #define DLT_JUNIPER_PPPOE_ATM   168
  506. #define DLT_GPRS_LLC 169 /* GPRS LLC */
  507. #define DLT_GPF_T 170 /* GPF-T (ITU-T G.7041/Y.1303) */
  508. #define DLT_GPF_F 171 /* GPF-F (ITU-T G.7041/Y.1303) */
  509. /*
  510.  * Requested by Oolan Zimmer <oz@gcom.com> for use in Gcom's T1/E1 line
  511.  * monitoring equipment.
  512.  */
  513. #define DLT_GCOM_T1E1 172
  514. #define DLT_GCOM_SERIAL 173
  515. /*
  516.  * Juniper-private data link type, as per request from
  517.  * Hannes Gredler <hannes@juniper.net>.  The DLT_ is used
  518.  * for internal communication to Physical Interface Cards (PIC)
  519.  */
  520. #define DLT_JUNIPER_PIC_PEER    174
  521. /*
  522.  * Link types requested by Gregor Maier <gregor@endace.com> of Endace
  523.  * Measurement Systems.  They add an ERF header (see
  524.  * http://www.endace.com/support/EndaceRecordFormat.pdf) in front of
  525.  * the link-layer header.
  526.  */
  527. #define DLT_ERF_ETH 175 /* Ethernet */
  528. #define DLT_ERF_POS 176 /* Packet-over-SONET */
  529. /*
  530.  * Requested by Daniele Orlandi <daniele@orlandi.com> for raw LAPD
  531.  * for vISDN (http://www.orlandi.com/visdn/).  Its link-layer header
  532.  * includes additional information before the LAPD header, so it's
  533.  * not necessarily a generic LAPD header.
  534.  */
  535. #define DLT_LINUX_LAPD 177
  536. /*
  537.  * The instruction encodings.
  538.  */
  539. /* instruction classes */
  540. #define BPF_CLASS(code) ((code) & 0x07)
  541. #define BPF_LD 0x00
  542. #define BPF_LDX 0x01
  543. #define BPF_ST 0x02
  544. #define BPF_STX 0x03
  545. #define BPF_ALU 0x04
  546. #define BPF_JMP 0x05
  547. #define BPF_RET 0x06
  548. #define BPF_MISC 0x07
  549. /* ld/ldx fields */
  550. #define BPF_SIZE(code) ((code) & 0x18)
  551. #define BPF_W 0x00
  552. #define BPF_H 0x08
  553. #define BPF_B 0x10
  554. #define BPF_MODE(code) ((code) & 0xe0)
  555. #define BPF_IMM  0x00
  556. #define BPF_ABS 0x20
  557. #define BPF_IND 0x40
  558. #define BPF_MEM 0x60
  559. #define BPF_LEN 0x80
  560. #define BPF_MSH 0xa0
  561. /* alu/jmp fields */
  562. #define BPF_OP(code) ((code) & 0xf0)
  563. #define BPF_ADD 0x00
  564. #define BPF_SUB 0x10
  565. #define BPF_MUL 0x20
  566. #define BPF_DIV 0x30
  567. #define BPF_OR 0x40
  568. #define BPF_AND 0x50
  569. #define BPF_LSH 0x60
  570. #define BPF_RSH 0x70
  571. #define BPF_NEG 0x80
  572. #define BPF_JA 0x00
  573. #define BPF_JEQ 0x10
  574. #define BPF_JGT 0x20
  575. #define BPF_JGE 0x30
  576. #define BPF_JSET 0x40
  577. #define BPF_SRC(code) ((code) & 0x08)
  578. #define BPF_K 0x00
  579. #define BPF_X 0x08
  580. /* ret - BPF_K and BPF_X also apply */
  581. #define BPF_RVAL(code) ((code) & 0x18)
  582. #define BPF_A 0x10
  583. /* misc */
  584. #define BPF_MISCOP(code) ((code) & 0xf8)
  585. #define BPF_TAX 0x00
  586. #define BPF_TXA 0x80
  587. /*
  588.  * The instruction data structure.
  589.  */
  590. struct bpf_insn {
  591. u_short code;
  592. u_char  jt;
  593. u_char  jf;
  594. bpf_int32 k;
  595. };
  596. /*
  597.  * Macros for insn array initializers.
  598.  */
  599. #define BPF_STMT(code, k) { (u_short)(code), 0, 0, k }
  600. #define BPF_JUMP(code, k, jt, jf) { (u_short)(code), jt, jf, k }
  601. #if __STDC__ || defined(__cplusplus)
  602. extern int bpf_validate(struct bpf_insn *, int);
  603. extern u_int bpf_filter(struct bpf_insn *, u_char *, u_int, u_int);
  604. #else
  605. extern int bpf_validate();
  606. extern u_int bpf_filter();
  607. #endif
  608. /*
  609.  * Number of scratch memory words (for BPF_LD|BPF_MEM and BPF_ST).
  610.  */
  611. #define BPF_MEMWORDS 16
  612. #ifdef __cplusplus
  613. }
  614. #endif
  615. #endif