setting svn:exports
[jnettop.git] / jnettop / include / sll.h
blobecfda3aeecf1bc1b9f2af0bf799c0a2376882702
1 /*-
3 * $Header$
4 *
5 * Copyright (c) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997
6 * The Regents of the University of California. All rights reserved.
8 * This code is derived from the Stanford/CMU enet packet filter,
9 * (net/enet.c) distributed as part of 4.3BSD, and code contributed
10 * to Berkeley by Steven McCanne and Van Jacobson both of Lawrence
11 * Berkeley Laboratory.
13 * Redistribution and use in source and binary forms, with or without
14 * modification, are permitted provided that the following conditions
15 * are met:
16 * 1. Redistributions of source code must retain the above copyright
17 * notice, this list of conditions and the following disclaimer.
18 * 2. Redistributions in binary form must reproduce the above copyright
19 * notice, this list of conditions and the following disclaimer in the
20 * documentation and/or other materials provided with the distribution.
21 * 3. All advertising materials mentioning features or use of this software
22 * must display the following acknowledgement:
23 * This product includes software developed by the University of
24 * California, Berkeley and its contributors.
25 * 4. Neither the name of the University nor the names of its contributors
26 * may be used to endorse or promote products derived from this software
27 * without specific prior written permission.
29 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
30 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
31 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
32 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
33 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
34 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
35 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
36 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
37 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
38 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
39 * SUCH DAMAGE.
44 * For captures on Linux cooked sockets, we construct a fake header
45 * that includes:
47 * a 2-byte "packet type" which is one of:
49 * LINUX_SLL_HOST packet was sent to us
50 * LINUX_SLL_BROADCAST packet was broadcast
51 * LINUX_SLL_MULTICAST packet was multicast
52 * LINUX_SLL_OTHERHOST packet was sent to somebody else
53 * LINUX_SLL_OUTGOING packet was sent *by* us;
55 * a 2-byte Ethernet protocol field;
57 * a 2-byte link-layer type;
59 * a 2-byte link-layer address length;
61 * an 8-byte source link-layer address, whose actual length is
62 * specified by the previous value.
64 * All fields except for the link-layer address are in network byte order.
66 * DO NOT change the layout of this structure, or change any of the
67 * LINUX_SLL_ values below. If you must change the link-layer header
68 * for a "cooked" Linux capture, introduce a new DLT_ type (ask
69 * "tcpdump-workers@tcpdump.org" for one, so that you don't give it a
70 * value that collides with a value already being used), and use the
71 * new header in captures of that type, so that programs that can
72 * handle DLT_LINUX_SLL captures will continue to handle them correctly
73 * without any change, and so that capture files with different headers
74 * can be told apart and programs that read them can dissect the
75 * packets in them.
77 * This structure, and the #defines below, must be the same in the
78 * libpcap and tcpdump versions of "sll.h".
82 * A DLT_LINUX_SLL fake link-layer header.
84 #define SLL_HDR_LEN 16 /* total header length */
85 #define SLL_ADDRLEN 8 /* length of address field */
87 struct sll_header {
88 guint16 sll_pkttype; /* packet type */
89 guint16 sll_hatype; /* link-layer address type */
90 guint16 sll_halen; /* link-layer address length */
91 guint8 sll_addr[SLL_ADDRLEN]; /* link-layer address */
92 guint16 sll_protocol; /* protocol */
96 * The LINUX_SLL_ values for "sll_pkttype"; these correspond to the
97 * PACKET_ values on Linux, but are defined here so that they're
98 * available even on systems other than Linux, and so that they
99 * don't change even if the PACKET_ values change.
101 #define LINUX_SLL_HOST 0
102 #define LINUX_SLL_BROADCAST 1
103 #define LINUX_SLL_MULTICAST 2
104 #define LINUX_SLL_OTHERHOST 3
105 #define LINUX_SLL_OUTGOING 4
108 * The LINUX_SLL_ values for "sll_protocol"; these correspond to the
109 * ETH_P_ values on Linux, but are defined here so that they're
110 * available even on systems other than Linux. We assume, for now,
111 * that the ETH_P_ values won't change in Linux; if they do, then:
113 * if we don't translate them in "pcap-linux.c", capture files
114 * won't necessarily be readable if captured on a system that
115 * defines ETH_P_ values that don't match these values;
117 * if we do translate them in "pcap-linux.c", that makes life
118 * unpleasant for the BPF code generator, as the values you test
119 * for in the kernel aren't the values that you test for when
120 * reading a capture file, so the fixup code run on BPF programs
121 * handed to the kernel ends up having to do more work.
123 * Add other values here as necessary, for handling packet types that
124 * might show up on non-Ethernet, non-802.x networks. (Not all the ones
125 * in the Linux "if_ether.h" will, I suspect, actually show up in
126 * captures.)
128 #define LINUX_SLL_P_802_3 0x0001 /* Novell 802.3 frames without 802.2 LLC header */
129 #define LINUX_SLL_P_802_2 0x0004 /* 802.2 frames (not D/I/X Ethernet) */