+/*-\r
+ * Copyright (c) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997\r
+ * The Regents of the University of California. All rights reserved.\r
+ *\r
+ * This code is derived from the Stanford/CMU enet packet filter,\r
+ * (net/enet.c) distributed as part of 4.3BSD, and code contributed\r
+ * to Berkeley by Steven McCanne and Van Jacobson both of Lawrence\r
+ * Berkeley Laboratory.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions\r
+ * are met:\r
+ * 1. Redistributions of source code must retain the above copyright\r
+ * notice, this list of conditions and the following disclaimer.\r
+ * 2. Redistributions in binary form must reproduce the above copyright\r
+ * notice, this list of conditions and the following disclaimer in the\r
+ * documentation and/or other materials provided with the distribution.\r
+ * 3. All advertising materials mentioning features or use of this software\r
+ * must display the following acknowledgement:\r
+ * This product includes software developed by the University of\r
+ * California, Berkeley and its contributors.\r
+ * 4. Neither the name of the University nor the names of its contributors\r
+ * may be used to endorse or promote products derived from this software\r
+ * without specific prior written permission.\r
+ *\r
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND\r
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE\r
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\r
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\r
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\r
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\r
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\r
+ * SUCH DAMAGE.\r
+ *\r
+ * @(#) $Header: /tcpdump/master/libpcap/pcap/sll.h,v 1.2.2.1 2008-05-30 01:36:06 guy Exp $ (LBL)\r
+ */\r
+\r
+/*\r
+ * For captures on Linux cooked sockets, we construct a fake header\r
+ * that includes:\r
+ *\r
+ * a 2-byte "packet type" which is one of:\r
+ *\r
+ * LINUX_SLL_HOST packet was sent to us\r
+ * LINUX_SLL_BROADCAST packet was broadcast\r
+ * LINUX_SLL_MULTICAST packet was multicast\r
+ * LINUX_SLL_OTHERHOST packet was sent to somebody else\r
+ * LINUX_SLL_OUTGOING packet was sent *by* us;\r
+ *\r
+ * a 2-byte Ethernet protocol field;\r
+ *\r
+ * a 2-byte link-layer type;\r
+ *\r
+ * a 2-byte link-layer address length;\r
+ *\r
+ * an 8-byte source link-layer address, whose actual length is\r
+ * specified by the previous value.\r
+ *\r
+ * All fields except for the link-layer address are in network byte order.\r
+ *\r
+ * DO NOT change the layout of this structure, or change any of the\r
+ * LINUX_SLL_ values below. If you must change the link-layer header\r
+ * for a "cooked" Linux capture, introduce a new DLT_ type (ask\r
+ * "tcpdump-workers@lists.tcpdump.org" for one, so that you don't give it\r
+ * a value that collides with a value already being used), and use the\r
+ * new header in captures of that type, so that programs that can\r
+ * handle DLT_LINUX_SLL captures will continue to handle them correctly\r
+ * without any change, and so that capture files with different headers\r
+ * can be told apart and programs that read them can dissect the\r
+ * packets in them.\r
+ */\r
+\r
+#ifndef lib_pcap_sll_h\r
+#define lib_pcap_sll_h\r
+\r
+/*\r
+ * A DLT_LINUX_SLL fake link-layer header.\r
+ */\r
+#define SLL_HDR_LEN 16 /* total header length */\r
+#define SLL_ADDRLEN 8 /* length of address field */\r
+\r
+struct sll_header {\r
+ u_int16_t sll_pkttype; /* packet type */\r
+ u_int16_t sll_hatype; /* link-layer address type */\r
+ u_int16_t sll_halen; /* link-layer address length */\r
+ u_int8_t sll_addr[SLL_ADDRLEN]; /* link-layer address */\r
+ u_int16_t sll_protocol; /* protocol */\r
+};\r
+\r
+/*\r
+ * The LINUX_SLL_ values for "sll_pkttype"; these correspond to the\r
+ * PACKET_ values on Linux, but are defined here so that they're\r
+ * available even on systems other than Linux, and so that they\r
+ * don't change even if the PACKET_ values change.\r
+ */\r
+#define LINUX_SLL_HOST 0\r
+#define LINUX_SLL_BROADCAST 1\r
+#define LINUX_SLL_MULTICAST 2\r
+#define LINUX_SLL_OTHERHOST 3\r
+#define LINUX_SLL_OUTGOING 4\r
+\r
+/*\r
+ * The LINUX_SLL_ values for "sll_protocol"; these correspond to the\r
+ * ETH_P_ values on Linux, but are defined here so that they're\r
+ * available even on systems other than Linux. We assume, for now,\r
+ * that the ETH_P_ values won't change in Linux; if they do, then:\r
+ *\r
+ * if we don't translate them in "pcap-linux.c", capture files\r
+ * won't necessarily be readable if captured on a system that\r
+ * defines ETH_P_ values that don't match these values;\r
+ *\r
+ * if we do translate them in "pcap-linux.c", that makes life\r
+ * unpleasant for the BPF code generator, as the values you test\r
+ * for in the kernel aren't the values that you test for when\r
+ * reading a capture file, so the fixup code run on BPF programs\r
+ * handed to the kernel ends up having to do more work.\r
+ *\r
+ * Add other values here as necessary, for handling packet types that\r
+ * might show up on non-Ethernet, non-802.x networks. (Not all the ones\r
+ * in the Linux "if_ether.h" will, I suspect, actually show up in\r
+ * captures.)\r
+ */\r
+#define LINUX_SLL_P_802_3 0x0001 /* Novell 802.3 frames without 802.2 LLC header */\r
+#define LINUX_SLL_P_802_2 0x0004 /* 802.2 frames (not D/I/X Ethernet) */\r
+\r
+#endif\r