pcap-common.c revision 214455
1214455Srpaulo/*
2214455Srpaulo * Copyright (c) 1993, 1994, 1995, 1996, 1997
3214455Srpaulo *	The Regents of the University of California.  All rights reserved.
4214455Srpaulo *
5214455Srpaulo * Redistribution and use in source and binary forms, with or without
6214455Srpaulo * modification, are permitted provided that: (1) source code distributions
7214455Srpaulo * retain the above copyright notice and this paragraph in its entirety, (2)
8214455Srpaulo * distributions including binary code include the above copyright notice and
9214455Srpaulo * this paragraph in its entirety in the documentation or other materials
10214455Srpaulo * provided with the distribution, and (3) all advertising materials mentioning
11214455Srpaulo * features or use of this software display the following acknowledgement:
12214455Srpaulo * ``This product includes software developed by the University of California,
13214455Srpaulo * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
14214455Srpaulo * the University nor the names of its contributors may be used to endorse
15214455Srpaulo * or promote products derived from this software without specific prior
16214455Srpaulo * written permission.
17214455Srpaulo * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
18214455Srpaulo * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
19214455Srpaulo * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
20214455Srpaulo *
21214455Srpaulo * savefile.c - supports offline use of tcpdump
22214455Srpaulo *	Extraction/creation by Jeffrey Mogul, DECWRL
23214455Srpaulo *	Modified by Steve McCanne, LBL.
24214455Srpaulo *
25214455Srpaulo * Used to save the received packet headers, after filtering, to
26214455Srpaulo * a file, and then read them later.
27214455Srpaulo * The first record in the file contains saved values for the machine
28214455Srpaulo * dependent values so we can print the dump file on any architecture.
29214455Srpaulo */
30214455Srpaulo
31214455Srpaulo#ifndef lint
32214455Srpaulostatic const char rcsid[] _U_ =
33214455Srpaulo    "@(#) $Header: /tcpdump/master/libpcap/savefile.c,v 1.183 2008-12-23 20:13:29 guy Exp $ (LBL)";
34214455Srpaulo#endif
35214455Srpaulo
36214455Srpaulo#ifdef HAVE_CONFIG_H
37214455Srpaulo#include "config.h"
38214455Srpaulo#endif
39214455Srpaulo
40214455Srpaulo#ifdef WIN32
41214455Srpaulo#include <pcap-stdinc.h>
42214455Srpaulo#else /* WIN32 */
43214455Srpaulo#if HAVE_INTTYPES_H
44214455Srpaulo#include <inttypes.h>
45214455Srpaulo#elif HAVE_STDINT_H
46214455Srpaulo#include <stdint.h>
47214455Srpaulo#endif
48214455Srpaulo#ifdef HAVE_SYS_BITYPES_H
49214455Srpaulo#include <sys/bitypes.h>
50214455Srpaulo#endif
51214455Srpaulo#include <sys/types.h>
52214455Srpaulo#endif /* WIN32 */
53214455Srpaulo
54214455Srpaulo#include "pcap-int.h"
55214455Srpaulo#include "pcap/usb.h"
56214455Srpaulo
57214455Srpaulo#include "pcap-common.h"
58214455Srpaulo
59214455Srpaulo/*
60214455Srpaulo * We don't write DLT_* values to capture files, because they're not the
61214455Srpaulo * same on all platforms.
62214455Srpaulo *
63214455Srpaulo * Unfortunately, the various flavors of BSD have not always used the same
64214455Srpaulo * numerical values for the same data types, and various patches to
65214455Srpaulo * libpcap for non-BSD OSes have added their own DLT_* codes for link
66214455Srpaulo * layer encapsulation types seen on those OSes, and those codes have had,
67214455Srpaulo * in some cases, values that were also used, on other platforms, for other
68214455Srpaulo * link layer encapsulation types.
69214455Srpaulo *
70214455Srpaulo * This means that capture files of a type whose numerical DLT_* code
71214455Srpaulo * means different things on different BSDs, or with different versions
72214455Srpaulo * of libpcap, can't always be read on systems other than those like
73214455Srpaulo * the one running on the machine on which the capture was made.
74214455Srpaulo *
75214455Srpaulo * Instead, we define here a set of LINKTYPE_* codes, and map DLT_* codes
76214455Srpaulo * to LINKTYPE_* codes when writing a savefile header, and map LINKTYPE_*
77214455Srpaulo * codes to DLT_* codes when reading a savefile header.
78214455Srpaulo *
79214455Srpaulo * For those DLT_* codes that have, as far as we know, the same values on
80214455Srpaulo * all platforms (DLT_NULL through DLT_FDDI), we define LINKTYPE_xxx as
81214455Srpaulo * DLT_xxx; that way, captures of those types can still be read by
82214455Srpaulo * versions of libpcap that map LINKTYPE_* values to DLT_* values, and
83214455Srpaulo * captures of those types written by versions of libpcap that map DLT_
84214455Srpaulo * values to LINKTYPE_ values can still be read by older versions
85214455Srpaulo * of libpcap.
86214455Srpaulo *
87214455Srpaulo * The other LINKTYPE_* codes are given values starting at 100, in the
88214455Srpaulo * hopes that no DLT_* code will be given one of those values.
89214455Srpaulo *
90214455Srpaulo * In order to ensure that a given LINKTYPE_* code's value will refer to
91214455Srpaulo * the same encapsulation type on all platforms, you should not allocate
92214455Srpaulo * a new LINKTYPE_* value without consulting
93214455Srpaulo * "tcpdump-workers@lists.tcpdump.org".  The tcpdump developers will
94214455Srpaulo * allocate a value for you, and will not subsequently allocate it to
95214455Srpaulo * anybody else; that value will be added to the "pcap.h" in the
96214455Srpaulo * tcpdump.org Git repository, so that a future libpcap release will
97214455Srpaulo * include it.
98214455Srpaulo *
99214455Srpaulo * You should, if possible, also contribute patches to libpcap and tcpdump
100214455Srpaulo * to handle the new encapsulation type, so that they can also be checked
101214455Srpaulo * into the tcpdump.org Git repository and so that they will appear in
102214455Srpaulo * future libpcap and tcpdump releases.
103214455Srpaulo *
104214455Srpaulo * Do *NOT* assume that any values after the largest value in this file
105214455Srpaulo * are available; you might not have the most up-to-date version of this
106214455Srpaulo * file, and new values after that one might have been assigned.  Also,
107214455Srpaulo * do *NOT* use any values below 100 - those might already have been
108214455Srpaulo * taken by one (or more!) organizations.
109214455Srpaulo */
110214455Srpaulo#define LINKTYPE_NULL		DLT_NULL
111214455Srpaulo#define LINKTYPE_ETHERNET	DLT_EN10MB	/* also for 100Mb and up */
112214455Srpaulo#define LINKTYPE_EXP_ETHERNET	DLT_EN3MB	/* 3Mb experimental Ethernet */
113214455Srpaulo#define LINKTYPE_AX25		DLT_AX25
114214455Srpaulo#define LINKTYPE_PRONET		DLT_PRONET
115214455Srpaulo#define LINKTYPE_CHAOS		DLT_CHAOS
116214455Srpaulo#define LINKTYPE_TOKEN_RING	DLT_IEEE802	/* DLT_IEEE802 is used for Token Ring */
117214455Srpaulo#define LINKTYPE_ARCNET		DLT_ARCNET	/* BSD-style headers */
118214455Srpaulo#define LINKTYPE_SLIP		DLT_SLIP
119214455Srpaulo#define LINKTYPE_PPP		DLT_PPP
120214455Srpaulo#define LINKTYPE_FDDI		DLT_FDDI
121214455Srpaulo
122214455Srpaulo/*
123214455Srpaulo * LINKTYPE_PPP is for use when there might, or might not, be an RFC 1662
124214455Srpaulo * PPP in HDLC-like framing header (with 0xff 0x03 before the PPP protocol
125214455Srpaulo * field) at the beginning of the packet.
126214455Srpaulo *
127214455Srpaulo * This is for use when there is always such a header; the address field
128214455Srpaulo * might be 0xff, for regular PPP, or it might be an address field for Cisco
129214455Srpaulo * point-to-point with HDLC framing as per section 4.3.1 of RFC 1547 ("Cisco
130214455Srpaulo * HDLC").  This is, for example, what you get with NetBSD's DLT_PPP_SERIAL.
131214455Srpaulo *
132214455Srpaulo * We give it the same value as NetBSD's DLT_PPP_SERIAL, in the hopes that
133214455Srpaulo * nobody else will choose a DLT_ value of 50, and so that DLT_PPP_SERIAL
134214455Srpaulo * captures will be written out with a link type that NetBSD's tcpdump
135214455Srpaulo * can read.
136214455Srpaulo */
137214455Srpaulo#define LINKTYPE_PPP_HDLC	50		/* PPP in HDLC-like framing */
138214455Srpaulo
139214455Srpaulo#define LINKTYPE_PPP_ETHER	51		/* NetBSD PPP-over-Ethernet */
140214455Srpaulo
141214455Srpaulo#define LINKTYPE_SYMANTEC_FIREWALL 99		/* Symantec Enterprise Firewall */
142214455Srpaulo
143214455Srpaulo#define LINKTYPE_ATM_RFC1483	100		/* LLC/SNAP-encapsulated ATM */
144214455Srpaulo#define LINKTYPE_RAW		101		/* raw IP */
145214455Srpaulo#define LINKTYPE_SLIP_BSDOS	102		/* BSD/OS SLIP BPF header */
146214455Srpaulo#define LINKTYPE_PPP_BSDOS	103		/* BSD/OS PPP BPF header */
147214455Srpaulo#define LINKTYPE_C_HDLC		104		/* Cisco HDLC */
148214455Srpaulo#define LINKTYPE_IEEE802_11	105		/* IEEE 802.11 (wireless) */
149214455Srpaulo#define LINKTYPE_ATM_CLIP	106		/* Linux Classical IP over ATM */
150214455Srpaulo#define LINKTYPE_FRELAY		107		/* Frame Relay */
151214455Srpaulo#define LINKTYPE_LOOP		108		/* OpenBSD loopback */
152214455Srpaulo#define LINKTYPE_ENC		109		/* OpenBSD IPSEC enc */
153214455Srpaulo
154214455Srpaulo/*
155214455Srpaulo * These three types are reserved for future use.
156214455Srpaulo */
157214455Srpaulo#define LINKTYPE_LANE8023	110		/* ATM LANE + 802.3 */
158214455Srpaulo#define LINKTYPE_HIPPI		111		/* NetBSD HIPPI */
159214455Srpaulo#define LINKTYPE_HDLC		112		/* NetBSD HDLC framing */
160214455Srpaulo
161214455Srpaulo#define LINKTYPE_LINUX_SLL	113		/* Linux cooked socket capture */
162214455Srpaulo#define LINKTYPE_LTALK		114		/* Apple LocalTalk hardware */
163214455Srpaulo#define LINKTYPE_ECONET		115		/* Acorn Econet */
164214455Srpaulo
165214455Srpaulo/*
166214455Srpaulo * Reserved for use with OpenBSD ipfilter.
167214455Srpaulo */
168214455Srpaulo#define LINKTYPE_IPFILTER	116
169214455Srpaulo
170214455Srpaulo#define LINKTYPE_PFLOG		117		/* OpenBSD DLT_PFLOG */
171214455Srpaulo#define LINKTYPE_CISCO_IOS	118		/* For Cisco-internal use */
172214455Srpaulo#define LINKTYPE_PRISM_HEADER	119		/* 802.11+Prism II monitor mode */
173214455Srpaulo#define LINKTYPE_AIRONET_HEADER	120		/* FreeBSD Aironet driver stuff */
174214455Srpaulo
175214455Srpaulo/*
176214455Srpaulo * Reserved for Siemens HiPath HDLC.
177214455Srpaulo */
178214455Srpaulo#define LINKTYPE_HHDLC		121
179214455Srpaulo
180214455Srpaulo#define LINKTYPE_IP_OVER_FC	122		/* RFC 2625 IP-over-Fibre Channel */
181214455Srpaulo#define LINKTYPE_SUNATM		123		/* Solaris+SunATM */
182214455Srpaulo
183214455Srpaulo/*
184214455Srpaulo * Reserved as per request from Kent Dahlgren <kent@praesum.com>
185214455Srpaulo * for private use.
186214455Srpaulo */
187214455Srpaulo#define LINKTYPE_RIO		124		/* RapidIO */
188214455Srpaulo#define LINKTYPE_PCI_EXP	125		/* PCI Express */
189214455Srpaulo#define LINKTYPE_AURORA		126		/* Xilinx Aurora link layer */
190214455Srpaulo
191214455Srpaulo#define LINKTYPE_IEEE802_11_RADIO 127		/* 802.11 plus BSD radio header */
192214455Srpaulo
193214455Srpaulo/*
194214455Srpaulo * Reserved for the TZSP encapsulation, as per request from
195214455Srpaulo * Chris Waters <chris.waters@networkchemistry.com>
196214455Srpaulo * TZSP is a generic encapsulation for any other link type,
197214455Srpaulo * which includes a means to include meta-information
198214455Srpaulo * with the packet, e.g. signal strength and channel
199214455Srpaulo * for 802.11 packets.
200214455Srpaulo */
201214455Srpaulo#define LINKTYPE_TZSP		128		/* Tazmen Sniffer Protocol */
202214455Srpaulo
203214455Srpaulo#define LINKTYPE_ARCNET_LINUX	129		/* Linux-style headers */
204214455Srpaulo
205214455Srpaulo/*
206214455Srpaulo * Juniper-private data link types, as per request from
207214455Srpaulo * Hannes Gredler <hannes@juniper.net>.  The corresponding
208214455Srpaulo * DLT_s are used for passing on chassis-internal
209214455Srpaulo * metainformation such as QOS profiles, etc..
210214455Srpaulo */
211214455Srpaulo#define LINKTYPE_JUNIPER_MLPPP  130
212214455Srpaulo#define LINKTYPE_JUNIPER_MLFR   131
213214455Srpaulo#define LINKTYPE_JUNIPER_ES     132
214214455Srpaulo#define LINKTYPE_JUNIPER_GGSN   133
215214455Srpaulo#define LINKTYPE_JUNIPER_MFR    134
216214455Srpaulo#define LINKTYPE_JUNIPER_ATM2   135
217214455Srpaulo#define LINKTYPE_JUNIPER_SERVICES 136
218214455Srpaulo#define LINKTYPE_JUNIPER_ATM1   137
219214455Srpaulo
220214455Srpaulo#define LINKTYPE_APPLE_IP_OVER_IEEE1394 138	/* Apple IP-over-IEEE 1394 cooked header */
221214455Srpaulo
222214455Srpaulo#define LINKTYPE_MTP2_WITH_PHDR	139
223214455Srpaulo#define LINKTYPE_MTP2		140
224214455Srpaulo#define LINKTYPE_MTP3		141
225214455Srpaulo#define LINKTYPE_SCCP		142
226214455Srpaulo
227214455Srpaulo#define LINKTYPE_DOCSIS		143		/* DOCSIS MAC frames */
228214455Srpaulo
229214455Srpaulo#define LINKTYPE_LINUX_IRDA	144		/* Linux-IrDA */
230214455Srpaulo
231214455Srpaulo/*
232214455Srpaulo * Reserved for IBM SP switch and IBM Next Federation switch.
233214455Srpaulo */
234214455Srpaulo#define LINKTYPE_IBM_SP		145
235214455Srpaulo#define LINKTYPE_IBM_SN		146
236214455Srpaulo
237214455Srpaulo/*
238214455Srpaulo * Reserved for private use.  If you have some link-layer header type
239214455Srpaulo * that you want to use within your organization, with the capture files
240214455Srpaulo * using that link-layer header type not ever be sent outside your
241214455Srpaulo * organization, you can use these values.
242214455Srpaulo *
243214455Srpaulo * No libpcap release will use these for any purpose, nor will any
244214455Srpaulo * tcpdump release use them, either.
245214455Srpaulo *
246214455Srpaulo * Do *NOT* use these in capture files that you expect anybody not using
247214455Srpaulo * your private versions of capture-file-reading tools to read; in
248214455Srpaulo * particular, do *NOT* use them in products, otherwise you may find that
249214455Srpaulo * people won't be able to use tcpdump, or snort, or Ethereal, or... to
250214455Srpaulo * read capture files from your firewall/intrusion detection/traffic
251214455Srpaulo * monitoring/etc. appliance, or whatever product uses that LINKTYPE_ value,
252214455Srpaulo * and you may also find that the developers of those applications will
253214455Srpaulo * not accept patches to let them read those files.
254214455Srpaulo *
255214455Srpaulo * Also, do not use them if somebody might send you a capture using them
256214455Srpaulo * for *their* private type and tools using them for *your* private type
257214455Srpaulo * would have to read them.
258214455Srpaulo *
259214455Srpaulo * Instead, in those cases, ask "tcpdump-workers@lists.tcpdump.org" for a
260214455Srpaulo * new DLT_ and LINKTYPE_ value, as per the comment in pcap/bpf.h, and use
261214455Srpaulo * the type you're given.
262214455Srpaulo */
263214455Srpaulo#define LINKTYPE_USER0		147
264214455Srpaulo#define LINKTYPE_USER1		148
265214455Srpaulo#define LINKTYPE_USER2		149
266214455Srpaulo#define LINKTYPE_USER3		150
267214455Srpaulo#define LINKTYPE_USER4		151
268214455Srpaulo#define LINKTYPE_USER5		152
269214455Srpaulo#define LINKTYPE_USER6		153
270214455Srpaulo#define LINKTYPE_USER7		154
271214455Srpaulo#define LINKTYPE_USER8		155
272214455Srpaulo#define LINKTYPE_USER9		156
273214455Srpaulo#define LINKTYPE_USER10		157
274214455Srpaulo#define LINKTYPE_USER11		158
275214455Srpaulo#define LINKTYPE_USER12		159
276214455Srpaulo#define LINKTYPE_USER13		160
277214455Srpaulo#define LINKTYPE_USER14		161
278214455Srpaulo#define LINKTYPE_USER15		162
279214455Srpaulo
280214455Srpaulo/*
281214455Srpaulo * For future use with 802.11 captures - defined by AbsoluteValue
282214455Srpaulo * Systems to store a number of bits of link-layer information
283214455Srpaulo * including radio information:
284214455Srpaulo *
285214455Srpaulo *	http://www.shaftnet.org/~pizza/software/capturefrm.txt
286214455Srpaulo *
287214455Srpaulo * but could and arguably should also be used by non-AVS Linux
288214455Srpaulo * 802.11 drivers; that may happen in the future.
289214455Srpaulo */
290214455Srpaulo#define LINKTYPE_IEEE802_11_RADIO_AVS 163	/* 802.11 plus AVS radio header */
291214455Srpaulo
292214455Srpaulo/*
293214455Srpaulo * Juniper-private data link type, as per request from
294214455Srpaulo * Hannes Gredler <hannes@juniper.net>.  The corresponding
295214455Srpaulo * DLT_s are used for passing on chassis-internal
296214455Srpaulo * metainformation such as QOS profiles, etc..
297214455Srpaulo */
298214455Srpaulo#define LINKTYPE_JUNIPER_MONITOR 164
299214455Srpaulo
300214455Srpaulo/*
301214455Srpaulo * Reserved for BACnet MS/TP.
302214455Srpaulo */
303214455Srpaulo#define LINKTYPE_BACNET_MS_TP	165
304214455Srpaulo
305214455Srpaulo/*
306214455Srpaulo * Another PPP variant as per request from Karsten Keil <kkeil@suse.de>.
307214455Srpaulo *
308214455Srpaulo * This is used in some OSes to allow a kernel socket filter to distinguish
309214455Srpaulo * between incoming and outgoing packets, on a socket intended to
310214455Srpaulo * supply pppd with outgoing packets so it can do dial-on-demand and
311214455Srpaulo * hangup-on-lack-of-demand; incoming packets are filtered out so they
312214455Srpaulo * don't cause pppd to hold the connection up (you don't want random
313214455Srpaulo * input packets such as port scans, packets from old lost connections,
314214455Srpaulo * etc. to force the connection to stay up).
315214455Srpaulo *
316214455Srpaulo * The first byte of the PPP header (0xff03) is modified to accomodate
317214455Srpaulo * the direction - 0x00 = IN, 0x01 = OUT.
318214455Srpaulo */
319214455Srpaulo#define LINKTYPE_PPP_PPPD	166
320214455Srpaulo
321214455Srpaulo/*
322214455Srpaulo * Juniper-private data link type, as per request from
323214455Srpaulo * Hannes Gredler <hannes@juniper.net>.  The DLT_s are used
324214455Srpaulo * for passing on chassis-internal metainformation such as
325214455Srpaulo * QOS profiles, cookies, etc..
326214455Srpaulo */
327214455Srpaulo#define LINKTYPE_JUNIPER_PPPOE     167
328214455Srpaulo#define LINKTYPE_JUNIPER_PPPOE_ATM 168
329214455Srpaulo
330214455Srpaulo#define LINKTYPE_GPRS_LLC	169		/* GPRS LLC */
331214455Srpaulo#define LINKTYPE_GPF_T		170		/* GPF-T (ITU-T G.7041/Y.1303) */
332214455Srpaulo#define LINKTYPE_GPF_F		171		/* GPF-T (ITU-T G.7041/Y.1303) */
333214455Srpaulo
334214455Srpaulo/*
335214455Srpaulo * Requested by Oolan Zimmer <oz@gcom.com> for use in Gcom's T1/E1 line
336214455Srpaulo * monitoring equipment.
337214455Srpaulo */
338214455Srpaulo#define LINKTYPE_GCOM_T1E1	172
339214455Srpaulo#define LINKTYPE_GCOM_SERIAL	173
340214455Srpaulo
341214455Srpaulo/*
342214455Srpaulo * Juniper-private data link type, as per request from
343214455Srpaulo * Hannes Gredler <hannes@juniper.net>.  The DLT_ is used
344214455Srpaulo * for internal communication to Physical Interface Cards (PIC)
345214455Srpaulo */
346214455Srpaulo#define LINKTYPE_JUNIPER_PIC_PEER    174
347214455Srpaulo
348214455Srpaulo/*
349214455Srpaulo * Link types requested by Gregor Maier <gregor@endace.com> of Endace
350214455Srpaulo * Measurement Systems.  They add an ERF header (see
351214455Srpaulo * http://www.endace.com/support/EndaceRecordFormat.pdf) in front of
352214455Srpaulo * the link-layer header.
353214455Srpaulo */
354214455Srpaulo#define LINKTYPE_ERF_ETH	175	/* Ethernet */
355214455Srpaulo#define LINKTYPE_ERF_POS	176	/* Packet-over-SONET */
356214455Srpaulo
357214455Srpaulo/*
358214455Srpaulo * Requested by Daniele Orlandi <daniele@orlandi.com> for raw LAPD
359214455Srpaulo * for vISDN (http://www.orlandi.com/visdn/).  Its link-layer header
360214455Srpaulo * includes additional information before the LAPD header, so it's
361214455Srpaulo * not necessarily a generic LAPD header.
362214455Srpaulo */
363214455Srpaulo#define LINKTYPE_LINUX_LAPD	177
364214455Srpaulo
365214455Srpaulo/*
366214455Srpaulo * Juniper-private data link type, as per request from
367214455Srpaulo * Hannes Gredler <hannes@juniper.net>.
368214455Srpaulo * The Link Types are used for prepending meta-information
369214455Srpaulo * like interface index, interface name
370214455Srpaulo * before standard Ethernet, PPP, Frelay & C-HDLC Frames
371214455Srpaulo */
372214455Srpaulo#define LINKTYPE_JUNIPER_ETHER  178
373214455Srpaulo#define LINKTYPE_JUNIPER_PPP    179
374214455Srpaulo#define LINKTYPE_JUNIPER_FRELAY 180
375214455Srpaulo#define LINKTYPE_JUNIPER_CHDLC  181
376214455Srpaulo
377214455Srpaulo/*
378214455Srpaulo * Multi Link Frame Relay (FRF.16)
379214455Srpaulo */
380214455Srpaulo#define LINKTYPE_MFR            182
381214455Srpaulo
382214455Srpaulo/*
383214455Srpaulo * Juniper-private data link type, as per request from
384214455Srpaulo * Hannes Gredler <hannes@juniper.net>.
385214455Srpaulo * The DLT_ is used for internal communication with a
386214455Srpaulo * voice Adapter Card (PIC)
387214455Srpaulo */
388214455Srpaulo#define LINKTYPE_JUNIPER_VP     183
389214455Srpaulo
390214455Srpaulo/*
391214455Srpaulo * Arinc 429 frames.
392214455Srpaulo * DLT_ requested by Gianluca Varenni <gianluca.varenni@cacetech.com>.
393214455Srpaulo * Every frame contains a 32bit A429 label.
394214455Srpaulo * More documentation on Arinc 429 can be found at
395214455Srpaulo * http://www.condoreng.com/support/downloads/tutorials/ARINCTutorial.pdf
396214455Srpaulo */
397214455Srpaulo#define LINKTYPE_A429           184
398214455Srpaulo
399214455Srpaulo/*
400214455Srpaulo * Arinc 653 Interpartition Communication messages.
401214455Srpaulo * DLT_ requested by Gianluca Varenni <gianluca.varenni@cacetech.com>.
402214455Srpaulo * Please refer to the A653-1 standard for more information.
403214455Srpaulo */
404214455Srpaulo#define LINKTYPE_A653_ICM       185
405214455Srpaulo
406214455Srpaulo/*
407214455Srpaulo * USB packets, beginning with a USB setup header; requested by
408214455Srpaulo * Paolo Abeni <paolo.abeni@email.it>.
409214455Srpaulo */
410214455Srpaulo#define LINKTYPE_USB		186
411214455Srpaulo
412214455Srpaulo/*
413214455Srpaulo * Bluetooth HCI UART transport layer (part H:4); requested by
414214455Srpaulo * Paolo Abeni.
415214455Srpaulo */
416214455Srpaulo#define LINKTYPE_BLUETOOTH_HCI_H4	187
417214455Srpaulo
418214455Srpaulo/*
419214455Srpaulo * IEEE 802.16 MAC Common Part Sublayer; requested by Maria Cruz
420214455Srpaulo * <cruz_petagay@bah.com>.
421214455Srpaulo */
422214455Srpaulo#define LINKTYPE_IEEE802_16_MAC_CPS	188
423214455Srpaulo
424214455Srpaulo/*
425214455Srpaulo * USB packets, beginning with a Linux USB header; requested by
426214455Srpaulo * Paolo Abeni <paolo.abeni@email.it>.
427214455Srpaulo */
428214455Srpaulo#define LINKTYPE_USB_LINUX		189
429214455Srpaulo
430214455Srpaulo/*
431214455Srpaulo * Controller Area Network (CAN) v. 2.0B packets.
432214455Srpaulo * DLT_ requested by Gianluca Varenni <gianluca.varenni@cacetech.com>.
433214455Srpaulo * Used to dump CAN packets coming from a CAN Vector board.
434214455Srpaulo * More documentation on the CAN v2.0B frames can be found at
435214455Srpaulo * http://www.can-cia.org/downloads/?269
436214455Srpaulo */
437214455Srpaulo#define LINKTYPE_CAN20B         190
438214455Srpaulo
439214455Srpaulo/*
440214455Srpaulo * IEEE 802.15.4, with address fields padded, as is done by Linux
441214455Srpaulo * drivers; requested by Juergen Schimmer.
442214455Srpaulo */
443214455Srpaulo#define LINKTYPE_IEEE802_15_4_LINUX	191
444214455Srpaulo
445214455Srpaulo/*
446214455Srpaulo * Per Packet Information encapsulated packets.
447214455Srpaulo * LINKTYPE_ requested by Gianluca Varenni <gianluca.varenni@cacetech.com>.
448214455Srpaulo */
449214455Srpaulo#define LINKTYPE_PPI			192
450214455Srpaulo
451214455Srpaulo/*
452214455Srpaulo * Header for 802.16 MAC Common Part Sublayer plus a radiotap radio header;
453214455Srpaulo * requested by Charles Clancy.
454214455Srpaulo */
455214455Srpaulo#define LINKTYPE_IEEE802_16_MAC_CPS_RADIO	193
456214455Srpaulo
457214455Srpaulo/*
458214455Srpaulo * Juniper-private data link type, as per request from
459214455Srpaulo * Hannes Gredler <hannes@juniper.net>.
460214455Srpaulo * The DLT_ is used for internal communication with a
461214455Srpaulo * integrated service module (ISM).
462214455Srpaulo */
463214455Srpaulo#define LINKTYPE_JUNIPER_ISM    194
464214455Srpaulo
465214455Srpaulo/*
466214455Srpaulo * IEEE 802.15.4, exactly as it appears in the spec (no padding, no
467214455Srpaulo * nothing); requested by Mikko Saarnivala <mikko.saarnivala@sensinode.com>.
468214455Srpaulo */
469214455Srpaulo#define LINKTYPE_IEEE802_15_4	195
470214455Srpaulo
471214455Srpaulo/*
472214455Srpaulo * Various link-layer types, with a pseudo-header, for SITA
473214455Srpaulo * (http://www.sita.aero/); requested by Fulko Hew (fulko.hew@gmail.com).
474214455Srpaulo */
475214455Srpaulo#define LINKTYPE_SITA		196
476214455Srpaulo
477214455Srpaulo/*
478214455Srpaulo * Various link-layer types, with a pseudo-header, for Endace DAG cards;
479214455Srpaulo * encapsulates Endace ERF records.  Requested by Stephen Donnelly
480214455Srpaulo * <stephen@endace.com>.
481214455Srpaulo */
482214455Srpaulo#define LINKTYPE_ERF		197
483214455Srpaulo
484214455Srpaulo/*
485214455Srpaulo * Special header prepended to Ethernet packets when capturing from a
486214455Srpaulo * u10 Networks board.  Requested by Phil Mulholland
487214455Srpaulo * <phil@u10networks.com>.
488214455Srpaulo */
489214455Srpaulo#define LINKTYPE_RAIF1		198
490214455Srpaulo
491214455Srpaulo/*
492214455Srpaulo * IPMB packet for IPMI, beginning with the I2C slave address, followed
493214455Srpaulo * by the netFn and LUN, etc..  Requested by Chanthy Toeung
494214455Srpaulo * <chanthy.toeung@ca.kontron.com>.
495214455Srpaulo */
496214455Srpaulo#define LINKTYPE_IPMB		199
497214455Srpaulo
498214455Srpaulo/*
499214455Srpaulo * Juniper-private data link type, as per request from
500214455Srpaulo * Hannes Gredler <hannes@juniper.net>.
501214455Srpaulo * The DLT_ is used for capturing data on a secure tunnel interface.
502214455Srpaulo */
503214455Srpaulo#define LINKTYPE_JUNIPER_ST     200
504214455Srpaulo
505214455Srpaulo/*
506214455Srpaulo * Bluetooth HCI UART transport layer (part H:4), with pseudo-header
507214455Srpaulo * that includes direction information; requested by Paolo Abeni.
508214455Srpaulo */
509214455Srpaulo#define LINKTYPE_BLUETOOTH_HCI_H4_WITH_PHDR	201
510214455Srpaulo
511214455Srpaulo/*
512214455Srpaulo * AX.25 packet with a 1-byte KISS header; see
513214455Srpaulo *
514214455Srpaulo *	http://www.ax25.net/kiss.htm
515214455Srpaulo *
516214455Srpaulo * as per Richard Stearn <richard@rns-stearn.demon.co.uk>.
517214455Srpaulo */
518214455Srpaulo#define LINKTYPE_AX25_KISS	202
519214455Srpaulo
520214455Srpaulo/*
521214455Srpaulo * LAPD packets from an ISDN channel, starting with the address field,
522214455Srpaulo * with no pseudo-header.
523214455Srpaulo * Requested by Varuna De Silva <varunax@gmail.com>.
524214455Srpaulo */
525214455Srpaulo#define LINKTYPE_LAPD		203
526214455Srpaulo
527214455Srpaulo/*
528214455Srpaulo * Variants of various link-layer headers, with a one-byte direction
529214455Srpaulo * pseudo-header prepended - zero means "received by this host",
530214455Srpaulo * non-zero (any non-zero value) means "sent by this host" - as per
531214455Srpaulo * Will Barker <w.barker@zen.co.uk>.
532214455Srpaulo */
533214455Srpaulo#define LINKTYPE_PPP_WITH_DIR	204	/* PPP */
534214455Srpaulo#define LINKTYPE_C_HDLC_WITH_DIR 205	/* Cisco HDLC */
535214455Srpaulo#define LINKTYPE_FRELAY_WITH_DIR 206	/* Frame Relay */
536214455Srpaulo#define LINKTYPE_LAPB_WITH_DIR	207	/* LAPB */
537214455Srpaulo
538214455Srpaulo/*
539214455Srpaulo * 208 is reserved for an as-yet-unspecified proprietary link-layer
540214455Srpaulo * type, as requested by Will Barker.
541214455Srpaulo */
542214455Srpaulo
543214455Srpaulo/*
544214455Srpaulo * IPMB with a Linux-specific pseudo-header; as requested by Alexey Neyman
545214455Srpaulo * <avn@pigeonpoint.com>.
546214455Srpaulo */
547214455Srpaulo#define LINKTYPE_IPMB_LINUX		209
548214455Srpaulo
549214455Srpaulo/*
550214455Srpaulo * FlexRay automotive bus - http://www.flexray.com/ - as requested
551214455Srpaulo * by Hannes Kaelber <hannes.kaelber@x2e.de>.
552214455Srpaulo */
553214455Srpaulo#define LINKTYPE_FLEXRAY		210
554214455Srpaulo
555214455Srpaulo/*
556214455Srpaulo * Media Oriented Systems Transport (MOST) bus for multimedia
557214455Srpaulo * transport - http://www.mostcooperation.com/ - as requested
558214455Srpaulo * by Hannes Kaelber <hannes.kaelber@x2e.de>.
559214455Srpaulo */
560214455Srpaulo#define LINKTYPE_MOST			211
561214455Srpaulo
562214455Srpaulo/*
563214455Srpaulo * Local Interconnect Network (LIN) bus for vehicle networks -
564214455Srpaulo * http://www.lin-subbus.org/ - as requested by Hannes Kaelber
565214455Srpaulo * <hannes.kaelber@x2e.de>.
566214455Srpaulo */
567214455Srpaulo#define LINKTYPE_LIN			212
568214455Srpaulo
569214455Srpaulo/*
570214455Srpaulo * X2E-private data link type used for serial line capture,
571214455Srpaulo * as requested by Hannes Kaelber <hannes.kaelber@x2e.de>.
572214455Srpaulo */
573214455Srpaulo#define LINKTYPE_X2E_SERIAL		213
574214455Srpaulo
575214455Srpaulo/*
576214455Srpaulo * X2E-private data link type used for the Xoraya data logger
577214455Srpaulo * family, as requested by Hannes Kaelber <hannes.kaelber@x2e.de>.
578214455Srpaulo */
579214455Srpaulo#define LINKTYPE_X2E_XORAYA		214
580214455Srpaulo
581214455Srpaulo/*
582214455Srpaulo * IEEE 802.15.4, exactly as it appears in the spec (no padding, no
583214455Srpaulo * nothing), but with the PHY-level data for non-ASK PHYs (4 octets
584214455Srpaulo * of 0 as preamble, one octet of SFD, one octet of frame length+
585214455Srpaulo * reserved bit, and then the MAC-layer data, starting with the
586214455Srpaulo * frame control field).
587214455Srpaulo *
588214455Srpaulo * Requested by Max Filippov <jcmvbkbc@gmail.com>.
589214455Srpaulo */
590214455Srpaulo#define LINKTYPE_IEEE802_15_4_NONASK_PHY	215
591214455Srpaulo
592214455Srpaulo/*
593214455Srpaulo * David Gibson <david@gibson.dropbear.id.au> requested this for
594214455Srpaulo * captures from the Linux kernel /dev/input/eventN devices. This
595214455Srpaulo * is used to communicate keystrokes and mouse movements from the
596214455Srpaulo * Linux kernel to display systems, such as Xorg.
597214455Srpaulo */
598214455Srpaulo#define LINKTYPE_LINUX_EVDEV			216
599214455Srpaulo
600214455Srpaulo/*
601214455Srpaulo * GSM Um and Abis interfaces, preceded by a "gsmtap" header.
602214455Srpaulo *
603214455Srpaulo * Requested by Harald Welte <laforge@gnumonks.org>.
604214455Srpaulo */
605214455Srpaulo#define LINKTYPE_GSMTAP_UM			217
606214455Srpaulo#define LINKTYPE_GSMTAP_ABIS			218
607214455Srpaulo
608214455Srpaulo/*
609214455Srpaulo * MPLS, with an MPLS label as the link-layer header.
610214455Srpaulo * Requested by Michele Marchetto <michele@openbsd.org> on behalf
611214455Srpaulo * of OpenBSD.
612214455Srpaulo */
613214455Srpaulo#define LINKTYPE_MPLS				219
614214455Srpaulo
615214455Srpaulo/*
616214455Srpaulo * USB packets, beginning with a Linux USB header, with the USB header
617214455Srpaulo * padded to 64 bytes; required for memory-mapped access.
618214455Srpaulo */
619214455Srpaulo#define LINKTYPE_USB_LINUX_MMAPPED		220
620214455Srpaulo
621214455Srpaulo/*
622214455Srpaulo * DECT packets, with a pseudo-header; requested by
623214455Srpaulo * Matthias Wenzel <tcpdump@mazzoo.de>.
624214455Srpaulo */
625214455Srpaulo#define LINKTYPE_DECT				221
626214455Srpaulo
627214455Srpaulo/*
628214455Srpaulo * From: "Lidwa, Eric (GSFC-582.0)[SGT INC]" <eric.lidwa-1@nasa.gov>
629214455Srpaulo * Date: Mon, 11 May 2009 11:18:30 -0500
630214455Srpaulo *
631214455Srpaulo * DLT_AOS. We need it for AOS Space Data Link Protocol.
632214455Srpaulo *   I have already written dissectors for but need an OK from
633214455Srpaulo *   legal before I can submit a patch.
634214455Srpaulo *
635214455Srpaulo */
636214455Srpaulo#define LINKTYPE_AOS				222
637214455Srpaulo
638214455Srpaulo/*
639214455Srpaulo * Wireless HART (Highway Addressable Remote Transducer)
640214455Srpaulo * From the HART Communication Foundation
641214455Srpaulo * IES/PAS 62591
642214455Srpaulo *
643214455Srpaulo * Requested by Sam Roberts <vieuxtech@gmail.com>.
644214455Srpaulo */
645214455Srpaulo#define LINKTYPE_WIHART				223
646214455Srpaulo
647214455Srpaulo/*
648214455Srpaulo * Fibre Channel FC-2 frames, beginning with a Frame_Header.
649214455Srpaulo * Requested by Kahou Lei <kahou82@gmail.com>.
650214455Srpaulo */
651214455Srpaulo#define LINKTYPE_FC_2				224
652214455Srpaulo
653214455Srpaulo/*
654214455Srpaulo * Fibre Channel FC-2 frames, beginning with an encoding of the
655214455Srpaulo * SOF, and ending with an encoding of the EOF.
656214455Srpaulo *
657214455Srpaulo * The encodings represent the frame delimiters as 4-byte sequences
658214455Srpaulo * representing the corresponding ordered sets, with K28.5
659214455Srpaulo * represented as 0xBC, and the D symbols as the corresponding
660214455Srpaulo * byte values; for example, SOFi2, which is K28.5 - D21.5 - D1.2 - D21.2,
661214455Srpaulo * is represented as 0xBC 0xB5 0x55 0x55.
662214455Srpaulo *
663214455Srpaulo * Requested by Kahou Lei <kahou82@gmail.com>.
664214455Srpaulo */
665214455Srpaulo#define LINKTYPE_FC_2_WITH_FRAME_DELIMS		225
666214455Srpaulo
667214455Srpaulo/*
668214455Srpaulo * Solaris ipnet pseudo-header; requested by Darren Reed <Darren.Reed@Sun.COM>.
669214455Srpaulo *
670214455Srpaulo * The pseudo-header starts with a one-byte version number; for version 2,
671214455Srpaulo * the pseudo-header is:
672214455Srpaulo *
673214455Srpaulo * struct dl_ipnetinfo {
674214455Srpaulo *     u_int8_t   dli_version;
675214455Srpaulo *     u_int8_t   dli_family;
676214455Srpaulo *     u_int16_t  dli_htype;
677214455Srpaulo *     u_int32_t  dli_pktlen;
678214455Srpaulo *     u_int32_t  dli_ifindex;
679214455Srpaulo *     u_int32_t  dli_grifindex;
680214455Srpaulo *     u_int32_t  dli_zsrc;
681214455Srpaulo *     u_int32_t  dli_zdst;
682214455Srpaulo * };
683214455Srpaulo *
684214455Srpaulo * dli_version is 2 for the current version of the pseudo-header.
685214455Srpaulo *
686214455Srpaulo * dli_family is a Solaris address family value, so it's 2 for IPv4
687214455Srpaulo * and 26 for IPv6.
688214455Srpaulo *
689214455Srpaulo * dli_htype is a "hook type" - 0 for incoming packets, 1 for outgoing
690214455Srpaulo * packets, and 2 for packets arriving from another zone on the same
691214455Srpaulo * machine.
692214455Srpaulo *
693214455Srpaulo * dli_pktlen is the length of the packet data following the pseudo-header
694214455Srpaulo * (so the captured length minus dli_pktlen is the length of the
695214455Srpaulo * pseudo-header, assuming the entire pseudo-header was captured).
696214455Srpaulo *
697214455Srpaulo * dli_ifindex is the interface index of the interface on which the
698214455Srpaulo * packet arrived.
699214455Srpaulo *
700214455Srpaulo * dli_grifindex is the group interface index number (for IPMP interfaces).
701214455Srpaulo *
702214455Srpaulo * dli_zsrc is the zone identifier for the source of the packet.
703214455Srpaulo *
704214455Srpaulo * dli_zdst is the zone identifier for the destination of the packet.
705214455Srpaulo *
706214455Srpaulo * A zone number of 0 is the global zone; a zone number of 0xffffffff
707214455Srpaulo * means that the packet arrived from another host on the network, not
708214455Srpaulo * from another zone on the same machine.
709214455Srpaulo *
710214455Srpaulo * An IPv4 or IPv6 datagram follows the pseudo-header; dli_family indicates
711214455Srpaulo * which of those it is.
712214455Srpaulo */
713214455Srpaulo#define LINKTYPE_IPNET				226
714214455Srpaulo
715214455Srpaulo/*
716214455Srpaulo * CAN (Controller Area Network) frames, with a pseudo-header as supplied
717214455Srpaulo * by Linux SocketCAN.  See Documentation/networking/can.txt in the Linux
718214455Srpaulo * source.
719214455Srpaulo *
720214455Srpaulo * Requested by Felix Obenhuber <felix@obenhuber.de>.
721214455Srpaulo */
722214455Srpaulo#define LINKTYPE_CAN_SOCKETCAN			227
723214455Srpaulo
724214455Srpaulo/*
725214455Srpaulo * Raw IPv4/IPv6; different from DLT_RAW in that the DLT_ value specifies
726214455Srpaulo * whether it's v4 or v6.  Requested by Darren Reed <Darren.Reed@Sun.COM>.
727214455Srpaulo */
728214455Srpaulo#define LINKTYPE_IPV4				228
729214455Srpaulo#define LINKTYPE_IPV6				229
730214455Srpaulo
731214455Srpaulo
732214455Srpaulostatic struct linktype_map {
733214455Srpaulo	int	dlt;
734214455Srpaulo	int	linktype;
735214455Srpaulo} map[] = {
736214455Srpaulo	/*
737214455Srpaulo	 * These DLT_* codes have LINKTYPE_* codes with values identical
738214455Srpaulo	 * to the values of the corresponding DLT_* code.
739214455Srpaulo	 */
740214455Srpaulo	{ DLT_NULL,		LINKTYPE_NULL },
741214455Srpaulo	{ DLT_EN10MB,		LINKTYPE_ETHERNET },
742214455Srpaulo	{ DLT_EN3MB,		LINKTYPE_EXP_ETHERNET },
743214455Srpaulo	{ DLT_AX25,		LINKTYPE_AX25 },
744214455Srpaulo	{ DLT_PRONET,		LINKTYPE_PRONET },
745214455Srpaulo	{ DLT_CHAOS,		LINKTYPE_CHAOS },
746214455Srpaulo	{ DLT_IEEE802,		LINKTYPE_TOKEN_RING },
747214455Srpaulo	{ DLT_ARCNET,		LINKTYPE_ARCNET },
748214455Srpaulo	{ DLT_SLIP,		LINKTYPE_SLIP },
749214455Srpaulo	{ DLT_PPP,		LINKTYPE_PPP },
750214455Srpaulo	{ DLT_FDDI,	 	LINKTYPE_FDDI },
751214455Srpaulo
752214455Srpaulo	/*
753214455Srpaulo	 * These DLT_* codes have different values on different
754214455Srpaulo	 * platforms; we map them to LINKTYPE_* codes that
755214455Srpaulo	 * have values that should never be equal to any DLT_*
756214455Srpaulo	 * code.
757214455Srpaulo	 */
758214455Srpaulo#ifdef DLT_FR
759214455Srpaulo	/* BSD/OS Frame Relay */
760214455Srpaulo	{ DLT_FR,		LINKTYPE_FRELAY },
761214455Srpaulo#endif
762214455Srpaulo
763214455Srpaulo	{ DLT_SYMANTEC_FIREWALL, LINKTYPE_SYMANTEC_FIREWALL },
764214455Srpaulo	{ DLT_ATM_RFC1483, 	LINKTYPE_ATM_RFC1483 },
765214455Srpaulo	{ DLT_RAW,		LINKTYPE_RAW },
766214455Srpaulo	{ DLT_SLIP_BSDOS,	LINKTYPE_SLIP_BSDOS },
767214455Srpaulo	{ DLT_PPP_BSDOS,	LINKTYPE_PPP_BSDOS },
768214455Srpaulo
769214455Srpaulo	/* BSD/OS Cisco HDLC */
770214455Srpaulo	{ DLT_C_HDLC,		LINKTYPE_C_HDLC },
771214455Srpaulo
772214455Srpaulo	/*
773214455Srpaulo	 * These DLT_* codes are not on all platforms, but, so far,
774214455Srpaulo	 * there don't appear to be any platforms that define
775214455Srpaulo	 * other codes with those values; we map them to
776214455Srpaulo	 * different LINKTYPE_* values anyway, just in case.
777214455Srpaulo	 */
778214455Srpaulo
779214455Srpaulo	/* Linux ATM Classical IP */
780214455Srpaulo	{ DLT_ATM_CLIP,		LINKTYPE_ATM_CLIP },
781214455Srpaulo
782214455Srpaulo	/* NetBSD sync/async serial PPP (or Cisco HDLC) */
783214455Srpaulo	{ DLT_PPP_SERIAL,	LINKTYPE_PPP_HDLC },
784214455Srpaulo
785214455Srpaulo	/* NetBSD PPP over Ethernet */
786214455Srpaulo	{ DLT_PPP_ETHER,	LINKTYPE_PPP_ETHER },
787214455Srpaulo
788214455Srpaulo	/* IEEE 802.11 wireless */
789214455Srpaulo	{ DLT_IEEE802_11,	LINKTYPE_IEEE802_11 },
790214455Srpaulo
791214455Srpaulo	/* Frame Relay */
792214455Srpaulo	{ DLT_FRELAY,		LINKTYPE_FRELAY },
793214455Srpaulo
794214455Srpaulo	/* OpenBSD loopback */
795214455Srpaulo	{ DLT_LOOP,		LINKTYPE_LOOP },
796214455Srpaulo
797214455Srpaulo	/* OpenBSD IPSEC enc */
798214455Srpaulo	{ DLT_ENC,		LINKTYPE_ENC },
799214455Srpaulo
800214455Srpaulo	/* Linux cooked socket capture */
801214455Srpaulo	{ DLT_LINUX_SLL,	LINKTYPE_LINUX_SLL },
802214455Srpaulo
803214455Srpaulo	/* Apple LocalTalk hardware */
804214455Srpaulo	{ DLT_LTALK,		LINKTYPE_LTALK },
805214455Srpaulo
806214455Srpaulo	/* Acorn Econet */
807214455Srpaulo	{ DLT_ECONET,		LINKTYPE_ECONET },
808214455Srpaulo
809214455Srpaulo	/* OpenBSD DLT_PFLOG */
810214455Srpaulo	{ DLT_PFLOG,		LINKTYPE_PFLOG },
811214455Srpaulo
812214455Srpaulo	/* For Cisco-internal use */
813214455Srpaulo	{ DLT_CISCO_IOS,	LINKTYPE_CISCO_IOS },
814214455Srpaulo
815214455Srpaulo	/* Prism II monitor-mode header plus 802.11 header */
816214455Srpaulo	{ DLT_PRISM_HEADER,	LINKTYPE_PRISM_HEADER },
817214455Srpaulo
818214455Srpaulo	/* FreeBSD Aironet driver stuff */
819214455Srpaulo	{ DLT_AIRONET_HEADER,	LINKTYPE_AIRONET_HEADER },
820214455Srpaulo
821214455Srpaulo	/* Siemens HiPath HDLC */
822214455Srpaulo	{ DLT_HHDLC,		LINKTYPE_HHDLC },
823214455Srpaulo
824214455Srpaulo	/* RFC 2625 IP-over-Fibre Channel */
825214455Srpaulo	{ DLT_IP_OVER_FC,	LINKTYPE_IP_OVER_FC },
826214455Srpaulo
827214455Srpaulo	/* Solaris+SunATM */
828214455Srpaulo	{ DLT_SUNATM,		LINKTYPE_SUNATM },
829214455Srpaulo
830214455Srpaulo	/* RapidIO */
831214455Srpaulo	{ DLT_RIO,		LINKTYPE_RIO },
832214455Srpaulo
833214455Srpaulo	/* PCI Express */
834214455Srpaulo	{ DLT_PCI_EXP,		LINKTYPE_PCI_EXP },
835214455Srpaulo
836214455Srpaulo	/* Xilinx Aurora link layer */
837214455Srpaulo	{ DLT_AURORA,		LINKTYPE_AURORA },
838214455Srpaulo
839214455Srpaulo	/* 802.11 plus BSD radio header */
840214455Srpaulo	{ DLT_IEEE802_11_RADIO,	LINKTYPE_IEEE802_11_RADIO },
841214455Srpaulo
842214455Srpaulo	/* Tazmen Sniffer Protocol */
843214455Srpaulo	{ DLT_TZSP,		LINKTYPE_TZSP },
844214455Srpaulo
845214455Srpaulo	/* Arcnet with Linux-style link-layer headers */
846214455Srpaulo	{ DLT_ARCNET_LINUX,	LINKTYPE_ARCNET_LINUX },
847214455Srpaulo
848214455Srpaulo        /* Juniper-internal chassis encapsulation */
849214455Srpaulo        { DLT_JUNIPER_MLPPP,    LINKTYPE_JUNIPER_MLPPP },
850214455Srpaulo        { DLT_JUNIPER_MLFR,     LINKTYPE_JUNIPER_MLFR },
851214455Srpaulo        { DLT_JUNIPER_ES,       LINKTYPE_JUNIPER_ES },
852214455Srpaulo        { DLT_JUNIPER_GGSN,     LINKTYPE_JUNIPER_GGSN },
853214455Srpaulo        { DLT_JUNIPER_MFR,      LINKTYPE_JUNIPER_MFR },
854214455Srpaulo        { DLT_JUNIPER_ATM2,     LINKTYPE_JUNIPER_ATM2 },
855214455Srpaulo        { DLT_JUNIPER_SERVICES, LINKTYPE_JUNIPER_SERVICES },
856214455Srpaulo        { DLT_JUNIPER_ATM1,     LINKTYPE_JUNIPER_ATM1 },
857214455Srpaulo
858214455Srpaulo	/* Apple IP-over-IEEE 1394 cooked header */
859214455Srpaulo	{ DLT_APPLE_IP_OVER_IEEE1394, LINKTYPE_APPLE_IP_OVER_IEEE1394 },
860214455Srpaulo
861214455Srpaulo	/* SS7 */
862214455Srpaulo	{ DLT_MTP2_WITH_PHDR,	LINKTYPE_MTP2_WITH_PHDR },
863214455Srpaulo	{ DLT_MTP2,		LINKTYPE_MTP2 },
864214455Srpaulo	{ DLT_MTP3,		LINKTYPE_MTP3 },
865214455Srpaulo	{ DLT_SCCP,		LINKTYPE_SCCP },
866214455Srpaulo
867214455Srpaulo	/* DOCSIS MAC frames */
868214455Srpaulo	{ DLT_DOCSIS,		LINKTYPE_DOCSIS },
869214455Srpaulo
870214455Srpaulo	/* IrDA IrLAP packets + Linux-cooked header */
871214455Srpaulo	{ DLT_LINUX_IRDA,	LINKTYPE_LINUX_IRDA },
872214455Srpaulo
873214455Srpaulo	/* IBM SP and Next Federation switches */
874214455Srpaulo	{ DLT_IBM_SP,		LINKTYPE_IBM_SP },
875214455Srpaulo	{ DLT_IBM_SN,		LINKTYPE_IBM_SN },
876214455Srpaulo
877214455Srpaulo	/* 802.11 plus AVS radio header */
878214455Srpaulo	{ DLT_IEEE802_11_RADIO_AVS, LINKTYPE_IEEE802_11_RADIO_AVS },
879214455Srpaulo
880214455Srpaulo	/*
881214455Srpaulo	 * Any platform that defines additional DLT_* codes should:
882214455Srpaulo	 *
883214455Srpaulo	 *	request a LINKTYPE_* code and value from tcpdump.org,
884214455Srpaulo	 *	as per the above;
885214455Srpaulo	 *
886214455Srpaulo	 *	add, in their version of libpcap, an entry to map
887214455Srpaulo	 *	those DLT_* codes to the corresponding LINKTYPE_*
888214455Srpaulo	 *	code;
889214455Srpaulo	 *
890214455Srpaulo	 *	redefine, in their "net/bpf.h", any DLT_* values
891214455Srpaulo	 *	that collide with the values used by their additional
892214455Srpaulo	 *	DLT_* codes, to remove those collisions (but without
893214455Srpaulo	 *	making them collide with any of the LINKTYPE_*
894214455Srpaulo	 *	values equal to 50 or above; they should also avoid
895214455Srpaulo	 *	defining DLT_* values that collide with those
896214455Srpaulo	 *	LINKTYPE_* values, either).
897214455Srpaulo	 */
898214455Srpaulo
899214455Srpaulo	/* Juniper-internal chassis encapsulation */
900214455Srpaulo	{ DLT_JUNIPER_MONITOR,	LINKTYPE_JUNIPER_MONITOR },
901214455Srpaulo
902214455Srpaulo	/* BACnet MS/TP */
903214455Srpaulo	{ DLT_BACNET_MS_TP,	LINKTYPE_BACNET_MS_TP },
904214455Srpaulo
905214455Srpaulo	/* PPP for pppd, with direction flag in the PPP header */
906214455Srpaulo	{ DLT_PPP_PPPD,		LINKTYPE_PPP_PPPD},
907214455Srpaulo
908214455Srpaulo	/* Juniper-internal chassis encapsulation */
909214455Srpaulo        { DLT_JUNIPER_PPPOE,    LINKTYPE_JUNIPER_PPPOE },
910214455Srpaulo        { DLT_JUNIPER_PPPOE_ATM,LINKTYPE_JUNIPER_PPPOE_ATM },
911214455Srpaulo
912214455Srpaulo	/* GPRS LLC */
913214455Srpaulo	{ DLT_GPRS_LLC,		LINKTYPE_GPRS_LLC },
914214455Srpaulo
915214455Srpaulo	/* Transparent Generic Framing Procedure (ITU-T G.7041/Y.1303) */
916214455Srpaulo	{ DLT_GPF_T,		LINKTYPE_GPF_T },
917214455Srpaulo
918214455Srpaulo	/* Framed Generic Framing Procedure (ITU-T G.7041/Y.1303) */
919214455Srpaulo	{ DLT_GPF_F,		LINKTYPE_GPF_F },
920214455Srpaulo
921214455Srpaulo	{ DLT_GCOM_T1E1,	LINKTYPE_GCOM_T1E1 },
922214455Srpaulo	{ DLT_GCOM_SERIAL,	LINKTYPE_GCOM_SERIAL },
923214455Srpaulo
924214455Srpaulo        /* Juniper-internal chassis encapsulation */
925214455Srpaulo        { DLT_JUNIPER_PIC_PEER, LINKTYPE_JUNIPER_PIC_PEER },
926214455Srpaulo
927214455Srpaulo	/* Endace types */
928214455Srpaulo	{ DLT_ERF_ETH,		LINKTYPE_ERF_ETH },
929214455Srpaulo	{ DLT_ERF_POS,		LINKTYPE_ERF_POS },
930214455Srpaulo
931214455Srpaulo	/* viSDN LAPD */
932214455Srpaulo	{ DLT_LINUX_LAPD,	LINKTYPE_LINUX_LAPD },
933214455Srpaulo
934214455Srpaulo        /* Juniper meta-information before Ether, PPP, Frame Relay, C-HDLC Frames */
935214455Srpaulo        { DLT_JUNIPER_ETHER, LINKTYPE_JUNIPER_ETHER },
936214455Srpaulo        { DLT_JUNIPER_PPP, LINKTYPE_JUNIPER_PPP },
937214455Srpaulo        { DLT_JUNIPER_FRELAY, LINKTYPE_JUNIPER_FRELAY },
938214455Srpaulo        { DLT_JUNIPER_CHDLC, LINKTYPE_JUNIPER_CHDLC },
939214455Srpaulo
940214455Srpaulo        /* Multi Link Frame Relay (FRF.16) */
941214455Srpaulo        { DLT_MFR,              LINKTYPE_MFR },
942214455Srpaulo
943214455Srpaulo        /* Juniper Voice PIC */
944214455Srpaulo        { DLT_JUNIPER_VP,       LINKTYPE_JUNIPER_VP },
945214455Srpaulo
946214455Srpaulo	/* Controller Area Network (CAN) v2.0B */
947214455Srpaulo	{ DLT_A429,		LINKTYPE_A429 },
948214455Srpaulo
949214455Srpaulo	/* Arinc 653 Interpartition Communication messages */
950214455Srpaulo	{ DLT_A653_ICM,         LINKTYPE_A653_ICM },
951214455Srpaulo
952214455Srpaulo	/* USB */
953214455Srpaulo	{ DLT_USB,		LINKTYPE_USB },
954214455Srpaulo
955214455Srpaulo	/* Bluetooth HCI UART transport layer */
956214455Srpaulo	{ DLT_BLUETOOTH_HCI_H4,	LINKTYPE_BLUETOOTH_HCI_H4 },
957214455Srpaulo
958214455Srpaulo	/* IEEE 802.16 MAC Common Part Sublayer */
959214455Srpaulo	{ DLT_IEEE802_16_MAC_CPS,	LINKTYPE_IEEE802_16_MAC_CPS },
960214455Srpaulo
961214455Srpaulo	/* USB with Linux header */
962214455Srpaulo	{ DLT_USB_LINUX,	LINKTYPE_USB_LINUX },
963214455Srpaulo
964214455Srpaulo	/* Controller Area Network (CAN) v2.0B */
965214455Srpaulo	{ DLT_CAN20B,		LINKTYPE_CAN20B },
966214455Srpaulo
967214455Srpaulo	/* IEEE 802.15.4 with address fields padded */
968214455Srpaulo	{ DLT_IEEE802_15_4_LINUX,	LINKTYPE_IEEE802_15_4_LINUX },
969214455Srpaulo
970214455Srpaulo	/* Per Packet Information encapsulated packets */
971214455Srpaulo	{ DLT_PPI,			LINKTYPE_PPI },
972214455Srpaulo
973214455Srpaulo	/* IEEE 802.16 MAC Common Part Sublayer plus radiotap header */
974214455Srpaulo	{ DLT_IEEE802_16_MAC_CPS_RADIO, LINKTYPE_IEEE802_16_MAC_CPS_RADIO },
975214455Srpaulo
976214455Srpaulo        /* Juniper Voice ISM */
977214455Srpaulo        { DLT_JUNIPER_ISM,      LINKTYPE_JUNIPER_ISM },
978214455Srpaulo
979214455Srpaulo	/* IEEE 802.15.4 exactly as it appears in the spec */
980214455Srpaulo        { DLT_IEEE802_15_4,	LINKTYPE_IEEE802_15_4 },
981214455Srpaulo
982214455Srpaulo	/* Various link-layer types for SITA */
983214455Srpaulo	{ DLT_SITA,		LINKTYPE_SITA },
984214455Srpaulo
985214455Srpaulo	/* Various link-layer types for Endace */
986214455Srpaulo	{ DLT_ERF,		LINKTYPE_ERF },
987214455Srpaulo
988214455Srpaulo	/* Special header for u10 Networks boards */
989214455Srpaulo	{ DLT_RAIF1,		LINKTYPE_RAIF1 },
990214455Srpaulo
991214455Srpaulo	/* IPMB */
992214455Srpaulo	{ DLT_IPMB,		LINKTYPE_IPMB },
993214455Srpaulo
994214455Srpaulo        /* Juniper Secure Tunnel */
995214455Srpaulo        { DLT_JUNIPER_ST,       LINKTYPE_JUNIPER_ST },
996214455Srpaulo
997214455Srpaulo	/* Bluetooth HCI UART transport layer, with pseudo-header */
998214455Srpaulo	{ DLT_BLUETOOTH_HCI_H4_WITH_PHDR, LINKTYPE_BLUETOOTH_HCI_H4_WITH_PHDR },
999214455Srpaulo
1000214455Srpaulo	/* AX.25 with KISS header */
1001214455Srpaulo	{ DLT_AX25_KISS,	LINKTYPE_AX25_KISS },
1002214455Srpaulo
1003214455Srpaulo	/* Raw LAPD, with no pseudo-header */
1004214455Srpaulo	{ DLT_LAPD,		LINKTYPE_LAPD },
1005214455Srpaulo
1006214455Srpaulo	/* PPP with one-byte pseudo-header giving direction */
1007214455Srpaulo	{ DLT_PPP_WITH_DIR,	LINKTYPE_PPP_WITH_DIR },
1008214455Srpaulo
1009214455Srpaulo	/* Cisco HDLC with one-byte pseudo-header giving direction */
1010214455Srpaulo	{ DLT_C_HDLC_WITH_DIR,	LINKTYPE_C_HDLC_WITH_DIR },
1011214455Srpaulo
1012214455Srpaulo	/* Frame Relay with one-byte pseudo-header giving direction */
1013214455Srpaulo	{ DLT_FRELAY_WITH_DIR,	LINKTYPE_FRELAY_WITH_DIR },
1014214455Srpaulo
1015214455Srpaulo	/* LAPB with one-byte pseudo-header giving direction */
1016214455Srpaulo	{ DLT_LAPB_WITH_DIR,	LINKTYPE_LAPB_WITH_DIR },
1017214455Srpaulo
1018214455Srpaulo	/* IPMB with Linux pseudo-header */
1019214455Srpaulo	{ DLT_IPMB_LINUX,	LINKTYPE_IPMB_LINUX },
1020214455Srpaulo
1021214455Srpaulo	/* FlexRay */
1022214455Srpaulo	{ DLT_FLEXRAY,		LINKTYPE_FLEXRAY },
1023214455Srpaulo
1024214455Srpaulo	/* MOST */
1025214455Srpaulo	{ DLT_MOST,		LINKTYPE_MOST },
1026214455Srpaulo
1027214455Srpaulo	/* LIN */
1028214455Srpaulo	{ DLT_LIN,		LINKTYPE_LIN },
1029214455Srpaulo
1030214455Srpaulo	/* X2E-private serial line capture */
1031214455Srpaulo	{ DLT_X2E_SERIAL,	LINKTYPE_X2E_SERIAL },
1032214455Srpaulo
1033214455Srpaulo	/* X2E-private for Xoraya data logger family */
1034214455Srpaulo	{ DLT_X2E_XORAYA,	LINKTYPE_X2E_XORAYA },
1035214455Srpaulo
1036214455Srpaulo	/* IEEE 802.15.4 with PHY data for non-ASK PHYs */
1037214455Srpaulo	{ DLT_IEEE802_15_4_NONASK_PHY, LINKTYPE_IEEE802_15_4_NONASK_PHY },
1038214455Srpaulo
1039214455Srpaulo	/* Input device events from Linux /dev/input/eventN devices */
1040214455Srpaulo	{ DLT_LINUX_EVDEV,	LINKTYPE_LINUX_EVDEV },
1041214455Srpaulo
1042214455Srpaulo	/* GSM types */
1043214455Srpaulo	{ DLT_GSMTAP_UM,	LINKTYPE_GSMTAP_UM },
1044214455Srpaulo	{ DLT_GSMTAP_ABIS,	LINKTYPE_GSMTAP_ABIS },
1045214455Srpaulo
1046214455Srpaulo	/* MPLS, with an MPLS label as the link-layer header */
1047214455Srpaulo	{ DLT_MPLS,		LINKTYPE_MPLS },
1048214455Srpaulo
1049214455Srpaulo	/* USB with padded Linux header */
1050214455Srpaulo	{ DLT_USB_LINUX_MMAPPED, LINKTYPE_USB_LINUX_MMAPPED },
1051214455Srpaulo
1052214455Srpaulo	/* DECT packets with a pseudo-header */
1053214455Srpaulo	{ DLT_DECT,		LINKTYPE_DECT },
1054214455Srpaulo
1055214455Srpaulo	/* AOS Space Data Link Protocol */
1056214455Srpaulo	{ DLT_AOS,		LINKTYPE_AOS },
1057214455Srpaulo
1058214455Srpaulo	/* Wireless HART */
1059214455Srpaulo	{ DLT_WIHART,		LINKTYPE_WIHART },
1060214455Srpaulo
1061214455Srpaulo	/* Fibre Channel FC-2 frames without SOF or EOF */
1062214455Srpaulo	{ DLT_FC_2,		LINKTYPE_FC_2 },
1063214455Srpaulo
1064214455Srpaulo	/* Fibre Channel FC-2 frames with SOF and EOF */
1065214455Srpaulo	{ DLT_FC_2_WITH_FRAME_DELIMS, LINKTYPE_FC_2_WITH_FRAME_DELIMS },
1066214455Srpaulo
1067214455Srpaulo	/* Solaris IPNET */
1068214455Srpaulo	{ DLT_IPNET,		LINKTYPE_IPNET },
1069214455Srpaulo
1070214455Srpaulo	/* CAN frames with SocketCAN headers */
1071214455Srpaulo	{ DLT_CAN_SOCKETCAN,	LINKTYPE_CAN_SOCKETCAN },
1072214455Srpaulo
1073214455Srpaulo	/* Raw IPv4/IPv6 */
1074214455Srpaulo	{ DLT_IPV4,		LINKTYPE_IPV4 },
1075214455Srpaulo	{ DLT_IPV6,		LINKTYPE_IPV6 },
1076214455Srpaulo
1077214455Srpaulo	{ -1,			-1 }
1078214455Srpaulo};
1079214455Srpaulo
1080214455Srpauloint
1081214455Srpaulodlt_to_linktype(int dlt)
1082214455Srpaulo{
1083214455Srpaulo	int i;
1084214455Srpaulo
1085214455Srpaulo	for (i = 0; map[i].dlt != -1; i++) {
1086214455Srpaulo		if (map[i].dlt == dlt)
1087214455Srpaulo			return (map[i].linktype);
1088214455Srpaulo	}
1089214455Srpaulo
1090214455Srpaulo	/*
1091214455Srpaulo	 * If we don't have a mapping for this DLT_ code, return an
1092214455Srpaulo	 * error; that means that the table above needs to have an
1093214455Srpaulo	 * entry added.
1094214455Srpaulo	 */
1095214455Srpaulo	return (-1);
1096214455Srpaulo}
1097214455Srpaulo
1098214455Srpauloint
1099214455Srpaulolinktype_to_dlt(int linktype)
1100214455Srpaulo{
1101214455Srpaulo	int i;
1102214455Srpaulo
1103214455Srpaulo	for (i = 0; map[i].linktype != -1; i++) {
1104214455Srpaulo		if (map[i].linktype == linktype)
1105214455Srpaulo			return (map[i].dlt);
1106214455Srpaulo	}
1107214455Srpaulo
1108214455Srpaulo	/*
1109214455Srpaulo	 * If we don't have an entry for this link type, return
1110214455Srpaulo	 * the link type value; it may be a DLT_ value from an
1111214455Srpaulo	 * older version of libpcap.
1112214455Srpaulo	 */
1113214455Srpaulo	return linktype;
1114214455Srpaulo}
1115214455Srpaulo
1116214455Srpaulo/*
1117214455Srpaulo * The DLT_USB_LINUX and DLT_USB_LINUX_MMAPPED headers are in host
1118214455Srpaulo * byte order when capturing (it's supplied directly from a
1119214455Srpaulo * memory-mapped buffer shared by the kernel).
1120214455Srpaulo *
1121214455Srpaulo * When reading a DLT_USB_LINUX or DLT_USB_LINUX_MMAPPED capture file,
1122214455Srpaulo * we need to convert it from the capturing host's byte order to
1123214455Srpaulo * the reading host's byte order.
1124214455Srpaulo */
1125214455Srpaulovoid
1126214455Srpauloswap_linux_usb_header(const struct pcap_pkthdr *hdr, u_char *buf,
1127214455Srpaulo    int header_len_64_bytes)
1128214455Srpaulo{
1129214455Srpaulo	pcap_usb_header_mmapped *uhdr = (pcap_usb_header_mmapped *)buf;
1130214455Srpaulo
1131214455Srpaulo	/*
1132214455Srpaulo	 * The URB id is a totally opaque value; do we really need to
1133214455Srpaulo	 * convert it to the reading host's byte order???
1134214455Srpaulo	 */
1135214455Srpaulo	if (hdr->caplen < 8)
1136214455Srpaulo		return;
1137214455Srpaulo	uhdr->id = SWAPLL(uhdr->id);
1138214455Srpaulo	if (hdr->caplen < 14)
1139214455Srpaulo		return;
1140214455Srpaulo	uhdr->bus_id = SWAPSHORT(uhdr->bus_id);
1141214455Srpaulo	if (hdr->caplen < 24)
1142214455Srpaulo		return;
1143214455Srpaulo	uhdr->ts_sec = SWAPLL(uhdr->ts_sec);
1144214455Srpaulo	if (hdr->caplen < 28)
1145214455Srpaulo		return;
1146214455Srpaulo	uhdr->ts_usec = SWAPLONG(uhdr->ts_usec);
1147214455Srpaulo	if (hdr->caplen < 32)
1148214455Srpaulo		return;
1149214455Srpaulo	uhdr->status = SWAPLONG(uhdr->status);
1150214455Srpaulo	if (hdr->caplen < 36)
1151214455Srpaulo		return;
1152214455Srpaulo	uhdr->urb_len = SWAPLONG(uhdr->urb_len);
1153214455Srpaulo	if (hdr->caplen < 40)
1154214455Srpaulo		return;
1155214455Srpaulo	uhdr->data_len = SWAPLONG(uhdr->data_len);
1156214455Srpaulo
1157214455Srpaulo	if (header_len_64_bytes) {
1158214455Srpaulo		/*
1159214455Srpaulo		 * This is either the "version 1" header, with
1160214455Srpaulo		 * 16 bytes of additional fields at the end, or
1161214455Srpaulo		 * a "version 0" header from a memory-mapped
1162214455Srpaulo		 * capture, with 16 bytes of zeroed-out padding
1163214455Srpaulo		 * at the end.  Byte swap them as if this were
1164214455Srpaulo		 * a "version 1" header.
1165214455Srpaulo		 */
1166214455Srpaulo		if (hdr->caplen < 52)
1167214455Srpaulo			return;
1168214455Srpaulo		uhdr->interval = SWAPLONG(uhdr->interval);
1169214455Srpaulo		if (hdr->caplen < 56)
1170214455Srpaulo			return;
1171214455Srpaulo		uhdr->start_frame = SWAPLONG(uhdr->start_frame);
1172214455Srpaulo		if (hdr->caplen < 60)
1173214455Srpaulo			return;
1174214455Srpaulo		uhdr->xfer_flags = SWAPLONG(uhdr->xfer_flags);
1175214455Srpaulo		if (hdr->caplen < 64)
1176214455Srpaulo			return;
1177214455Srpaulo		uhdr->ndesc = SWAPLONG(uhdr->ndesc);
1178214455Srpaulo	}
1179214455Srpaulo}
1180