]> CyberLeo.Net >> Repos - FreeBSD/releng/9.0.git/blob - contrib/libpcap/pcap-common.c
Copy stable/9 to releng/9.0 as part of the FreeBSD 9.0-RELEASE release
[FreeBSD/releng/9.0.git] / contrib / libpcap / pcap-common.c
1 /*
2  * Copyright (c) 1993, 1994, 1995, 1996, 1997
3  *      The Regents of the University of California.  All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that: (1) source code distributions
7  * retain the above copyright notice and this paragraph in its entirety, (2)
8  * distributions including binary code include the above copyright notice and
9  * this paragraph in its entirety in the documentation or other materials
10  * provided with the distribution, and (3) all advertising materials mentioning
11  * features or use of this software display the following acknowledgement:
12  * ``This product includes software developed by the University of California,
13  * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
14  * the University nor the names of its contributors may be used to endorse
15  * or promote products derived from this software without specific prior
16  * written permission.
17  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
18  * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
19  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
20  *
21  * savefile.c - supports offline use of tcpdump
22  *      Extraction/creation by Jeffrey Mogul, DECWRL
23  *      Modified by Steve McCanne, LBL.
24  *
25  * Used to save the received packet headers, after filtering, to
26  * a file, and then read them later.
27  * The first record in the file contains saved values for the machine
28  * dependent values so we can print the dump file on any architecture.
29  */
30
31 #ifndef lint
32 static const char rcsid[] _U_ =
33     "@(#) $Header: /tcpdump/master/libpcap/savefile.c,v 1.183 2008-12-23 20:13:29 guy Exp $ (LBL)";
34 #endif
35
36 #ifdef HAVE_CONFIG_H
37 #include "config.h"
38 #endif
39
40 #ifdef WIN32
41 #include <pcap-stdinc.h>
42 #else /* WIN32 */
43 #if HAVE_INTTYPES_H
44 #include <inttypes.h>
45 #elif HAVE_STDINT_H
46 #include <stdint.h>
47 #endif
48 #ifdef HAVE_SYS_BITYPES_H
49 #include <sys/bitypes.h>
50 #endif
51 #include <sys/types.h>
52 #endif /* WIN32 */
53
54 #include "pcap-int.h"
55 #include "pcap/usb.h"
56
57 #include "pcap-common.h"
58
59 /*
60  * We don't write DLT_* values to capture files, because they're not the
61  * same on all platforms.
62  *
63  * Unfortunately, the various flavors of BSD have not always used the same
64  * numerical values for the same data types, and various patches to
65  * libpcap for non-BSD OSes have added their own DLT_* codes for link
66  * layer encapsulation types seen on those OSes, and those codes have had,
67  * in some cases, values that were also used, on other platforms, for other
68  * link layer encapsulation types.
69  *
70  * This means that capture files of a type whose numerical DLT_* code
71  * means different things on different BSDs, or with different versions
72  * of libpcap, can't always be read on systems other than those like
73  * the one running on the machine on which the capture was made.
74  *
75  * Instead, we define here a set of LINKTYPE_* codes, and map DLT_* codes
76  * to LINKTYPE_* codes when writing a savefile header, and map LINKTYPE_*
77  * codes to DLT_* codes when reading a savefile header.
78  *
79  * For those DLT_* codes that have, as far as we know, the same values on
80  * all platforms (DLT_NULL through DLT_FDDI), we define LINKTYPE_xxx as
81  * DLT_xxx; that way, captures of those types can still be read by
82  * versions of libpcap that map LINKTYPE_* values to DLT_* values, and
83  * captures of those types written by versions of libpcap that map DLT_
84  * values to LINKTYPE_ values can still be read by older versions
85  * of libpcap.
86  *
87  * The other LINKTYPE_* codes are given values starting at 100, in the
88  * hopes that no DLT_* code will be given one of those values.
89  *
90  * In order to ensure that a given LINKTYPE_* code's value will refer to
91  * the same encapsulation type on all platforms, you should not allocate
92  * a new LINKTYPE_* value without consulting
93  * "tcpdump-workers@lists.tcpdump.org".  The tcpdump developers will
94  * allocate a value for you, and will not subsequently allocate it to
95  * anybody else; that value will be added to the "pcap.h" in the
96  * tcpdump.org Git repository, so that a future libpcap release will
97  * include it.
98  *
99  * You should, if possible, also contribute patches to libpcap and tcpdump
100  * to handle the new encapsulation type, so that they can also be checked
101  * into the tcpdump.org Git repository and so that they will appear in
102  * future libpcap and tcpdump releases.
103  *
104  * Do *NOT* assume that any values after the largest value in this file
105  * are available; you might not have the most up-to-date version of this
106  * file, and new values after that one might have been assigned.  Also,
107  * do *NOT* use any values below 100 - those might already have been
108  * taken by one (or more!) organizations.
109  */
110 #define LINKTYPE_NULL           DLT_NULL
111 #define LINKTYPE_ETHERNET       DLT_EN10MB      /* also for 100Mb and up */
112 #define LINKTYPE_EXP_ETHERNET   DLT_EN3MB       /* 3Mb experimental Ethernet */
113 #define LINKTYPE_AX25           DLT_AX25
114 #define LINKTYPE_PRONET         DLT_PRONET
115 #define LINKTYPE_CHAOS          DLT_CHAOS
116 #define LINKTYPE_TOKEN_RING     DLT_IEEE802     /* DLT_IEEE802 is used for Token Ring */
117 #define LINKTYPE_ARCNET         DLT_ARCNET      /* BSD-style headers */
118 #define LINKTYPE_SLIP           DLT_SLIP
119 #define LINKTYPE_PPP            DLT_PPP
120 #define LINKTYPE_FDDI           DLT_FDDI
121
122 /*
123  * LINKTYPE_PPP is for use when there might, or might not, be an RFC 1662
124  * PPP in HDLC-like framing header (with 0xff 0x03 before the PPP protocol
125  * field) at the beginning of the packet.
126  *
127  * This is for use when there is always such a header; the address field
128  * might be 0xff, for regular PPP, or it might be an address field for Cisco
129  * point-to-point with HDLC framing as per section 4.3.1 of RFC 1547 ("Cisco
130  * HDLC").  This is, for example, what you get with NetBSD's DLT_PPP_SERIAL.
131  *
132  * We give it the same value as NetBSD's DLT_PPP_SERIAL, in the hopes that
133  * nobody else will choose a DLT_ value of 50, and so that DLT_PPP_SERIAL
134  * captures will be written out with a link type that NetBSD's tcpdump
135  * can read.
136  */
137 #define LINKTYPE_PPP_HDLC       50              /* PPP in HDLC-like framing */
138
139 #define LINKTYPE_PPP_ETHER      51              /* NetBSD PPP-over-Ethernet */
140
141 #define LINKTYPE_SYMANTEC_FIREWALL 99           /* Symantec Enterprise Firewall */
142
143 #define LINKTYPE_ATM_RFC1483    100             /* LLC/SNAP-encapsulated ATM */
144 #define LINKTYPE_RAW            101             /* raw IP */
145 #define LINKTYPE_SLIP_BSDOS     102             /* BSD/OS SLIP BPF header */
146 #define LINKTYPE_PPP_BSDOS      103             /* BSD/OS PPP BPF header */
147 #define LINKTYPE_C_HDLC         104             /* Cisco HDLC */
148 #define LINKTYPE_IEEE802_11     105             /* IEEE 802.11 (wireless) */
149 #define LINKTYPE_ATM_CLIP       106             /* Linux Classical IP over ATM */
150 #define LINKTYPE_FRELAY         107             /* Frame Relay */
151 #define LINKTYPE_LOOP           108             /* OpenBSD loopback */
152 #define LINKTYPE_ENC            109             /* OpenBSD IPSEC enc */
153
154 /*
155  * These three types are reserved for future use.
156  */
157 #define LINKTYPE_LANE8023       110             /* ATM LANE + 802.3 */
158 #define LINKTYPE_HIPPI          111             /* NetBSD HIPPI */
159 #define LINKTYPE_HDLC           112             /* NetBSD HDLC framing */
160
161 #define LINKTYPE_LINUX_SLL      113             /* Linux cooked socket capture */
162 #define LINKTYPE_LTALK          114             /* Apple LocalTalk hardware */
163 #define LINKTYPE_ECONET         115             /* Acorn Econet */
164
165 /*
166  * Reserved for use with OpenBSD ipfilter.
167  */
168 #define LINKTYPE_IPFILTER       116
169
170 #define LINKTYPE_PFLOG          117             /* OpenBSD DLT_PFLOG */
171 #define LINKTYPE_CISCO_IOS      118             /* For Cisco-internal use */
172 #define LINKTYPE_PRISM_HEADER   119             /* 802.11+Prism II monitor mode */
173 #define LINKTYPE_AIRONET_HEADER 120             /* FreeBSD Aironet driver stuff */
174
175 /*
176  * Reserved for Siemens HiPath HDLC.
177  */
178 #define LINKTYPE_HHDLC          121
179
180 #define LINKTYPE_IP_OVER_FC     122             /* RFC 2625 IP-over-Fibre Channel */
181 #define LINKTYPE_SUNATM         123             /* Solaris+SunATM */
182
183 /*
184  * Reserved as per request from Kent Dahlgren <kent@praesum.com>
185  * for private use.
186  */
187 #define LINKTYPE_RIO            124             /* RapidIO */
188 #define LINKTYPE_PCI_EXP        125             /* PCI Express */
189 #define LINKTYPE_AURORA         126             /* Xilinx Aurora link layer */
190
191 #define LINKTYPE_IEEE802_11_RADIO 127           /* 802.11 plus BSD radio header */
192
193 /*
194  * Reserved for the TZSP encapsulation, as per request from
195  * Chris Waters <chris.waters@networkchemistry.com>
196  * TZSP is a generic encapsulation for any other link type,
197  * which includes a means to include meta-information
198  * with the packet, e.g. signal strength and channel
199  * for 802.11 packets.
200  */
201 #define LINKTYPE_TZSP           128             /* Tazmen Sniffer Protocol */
202
203 #define LINKTYPE_ARCNET_LINUX   129             /* Linux-style headers */
204
205 /*
206  * Juniper-private data link types, as per request from
207  * Hannes Gredler <hannes@juniper.net>.  The corresponding
208  * DLT_s are used for passing on chassis-internal
209  * metainformation such as QOS profiles, etc..
210  */
211 #define LINKTYPE_JUNIPER_MLPPP  130
212 #define LINKTYPE_JUNIPER_MLFR   131
213 #define LINKTYPE_JUNIPER_ES     132
214 #define LINKTYPE_JUNIPER_GGSN   133
215 #define LINKTYPE_JUNIPER_MFR    134
216 #define LINKTYPE_JUNIPER_ATM2   135
217 #define LINKTYPE_JUNIPER_SERVICES 136
218 #define LINKTYPE_JUNIPER_ATM1   137
219
220 #define LINKTYPE_APPLE_IP_OVER_IEEE1394 138     /* Apple IP-over-IEEE 1394 cooked header */
221
222 #define LINKTYPE_MTP2_WITH_PHDR 139
223 #define LINKTYPE_MTP2           140
224 #define LINKTYPE_MTP3           141
225 #define LINKTYPE_SCCP           142
226
227 #define LINKTYPE_DOCSIS         143             /* DOCSIS MAC frames */
228
229 #define LINKTYPE_LINUX_IRDA     144             /* Linux-IrDA */
230
231 /*
232  * Reserved for IBM SP switch and IBM Next Federation switch.
233  */
234 #define LINKTYPE_IBM_SP         145
235 #define LINKTYPE_IBM_SN         146
236
237 /*
238  * Reserved for private use.  If you have some link-layer header type
239  * that you want to use within your organization, with the capture files
240  * using that link-layer header type not ever be sent outside your
241  * organization, you can use these values.
242  *
243  * No libpcap release will use these for any purpose, nor will any
244  * tcpdump release use them, either.
245  *
246  * Do *NOT* use these in capture files that you expect anybody not using
247  * your private versions of capture-file-reading tools to read; in
248  * particular, do *NOT* use them in products, otherwise you may find that
249  * people won't be able to use tcpdump, or snort, or Ethereal, or... to
250  * read capture files from your firewall/intrusion detection/traffic
251  * monitoring/etc. appliance, or whatever product uses that LINKTYPE_ value,
252  * and you may also find that the developers of those applications will
253  * not accept patches to let them read those files.
254  *
255  * Also, do not use them if somebody might send you a capture using them
256  * for *their* private type and tools using them for *your* private type
257  * would have to read them.
258  *
259  * Instead, in those cases, ask "tcpdump-workers@lists.tcpdump.org" for a
260  * new DLT_ and LINKTYPE_ value, as per the comment in pcap/bpf.h, and use
261  * the type you're given.
262  */
263 #define LINKTYPE_USER0          147
264 #define LINKTYPE_USER1          148
265 #define LINKTYPE_USER2          149
266 #define LINKTYPE_USER3          150
267 #define LINKTYPE_USER4          151
268 #define LINKTYPE_USER5          152
269 #define LINKTYPE_USER6          153
270 #define LINKTYPE_USER7          154
271 #define LINKTYPE_USER8          155
272 #define LINKTYPE_USER9          156
273 #define LINKTYPE_USER10         157
274 #define LINKTYPE_USER11         158
275 #define LINKTYPE_USER12         159
276 #define LINKTYPE_USER13         160
277 #define LINKTYPE_USER14         161
278 #define LINKTYPE_USER15         162
279
280 /*
281  * For future use with 802.11 captures - defined by AbsoluteValue
282  * Systems to store a number of bits of link-layer information
283  * including radio information:
284  *
285  *      http://www.shaftnet.org/~pizza/software/capturefrm.txt
286  *
287  * but could and arguably should also be used by non-AVS Linux
288  * 802.11 drivers; that may happen in the future.
289  */
290 #define LINKTYPE_IEEE802_11_RADIO_AVS 163       /* 802.11 plus AVS radio header */
291
292 /*
293  * Juniper-private data link type, as per request from
294  * Hannes Gredler <hannes@juniper.net>.  The corresponding
295  * DLT_s are used for passing on chassis-internal
296  * metainformation such as QOS profiles, etc..
297  */
298 #define LINKTYPE_JUNIPER_MONITOR 164
299
300 /*
301  * Reserved for BACnet MS/TP.
302  */
303 #define LINKTYPE_BACNET_MS_TP   165
304
305 /*
306  * Another PPP variant as per request from Karsten Keil <kkeil@suse.de>.
307  *
308  * This is used in some OSes to allow a kernel socket filter to distinguish
309  * between incoming and outgoing packets, on a socket intended to
310  * supply pppd with outgoing packets so it can do dial-on-demand and
311  * hangup-on-lack-of-demand; incoming packets are filtered out so they
312  * don't cause pppd to hold the connection up (you don't want random
313  * input packets such as port scans, packets from old lost connections,
314  * etc. to force the connection to stay up).
315  *
316  * The first byte of the PPP header (0xff03) is modified to accomodate
317  * the direction - 0x00 = IN, 0x01 = OUT.
318  */
319 #define LINKTYPE_PPP_PPPD       166
320
321 /*
322  * Juniper-private data link type, as per request from
323  * Hannes Gredler <hannes@juniper.net>.  The DLT_s are used
324  * for passing on chassis-internal metainformation such as
325  * QOS profiles, cookies, etc..
326  */
327 #define LINKTYPE_JUNIPER_PPPOE     167
328 #define LINKTYPE_JUNIPER_PPPOE_ATM 168
329
330 #define LINKTYPE_GPRS_LLC       169             /* GPRS LLC */
331 #define LINKTYPE_GPF_T          170             /* GPF-T (ITU-T G.7041/Y.1303) */
332 #define LINKTYPE_GPF_F          171             /* GPF-T (ITU-T G.7041/Y.1303) */
333
334 /*
335  * Requested by Oolan Zimmer <oz@gcom.com> for use in Gcom's T1/E1 line
336  * monitoring equipment.
337  */
338 #define LINKTYPE_GCOM_T1E1      172
339 #define LINKTYPE_GCOM_SERIAL    173
340
341 /*
342  * Juniper-private data link type, as per request from
343  * Hannes Gredler <hannes@juniper.net>.  The DLT_ is used
344  * for internal communication to Physical Interface Cards (PIC)
345  */
346 #define LINKTYPE_JUNIPER_PIC_PEER    174
347
348 /*
349  * Link types requested by Gregor Maier <gregor@endace.com> of Endace
350  * Measurement Systems.  They add an ERF header (see
351  * http://www.endace.com/support/EndaceRecordFormat.pdf) in front of
352  * the link-layer header.
353  */
354 #define LINKTYPE_ERF_ETH        175     /* Ethernet */
355 #define LINKTYPE_ERF_POS        176     /* Packet-over-SONET */
356
357 /*
358  * Requested by Daniele Orlandi <daniele@orlandi.com> for raw LAPD
359  * for vISDN (http://www.orlandi.com/visdn/).  Its link-layer header
360  * includes additional information before the LAPD header, so it's
361  * not necessarily a generic LAPD header.
362  */
363 #define LINKTYPE_LINUX_LAPD     177
364
365 /*
366  * Juniper-private data link type, as per request from
367  * Hannes Gredler <hannes@juniper.net>. 
368  * The Link Types are used for prepending meta-information
369  * like interface index, interface name
370  * before standard Ethernet, PPP, Frelay & C-HDLC Frames
371  */
372 #define LINKTYPE_JUNIPER_ETHER  178
373 #define LINKTYPE_JUNIPER_PPP    179
374 #define LINKTYPE_JUNIPER_FRELAY 180
375 #define LINKTYPE_JUNIPER_CHDLC  181
376
377 /*
378  * Multi Link Frame Relay (FRF.16)
379  */
380 #define LINKTYPE_MFR            182
381
382 /*
383  * Juniper-private data link type, as per request from
384  * Hannes Gredler <hannes@juniper.net>. 
385  * The DLT_ is used for internal communication with a
386  * voice Adapter Card (PIC)
387  */
388 #define LINKTYPE_JUNIPER_VP     183
389
390 /*
391  * Arinc 429 frames.
392  * DLT_ requested by Gianluca Varenni <gianluca.varenni@cacetech.com>.
393  * Every frame contains a 32bit A429 label.
394  * More documentation on Arinc 429 can be found at
395  * http://www.condoreng.com/support/downloads/tutorials/ARINCTutorial.pdf
396  */
397 #define LINKTYPE_A429           184
398
399 /*
400  * Arinc 653 Interpartition Communication messages.
401  * DLT_ requested by Gianluca Varenni <gianluca.varenni@cacetech.com>.
402  * Please refer to the A653-1 standard for more information.
403  */
404 #define LINKTYPE_A653_ICM       185
405
406 /*
407  * USB packets, beginning with a USB setup header; requested by
408  * Paolo Abeni <paolo.abeni@email.it>.
409  */
410 #define LINKTYPE_USB            186
411
412 /*
413  * Bluetooth HCI UART transport layer (part H:4); requested by
414  * Paolo Abeni.
415  */
416 #define LINKTYPE_BLUETOOTH_HCI_H4       187
417
418 /*
419  * IEEE 802.16 MAC Common Part Sublayer; requested by Maria Cruz
420  * <cruz_petagay@bah.com>.
421  */
422 #define LINKTYPE_IEEE802_16_MAC_CPS     188
423
424 /*
425  * USB packets, beginning with a Linux USB header; requested by
426  * Paolo Abeni <paolo.abeni@email.it>.
427  */
428 #define LINKTYPE_USB_LINUX              189
429
430 /*
431  * Controller Area Network (CAN) v. 2.0B packets.
432  * DLT_ requested by Gianluca Varenni <gianluca.varenni@cacetech.com>.
433  * Used to dump CAN packets coming from a CAN Vector board.
434  * More documentation on the CAN v2.0B frames can be found at
435  * http://www.can-cia.org/downloads/?269
436  */
437 #define LINKTYPE_CAN20B         190
438
439 /*
440  * IEEE 802.15.4, with address fields padded, as is done by Linux
441  * drivers; requested by Juergen Schimmer.
442  */
443 #define LINKTYPE_IEEE802_15_4_LINUX     191
444
445 /*
446  * Per Packet Information encapsulated packets.
447  * LINKTYPE_ requested by Gianluca Varenni <gianluca.varenni@cacetech.com>.
448  */
449 #define LINKTYPE_PPI                    192
450
451 /*
452  * Header for 802.16 MAC Common Part Sublayer plus a radiotap radio header;
453  * requested by Charles Clancy.
454  */
455 #define LINKTYPE_IEEE802_16_MAC_CPS_RADIO       193
456
457 /*
458  * Juniper-private data link type, as per request from
459  * Hannes Gredler <hannes@juniper.net>. 
460  * The DLT_ is used for internal communication with a
461  * integrated service module (ISM).
462  */
463 #define LINKTYPE_JUNIPER_ISM    194
464
465 /*
466  * IEEE 802.15.4, exactly as it appears in the spec (no padding, no
467  * nothing); requested by Mikko Saarnivala <mikko.saarnivala@sensinode.com>.
468  */
469 #define LINKTYPE_IEEE802_15_4   195
470
471 /*
472  * Various link-layer types, with a pseudo-header, for SITA
473  * (http://www.sita.aero/); requested by Fulko Hew (fulko.hew@gmail.com).
474  */
475 #define LINKTYPE_SITA           196
476
477 /*
478  * Various link-layer types, with a pseudo-header, for Endace DAG cards;
479  * encapsulates Endace ERF records.  Requested by Stephen Donnelly
480  * <stephen@endace.com>.
481  */
482 #define LINKTYPE_ERF            197
483
484 /*
485  * Special header prepended to Ethernet packets when capturing from a
486  * u10 Networks board.  Requested by Phil Mulholland
487  * <phil@u10networks.com>.
488  */
489 #define LINKTYPE_RAIF1          198
490
491 /*
492  * IPMB packet for IPMI, beginning with the I2C slave address, followed
493  * by the netFn and LUN, etc..  Requested by Chanthy Toeung
494  * <chanthy.toeung@ca.kontron.com>.
495  */
496 #define LINKTYPE_IPMB           199
497
498 /*
499  * Juniper-private data link type, as per request from
500  * Hannes Gredler <hannes@juniper.net>. 
501  * The DLT_ is used for capturing data on a secure tunnel interface.
502  */
503 #define LINKTYPE_JUNIPER_ST     200
504
505 /*
506  * Bluetooth HCI UART transport layer (part H:4), with pseudo-header
507  * that includes direction information; requested by Paolo Abeni.
508  */
509 #define LINKTYPE_BLUETOOTH_HCI_H4_WITH_PHDR     201
510
511 /*
512  * AX.25 packet with a 1-byte KISS header; see
513  *
514  *      http://www.ax25.net/kiss.htm
515  *
516  * as per Richard Stearn <richard@rns-stearn.demon.co.uk>.
517  */
518 #define LINKTYPE_AX25_KISS      202
519
520 /*
521  * LAPD packets from an ISDN channel, starting with the address field,
522  * with no pseudo-header.
523  * Requested by Varuna De Silva <varunax@gmail.com>.
524  */
525 #define LINKTYPE_LAPD           203
526
527 /*
528  * Variants of various link-layer headers, with a one-byte direction
529  * pseudo-header prepended - zero means "received by this host",
530  * non-zero (any non-zero value) means "sent by this host" - as per
531  * Will Barker <w.barker@zen.co.uk>.
532  */
533 #define LINKTYPE_PPP_WITH_DIR   204     /* PPP */
534 #define LINKTYPE_C_HDLC_WITH_DIR 205    /* Cisco HDLC */
535 #define LINKTYPE_FRELAY_WITH_DIR 206    /* Frame Relay */
536 #define LINKTYPE_LAPB_WITH_DIR  207     /* LAPB */
537
538 /*
539  * 208 is reserved for an as-yet-unspecified proprietary link-layer
540  * type, as requested by Will Barker.
541  */
542
543 /*
544  * IPMB with a Linux-specific pseudo-header; as requested by Alexey Neyman
545  * <avn@pigeonpoint.com>.
546  */
547 #define LINKTYPE_IPMB_LINUX             209
548
549 /*
550  * FlexRay automotive bus - http://www.flexray.com/ - as requested
551  * by Hannes Kaelber <hannes.kaelber@x2e.de>.
552  */
553 #define LINKTYPE_FLEXRAY                210
554
555 /*
556  * Media Oriented Systems Transport (MOST) bus for multimedia
557  * transport - http://www.mostcooperation.com/ - as requested
558  * by Hannes Kaelber <hannes.kaelber@x2e.de>.
559  */
560 #define LINKTYPE_MOST                   211
561
562 /*
563  * Local Interconnect Network (LIN) bus for vehicle networks -
564  * http://www.lin-subbus.org/ - as requested by Hannes Kaelber
565  * <hannes.kaelber@x2e.de>.
566  */
567 #define LINKTYPE_LIN                    212
568
569 /*
570  * X2E-private data link type used for serial line capture,
571  * as requested by Hannes Kaelber <hannes.kaelber@x2e.de>.
572  */
573 #define LINKTYPE_X2E_SERIAL             213
574
575 /*
576  * X2E-private data link type used for the Xoraya data logger
577  * family, as requested by Hannes Kaelber <hannes.kaelber@x2e.de>.
578  */
579 #define LINKTYPE_X2E_XORAYA             214
580
581 /*
582  * IEEE 802.15.4, exactly as it appears in the spec (no padding, no
583  * nothing), but with the PHY-level data for non-ASK PHYs (4 octets
584  * of 0 as preamble, one octet of SFD, one octet of frame length+
585  * reserved bit, and then the MAC-layer data, starting with the
586  * frame control field).
587  *
588  * Requested by Max Filippov <jcmvbkbc@gmail.com>.
589  */
590 #define LINKTYPE_IEEE802_15_4_NONASK_PHY        215
591
592 /* 
593  * David Gibson <david@gibson.dropbear.id.au> requested this for
594  * captures from the Linux kernel /dev/input/eventN devices. This
595  * is used to communicate keystrokes and mouse movements from the
596  * Linux kernel to display systems, such as Xorg. 
597  */
598 #define LINKTYPE_LINUX_EVDEV                    216
599
600 /*
601  * GSM Um and Abis interfaces, preceded by a "gsmtap" header.
602  *
603  * Requested by Harald Welte <laforge@gnumonks.org>.
604  */
605 #define LINKTYPE_GSMTAP_UM                      217
606 #define LINKTYPE_GSMTAP_ABIS                    218
607
608 /*
609  * MPLS, with an MPLS label as the link-layer header.
610  * Requested by Michele Marchetto <michele@openbsd.org> on behalf
611  * of OpenBSD.
612  */
613 #define LINKTYPE_MPLS                           219
614
615 /*
616  * USB packets, beginning with a Linux USB header, with the USB header
617  * padded to 64 bytes; required for memory-mapped access.
618  */
619 #define LINKTYPE_USB_LINUX_MMAPPED              220
620
621 /*
622  * DECT packets, with a pseudo-header; requested by
623  * Matthias Wenzel <tcpdump@mazzoo.de>.
624  */
625 #define LINKTYPE_DECT                           221
626
627 /*
628  * From: "Lidwa, Eric (GSFC-582.0)[SGT INC]" <eric.lidwa-1@nasa.gov>
629  * Date: Mon, 11 May 2009 11:18:30 -0500
630  *
631  * DLT_AOS. We need it for AOS Space Data Link Protocol.
632  *   I have already written dissectors for but need an OK from
633  *   legal before I can submit a patch.
634  *
635  */
636 #define LINKTYPE_AOS                            222
637
638 /*
639  * Wireless HART (Highway Addressable Remote Transducer)
640  * From the HART Communication Foundation
641  * IES/PAS 62591
642  *
643  * Requested by Sam Roberts <vieuxtech@gmail.com>.
644  */
645 #define LINKTYPE_WIHART                         223
646
647 /*
648  * Fibre Channel FC-2 frames, beginning with a Frame_Header.
649  * Requested by Kahou Lei <kahou82@gmail.com>.
650  */
651 #define LINKTYPE_FC_2                           224
652
653 /*
654  * Fibre Channel FC-2 frames, beginning with an encoding of the
655  * SOF, and ending with an encoding of the EOF.
656  *
657  * The encodings represent the frame delimiters as 4-byte sequences
658  * representing the corresponding ordered sets, with K28.5
659  * represented as 0xBC, and the D symbols as the corresponding
660  * byte values; for example, SOFi2, which is K28.5 - D21.5 - D1.2 - D21.2,
661  * is represented as 0xBC 0xB5 0x55 0x55.
662  *
663  * Requested by Kahou Lei <kahou82@gmail.com>.
664  */
665 #define LINKTYPE_FC_2_WITH_FRAME_DELIMS         225
666
667 /*
668  * Solaris ipnet pseudo-header; requested by Darren Reed <Darren.Reed@Sun.COM>.
669  *
670  * The pseudo-header starts with a one-byte version number; for version 2,
671  * the pseudo-header is:
672  *
673  * struct dl_ipnetinfo {
674  *     u_int8_t   dli_version;
675  *     u_int8_t   dli_family;
676  *     u_int16_t  dli_htype;
677  *     u_int32_t  dli_pktlen;
678  *     u_int32_t  dli_ifindex;
679  *     u_int32_t  dli_grifindex;
680  *     u_int32_t  dli_zsrc;
681  *     u_int32_t  dli_zdst;
682  * };
683  *
684  * dli_version is 2 for the current version of the pseudo-header.
685  *
686  * dli_family is a Solaris address family value, so it's 2 for IPv4
687  * and 26 for IPv6.
688  *
689  * dli_htype is a "hook type" - 0 for incoming packets, 1 for outgoing
690  * packets, and 2 for packets arriving from another zone on the same
691  * machine.
692  *
693  * dli_pktlen is the length of the packet data following the pseudo-header
694  * (so the captured length minus dli_pktlen is the length of the
695  * pseudo-header, assuming the entire pseudo-header was captured).
696  *
697  * dli_ifindex is the interface index of the interface on which the
698  * packet arrived.
699  *
700  * dli_grifindex is the group interface index number (for IPMP interfaces).
701  *
702  * dli_zsrc is the zone identifier for the source of the packet.
703  *
704  * dli_zdst is the zone identifier for the destination of the packet.
705  *
706  * A zone number of 0 is the global zone; a zone number of 0xffffffff
707  * means that the packet arrived from another host on the network, not
708  * from another zone on the same machine.
709  *
710  * An IPv4 or IPv6 datagram follows the pseudo-header; dli_family indicates
711  * which of those it is.
712  */
713 #define LINKTYPE_IPNET                          226
714
715 /*
716  * CAN (Controller Area Network) frames, with a pseudo-header as supplied
717  * by Linux SocketCAN.  See Documentation/networking/can.txt in the Linux
718  * source.
719  *
720  * Requested by Felix Obenhuber <felix@obenhuber.de>.
721  */
722 #define LINKTYPE_CAN_SOCKETCAN                  227
723
724 /*
725  * Raw IPv4/IPv6; different from DLT_RAW in that the DLT_ value specifies
726  * whether it's v4 or v6.  Requested by Darren Reed <Darren.Reed@Sun.COM>.
727  */
728 #define LINKTYPE_IPV4                           228
729 #define LINKTYPE_IPV6                           229
730
731
732 static struct linktype_map {
733         int     dlt;
734         int     linktype;
735 } map[] = {
736         /*
737          * These DLT_* codes have LINKTYPE_* codes with values identical
738          * to the values of the corresponding DLT_* code.
739          */
740         { DLT_NULL,             LINKTYPE_NULL },
741         { DLT_EN10MB,           LINKTYPE_ETHERNET },
742         { DLT_EN3MB,            LINKTYPE_EXP_ETHERNET },
743         { DLT_AX25,             LINKTYPE_AX25 },
744         { DLT_PRONET,           LINKTYPE_PRONET },
745         { DLT_CHAOS,            LINKTYPE_CHAOS },
746         { DLT_IEEE802,          LINKTYPE_TOKEN_RING },
747         { DLT_ARCNET,           LINKTYPE_ARCNET },
748         { DLT_SLIP,             LINKTYPE_SLIP },
749         { DLT_PPP,              LINKTYPE_PPP },
750         { DLT_FDDI,             LINKTYPE_FDDI },
751
752         /*
753          * These DLT_* codes have different values on different
754          * platforms; we map them to LINKTYPE_* codes that
755          * have values that should never be equal to any DLT_*
756          * code.
757          */
758 #ifdef DLT_FR
759         /* BSD/OS Frame Relay */
760         { DLT_FR,               LINKTYPE_FRELAY },
761 #endif
762
763         { DLT_SYMANTEC_FIREWALL, LINKTYPE_SYMANTEC_FIREWALL },
764         { DLT_ATM_RFC1483,      LINKTYPE_ATM_RFC1483 },
765         { DLT_RAW,              LINKTYPE_RAW },
766         { DLT_SLIP_BSDOS,       LINKTYPE_SLIP_BSDOS },
767         { DLT_PPP_BSDOS,        LINKTYPE_PPP_BSDOS },
768
769         /* BSD/OS Cisco HDLC */
770         { DLT_C_HDLC,           LINKTYPE_C_HDLC },
771
772         /*
773          * These DLT_* codes are not on all platforms, but, so far,
774          * there don't appear to be any platforms that define
775          * other codes with those values; we map them to
776          * different LINKTYPE_* values anyway, just in case.
777          */
778
779         /* Linux ATM Classical IP */
780         { DLT_ATM_CLIP,         LINKTYPE_ATM_CLIP },
781
782         /* NetBSD sync/async serial PPP (or Cisco HDLC) */
783         { DLT_PPP_SERIAL,       LINKTYPE_PPP_HDLC },
784
785         /* NetBSD PPP over Ethernet */
786         { DLT_PPP_ETHER,        LINKTYPE_PPP_ETHER },
787
788         /* IEEE 802.11 wireless */
789         { DLT_IEEE802_11,       LINKTYPE_IEEE802_11 },
790
791         /* Frame Relay */
792         { DLT_FRELAY,           LINKTYPE_FRELAY },
793
794         /* OpenBSD loopback */
795         { DLT_LOOP,             LINKTYPE_LOOP },
796
797         /* OpenBSD IPSEC enc */
798         { DLT_ENC,              LINKTYPE_ENC },
799
800         /* Linux cooked socket capture */
801         { DLT_LINUX_SLL,        LINKTYPE_LINUX_SLL },
802
803         /* Apple LocalTalk hardware */
804         { DLT_LTALK,            LINKTYPE_LTALK },
805
806         /* Acorn Econet */
807         { DLT_ECONET,           LINKTYPE_ECONET },
808
809         /* OpenBSD DLT_PFLOG */
810         { DLT_PFLOG,            LINKTYPE_PFLOG },
811
812         /* For Cisco-internal use */
813         { DLT_CISCO_IOS,        LINKTYPE_CISCO_IOS },
814
815         /* Prism II monitor-mode header plus 802.11 header */
816         { DLT_PRISM_HEADER,     LINKTYPE_PRISM_HEADER },
817
818         /* FreeBSD Aironet driver stuff */
819         { DLT_AIRONET_HEADER,   LINKTYPE_AIRONET_HEADER },
820
821         /* Siemens HiPath HDLC */
822         { DLT_HHDLC,            LINKTYPE_HHDLC },
823
824         /* RFC 2625 IP-over-Fibre Channel */
825         { DLT_IP_OVER_FC,       LINKTYPE_IP_OVER_FC },
826
827         /* Solaris+SunATM */
828         { DLT_SUNATM,           LINKTYPE_SUNATM },
829
830         /* RapidIO */
831         { DLT_RIO,              LINKTYPE_RIO },
832
833         /* PCI Express */
834         { DLT_PCI_EXP,          LINKTYPE_PCI_EXP },
835
836         /* Xilinx Aurora link layer */
837         { DLT_AURORA,           LINKTYPE_AURORA },
838
839         /* 802.11 plus BSD radio header */
840         { DLT_IEEE802_11_RADIO, LINKTYPE_IEEE802_11_RADIO },
841
842         /* Tazmen Sniffer Protocol */
843         { DLT_TZSP,             LINKTYPE_TZSP },
844
845         /* Arcnet with Linux-style link-layer headers */
846         { DLT_ARCNET_LINUX,     LINKTYPE_ARCNET_LINUX },
847
848         /* Juniper-internal chassis encapsulation */
849         { DLT_JUNIPER_MLPPP,    LINKTYPE_JUNIPER_MLPPP },
850         { DLT_JUNIPER_MLFR,     LINKTYPE_JUNIPER_MLFR },
851         { DLT_JUNIPER_ES,       LINKTYPE_JUNIPER_ES },
852         { DLT_JUNIPER_GGSN,     LINKTYPE_JUNIPER_GGSN },
853         { DLT_JUNIPER_MFR,      LINKTYPE_JUNIPER_MFR },
854         { DLT_JUNIPER_ATM2,     LINKTYPE_JUNIPER_ATM2 },
855         { DLT_JUNIPER_SERVICES, LINKTYPE_JUNIPER_SERVICES },
856         { DLT_JUNIPER_ATM1,     LINKTYPE_JUNIPER_ATM1 },
857
858         /* Apple IP-over-IEEE 1394 cooked header */
859         { DLT_APPLE_IP_OVER_IEEE1394, LINKTYPE_APPLE_IP_OVER_IEEE1394 },
860
861         /* SS7 */
862         { DLT_MTP2_WITH_PHDR,   LINKTYPE_MTP2_WITH_PHDR },
863         { DLT_MTP2,             LINKTYPE_MTP2 },
864         { DLT_MTP3,             LINKTYPE_MTP3 },
865         { DLT_SCCP,             LINKTYPE_SCCP },
866
867         /* DOCSIS MAC frames */
868         { DLT_DOCSIS,           LINKTYPE_DOCSIS },
869
870         /* IrDA IrLAP packets + Linux-cooked header */
871         { DLT_LINUX_IRDA,       LINKTYPE_LINUX_IRDA },
872
873         /* IBM SP and Next Federation switches */
874         { DLT_IBM_SP,           LINKTYPE_IBM_SP },
875         { DLT_IBM_SN,           LINKTYPE_IBM_SN },
876
877         /* 802.11 plus AVS radio header */
878         { DLT_IEEE802_11_RADIO_AVS, LINKTYPE_IEEE802_11_RADIO_AVS },
879
880         /*
881          * Any platform that defines additional DLT_* codes should:
882          *
883          *      request a LINKTYPE_* code and value from tcpdump.org,
884          *      as per the above;
885          *
886          *      add, in their version of libpcap, an entry to map
887          *      those DLT_* codes to the corresponding LINKTYPE_*
888          *      code;
889          *
890          *      redefine, in their "net/bpf.h", any DLT_* values
891          *      that collide with the values used by their additional
892          *      DLT_* codes, to remove those collisions (but without
893          *      making them collide with any of the LINKTYPE_*
894          *      values equal to 50 or above; they should also avoid
895          *      defining DLT_* values that collide with those
896          *      LINKTYPE_* values, either).
897          */
898
899         /* Juniper-internal chassis encapsulation */
900         { DLT_JUNIPER_MONITOR,  LINKTYPE_JUNIPER_MONITOR },
901
902         /* BACnet MS/TP */
903         { DLT_BACNET_MS_TP,     LINKTYPE_BACNET_MS_TP },
904
905         /* PPP for pppd, with direction flag in the PPP header */
906         { DLT_PPP_PPPD,         LINKTYPE_PPP_PPPD},
907
908         /* Juniper-internal chassis encapsulation */
909         { DLT_JUNIPER_PPPOE,    LINKTYPE_JUNIPER_PPPOE },
910         { DLT_JUNIPER_PPPOE_ATM,LINKTYPE_JUNIPER_PPPOE_ATM },
911
912         /* GPRS LLC */
913         { DLT_GPRS_LLC,         LINKTYPE_GPRS_LLC },
914
915         /* Transparent Generic Framing Procedure (ITU-T G.7041/Y.1303) */
916         { DLT_GPF_T,            LINKTYPE_GPF_T },
917
918         /* Framed Generic Framing Procedure (ITU-T G.7041/Y.1303) */
919         { DLT_GPF_F,            LINKTYPE_GPF_F },
920
921         { DLT_GCOM_T1E1,        LINKTYPE_GCOM_T1E1 },
922         { DLT_GCOM_SERIAL,      LINKTYPE_GCOM_SERIAL },
923
924         /* Juniper-internal chassis encapsulation */
925         { DLT_JUNIPER_PIC_PEER, LINKTYPE_JUNIPER_PIC_PEER },
926
927         /* Endace types */
928         { DLT_ERF_ETH,          LINKTYPE_ERF_ETH },
929         { DLT_ERF_POS,          LINKTYPE_ERF_POS },
930
931         /* viSDN LAPD */
932         { DLT_LINUX_LAPD,       LINKTYPE_LINUX_LAPD },
933
934         /* Juniper meta-information before Ether, PPP, Frame Relay, C-HDLC Frames */
935         { DLT_JUNIPER_ETHER, LINKTYPE_JUNIPER_ETHER },
936         { DLT_JUNIPER_PPP, LINKTYPE_JUNIPER_PPP },
937         { DLT_JUNIPER_FRELAY, LINKTYPE_JUNIPER_FRELAY },
938         { DLT_JUNIPER_CHDLC, LINKTYPE_JUNIPER_CHDLC },
939
940         /* Multi Link Frame Relay (FRF.16) */
941         { DLT_MFR,              LINKTYPE_MFR },
942
943         /* Juniper Voice PIC */
944         { DLT_JUNIPER_VP,       LINKTYPE_JUNIPER_VP },
945
946         /* Controller Area Network (CAN) v2.0B */
947         { DLT_A429,             LINKTYPE_A429 },
948
949         /* Arinc 653 Interpartition Communication messages */
950         { DLT_A653_ICM,         LINKTYPE_A653_ICM },
951
952         /* USB */
953         { DLT_USB,              LINKTYPE_USB },
954
955         /* Bluetooth HCI UART transport layer */
956         { DLT_BLUETOOTH_HCI_H4, LINKTYPE_BLUETOOTH_HCI_H4 },
957
958         /* IEEE 802.16 MAC Common Part Sublayer */
959         { DLT_IEEE802_16_MAC_CPS,       LINKTYPE_IEEE802_16_MAC_CPS },
960
961         /* USB with Linux header */
962         { DLT_USB_LINUX,        LINKTYPE_USB_LINUX },
963
964         /* Controller Area Network (CAN) v2.0B */
965         { DLT_CAN20B,           LINKTYPE_CAN20B },
966
967         /* IEEE 802.15.4 with address fields padded */
968         { DLT_IEEE802_15_4_LINUX,       LINKTYPE_IEEE802_15_4_LINUX },
969
970         /* Per Packet Information encapsulated packets */
971         { DLT_PPI,                      LINKTYPE_PPI },
972
973         /* IEEE 802.16 MAC Common Part Sublayer plus radiotap header */
974         { DLT_IEEE802_16_MAC_CPS_RADIO, LINKTYPE_IEEE802_16_MAC_CPS_RADIO },
975
976         /* Juniper Voice ISM */
977         { DLT_JUNIPER_ISM,      LINKTYPE_JUNIPER_ISM },
978
979         /* IEEE 802.15.4 exactly as it appears in the spec */
980         { DLT_IEEE802_15_4,     LINKTYPE_IEEE802_15_4 },
981
982         /* Various link-layer types for SITA */
983         { DLT_SITA,             LINKTYPE_SITA },
984
985         /* Various link-layer types for Endace */
986         { DLT_ERF,              LINKTYPE_ERF },
987
988         /* Special header for u10 Networks boards */
989         { DLT_RAIF1,            LINKTYPE_RAIF1 },
990
991         /* IPMB */
992         { DLT_IPMB,             LINKTYPE_IPMB },
993
994         /* Juniper Secure Tunnel */
995         { DLT_JUNIPER_ST,       LINKTYPE_JUNIPER_ST },
996
997         /* Bluetooth HCI UART transport layer, with pseudo-header */
998         { DLT_BLUETOOTH_HCI_H4_WITH_PHDR, LINKTYPE_BLUETOOTH_HCI_H4_WITH_PHDR },
999
1000         /* AX.25 with KISS header */
1001         { DLT_AX25_KISS,        LINKTYPE_AX25_KISS },
1002
1003         /* Raw LAPD, with no pseudo-header */
1004         { DLT_LAPD,             LINKTYPE_LAPD },
1005
1006         /* PPP with one-byte pseudo-header giving direction */
1007         { DLT_PPP_WITH_DIR,     LINKTYPE_PPP_WITH_DIR },
1008
1009         /* Cisco HDLC with one-byte pseudo-header giving direction */
1010         { DLT_C_HDLC_WITH_DIR,  LINKTYPE_C_HDLC_WITH_DIR },
1011
1012         /* Frame Relay with one-byte pseudo-header giving direction */
1013         { DLT_FRELAY_WITH_DIR,  LINKTYPE_FRELAY_WITH_DIR },
1014
1015         /* LAPB with one-byte pseudo-header giving direction */
1016         { DLT_LAPB_WITH_DIR,    LINKTYPE_LAPB_WITH_DIR },
1017
1018         /* IPMB with Linux pseudo-header */
1019         { DLT_IPMB_LINUX,       LINKTYPE_IPMB_LINUX },
1020
1021         /* FlexRay */
1022         { DLT_FLEXRAY,          LINKTYPE_FLEXRAY },
1023
1024         /* MOST */
1025         { DLT_MOST,             LINKTYPE_MOST },
1026
1027         /* LIN */
1028         { DLT_LIN,              LINKTYPE_LIN },
1029
1030         /* X2E-private serial line capture */
1031         { DLT_X2E_SERIAL,       LINKTYPE_X2E_SERIAL },
1032
1033         /* X2E-private for Xoraya data logger family */
1034         { DLT_X2E_XORAYA,       LINKTYPE_X2E_XORAYA },
1035
1036         /* IEEE 802.15.4 with PHY data for non-ASK PHYs */
1037         { DLT_IEEE802_15_4_NONASK_PHY, LINKTYPE_IEEE802_15_4_NONASK_PHY },
1038
1039         /* Input device events from Linux /dev/input/eventN devices */
1040         { DLT_LINUX_EVDEV,      LINKTYPE_LINUX_EVDEV },
1041
1042         /* GSM types */
1043         { DLT_GSMTAP_UM,        LINKTYPE_GSMTAP_UM },
1044         { DLT_GSMTAP_ABIS,      LINKTYPE_GSMTAP_ABIS },
1045
1046         /* MPLS, with an MPLS label as the link-layer header */
1047         { DLT_MPLS,             LINKTYPE_MPLS },
1048
1049         /* USB with padded Linux header */
1050         { DLT_USB_LINUX_MMAPPED, LINKTYPE_USB_LINUX_MMAPPED },
1051
1052         /* DECT packets with a pseudo-header */
1053         { DLT_DECT,             LINKTYPE_DECT },
1054
1055         /* AOS Space Data Link Protocol */
1056         { DLT_AOS,              LINKTYPE_AOS },
1057
1058         /* Wireless HART */
1059         { DLT_WIHART,           LINKTYPE_WIHART },
1060
1061         /* Fibre Channel FC-2 frames without SOF or EOF */
1062         { DLT_FC_2,             LINKTYPE_FC_2 },
1063
1064         /* Fibre Channel FC-2 frames with SOF and EOF */
1065         { DLT_FC_2_WITH_FRAME_DELIMS, LINKTYPE_FC_2_WITH_FRAME_DELIMS },
1066
1067         /* Solaris IPNET */
1068         { DLT_IPNET,            LINKTYPE_IPNET },
1069
1070         /* CAN frames with SocketCAN headers */
1071         { DLT_CAN_SOCKETCAN,    LINKTYPE_CAN_SOCKETCAN },
1072
1073         /* Raw IPv4/IPv6 */
1074         { DLT_IPV4,             LINKTYPE_IPV4 },
1075         { DLT_IPV6,             LINKTYPE_IPV6 },
1076
1077         { -1,                   -1 }
1078 };
1079
1080 int
1081 dlt_to_linktype(int dlt)
1082 {
1083         int i;
1084
1085         for (i = 0; map[i].dlt != -1; i++) {
1086                 if (map[i].dlt == dlt)
1087                         return (map[i].linktype);
1088         }
1089
1090         /*
1091          * If we don't have a mapping for this DLT_ code, return an
1092          * error; that means that the table above needs to have an
1093          * entry added.
1094          */
1095         return (-1);
1096 }
1097
1098 int
1099 linktype_to_dlt(int linktype)
1100 {
1101         int i;
1102
1103         for (i = 0; map[i].linktype != -1; i++) {
1104                 if (map[i].linktype == linktype)
1105                         return (map[i].dlt);
1106         }
1107
1108         /*
1109          * If we don't have an entry for this link type, return
1110          * the link type value; it may be a DLT_ value from an
1111          * older version of libpcap.
1112          */
1113         return linktype;
1114 }
1115
1116 /*
1117  * The DLT_USB_LINUX and DLT_USB_LINUX_MMAPPED headers are in host
1118  * byte order when capturing (it's supplied directly from a
1119  * memory-mapped buffer shared by the kernel).
1120  *
1121  * When reading a DLT_USB_LINUX or DLT_USB_LINUX_MMAPPED capture file,
1122  * we need to convert it from the capturing host's byte order to
1123  * the reading host's byte order.
1124  */
1125 void
1126 swap_linux_usb_header(const struct pcap_pkthdr *hdr, u_char *buf,
1127     int header_len_64_bytes)
1128 {
1129         pcap_usb_header_mmapped *uhdr = (pcap_usb_header_mmapped *)buf;
1130
1131         /*
1132          * The URB id is a totally opaque value; do we really need to 
1133          * convert it to the reading host's byte order???
1134          */
1135         if (hdr->caplen < 8)
1136                 return;
1137         uhdr->id = SWAPLL(uhdr->id);
1138         if (hdr->caplen < 14)
1139                 return;
1140         uhdr->bus_id = SWAPSHORT(uhdr->bus_id);
1141         if (hdr->caplen < 24)
1142                 return;
1143         uhdr->ts_sec = SWAPLL(uhdr->ts_sec);
1144         if (hdr->caplen < 28)
1145                 return;
1146         uhdr->ts_usec = SWAPLONG(uhdr->ts_usec);
1147         if (hdr->caplen < 32)
1148                 return;
1149         uhdr->status = SWAPLONG(uhdr->status);
1150         if (hdr->caplen < 36)
1151                 return;
1152         uhdr->urb_len = SWAPLONG(uhdr->urb_len);
1153         if (hdr->caplen < 40)
1154                 return;
1155         uhdr->data_len = SWAPLONG(uhdr->data_len);
1156
1157         if (header_len_64_bytes) {
1158                 /*
1159                  * This is either the "version 1" header, with
1160                  * 16 bytes of additional fields at the end, or
1161                  * a "version 0" header from a memory-mapped
1162                  * capture, with 16 bytes of zeroed-out padding
1163                  * at the end.  Byte swap them as if this were
1164                  * a "version 1" header.
1165                  */
1166                 if (hdr->caplen < 52)
1167                         return;
1168                 uhdr->interval = SWAPLONG(uhdr->interval);
1169                 if (hdr->caplen < 56)
1170                         return;
1171                 uhdr->start_frame = SWAPLONG(uhdr->start_frame);
1172                 if (hdr->caplen < 60)
1173                         return;
1174                 uhdr->xfer_flags = SWAPLONG(uhdr->xfer_flags);
1175                 if (hdr->caplen < 64)
1176                         return;
1177                 uhdr->ndesc = SWAPLONG(uhdr->ndesc);
1178         }       
1179 }