297387af07498d26e0b3021119de103fe4e43d5c
[metze/wireshark/wip.git] / wiretap / pcap-common.c
1 /* pcap-common.c
2  * Code common to libpcap and pcap-NG file formats
3  *
4  * Wiretap Library
5  * Copyright (c) 1998 by Gilbert Ramirez <gram@alumni.rice.edu>
6  *
7  * File format support for pcap-ng file format
8  * Copyright (c) 2007 by Ulf Lamping <ulf.lamping@web.de>
9  *
10  * This program is free software; you can redistribute it and/or
11  * modify it under the terms of the GNU General Public License
12  * as published by the Free Software Foundation; either version 2
13  * of the License, or (at your option) any later version.
14  *
15  * This program is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU General Public License for more details.
19  *
20  * You should have received a copy of the GNU General Public License
21  * along with this program; if not, write to the Free Software
22  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
23  */
24
25 #include "config.h"
26
27 #include <stdlib.h>
28 #include <string.h>
29 #include <errno.h>
30 #include "wtap-int.h"
31 #include "file_wrappers.h"
32 #include "atm.h"
33 #include "erf.h"
34 #include "pcap-encap.h"
35 #include "pcap-common.h"
36
37 /*
38  * Map link-layer header types (LINKTYPE_ values) to Wiretap encapsulations.
39  *
40  * Either LBL NRG wasn't an adequate central registry (e.g., because of
41  * the slow rate of releases from them), or nobody bothered using them
42  * as a central registry, as many different groups have patched libpcap
43  * (and BPF, on the BSDs) to add new encapsulation types, and have ended
44  * up using the same DLT_ values for different encapsulation types.
45  *
46  * The Tcpdump Group now maintains the list of link-layer header types;
47  * they introduced a separate namespace of LINKTYPE_ values for the
48  * values to be used in capture files, and have libpcap map between
49  * those values in capture file headers and the DLT_ values that the
50  * pcap_datalink() and pcap_open_dead() APIs use.  See
51  * http://www.tcpdump.org/linktypes.html for a list of LINKTYPE_ values.
52  *
53  * In most cases, the corresponding LINKTYPE_ and DLT_ values are the
54  * same.  In the cases where the same link-layer header type was given
55  * different values in different OSes, a new LINKTYPE_ value was defined,
56  * different from all of the existing DLT_ values.
57  *
58  * This table maps LINKTYPE_ values to the corresponding Wiretap
59  * encapsulation.  For cases where multiple DLT_ values were in use,
60  * it also checks what <pcap.h> defineds to determine how to interpret
61  * them, so that if a file was written by a version of libpcap prior
62  * to the introduction of the LINKTYPE_ values, and has a DLT_ value
63  * from the OS on which it was written rather than a LINKTYPE_ value
64  * as its linktype value in the file header, we map the numerical
65  * DLT_ value, as interpreted by the libpcap with which we're building
66  * Wireshark/Wiretap interprets them (which, if it doesn't support
67  * them at all, means we don't support them either - any capture files
68  * using them are foreign, and we don't hazard a guess as to which
69  * platform they came from; we could, I guess, choose the most likely
70  * platform), to the corresponding Wiretap encapsulation.
71  *
72  * Note: if you need a new encapsulation type for libpcap files, do
73  * *N*O*T* use *ANY* of the values listed here!  I.e., do *NOT*
74  * add a new encapsulation type by changing an existing entry;
75  * leave the existing entries alone.
76  *
77  * Instead, send mail to tcpdump-workers@lists.tcpdump.org, asking for
78  * a new LINKTYPE_/DLT_ value, and specifying the purpose of the new
79  * value.  When you get the new LINKTYPE_/DLT_ value, use that numerical
80  * value in the "linktype_value" field of "pcap_to_wtap_map[]".
81  */
82
83 static const struct {
84         int     linktype_value;
85         int     wtap_encap_value;
86 } pcap_to_wtap_map[] = {
87         /*
88          * These are the values that are almost certainly the same
89          * in all libpcaps (I've yet to find one where the values
90          * in question are used for some purpose other than the
91          * one below, but...), and thus assigned as LINKTYPE_ values,
92          * and that Wiretap and Wireshark currently support.
93          */
94         { 0,            WTAP_ENCAP_NULL },      /* null encapsulation */
95         { 1,            WTAP_ENCAP_ETHERNET },
96         { 3,            WTAP_ENCAP_AX25 },
97         { 6,            WTAP_ENCAP_TOKEN_RING },        /* IEEE 802 Networks - assume token ring */
98         { 7,            WTAP_ENCAP_ARCNET },
99         { 8,            WTAP_ENCAP_SLIP },
100         { 9,            WTAP_ENCAP_PPP },
101 #ifdef BIT_SWAPPED_MAC_ADDRS
102         { 10,           WTAP_ENCAP_FDDI_BITSWAPPED },
103 #else
104         { 10,           WTAP_ENCAP_FDDI },
105 #endif
106
107         { 32,           WTAP_ENCAP_REDBACK },
108
109         /*
110          * 50 is DLT_PPP_SERIAL in NetBSD; it appears that DLT_PPP
111          * on BSD (at least according to standard tcpdump) has, as
112          * the first octet, an indication of whether the packet was
113          * transmitted or received (rather than having the standard
114          * PPP address value of 0xff), but that DLT_PPP_SERIAL puts
115          * a real live PPP header there, or perhaps a Cisco PPP header
116          * as per section 4.3.1 of RFC 1547 (implementations of this
117          * exist in various BSDs in "sys/net/if_spppsubr.c", and
118          * I think also exist either in standard Linux or in
119          * various Linux patches; the implementations show how to handle
120          * Cisco keepalive packets).
121          *
122          * However, I don't see any obvious place in FreeBSD "if_ppp.c"
123          * where anything other than the standard PPP header would be
124          * passed up.  I see some stuff that sets the first octet
125          * to 0 for incoming and 1 for outgoing packets before applying
126          * a BPF filter to see whether to drop packets whose protocol
127          * field has the 0x8000 bit set, i.e. network control protocols -
128          * those are handed up to userland - but that code puts the
129          * address field back before passing the packet up.
130          *
131          * I also don't see anything immediately obvious that munges
132          * the address field for sync PPP, either.
133          *
134          * Wireshark currently assumes that if the first octet of a
135          * PPP frame is 0xFF, it's the address field and is followed
136          * by a control field and a 2-byte protocol, otherwise the
137          * address and control fields are absent and the frame begins
138          * with a protocol field.  If we ever see a BSD/OS PPP
139          * capture, we'll have to handle it differently, and we may
140          * have to handle standard BSD captures differently if, in fact,
141          * they don't have 0xff 0x03 as the first two bytes - but, as per
142          * the two paragraphs preceding this, it's not clear that
143          * the address field *is* munged into an incoming/outgoing
144          * field when the packet is handed to the BPF device.
145          *
146          * For now, we just map DLT_PPP_SERIAL to WTAP_ENCAP_PPP, as
147          * we treat WTAP_ENCAP_PPP packets as if those beginning with
148          * 0xff have the standard RFC 1662 "PPP in HDLC-like Framing"
149          * 0xff 0x03 address/control header, and DLT_PPP_SERIAL frames
150          * appear to contain that unless they're Cisco frames (if we
151          * ever see a capture with them, we'd need to implement the
152          * RFC 1547 stuff, and the keepalive protocol stuff).
153          *
154          * We may have to distinguish between "PPP where if it doesn't
155          * begin with 0xff there's no HDLC encapsulation and the frame
156          * begins with the protocol field" (which is how we handle
157          * WTAP_ENCAP_PPP now) and "PPP where there's either HDLC
158          * encapsulation or Cisco PPP" (which is what DLT_PPP_SERIAL
159          * is) at some point.
160          *
161          * XXX - NetBSD has DLT_HDLC, which appears to be used for
162          * Cisco HDLC.  Ideally, they should use DLT_PPP_SERIAL
163          * only for real live HDLC-encapsulated PPP, not for Cisco
164          * HDLC.
165          */
166         { 50,           WTAP_ENCAP_PPP },
167
168         /*
169          * Used by NetBSD and OpenBSD pppoe(4).
170          */
171         { 51,           WTAP_ENCAP_PPP_ETHER },
172
173         /*
174          * Apparently used by the Axent Raptor firewall (now Symantec
175          * Enterprise Firewall).
176          * Thanks, Axent, for not reserving that type with tcpdump.org
177          * and not telling anybody about it.
178          */
179         { 99,           WTAP_ENCAP_SYMANTEC },
180
181         /*
182          * These are the values that libpcap 0.5 and later use in
183          * capture file headers, in an attempt to work around the
184          * confusion decried above, and that Wiretap and Wireshark
185          * currently support.  I.e., they're the LINKTYPE_ values
186          * for RFC 1483 ATM and "raw IP", respectively, not the
187          * DLT_ values for them on all platforms.
188          */
189         { 100,          WTAP_ENCAP_ATM_RFC1483 },
190         { 101,          WTAP_ENCAP_RAW_IP },
191 #if 0
192         /*
193          * More values used by libpcap 0.5 as DLT_ values and used by the
194          * current CVS version of libpcap in capture file headers.
195          * They are not yet handled in Wireshark.
196          * If we get a capture that contains them, we'll implement them.
197          */
198         { 102,          WTAP_ENCAP_SLIP_BSDOS },
199         { 103,          WTAP_ENCAP_PPP_BSDOS },
200 #endif
201
202         /*
203          * These ones are handled in Wireshark, though.
204          */
205         { 104,          WTAP_ENCAP_CHDLC },     /* Cisco HDLC */
206         { 105,          WTAP_ENCAP_IEEE_802_11 }, /* IEEE 802.11 */
207         { 106,          WTAP_ENCAP_LINUX_ATM_CLIP },
208         { 107,          WTAP_ENCAP_FRELAY },    /* Frame Relay */
209         { 108,          WTAP_ENCAP_LOOP },      /* OpenBSD loopback */
210         { 109,          WTAP_ENCAP_ENC },       /* OpenBSD IPSEC enc */
211 #if 0
212         { 110,          WTAP_ENCAP_LANE_802_3 },/* ATM LANE 802.3 */
213         { 111,          WTAP_ENCAP_HIPPI },     /* NetBSD HIPPI */
214 #endif
215         { 112,          WTAP_ENCAP_CHDLC },     /* NetBSD HDLC framing */
216
217         /*
218          * Linux "cooked mode" captures, used by the current CVS version
219          * of libpcap
220          * OR
221          * it could be a packet in Cisco's ERSPAN encapsulation which uses
222          * this number as well (why can't people stick to protocols when it
223          * comes to allocating/using DLT types).
224          */
225         { 113,          WTAP_ENCAP_SLL },       /* Linux cooked capture */
226
227         { 114,          WTAP_ENCAP_LOCALTALK }, /* Localtalk */
228
229         /*
230          * The tcpdump.org version of libpcap uses 117, rather than 17,
231          * for OpenBSD packet filter logging, so as to avoid conflicting
232          * with DLT_LANE8023 in SuSE 6.3 libpcap.
233          */
234         { 117,          WTAP_ENCAP_PFLOG },
235
236         { 118,          WTAP_ENCAP_CISCO_IOS },
237         { 119,          WTAP_ENCAP_IEEE_802_11_PRISM }, /* 802.11 plus Prism monitor mode radio header */
238         { 121,          WTAP_ENCAP_HHDLC },     /* HiPath HDLC */
239         { 122,          WTAP_ENCAP_IP_OVER_FC },   /* RFC 2625 IP-over-FC */
240         { 123,          WTAP_ENCAP_ATM_PDUS },  /* SunATM */
241         { 127,          WTAP_ENCAP_IEEE_802_11_RADIOTAP },  /* 802.11 plus radiotap radio header */
242         { 128,          WTAP_ENCAP_TZSP },      /* Tazmen Sniffer Protocol */
243         { 129,          WTAP_ENCAP_ARCNET_LINUX },
244         { 130,          WTAP_ENCAP_JUNIPER_MLPPP }, /* Juniper MLPPP on ML-, LS-, AS- PICs */
245         { 131,          WTAP_ENCAP_JUNIPER_MLFR }, /* Juniper MLFR (FRF.15) on ML-, LS-, AS- PICs */
246         { 133,          WTAP_ENCAP_JUNIPER_GGSN},
247         /*
248          * Values 132 and 134 not listed here are reserved for use
249          * in Juniper hardware.
250          */
251         { 135,          WTAP_ENCAP_JUNIPER_ATM2 }, /* various encapsulations captured on the ATM2 PIC */
252         { 136,          WTAP_ENCAP_JUNIPER_SVCS }, /* various encapsulations captured on the services PIC */
253         { 137,          WTAP_ENCAP_JUNIPER_ATM1 }, /* various encapsulations captured on the ATM1 PIC */
254
255         { 138,          WTAP_ENCAP_APPLE_IP_OVER_IEEE1394 },
256                                                 /* Apple IP-over-IEEE 1394 */
257
258         { 139,          WTAP_ENCAP_MTP2_WITH_PHDR },
259         { 140,          WTAP_ENCAP_MTP2 },
260         { 141,          WTAP_ENCAP_MTP3 },
261         { 142,          WTAP_ENCAP_SCCP },
262         { 143,          WTAP_ENCAP_DOCSIS },
263         { 144,          WTAP_ENCAP_IRDA },      /* IrDA capture */
264
265         /* Reserved for private use. */
266         { 147,          WTAP_ENCAP_USER0 },
267         { 148,          WTAP_ENCAP_USER1 },
268         { 149,          WTAP_ENCAP_USER2 },
269         { 150,          WTAP_ENCAP_USER3 },
270         { 151,          WTAP_ENCAP_USER4 },
271         { 152,          WTAP_ENCAP_USER5 },
272         { 153,          WTAP_ENCAP_USER6 },
273         { 154,          WTAP_ENCAP_USER7 },
274         { 155,          WTAP_ENCAP_USER8 },
275         { 156,          WTAP_ENCAP_USER9 },
276         { 157,          WTAP_ENCAP_USER10 },
277         { 158,          WTAP_ENCAP_USER11 },
278         { 159,          WTAP_ENCAP_USER12 },
279         { 160,          WTAP_ENCAP_USER13 },
280         { 161,          WTAP_ENCAP_USER14 },
281         { 162,          WTAP_ENCAP_USER15 },
282
283         { 163,          WTAP_ENCAP_IEEE_802_11_AVS },  /* 802.11 plus AVS radio header */
284
285         /*
286          * 164 is reserved for Juniper-private chassis-internal
287          * meta-information such as QoS profiles, etc..
288          */
289
290         { 165,          WTAP_ENCAP_BACNET_MS_TP },
291
292         /*
293          * 166 is reserved for a PPP variant in which the first byte
294          * of the 0xff03 header, the 0xff, is replaced by a direction
295          * byte.  I don't know whether any captures look like that,
296          * but it is used for some Linux IP filtering (ipfilter?).
297          */
298
299         /* Ethernet PPPoE frames captured on a service PIC */
300         { 167,          WTAP_ENCAP_JUNIPER_PPPOE },
301
302         /*
303          * 168 is reserved for more Juniper private-chassis-
304          * internal meta-information.
305          */
306
307         { 169,          WTAP_ENCAP_GPRS_LLC },
308
309         /* ITU-T G.7041/Y.1303 Generic Framing Procedure. */
310         { 170,          WTAP_ENCAP_GFP_T },
311         { 171,          WTAP_ENCAP_GFP_F },
312
313         /* Registered by Gcom, Inc. */
314         { 172,          WTAP_ENCAP_GCOM_TIE1 },
315         { 173,          WTAP_ENCAP_GCOM_SERIAL },
316
317         { 177,          WTAP_ENCAP_LINUX_LAPD },
318
319         /* Ethernet frames prepended with meta-information */
320         { 178,          WTAP_ENCAP_JUNIPER_ETHER },
321         /* PPP frames prepended with meta-information */
322         { 179,          WTAP_ENCAP_JUNIPER_PPP },
323         /* Frame-Relay frames prepended with meta-information */
324         { 180,          WTAP_ENCAP_JUNIPER_FRELAY },
325         /* C-HDLC frames prepended with meta-information */
326         { 181,          WTAP_ENCAP_JUNIPER_CHDLC },
327         /* VOIP Frames prepended with meta-information */
328         { 183,          WTAP_ENCAP_JUNIPER_VP },
329         /* USB packets from FreeBSD's USB BPF tap */
330         { 186,          WTAP_ENCAP_USB_FREEBSD },
331         /* Bluetooth HCI UART transport (part H:4) frames, like hcidump */
332         { 187,          WTAP_ENCAP_BLUETOOTH_H4 },
333         /* IEEE 802.16 MAC Common Part Sublayer */
334         { 188,          WTAP_ENCAP_IEEE802_16_MAC_CPS },
335         /* USB packets with Linux-specified header */
336         { 189,          WTAP_ENCAP_USB_LINUX },
337         /* CAN 2.0b frame */
338         { 190,          WTAP_ENCAP_CAN20B },
339         /* Per-Packet Information header */
340         { 192,          WTAP_ENCAP_PPI },
341         /* IEEE 802.15.4 Wireless PAN */
342         { 195,          WTAP_ENCAP_IEEE802_15_4 },
343         /* SITA File Encapsulation */
344         { 196,          WTAP_ENCAP_SITA },
345         /* Endace Record File Encapsulation */
346         { 197,          WTAP_ENCAP_ERF },
347         /* IPMB */
348         { 199,          WTAP_ENCAP_IPMB },
349         /* Bluetooth HCI UART transport (part H:4) frames, like hcidump */
350         { 201,          WTAP_ENCAP_BLUETOOTH_H4_WITH_PHDR },
351         /* AX.25 packet with a 1-byte KISS header */
352         { 202,          WTAP_ENCAP_AX25_KISS },
353         /* LAPD frame */
354         { 203,          WTAP_ENCAP_LAPD },
355         /* PPP with pseudoheader */
356         { 204,          WTAP_ENCAP_PPP_WITH_PHDR },
357         /* IPMB/I2C */
358         { 209,          WTAP_ENCAP_I2C },
359         /* FlexRay frame */
360         { 210,          WTAP_ENCAP_FLEXRAY },
361         /* MOST frame */
362         { 211,          WTAP_ENCAP_MOST },
363         /* LIN frame */
364         { 212,          WTAP_ENCAP_LIN },
365         /* X2E Xoraya serial frame */
366         { 213,          WTAP_ENCAP_X2E_SERIAL },
367         /* X2E Xoraya frame */
368         { 214,          WTAP_ENCAP_X2E_XORAYA },
369         /* IEEE 802.15.4 Wireless PAN non-ASK PHY */
370         { 215,          WTAP_ENCAP_IEEE802_15_4_NONASK_PHY },
371         /* USB packets with padded Linux-specified header */
372         { 220,          WTAP_ENCAP_USB_LINUX_MMAPPED },
373         /* Fibre Channel FC-2 frame */
374         { 224,          WTAP_ENCAP_FIBRE_CHANNEL_FC2 },
375         /* Fibre Channel FC-2 frame with Delimiter */
376         { 225,          WTAP_ENCAP_FIBRE_CHANNEL_FC2_WITH_FRAME_DELIMS },
377         /* Solaris IPNET */
378         { 226,          WTAP_ENCAP_IPNET },
379         /* SocketCAN frame */
380         { 227,          WTAP_ENCAP_SOCKETCAN },
381         /* Raw IPv4 */
382         { 228,          WTAP_ENCAP_RAW_IP4 },
383         /* Raw IPv6 */
384         { 229,          WTAP_ENCAP_RAW_IP6 },
385         /* IEEE 802.15.4 Wireless PAN no fcs */
386         { 230,          WTAP_ENCAP_IEEE802_15_4_NOFCS },
387         /* D-BUS */
388         { 231,          WTAP_ENCAP_DBUS },
389         /* DVB-CI (Common Interface) */
390         { 235,          WTAP_ENCAP_DVBCI },
391         /* MUX27010 */
392         { 236,          WTAP_ENCAP_MUX27010 },
393         /* STANAG 5066 - DTS(Data Transfer Sublayer) PDU */
394         { 237,          WTAP_ENCAP_STANAG_5066_D_PDU },
395         /* NFLOG */
396         { 239,          WTAP_ENCAP_NFLOG },
397         /* netANALYZER pseudo-header followed by Ethernet with CRC */
398         { 240,          WTAP_ENCAP_NETANALYZER },
399         /* netANALYZER pseudo-header in transparent mode */
400         { 241,          WTAP_ENCAP_NETANALYZER_TRANSPARENT },
401         /* IP-over-Infiniband, as specified by RFC 4391 section 6 */
402         { 242,          WTAP_ENCAP_IP_OVER_IB_PCAP },
403         /* ISO/IEC 13818-1 MPEG2-TS packets */
404         { 243,          WTAP_ENCAP_MPEG_2_TS },
405         /* NFC LLCP */
406         { 245,          WTAP_ENCAP_NFC_LLCP },
407         /* SCTP */
408         { 248,          WTAP_ENCAP_SCTP},
409         /* USBPcap */
410         { 249,          WTAP_ENCAP_USBPCAP},
411         /* RTAC SERIAL */
412         { 250,          WTAP_ENCAP_RTAC_SERIAL},
413         /* Bluetooth Low Energy Link Layer */
414         { 251,          WTAP_ENCAP_BLUETOOTH_LE_LL},
415         /* Wireshark Upper PDU export */
416         { 252,          WTAP_ENCAP_WIRESHARK_UPPER_PDU},
417         /* Netlink Protocol (nlmon devices) */
418         { 253,          WTAP_ENCAP_NETLINK },
419         /* Bluetooth Linux Monitor */
420         { 254,          WTAP_ENCAP_BLUETOOTH_LINUX_MONITOR },
421         /* Bluetooth BR/EDR Baseband RF captures */
422         { 255,          WTAP_ENCAP_BLUETOOTH_BREDR_BB },
423         /* Bluetooth Low Energy Link Layer RF captures */
424         { 256,          WTAP_ENCAP_BLUETOOTH_LE_LL_WITH_PHDR },
425
426         /* Apple PKTAP */
427         { 258,          WTAP_ENCAP_PKTAP },
428
429         /* Ethernet Passive Optical Network */
430         { 259,          WTAP_ENCAP_EPON },
431
432         /* IPMI Trace Data Collection */
433         { 260,          WTAP_ENCAP_IPMI_TRACE },
434
435         /* ISO14443 contactless smartcard standards */
436         { 264,          WTAP_ENCAP_ISO14443 },
437
438         /*
439          * To repeat:
440          *
441          * If you need a new encapsulation type for libpcap files, do
442          * *N*O*T* use *ANY* of the values listed here!  I.e., do *NOT*
443          * add a new encapsulation type by changing an existing entry;
444          * leave the existing entries alone.
445          *
446          * Instead, send mail to tcpdump-workers@lists.tcpdump.org, asking
447          * for a new DLT_ value, and specifying the purpose of the new value.
448          * When you get the new DLT_ value, use that numerical value in
449          * the "linktype_value" field of "pcap_to_wtap_map[]".
450          */
451
452         /*
453          * The following are entries for libpcap type values that have
454          * different meanings on different OSes.  I.e., these are DLT_
455          * values that are different on different OSes, and that have
456          * a separate LINKTYPE_ value assigned to them.
457          *
458          * We put these *after* the entries for the LINKTYPE_ values for
459          * those Wiretap encapsulation types, so that, when writing a
460          * pcap or pcap-ng file, Wireshark writes the LINKTYPE_ value,
461          * not the OS's DLT_ value, as the file's link-layer header type
462          * for pcap or the interface's link-layer header type.
463          */
464
465         /*
466          * 11 is DLT_ATM_RFC1483 on most platforms; the only libpcaps I've
467          * seen that define anything other than DLT_ATM_RFC1483 as 11 are
468          * the BSD/OS one, which defines DLT_FR as 11.  We handle it as
469          * Frame Relay on BSD/OS and LLC-encapsulated ATM on all other
470          * platforms.
471          */
472 #if defined(__bsdi__) /* BSD/OS */
473         { 11,           WTAP_ENCAP_FRELAY },
474 #else
475         { 11,           WTAP_ENCAP_ATM_RFC1483 },
476 #endif
477
478         /*
479          * 12 is DLT_RAW on most platforms, but it's DLT_C_HDLC on
480          * BSD/OS, and DLT_LOOP on OpenBSD.
481          *
482          * We don't yet handle DLT_C_HDLC, but we can handle DLT_LOOP
483          * (it's just like DLT_NULL, only with the AF_ value in network
484          * rather than host byte order - Wireshark figures out the
485          * byte order from the data, so we don't care what byte order
486          * it's in), so, on OpenBSD, interpret 12 as WTAP_ENCAP_LOOP,
487          * otherwise, if we're not on BSD/OS, interpret it as
488          * WTAP_ENCAP_RAW_IP.
489          */
490 #if defined(__OpenBSD__)
491         { 12,           WTAP_ENCAP_LOOP },
492 #elif defined(__bsdi__) /* BSD/OS */
493         /*
494          * Put entry for Cisco HDLC here.
495          * XXX - is this just WTAP_ENCAP_CHDLC, i.e. does the frame
496          * start with a 4-byte Cisco HDLC header?
497          */
498 #else
499         { 12,           WTAP_ENCAP_RAW_IP },
500 #endif
501
502         /*
503          * 13 is DLT_SLIP_BSDOS on FreeBSD and NetBSD, but those OSes
504          * don't actually generate it.  I infer that BSD/OS translates
505          * DLT_SLIP from the kernel BPF code to DLT_SLIP_BSDOS in
506          * libpcap, as the BSD/OS link-layer header is different;
507          * however, in BSD/OS, DLT_SLIP_BSDOS is 15.
508          *
509          * From this, I infer that there's no point in handling 13
510          * as DLT_SLIP_BSDOS.
511          *
512          * 13 is DLT_ATM_RFC1483 on BSD/OS.
513          *
514          * 13 is DLT_ENC in OpenBSD, which is, I suspect, some kind
515          * of decrypted IPsec traffic.
516          *
517          * We treat 13 as WTAP_ENCAP_ENC on all systems except those
518          * that define DLT_ATM_RFC1483 as 13 - presumably only
519          * BSD/OS does so - so that, on BSD/OS systems, we still
520          * treate 13 as WTAP_ENCAP_ATM_RFC1483, but, on all other
521          * systems, we can read OpenBSD DLT_ENC captures.
522          */
523 #if defined(__bsdi__) /* BSD/OS */
524         { 13,           WTAP_ENCAP_ATM_RFC1483 },
525 #else
526         { 13,           WTAP_ENCAP_ENC },
527 #endif
528
529         /*
530          * 14 is DLT_PPP_BSDOS on FreeBSD and NetBSD, but those OSes
531          * don't actually generate it.  I infer that BSD/OS translates
532          * DLT_PPP from the kernel BPF code to DLT_PPP_BSDOS in
533          * libpcap, as the BSD/OS link-layer header is different;
534          * however, in BSD/OS, DLT_PPP_BSDOS is 16.
535          *
536          * From this, I infer that there's no point in handling 14
537          * as DLT_PPP_BSDOS.
538          *
539          * 14 is DLT_RAW on BSD/OS and OpenBSD.
540          */
541         { 14,           WTAP_ENCAP_RAW_IP },
542
543         /*
544          * 15 is:
545          *
546          *      DLT_SLIP_BSDOS on BSD/OS;
547          *
548          *      DLT_HIPPI on NetBSD;
549          *
550          *      DLT_LANE8023 with Alexey Kuznetzov's patches for
551          *      Linux libpcap;
552          *
553          *      DLT_I4L_RAWIP with the ISDN4Linux patches for libpcap
554          *      (and on SuSE 6.3);
555          *
556          * but we don't currently handle any of those.
557          */
558
559         /*
560          * 16 is:
561          *
562          *      DLT_PPP_BSDOS on BSD/OS;
563          *
564          *      DLT_HDLC on NetBSD (Cisco HDLC);
565          *
566          *      DLT_CIP with Alexey Kuznetzov's patches for
567          *      Linux libpcap - this is WTAP_ENCAP_LINUX_ATM_CLIP;
568          *
569          *      DLT_I4L_IP with the ISDN4Linux patches for libpcap
570          *      (and on SuSE 6.3).
571          */
572 #if defined(__NetBSD__)
573         { 16,           WTAP_ENCAP_CHDLC },
574 #elif !defined(__bsdi__)
575         /*
576          * If you care about the two different Linux interpretations
577          * of 16, fix it yourself.
578          */
579         { 16,           WTAP_ENCAP_LINUX_ATM_CLIP },
580 #endif
581
582         /*
583          * 17 is DLT_LANE8023 in SuSE 6.3 libpcap; we don't currently
584          * handle it.
585          * It is also used as the PF (Packet Filter) logging format beginning
586          * with OpenBSD 3.0; we use 17 for PF logs on OpenBSD and don't
587          * use it otherwise.
588          */
589 #if defined(__OpenBSD__)
590         { 17,           WTAP_ENCAP_OLD_PFLOG },
591 #endif
592
593         /*
594          * 18 is DLT_CIP in SuSE 6.3 libpcap; if it's the same as the
595          * DLT_CIP of 16 that the Alexey Kuznetzov patches for
596          * libpcap/tcpdump define, it's WTAP_ENCAP_LINUX_ATM_CLIP.
597          * I've not found any libpcap that uses it for any other purpose -
598          * hopefully nobody will do so in the future.
599          */
600         { 18,           WTAP_ENCAP_LINUX_ATM_CLIP },
601
602         /*
603          * 19 is DLT_ATM_CLIP in the libpcap/tcpdump patches in the
604          * recent versions I've seen of the Linux ATM distribution;
605          * I've not yet found any libpcap that uses it for any other
606          * purpose - hopefully nobody will do so in the future.
607          */
608         { 19,           WTAP_ENCAP_LINUX_ATM_CLIP },
609
610         /*
611          * To repeat:
612          *
613          * If you need a new encapsulation type for libpcap files, do
614          * *N*O*T* use *ANY* of the values listed here!  I.e., do *NOT*
615          * add a new encapsulation type by changing an existing entry;
616          * leave the existing entries alone.
617          *
618          * Instead, send mail to tcpdump-workers@lists.tcpdump.org, asking
619          * for a new DLT_ value, and specifying the purpose of the new value.
620          * When you get the new DLT_ value, use that numerical value in
621          * the "linktype_value" field of "pcap_to_wtap_map[]".
622          */
623 };
624 #define NUM_PCAP_ENCAPS (sizeof pcap_to_wtap_map / sizeof pcap_to_wtap_map[0])
625
626 int
627 wtap_pcap_encap_to_wtap_encap(int encap)
628 {
629         unsigned int i;
630
631         for (i = 0; i < NUM_PCAP_ENCAPS; i++) {
632                 if (pcap_to_wtap_map[i].linktype_value == encap)
633                         return pcap_to_wtap_map[i].wtap_encap_value;
634         }
635         return WTAP_ENCAP_UNKNOWN;
636 }
637
638 int
639 wtap_wtap_encap_to_pcap_encap(int encap)
640 {
641         unsigned int i;
642
643         switch (encap) {
644
645         case WTAP_ENCAP_FDDI:
646         case WTAP_ENCAP_FDDI_BITSWAPPED:
647                 /*
648                  * Special-case WTAP_ENCAP_FDDI and
649                  * WTAP_ENCAP_FDDI_BITSWAPPED; both of them get mapped
650                  * to DLT_FDDI (even though that may mean that the bit
651                  * order in the FDDI MAC addresses is wrong; so it goes
652                  * - libpcap format doesn't record the byte order,
653                  * so that's not fixable).
654                  *
655                  * The pcap_to_wtap_map[] table will only have an
656                  * entry for one of the above, which is why we have
657                  * to special-case them.
658                  */
659                 return 10;      /* that's DLT_FDDI */
660
661         case WTAP_ENCAP_NETTL_FDDI:
662                 /*
663                  * This will discard the nettl information, as that's
664                  * in the pseudo-header.
665                  *
666                  * XXX - what about Ethernet and Token Ring?
667                  */
668                 return 10;      /* that's DLT_FDDI */
669
670         case WTAP_ENCAP_FRELAY_WITH_PHDR:
671                 /*
672                  * This will discard the pseudo-header information.
673                  */
674                 return 107;
675
676         case WTAP_ENCAP_IEEE_802_11_WITH_RADIO:
677                 /*
678                  * Map this to DLT_IEEE802_11, for now, even though
679                  * that means the radio information will be lost.
680                  * We should try to map those values to radiotap
681                  * values and write this out as a radiotap file,
682                  * if possible.
683                  */
684                 return 105;
685         }
686
687         for (i = 0; i < NUM_PCAP_ENCAPS; i++) {
688                 if (pcap_to_wtap_map[i].wtap_encap_value == encap)
689                         return pcap_to_wtap_map[i].linktype_value;
690         }
691         return -1;
692 }
693
694 gboolean
695 wtap_encap_requires_phdr(int wtap_encap)
696 {
697         switch (wtap_encap) {
698
699         case WTAP_ENCAP_ATM_PDUS:
700         case WTAP_ENCAP_IRDA:
701         case WTAP_ENCAP_MTP2_WITH_PHDR:
702         case WTAP_ENCAP_LINUX_LAPD:
703         case WTAP_ENCAP_SITA:
704         case WTAP_ENCAP_BLUETOOTH_H4_WITH_PHDR:
705         case WTAP_ENCAP_BLUETOOTH_LINUX_MONITOR:
706         case WTAP_ENCAP_NFC_LLCP:
707         case WTAP_ENCAP_PPP_WITH_PHDR:
708         case WTAP_ENCAP_ERF:
709         case WTAP_ENCAP_I2C:
710                 return TRUE;
711         }
712         return FALSE;
713 }
714
715
716 /*
717  * Various pseudo-headers that appear at the beginning of packet data.
718  *
719  * We represent them as sets of offsets, as they might not be aligned on
720  * an appropriate structure boundary in the buffer, and as that makes them
721  * independent of the way the compiler might align fields.
722  */
723
724 /*
725  * The link-layer header on SunATM packets.
726  */
727 #define SUNATM_FLAGS    0       /* destination and traffic type - 1 byte */
728 #define SUNATM_VPI      1       /* VPI - 1 byte */
729 #define SUNATM_VCI      2       /* VCI - 2 bytes */
730 #define SUNATM_LEN      4       /* length of the header */
731
732 /*
733  * The link-layer header on Nokia IPSO ATM packets.
734  */
735 #define NOKIAATM_FLAGS  0       /* destination - 1 byte */
736 #define NOKIAATM_VPI    1       /* VPI - 1 byte */
737 #define NOKIAATM_VCI    2       /* VCI - 2 bytes */
738 #define NOKIAATM_LEN    4       /* length of the header */
739
740 /*
741  * The link-layer header on Nokia IPSO packets.
742  */
743 #define NOKIA_LEN       4       /* length of the header */
744
745 /*
746  * The fake link-layer header of IrDA packets as introduced by Jean Tourrilhes
747  * to libpcap.
748  */
749 #define IRDA_SLL_PKTTYPE_OFFSET         0       /* packet type - 2 bytes */
750 /* 12 unused bytes */
751 #define IRDA_SLL_PROTOCOL_OFFSET        14      /* protocol, should be ETH_P_LAPD - 2 bytes */
752 #define IRDA_SLL_LEN                    16      /* length of the header */
753
754 /*
755  * A header containing additional MTP information.
756  */
757 #define MTP2_SENT_OFFSET                0       /* 1 byte */
758 #define MTP2_ANNEX_A_USED_OFFSET        1       /* 1 byte */
759 #define MTP2_LINK_NUMBER_OFFSET         2       /* 2 bytes */
760 #define MTP2_HDR_LEN                    4       /* length of the header */
761
762 /*
763  * A header containing additional SITA WAN information.
764  */
765 #define SITA_FLAGS_OFFSET               0       /* 1 byte */
766 #define SITA_SIGNALS_OFFSET             1       /* 1 byte */
767 #define SITA_ERRORS1_OFFSET             2       /* 1 byte */
768 #define SITA_ERRORS2_OFFSET             3       /* 1 byte */
769 #define SITA_PROTO_OFFSET               4       /* 1 byte */
770 #define SITA_HDR_LEN                    5       /* length of the header */
771
772 /*
773  * The fake link-layer header of LAPD packets.
774  */
775 #ifndef ETH_P_LAPD
776 #define ETH_P_LAPD 0x0030
777 #endif
778
779 #define LAPD_SLL_PKTTYPE_OFFSET         0       /* packet type - 2 bytes */
780 #define LAPD_SLL_HATYPE_OFFSET          2       /* hardware address type - 2 bytes */
781 #define LAPD_SLL_HALEN_OFFSET           4       /* hardware address length - 2 bytes */
782 #define LAPD_SLL_ADDR_OFFSET            6       /* address - 8 bytes */
783 #define LAPD_SLL_PROTOCOL_OFFSET        14      /* protocol, should be ETH_P_LAPD - 2 bytes */
784 #define LAPD_SLL_LEN                    16      /* length of the header */
785
786 /*
787  * The NFC LLCP per-packet header.
788  */
789 #define LLCP_ADAPTER_OFFSET             0
790 #define LLCP_FLAGS_OFFSET               1
791 #define LLCP_HEADER_LEN                 2
792
793 /*
794  * I2C link-layer on-disk format
795  */
796 struct i2c_file_hdr {
797         guint8 bus;
798         guint8 flags[4];
799 };
800
801 static gboolean
802 pcap_read_sunatm_pseudoheader(FILE_T fh,
803     union wtap_pseudo_header *pseudo_header, int *err, gchar **err_info)
804 {
805         guint8  atm_phdr[SUNATM_LEN];
806         guint8  vpi;
807         guint16 vci;
808
809         if (!wtap_read_bytes(fh, atm_phdr, SUNATM_LEN, err, err_info))
810                 return FALSE;
811
812         vpi = atm_phdr[SUNATM_VPI];
813         vci = pntoh16(&atm_phdr[SUNATM_VCI]);
814
815         switch (atm_phdr[SUNATM_FLAGS] & 0x0F) {
816
817         case 0x01:      /* LANE */
818                 pseudo_header->atm.aal = AAL_5;
819                 pseudo_header->atm.type = TRAF_LANE;
820                 break;
821
822         case 0x02:      /* RFC 1483 LLC multiplexed traffic */
823                 pseudo_header->atm.aal = AAL_5;
824                 pseudo_header->atm.type = TRAF_LLCMX;
825                 break;
826
827         case 0x05:      /* ILMI */
828                 pseudo_header->atm.aal = AAL_5;
829                 pseudo_header->atm.type = TRAF_ILMI;
830                 break;
831
832         case 0x06:      /* Q.2931 */
833                 pseudo_header->atm.aal = AAL_SIGNALLING;
834                 pseudo_header->atm.type = TRAF_UNKNOWN;
835                 break;
836
837         case 0x03:      /* MARS (RFC 2022) */
838                 pseudo_header->atm.aal = AAL_5;
839                 pseudo_header->atm.type = TRAF_UNKNOWN;
840                 break;
841
842         case 0x04:      /* IFMP (Ipsilon Flow Management Protocol; see RFC 1954) */
843                 pseudo_header->atm.aal = AAL_5;
844                 pseudo_header->atm.type = TRAF_UNKNOWN; /* XXX - TRAF_IPSILON? */
845                 break;
846
847         default:
848                 /*
849                  * Assume it's AAL5, unless it's VPI 0 and VCI 5, in which
850                  * case assume it's AAL_SIGNALLING; we know nothing more
851                  * about it.
852                  *
853                  * XXX - is this necessary?  Or are we guaranteed that
854                  * all signalling traffic has a type of 0x06?
855                  *
856                  * XXX - is this guaranteed to be AAL5?  Or, if the type is
857                  * 0x00 ("raw"), might it be non-AAL5 traffic?
858                  */
859                 if (vpi == 0 && vci == 5)
860                         pseudo_header->atm.aal = AAL_SIGNALLING;
861                 else
862                         pseudo_header->atm.aal = AAL_5;
863                 pseudo_header->atm.type = TRAF_UNKNOWN;
864                 break;
865         }
866         pseudo_header->atm.subtype = TRAF_ST_UNKNOWN;
867
868         pseudo_header->atm.vpi = vpi;
869         pseudo_header->atm.vci = vci;
870         pseudo_header->atm.channel = (atm_phdr[SUNATM_FLAGS] & 0x80) ? 0 : 1;
871
872         /* We don't have this information */
873         pseudo_header->atm.flags = 0;
874         pseudo_header->atm.cells = 0;
875         pseudo_header->atm.aal5t_u2u = 0;
876         pseudo_header->atm.aal5t_len = 0;
877         pseudo_header->atm.aal5t_chksum = 0;
878
879         return TRUE;
880 }
881
882 static gboolean
883 pcap_read_nokiaatm_pseudoheader(FILE_T fh,
884     union wtap_pseudo_header *pseudo_header, int *err, gchar **err_info)
885 {
886         guint8  atm_phdr[NOKIAATM_LEN];
887         guint8  vpi;
888         guint16 vci;
889
890         if (!wtap_read_bytes(fh, atm_phdr, NOKIAATM_LEN, err, err_info))
891                 return FALSE;
892
893         vpi = atm_phdr[NOKIAATM_VPI];
894         vci = pntoh16(&atm_phdr[NOKIAATM_VCI]);
895
896         pseudo_header->atm.vpi = vpi;
897         pseudo_header->atm.vci = vci;
898         pseudo_header->atm.channel = (atm_phdr[NOKIAATM_FLAGS] & 0x80) ? 0 : 1;
899
900         /* We don't have this information */
901         pseudo_header->atm.flags = 0;
902         pseudo_header->atm.cells = 0;
903         pseudo_header->atm.aal5t_u2u = 0;
904         pseudo_header->atm.aal5t_len = 0;
905         pseudo_header->atm.aal5t_chksum = 0;
906
907         return TRUE;
908 }
909
910 static gboolean
911 pcap_read_nokia_pseudoheader(FILE_T fh,
912     union wtap_pseudo_header *pseudo_header, int *err, gchar **err_info)
913 {
914         guint8  phdr[NOKIA_LEN];
915
916
917         /* backtrack to read the 4 mysterious bytes that aren't considered
918         * part of the packet size
919         */
920         if (file_seek(fh, -NOKIA_LEN, SEEK_CUR, err) == -1)
921         {
922                 *err = file_error(fh, err_info);
923                 if (*err == 0)
924                         *err = WTAP_ERR_SHORT_READ;
925                 return FALSE;
926         }
927
928         if (!wtap_read_bytes(fh, phdr, NOKIA_LEN, err, err_info))
929                 return FALSE;
930
931         memcpy(pseudo_header->nokia.stuff, phdr, NOKIA_LEN);
932
933         return TRUE;
934 }
935
936 static gboolean
937 pcap_read_irda_pseudoheader(FILE_T fh, union wtap_pseudo_header *pseudo_header,
938     int *err, gchar **err_info)
939 {
940         guint8  irda_phdr[IRDA_SLL_LEN];
941
942         if (!wtap_read_bytes(fh, irda_phdr, IRDA_SLL_LEN, err, err_info))
943                 return FALSE;
944
945         if (pntoh16(&irda_phdr[IRDA_SLL_PROTOCOL_OFFSET]) != 0x0017) {
946                 *err = WTAP_ERR_BAD_FILE;
947                 if (err_info != NULL)
948                         *err_info = g_strdup("libpcap: IrDA capture has a packet with an invalid sll_protocol field");
949                 return FALSE;
950         }
951
952         pseudo_header->irda.pkttype = pntoh16(&irda_phdr[IRDA_SLL_PKTTYPE_OFFSET]);
953
954         return TRUE;
955 }
956
957 static gboolean
958 pcap_read_mtp2_pseudoheader(FILE_T fh, union wtap_pseudo_header *pseudo_header, int *err, gchar **err_info)
959 {
960         guint8 mtp2_hdr[MTP2_HDR_LEN];
961
962         if (!wtap_read_bytes(fh, mtp2_hdr, MTP2_HDR_LEN, err, err_info))
963                 return FALSE;
964
965         pseudo_header->mtp2.sent         = mtp2_hdr[MTP2_SENT_OFFSET];
966         pseudo_header->mtp2.annex_a_used = mtp2_hdr[MTP2_ANNEX_A_USED_OFFSET];
967         pseudo_header->mtp2.link_number  = pntoh16(&mtp2_hdr[MTP2_LINK_NUMBER_OFFSET]);
968
969         return TRUE;
970 }
971
972 static gboolean
973 pcap_read_lapd_pseudoheader(FILE_T fh, union wtap_pseudo_header *pseudo_header,
974     int *err, gchar **err_info)
975 {
976         guint8  lapd_phdr[LAPD_SLL_LEN];
977
978         if (!wtap_read_bytes(fh, lapd_phdr, LAPD_SLL_LEN, err, err_info))
979                 return FALSE;
980
981         if (pntoh16(&lapd_phdr[LAPD_SLL_PROTOCOL_OFFSET]) != ETH_P_LAPD) {
982                 *err = WTAP_ERR_BAD_FILE;
983                 if (err_info != NULL)
984                         *err_info = g_strdup("libpcap: LAPD capture has a packet with an invalid sll_protocol field");
985                 return FALSE;
986         }
987
988         pseudo_header->lapd.pkttype = pntoh16(&lapd_phdr[LAPD_SLL_PKTTYPE_OFFSET]);
989         pseudo_header->lapd.we_network = !!lapd_phdr[LAPD_SLL_ADDR_OFFSET+0];
990
991         return TRUE;
992 }
993
994 static gboolean
995 pcap_read_sita_pseudoheader(FILE_T fh, union wtap_pseudo_header *pseudo_header, int *err, gchar **err_info)
996 {
997         guint8  sita_phdr[SITA_HDR_LEN];
998
999         if (!wtap_read_bytes(fh, sita_phdr, SITA_HDR_LEN, err, err_info))
1000                 return FALSE;
1001
1002         pseudo_header->sita.sita_flags   = sita_phdr[SITA_FLAGS_OFFSET];
1003         pseudo_header->sita.sita_signals = sita_phdr[SITA_SIGNALS_OFFSET];
1004         pseudo_header->sita.sita_errors1 = sita_phdr[SITA_ERRORS1_OFFSET];
1005         pseudo_header->sita.sita_errors2 = sita_phdr[SITA_ERRORS2_OFFSET];
1006         pseudo_header->sita.sita_proto   = sita_phdr[SITA_PROTO_OFFSET];
1007
1008         return TRUE;
1009 }
1010
1011 /*
1012  * When not using the memory-mapped interface to capture USB events,
1013  * code that reads those events can use the MON_IOCX_GET ioctl to
1014  * read a 48-byte header consisting of a "struct linux_usb_phdr", as
1015  * defined below, followed immediately by one of:
1016  *
1017  *      8 bytes of a "struct usb_device_setup_hdr", if "setup_flag"
1018  *      in the preceding "struct linux_usb_phdr" is 0;
1019  *
1020  *      in Linux 2.6.30 or later, 8 bytes of a "struct iso_rec", if
1021  *      this is an isochronous transfer;
1022  *
1023  *      8 bytes of junk, otherwise.
1024  *
1025  * In Linux 2.6.31 and later, it can also use the MON_IOCX_GETX ioctl
1026  * to read a 64-byte header; that header consists of the 48 bytes
1027  * above, followed immediately by 16 bytes of a "struct linux_usb_phdr_ext",
1028  * as defined below.
1029  *
1030  * In Linux 2.6.21 and later, there's a memory-mapped interface to
1031  * capture USB events.  In that interface, the events in the memory-mapped
1032  * buffer have a 64-byte header, followed immediately by the data.
1033  * In Linux 2.6.21 through 2.6.30.x, the 64-byte header is the 48-byte
1034  * header described above, followed by 16 bytes of zeroes; in Linux
1035  * 2.6.31 and later, the 64-byte header is the 64-byte header described
1036  * above.
1037  *
1038  * See linux/Documentation/usb/usbmon.txt and libpcap/pcap/usb.h for details.
1039  *
1040  * With WTAP_ENCAP_USB_LINUX, packets have the 48-byte header; with
1041  * WTAP_ENCAP_USB_LINUX_MMAPPED, they have the 64-byte header.  There
1042  * is no indication of whether the header has the "struct iso_rec", or
1043  * whether the last 16 bytes of a 64-byte header are all zeros or are
1044  * a "struct linux_usb_phdr_ext".
1045  */
1046
1047 /*
1048  * URB transfer_type values
1049  */
1050 #define URB_ISOCHRONOUS   0x0
1051 #define URB_INTERRUPT     0x1
1052 #define URB_CONTROL       0x2
1053 #define URB_BULK          0x3
1054
1055 /*
1056  * Information from the URB for Isochronous transfers.
1057  *
1058  * This structure is 8 bytes long.
1059  */
1060 struct iso_rec {
1061         gint32 error_count;
1062         gint32 numdesc;
1063 };
1064
1065 /*
1066  * Header prepended by Linux kernel to each USB event.
1067  *
1068  * (Setup flag is '-', 'D', 'Z', or 0.  Data flag is '<', '>', 'Z', or 0.)
1069  *
1070  * The values are in *host* byte order.
1071  */
1072 struct linux_usb_phdr {
1073         guint64 id;             /* urb id, to link submission and completion events */
1074         guint8 event_type;      /* Submit ('S'), Completed ('C'), Error ('E') */
1075         guint8 transfer_type;   /* ISO (0), Intr, Control, Bulk (3) */
1076         guint8 endpoint_number; /* Endpoint number (0-15) and transfer direction */
1077         guint8 device_address;  /* 0-127 */
1078         guint16 bus_id;
1079         gint8 setup_flag;       /* 0, if the urb setup header is meaningful */
1080         gint8 data_flag;        /* 0, if urb data is present */
1081         gint64 ts_sec;
1082         gint32 ts_usec;
1083         gint32 status;
1084         guint32 urb_len;        /* whole len of urb this event refers to */
1085         guint32 data_len;       /* amount of urb data really present in this event */
1086
1087         /*
1088          * Packet-type-dependent data.
1089          * USB setup information of setup_flag is true.
1090          * Otherwise, some isochronous transfer information.
1091          */
1092         union {
1093                 guint8 data[8];
1094                 struct iso_rec iso;
1095         } s;
1096
1097         /*
1098          * This data is provided by Linux 2.6.31 and later kernels.
1099          *
1100          * For WTAP_ENCAP_USB_LINUX, it's not in the pseudo-header, so
1101          * the pseudo-header is always 48 bytes long, including the
1102          * packet-type-dependent data.
1103          *
1104          * For WTAP_ENCAP_USB_LINUX_MMAPPED, the pseudo-header is always
1105          * 64 bytes long, with the packet-type-dependent data preceding
1106          * these last 16 bytes.  In pre-2.6.31 kernels, it's zero padding;
1107          * in 2.6.31 and later, it's the following data.
1108          */
1109         gint32 interval;    /* only for Interrupt and Isochronous events */
1110         gint32 start_frame; /* for Isochronous */
1111         guint32 xfer_flags; /* copy of URB's transfer_flags */
1112         guint32 ndesc;      /* actual number of isochronous descriptors */
1113 };
1114
1115 struct linux_usb_isodesc {
1116         gint32 iso_status;
1117         guint32 iso_off;
1118         guint32 iso_len;
1119         guint32 _pad;
1120 };
1121
1122 /*
1123  * USB setup header as defined in USB specification
1124  * See usb_20.pdf, Chapter 9.3 'USB Device Requests' for details.
1125  * http://www.usb.org/developers/docs/usb_20_122909-2.zip
1126  *
1127  * This structure is 8 bytes long.
1128  */
1129 struct usb_device_setup_hdr {
1130         gint8 bmRequestType;
1131         guint8 bRequest;
1132         guint16 wValue;
1133         guint16 wIndex;
1134         guint16 wLength;
1135 };
1136
1137
1138 /*
1139  * Offset of the *end* of a field within a particular structure.
1140  */
1141 #define END_OFFSETOF(basep, fieldp) \
1142         (((char *)(void *)(fieldp)) - ((char *)(void *)(basep)) + \
1143             sizeof(*fieldp))
1144
1145 /*
1146  * Is that offset within the bounds of the packet?
1147  */
1148 #define WITHIN_PACKET(basep, fieldp) \
1149         (packet_size >= END_OFFSETOF((basep), (fieldp)))
1150
1151 #define CHECK_AND_SWAP16(fieldp) \
1152         { \
1153                 if (!WITHIN_PACKET(usb_phdr, fieldp)) \
1154                         return; \
1155                 PBSWAP16((guint8 *)fieldp); \
1156         }
1157
1158 #define CHECK_AND_SWAP32(fieldp) \
1159         { \
1160                 if (!WITHIN_PACKET(usb_phdr, fieldp)) \
1161                         return; \
1162                 PBSWAP32((guint8 *)fieldp); \
1163         }
1164
1165 #define CHECK_AND_SWAP64(fieldp) \
1166         { \
1167                 if (!WITHIN_PACKET(usb_phdr, fieldp)) \
1168                         return; \
1169                 PBSWAP64((guint8 *)fieldp); \
1170         }
1171
1172 static void
1173 pcap_byteswap_linux_usb_pseudoheader(struct wtap_pkthdr *phdr, guint8 *pd,
1174     gboolean header_len_64_bytes)
1175 {
1176         guint packet_size;
1177         struct linux_usb_phdr *usb_phdr;
1178         struct linux_usb_isodesc *pisodesc;
1179         gint32 iso_numdesc, i;
1180
1181         /*
1182          * Minimum of captured and actual length (just in case the
1183          * actual length < the captured length, which Should Never
1184          * Happen).
1185          */
1186         packet_size = phdr->caplen;
1187         if (packet_size > phdr->len)
1188                 packet_size = phdr->len;
1189
1190         /*
1191          * Greasy hack, but we never directly dereference any of
1192          * the fields in *usb_phdr, we just get offsets of and
1193          * addresses of its members and byte-swap it with a
1194          * byte-at-a-time macro, so it's alignment-safe.
1195          */
1196         usb_phdr = (struct linux_usb_phdr *)(void *)pd;
1197
1198         CHECK_AND_SWAP64(&usb_phdr->id);
1199         CHECK_AND_SWAP16(&usb_phdr->bus_id);
1200         CHECK_AND_SWAP64(&usb_phdr->ts_sec);
1201         CHECK_AND_SWAP32(&usb_phdr->ts_usec);
1202         CHECK_AND_SWAP32(&usb_phdr->status);
1203         CHECK_AND_SWAP32(&usb_phdr->urb_len);
1204         CHECK_AND_SWAP32(&usb_phdr->data_len);
1205
1206         if (usb_phdr->transfer_type == URB_ISOCHRONOUS) {
1207                 CHECK_AND_SWAP32(&usb_phdr->s.iso.error_count);
1208                 CHECK_AND_SWAP32(&usb_phdr->s.iso.numdesc);
1209         }
1210
1211         if (header_len_64_bytes) {
1212                 /*
1213                  * This is either the "version 1" header, with
1214                  * 16 bytes of additional fields at the end, or
1215                  * a "version 0" header from a memory-mapped
1216                  * capture, with 16 bytes of zeroed-out padding
1217                  * at the end.  Byte swap them as if this were
1218                  * a "version 1" header.
1219                  *
1220                  * Yes, the first argument to END_OFFSETOF() should
1221                  * be usb_phdr, not usb_phdr_ext; we want the offset of
1222                  * the additional fields from the beginning of
1223                  * the packet.
1224                  */
1225                 CHECK_AND_SWAP32(&usb_phdr->interval);
1226                 CHECK_AND_SWAP32(&usb_phdr->start_frame);
1227                 CHECK_AND_SWAP32(&usb_phdr->xfer_flags);
1228                 CHECK_AND_SWAP32(&usb_phdr->ndesc);
1229         }
1230
1231         if (usb_phdr->transfer_type == URB_ISOCHRONOUS) {
1232                 /* swap the values in struct linux_usb_isodesc */
1233
1234                 /*
1235                  * See previous "Greasy hack" comment.
1236                  */
1237                 if (header_len_64_bytes) {
1238                         pisodesc = (struct linux_usb_isodesc*)(void *)(pd + 64);
1239                 } else {
1240                         pisodesc = (struct linux_usb_isodesc*)(void *)(pd + 48);
1241                 }
1242                 iso_numdesc = usb_phdr->s.iso.numdesc;
1243                 for (i = 0; i < iso_numdesc; i++) {
1244                         CHECK_AND_SWAP32(&pisodesc->iso_status);
1245                         CHECK_AND_SWAP32(&pisodesc->iso_off);
1246                         CHECK_AND_SWAP32(&pisodesc->iso_len);
1247                         CHECK_AND_SWAP32(&pisodesc->_pad);
1248
1249                         pisodesc++;
1250                 }
1251         }
1252 }
1253
1254 struct nflog_hdr {
1255         guint8 nflog_family;            /* address family */
1256         guint8 nflog_version;           /* version */
1257         guint16 nflog_rid;              /* resource ID */
1258 };
1259
1260 struct nflog_tlv {
1261         guint16 tlv_length;             /* tlv length */
1262         guint16 tlv_type;               /* tlv type */
1263         /* value follows this */
1264 };
1265
1266 static void
1267 pcap_byteswap_nflog_pseudoheader(struct wtap_pkthdr *phdr, guint8 *pd)
1268 {
1269         guint packet_size;
1270         guint8 *p;
1271         struct nflog_hdr *nfhdr;
1272         struct nflog_tlv *tlv;
1273         guint size;
1274
1275         /*
1276          * Minimum of captured and actual length (just in case the
1277          * actual length < the captured length, which Should Never
1278          * Happen).
1279          */
1280         packet_size = phdr->caplen;
1281         if (packet_size > phdr->len)
1282                 packet_size = phdr->len;
1283
1284         if (packet_size < sizeof(struct nflog_hdr)) {
1285                 /* Not enough data to have any TLVs. */
1286                 return;
1287         }
1288
1289         p = pd;
1290         nfhdr = (struct nflog_hdr *)pd;
1291         if (nfhdr->nflog_version != 0) {
1292                 /* Unknown NFLOG version */
1293                 return;
1294         }
1295
1296         packet_size -= (guint)sizeof(struct nflog_hdr);
1297         p += sizeof(struct nflog_hdr);
1298
1299         while (packet_size >= sizeof(struct nflog_tlv)) {
1300                 tlv = (struct nflog_tlv *) p;
1301
1302                 /* Swap the type and length. */
1303                 PBSWAP16((guint8 *)&tlv->tlv_type);
1304                 PBSWAP16((guint8 *)&tlv->tlv_length);
1305
1306                 /* Get the length of the TLV. */
1307                 size = tlv->tlv_length;
1308                 if (size % 4 != 0)
1309                         size += 4 - size % 4;
1310
1311                 /* Is the TLV's length less than the minimum? */
1312                 if (size < sizeof(struct nflog_tlv)) {
1313                         /* Yes. Give up now. */
1314                         return;
1315                 }
1316
1317                 /* Do we have enough data for the full TLV? */
1318                 if (packet_size < size) {
1319                         /* No. */
1320                         return;
1321                 }
1322
1323                 /* Skip over the TLV. */
1324                 packet_size -= size;
1325                 p += size;
1326         }
1327 }
1328
1329 /*
1330  * Pseudo-header at the beginning of DLT_BLUETOOTH_HCI_H4_WITH_PHDR frames.
1331  * Values in network byte order.
1332  */
1333 struct libpcap_bt_phdr {
1334         guint32 direction;     /* Bit 0 hold the frame direction. */
1335 };
1336
1337 #define LIBPCAP_BT_PHDR_SENT    0
1338 #define LIBPCAP_BT_PHDR_RECV    1
1339
1340 static gboolean
1341 pcap_read_bt_pseudoheader(FILE_T fh,
1342     union wtap_pseudo_header *pseudo_header, int *err, gchar **err_info)
1343 {
1344         struct libpcap_bt_phdr phdr;
1345
1346         if (!wtap_read_bytes(fh, &phdr, sizeof (struct libpcap_bt_phdr),
1347             err, err_info))
1348                 return FALSE;
1349         pseudo_header->p2p.sent = ((g_ntohl(phdr.direction) & LIBPCAP_BT_PHDR_RECV) == 0)? TRUE: FALSE;
1350         return TRUE;
1351 }
1352
1353 /*
1354  * Pseudo-header at the beginning of DLT_BLUETOOTH_LINUX_MONITOR frames.
1355  * Values in network byte order.
1356  */
1357 struct libpcap_bt_monitor_phdr {
1358         guint16 adapter_id;
1359         guint16 opcode;
1360 };
1361
1362 static gboolean
1363 pcap_read_bt_monitor_pseudoheader(FILE_T fh,
1364     union wtap_pseudo_header *pseudo_header, int *err, gchar **err_info)
1365 {
1366         struct libpcap_bt_monitor_phdr phdr;
1367
1368         if (!wtap_read_bytes(fh, &phdr, sizeof (struct libpcap_bt_monitor_phdr),
1369             err, err_info))
1370                 return FALSE;
1371
1372         pseudo_header->btmon.adapter_id = g_ntohs(phdr.adapter_id);
1373         pseudo_header->btmon.opcode = g_ntohs(phdr.opcode);
1374         return TRUE;
1375 }
1376
1377 static gboolean
1378 pcap_read_llcp_pseudoheader(FILE_T fh,
1379     union wtap_pseudo_header *pseudo_header, int *err, gchar **err_info)
1380 {
1381         guint8 phdr[LLCP_HEADER_LEN];
1382
1383         if (!wtap_read_bytes(fh, phdr, LLCP_HEADER_LEN, err, err_info))
1384                 return FALSE;
1385         pseudo_header->llcp.adapter = phdr[LLCP_ADAPTER_OFFSET];
1386         pseudo_header->llcp.flags = phdr[LLCP_FLAGS_OFFSET];
1387         return TRUE;
1388 }
1389
1390 /*
1391  * Pseudo-header at the beginning of DLT_PPP_WITH_DIR frames.
1392  */
1393 struct libpcap_ppp_phdr {
1394         guint8 direction;
1395 };
1396
1397 #define LIBPCAP_PPP_PHDR_RECV    0
1398 #define LIBPCAP_PPP_PHDR_SENT    1
1399
1400 static gboolean
1401 pcap_read_ppp_pseudoheader(FILE_T fh,
1402     union wtap_pseudo_header *pseudo_header, int *err, gchar **err_info)
1403 {
1404         struct libpcap_ppp_phdr phdr;
1405
1406         if (!wtap_read_bytes(fh, &phdr, sizeof (struct libpcap_ppp_phdr),
1407             err, err_info))
1408                 return FALSE;
1409         pseudo_header->p2p.sent = (phdr.direction == LIBPCAP_PPP_PHDR_SENT) ? TRUE: FALSE;
1410         return TRUE;
1411 }
1412
1413 static gboolean
1414 pcap_read_erf_pseudoheader(FILE_T fh, struct wtap_pkthdr *whdr,
1415                            union wtap_pseudo_header *pseudo_header, int *err, gchar **err_info)
1416 {
1417         guint8 erf_hdr[sizeof(struct erf_phdr)];
1418
1419         if (!wtap_read_bytes(fh, erf_hdr, sizeof(struct erf_phdr), err, err_info))
1420                 return FALSE;
1421         pseudo_header->erf.phdr.ts = pletoh64(&erf_hdr[0]); /* timestamp */
1422         pseudo_header->erf.phdr.type =  erf_hdr[8];
1423         pseudo_header->erf.phdr.flags = erf_hdr[9];
1424         pseudo_header->erf.phdr.rlen = pntoh16(&erf_hdr[10]);
1425         pseudo_header->erf.phdr.lctr = pntoh16(&erf_hdr[12]);
1426         pseudo_header->erf.phdr.wlen = pntoh16(&erf_hdr[14]);
1427
1428         /* The high 32 bits of the timestamp contain the integer number of seconds
1429          * while the lower 32 bits contain the binary fraction of the second.
1430          * This allows an ultimate resolution of 1/(2^32) seconds, or approximately 233 picoseconds */
1431         if (whdr) {
1432                 guint64 ts = pseudo_header->erf.phdr.ts;
1433                 whdr->ts.secs = (guint32) (ts >> 32);
1434                 ts = ((ts & 0xffffffff) * 1000 * 1000 * 1000);
1435                 ts += (ts & 0x80000000) << 1; /* rounding */
1436                 whdr->ts.nsecs = ((guint32) (ts >> 32));
1437                 if ( whdr->ts.nsecs >= 1000000000) {
1438                         whdr->ts.nsecs -= 1000000000;
1439                         whdr->ts.secs += 1;
1440                 }
1441         }
1442         return TRUE;
1443 }
1444
1445 /*
1446  * If the type of record given in the pseudo header indicate the presence of an extension
1447  * header then, read all the extension headers
1448  */
1449 static gboolean
1450 pcap_read_erf_exheader(FILE_T fh, union wtap_pseudo_header *pseudo_header,
1451                        int *err, gchar **err_info, guint * psize)
1452 {
1453         guint8 erf_exhdr[8];
1454         guint64 erf_exhdr_sw;
1455         int i = 0, max = sizeof(pseudo_header->erf.ehdr_list)/sizeof(struct erf_ehdr);
1456         guint8 type;
1457         *psize = 0;
1458         if (pseudo_header->erf.phdr.type & 0x80){
1459                 do{
1460                         if (!wtap_read_bytes(fh, erf_exhdr, 8, err, err_info))
1461                                 return FALSE;
1462                         type = erf_exhdr[0];
1463                         erf_exhdr_sw = pntoh64(erf_exhdr);
1464                         if (i < max)
1465                                 memcpy(&pseudo_header->erf.ehdr_list[i].ehdr, &erf_exhdr_sw, sizeof(erf_exhdr_sw));
1466                         *psize += 8;
1467                         i++;
1468                 } while (type & 0x80);
1469         }
1470         return TRUE;
1471 }
1472
1473 /*
1474  * If the type of record given in the pseudo header indicate the precense of a subheader
1475  * then, read this optional subheader
1476  */
1477 static gboolean
1478 pcap_read_erf_subheader(FILE_T fh, union wtap_pseudo_header *pseudo_header,
1479                         int *err, gchar **err_info, guint * psize)
1480 {
1481         guint8 erf_subhdr[sizeof(union erf_subhdr)];
1482
1483         *psize=0;
1484         switch(pseudo_header->erf.phdr.type & 0x7F) {
1485         case ERF_TYPE_MC_HDLC:
1486         case ERF_TYPE_MC_RAW:
1487         case ERF_TYPE_MC_ATM:
1488         case ERF_TYPE_MC_RAW_CHANNEL:
1489         case ERF_TYPE_MC_AAL5:
1490         case ERF_TYPE_COLOR_MC_HDLC_POS:
1491                 /* Extract the Multi Channel header to include it in the pseudo header part */
1492                 if (!wtap_read_bytes(fh, erf_subhdr, sizeof(erf_mc_header_t), err, err_info))
1493                         return FALSE;
1494                 pseudo_header->erf.subhdr.mc_hdr = pntoh32(&erf_subhdr[0]);
1495                 *psize = sizeof(erf_mc_header_t);
1496                 break;
1497         case ERF_TYPE_MC_AAL2:
1498                 /* Extract the AAL2 header to include it in the pseudo header part */
1499                 if (!wtap_read_bytes(fh, erf_subhdr, sizeof(erf_aal2_header_t), err, err_info))
1500                         return FALSE;
1501                 pseudo_header->erf.subhdr.aal2_hdr = pntoh32(&erf_subhdr[0]);
1502                 *psize = sizeof(erf_aal2_header_t);
1503                 break;
1504         case ERF_TYPE_ETH:
1505         case ERF_TYPE_COLOR_ETH:
1506         case ERF_TYPE_DSM_COLOR_ETH:
1507                 /* Extract the Ethernet additional header to include it in the pseudo header part */
1508                 if (!wtap_read_bytes(fh, erf_subhdr, sizeof(erf_eth_header_t), err, err_info))
1509                         return FALSE;
1510                 memcpy(&pseudo_header->erf.subhdr.eth_hdr, erf_subhdr, sizeof pseudo_header->erf.subhdr.eth_hdr);
1511                 *psize = sizeof(erf_eth_header_t);
1512                 break;
1513         default:
1514                 /* No optional pseudo header for this ERF type */
1515                 break;
1516         }
1517         return TRUE;
1518 }
1519
1520 static gboolean
1521 pcap_read_i2c_pseudoheader(FILE_T fh, union wtap_pseudo_header *pseudo_header, int *err, gchar **err_info)
1522 {
1523         struct i2c_file_hdr i2c_hdr;
1524
1525         if (!wtap_read_bytes(fh, &i2c_hdr, sizeof (i2c_hdr), err, err_info))
1526                 return FALSE;
1527
1528         pseudo_header->i2c.is_event = i2c_hdr.bus & 0x80 ? 1 : 0;
1529         pseudo_header->i2c.bus = i2c_hdr.bus & 0x7f;
1530         pseudo_header->i2c.flags = pntoh32(&i2c_hdr.flags);
1531
1532         return TRUE;
1533 }
1534
1535 int
1536 pcap_process_pseudo_header(FILE_T fh, int file_type, int wtap_encap,
1537     guint packet_size, gboolean check_packet_size,
1538     struct wtap_pkthdr *phdr, int *err, gchar **err_info)
1539 {
1540         int phdr_len = 0;
1541         guint size;
1542
1543         switch (wtap_encap) {
1544
1545         case WTAP_ENCAP_ATM_PDUS:
1546                 if (file_type == WTAP_FILE_TYPE_SUBTYPE_PCAP_NOKIA) {
1547                         /*
1548                          * Nokia IPSO ATM.
1549                          */
1550                         if (check_packet_size && packet_size < NOKIAATM_LEN) {
1551                                 /*
1552                                  * Uh-oh, the packet isn't big enough to even
1553                                  * have a pseudo-header.
1554                                  */
1555                                 *err = WTAP_ERR_BAD_FILE;
1556                                 *err_info = g_strdup_printf("pcap: Nokia IPSO ATM file has a %u-byte packet, too small to have even an ATM pseudo-header",
1557                                     packet_size);
1558                                 return -1;
1559                         }
1560                         if (!pcap_read_nokiaatm_pseudoheader(fh,
1561                             &phdr->pseudo_header, err, err_info))
1562                                 return -1;      /* Read error */
1563
1564                         phdr_len = NOKIAATM_LEN;
1565                 } else {
1566                         /*
1567                          * SunATM.
1568                          */
1569                         if (check_packet_size && packet_size < SUNATM_LEN) {
1570                                 /*
1571                                  * Uh-oh, the packet isn't big enough to even
1572                                  * have a pseudo-header.
1573                                  */
1574                                 *err = WTAP_ERR_BAD_FILE;
1575                                 *err_info = g_strdup_printf("pcap: SunATM file has a %u-byte packet, too small to have even an ATM pseudo-header",
1576                                     packet_size);
1577                                 return -1;
1578                         }
1579                         if (!pcap_read_sunatm_pseudoheader(fh,
1580                             &phdr->pseudo_header, err, err_info))
1581                                 return -1;      /* Read error */
1582
1583                         phdr_len = SUNATM_LEN;
1584                 }
1585                 break;
1586
1587         case WTAP_ENCAP_ETHERNET:
1588                 if (file_type == WTAP_FILE_TYPE_SUBTYPE_PCAP_NOKIA) {
1589                         /*
1590                          * Nokia IPSO.  Psuedo header has already been read, but it's not considered
1591                          * part of the packet size, so reread it to store the data for later (when saving)
1592                          */
1593                         if (!pcap_read_nokia_pseudoheader(fh, &phdr->pseudo_header, err, err_info))
1594                                 return -1;      /* Read error */
1595                 }
1596
1597                 /*
1598                  * We don't know whether there's an FCS in this frame or not.
1599                  */
1600                 phdr->pseudo_header.eth.fcs_len = -1;
1601                 break;
1602
1603         case WTAP_ENCAP_IEEE_802_11:
1604         case WTAP_ENCAP_IEEE_802_11_PRISM:
1605         case WTAP_ENCAP_IEEE_802_11_RADIOTAP:
1606         case WTAP_ENCAP_IEEE_802_11_AVS:
1607                 /*
1608                  * We don't know whether there's an FCS in this frame or not,
1609                  * at least in pcap files.  For radiotap, that's indicated in
1610                  * the radiotap header.
1611                  *
1612                  * XXX - in pcap-ng, there *could* be a packet option
1613                  * indicating the FCS length.
1614                  */
1615                 memset(&phdr->pseudo_header.ieee_802_11, 0, sizeof(phdr->pseudo_header.ieee_802_11));
1616                 phdr->pseudo_header.ieee_802_11.fcs_len = -1;
1617                 phdr->pseudo_header.ieee_802_11.decrypted = FALSE;
1618                 phdr->pseudo_header.ieee_802_11.datapad = FALSE;
1619                 break;
1620
1621         case WTAP_ENCAP_IRDA:
1622                 if (check_packet_size && packet_size < IRDA_SLL_LEN) {
1623                         /*
1624                          * Uh-oh, the packet isn't big enough to even
1625                          * have a pseudo-header.
1626                          */
1627                         *err = WTAP_ERR_BAD_FILE;
1628                         *err_info = g_strdup_printf("pcap: IrDA file has a %u-byte packet, too small to have even an IrDA pseudo-header",
1629                             packet_size);
1630                         return -1;
1631                 }
1632                 if (!pcap_read_irda_pseudoheader(fh, &phdr->pseudo_header,
1633                     err, err_info))
1634                         return -1;      /* Read error */
1635
1636                 phdr_len = IRDA_SLL_LEN;
1637                 break;
1638
1639         case WTAP_ENCAP_MTP2_WITH_PHDR:
1640                 if (check_packet_size && packet_size < MTP2_HDR_LEN) {
1641                         /*
1642                          * Uh-oh, the packet isn't big enough to even
1643                          * have a pseudo-header.
1644                          */
1645                         *err = WTAP_ERR_BAD_FILE;
1646                         *err_info = g_strdup_printf("pcap: MTP2 file has a %u-byte packet, too small to have even an MTP2 pseudo-header",
1647                             packet_size);
1648                         return -1;
1649                 }
1650                 if (!pcap_read_mtp2_pseudoheader(fh, &phdr->pseudo_header,
1651                     err, err_info))
1652                         return -1;      /* Read error */
1653
1654                 phdr_len = MTP2_HDR_LEN;
1655                 break;
1656
1657         case WTAP_ENCAP_LINUX_LAPD:
1658                 if (check_packet_size && packet_size < LAPD_SLL_LEN) {
1659                         /*
1660                          * Uh-oh, the packet isn't big enough to even
1661                          * have a pseudo-header.
1662                          */
1663                         *err = WTAP_ERR_BAD_FILE;
1664                         *err_info = g_strdup_printf("pcap: LAPD file has a %u-byte packet, too small to have even a LAPD pseudo-header",
1665                             packet_size);
1666                         return -1;
1667                 }
1668                 if (!pcap_read_lapd_pseudoheader(fh, &phdr->pseudo_header,
1669                     err, err_info))
1670                         return -1;      /* Read error */
1671
1672                 phdr_len = LAPD_SLL_LEN;
1673                 break;
1674
1675         case WTAP_ENCAP_SITA:
1676                 if (check_packet_size && packet_size < SITA_HDR_LEN) {
1677                         /*
1678                          * Uh-oh, the packet isn't big enough to even
1679                          * have a pseudo-header.
1680                          */
1681                         *err = WTAP_ERR_BAD_FILE;
1682                         *err_info = g_strdup_printf("pcap: SITA file has a %u-byte packet, too small to have even a SITA pseudo-header",
1683                             packet_size);
1684                         return -1;
1685                 }
1686                 if (!pcap_read_sita_pseudoheader(fh, &phdr->pseudo_header,
1687                     err, err_info))
1688                         return -1;      /* Read error */
1689
1690                 phdr_len = SITA_HDR_LEN;
1691                 break;
1692
1693         case WTAP_ENCAP_BLUETOOTH_H4:
1694                 /* We don't have pseudoheader, so just pretend we received everything. */
1695                 phdr->pseudo_header.p2p.sent = FALSE;
1696                 break;
1697
1698         case WTAP_ENCAP_BLUETOOTH_H4_WITH_PHDR:
1699                 if (check_packet_size &&
1700                     packet_size < sizeof (struct libpcap_bt_phdr)) {
1701                         /*
1702                          * Uh-oh, the packet isn't big enough to even
1703                          * have a pseudo-header.
1704                          */
1705                         *err = WTAP_ERR_BAD_FILE;
1706                         *err_info = g_strdup_printf("pcap: libpcap bluetooth file has a %u-byte packet, too small to have even a pseudo-header",
1707                             packet_size);
1708                         return -1;
1709                 }
1710                 if (!pcap_read_bt_pseudoheader(fh,
1711                     &phdr->pseudo_header, err, err_info))
1712                         return -1;      /* Read error */
1713
1714                 phdr_len = (int)sizeof (struct libpcap_bt_phdr);
1715                 break;
1716
1717         case WTAP_ENCAP_BLUETOOTH_LINUX_MONITOR:
1718                 if (check_packet_size &&
1719                     packet_size < sizeof (struct libpcap_bt_monitor_phdr)) {
1720                         /*
1721                          * Uh-oh, the packet isn't big enough to even
1722                          * have a pseudo-header.
1723                          */
1724                         *err = WTAP_ERR_BAD_FILE;
1725                         *err_info = g_strdup_printf("pcap: libpcap bluetooth monitor file has a %u-byte packet, too small to have even a pseudo-header",
1726                             packet_size);
1727                         return -1;
1728                 }
1729                 if (!pcap_read_bt_monitor_pseudoheader(fh,
1730                     &phdr->pseudo_header, err, err_info))
1731                         return -1;      /* Read error */
1732
1733                 phdr_len = (int)sizeof (struct libpcap_bt_monitor_phdr);
1734                 break;
1735
1736         case WTAP_ENCAP_NFC_LLCP:
1737                 if (check_packet_size && packet_size < LLCP_HEADER_LEN) {
1738                         *err = WTAP_ERR_BAD_FILE;
1739                         *err_info = g_strdup_printf("pcap: libpcap llcp file too short");
1740                         return -1;
1741                 }
1742                 if (!pcap_read_llcp_pseudoheader(fh, &phdr->pseudo_header, err, err_info))
1743                         return -1;      /* Read error */
1744                 phdr_len = LLCP_HEADER_LEN;
1745                 break;
1746
1747         case WTAP_ENCAP_PPP_WITH_PHDR:
1748                 if (check_packet_size &&
1749                     packet_size < sizeof (struct libpcap_ppp_phdr)) {
1750                         /*
1751                          * Uh-oh, the packet isn't big enough to even
1752                          * have a pseudo-header.
1753                          */
1754                         *err = WTAP_ERR_BAD_FILE;
1755                         *err_info = g_strdup_printf("pcap: libpcap ppp file has a %u-byte packet, too small to have even a pseudo-header",
1756                             packet_size);
1757                         return -1;
1758                 }
1759                 if (!pcap_read_ppp_pseudoheader(fh,
1760                     &phdr->pseudo_header, err, err_info))
1761                         return -1;      /* Read error */
1762
1763                 phdr_len = (int)sizeof (struct libpcap_ppp_phdr);
1764                 break;
1765
1766         case WTAP_ENCAP_ERF:
1767                 if (check_packet_size &&
1768                     packet_size < sizeof(struct erf_phdr) ) {
1769                         /*
1770                          * Uh-oh, the packet isn't big enough to even
1771                          * have a pseudo-header.
1772                          */
1773                         *err = WTAP_ERR_BAD_FILE;
1774                         *err_info = g_strdup_printf("pcap: ERF file has a %u-byte packet, too small to have even an ERF pseudo-header",
1775                             packet_size);
1776                         return -1;
1777                 }
1778
1779                 if (!pcap_read_erf_pseudoheader(fh, phdr, &phdr->pseudo_header,
1780                     err, err_info))
1781                         return -1;      /* Read error */
1782
1783                 phdr_len = (int)sizeof(struct erf_phdr);
1784
1785                 /* check the optional Extension header */
1786                 if (!pcap_read_erf_exheader(fh, &phdr->pseudo_header, err, err_info,
1787                     &size))
1788                         return -1;      /* Read error */
1789
1790                 phdr_len += size;
1791
1792                 /* check the optional Multi Channel header */
1793                 if (!pcap_read_erf_subheader(fh, &phdr->pseudo_header, err, err_info,
1794                     &size))
1795                         return -1;      /* Read error */
1796
1797                 phdr_len += size;
1798
1799                 if (check_packet_size &&
1800                     packet_size < (guint)phdr_len) {
1801                         /*
1802                          * Uh-oh, the packet isn't big enough for the pseudo-
1803                          * header.
1804                          */
1805                         *err = WTAP_ERR_BAD_FILE;
1806                         *err_info = g_strdup_printf("pcap: ERF file has a %u-byte packet, too small for a pseudo-header with ex- and sub-headers (%d)",
1807                             packet_size, phdr_len);
1808                         return -1;
1809                 }
1810                 break;
1811
1812         case WTAP_ENCAP_I2C:
1813                 if (check_packet_size &&
1814                     packet_size < sizeof (struct i2c_file_hdr)) {
1815                         /*
1816                          * Uh-oh, the packet isn't big enough to even
1817                          * have a pseudo-header.
1818                          */
1819                         *err = WTAP_ERR_BAD_FILE;
1820                         *err_info = g_strdup_printf("pcap: I2C file has a %u-byte packet, too small to have even a I2C pseudo-header",
1821                             packet_size);
1822                         return -1;
1823                 }
1824                 if (!pcap_read_i2c_pseudoheader(fh, &phdr->pseudo_header,
1825                     err, err_info))
1826                         return -1;      /* Read error */
1827
1828                 /*
1829                  * Don't count the pseudo-header as part of the packet.
1830                  */
1831                 phdr_len = (int)sizeof (struct i2c_file_hdr);
1832                 break;
1833         }
1834
1835         return phdr_len;
1836 }
1837
1838 void
1839 pcap_read_post_process(int file_type, int wtap_encap,
1840     struct wtap_pkthdr *phdr, guint8 *pd, gboolean bytes_swapped, int fcs_len)
1841 {
1842         switch (wtap_encap) {
1843
1844         case WTAP_ENCAP_ATM_PDUS:
1845                 if (file_type == WTAP_FILE_TYPE_SUBTYPE_PCAP_NOKIA) {
1846                         /*
1847                          * Nokia IPSO ATM.
1848                          *
1849                          * Guess the traffic type based on the packet
1850                          * contents.
1851                          */
1852                         atm_guess_traffic_type(phdr, pd);
1853                 } else {
1854                         /*
1855                          * SunATM.
1856                          *
1857                          * If this is ATM LANE traffic, try to guess what
1858                          * type of LANE traffic it is based on the packet
1859                          * contents.
1860                          */
1861                         if (phdr->pseudo_header.atm.type == TRAF_LANE)
1862                                 atm_guess_lane_type(phdr, pd);
1863                 }
1864                 break;
1865
1866         case WTAP_ENCAP_ETHERNET:
1867                 phdr->pseudo_header.eth.fcs_len = fcs_len;
1868                 break;
1869
1870         case WTAP_ENCAP_USB_LINUX:
1871                 if (bytes_swapped)
1872                         pcap_byteswap_linux_usb_pseudoheader(phdr, pd, FALSE);
1873                 break;
1874
1875         case WTAP_ENCAP_USB_LINUX_MMAPPED:
1876                 if (bytes_swapped)
1877                         pcap_byteswap_linux_usb_pseudoheader(phdr, pd, TRUE);
1878                 break;
1879
1880         case WTAP_ENCAP_NETANALYZER:
1881                 /*
1882                  * Not strictly necessary, as the netANALYZER
1883                  * dissector calls the "Ethernet with FCS"
1884                  * dissector, but we might as well set it.
1885                  */
1886                 phdr->pseudo_header.eth.fcs_len = 4;
1887                 break;
1888
1889         case WTAP_ENCAP_NFLOG:
1890                 if (bytes_swapped)
1891                         pcap_byteswap_nflog_pseudoheader(phdr, pd);
1892                 break;
1893
1894         default:
1895                 break;
1896         }
1897 }
1898
1899 int
1900 pcap_get_phdr_size(int encap, const union wtap_pseudo_header *pseudo_header)
1901 {
1902         int hdrsize;
1903
1904         switch (encap) {
1905
1906         case WTAP_ENCAP_ATM_PDUS:
1907                 hdrsize = SUNATM_LEN;
1908                 break;
1909
1910         case WTAP_ENCAP_IRDA:
1911                 hdrsize = IRDA_SLL_LEN;
1912                 break;
1913
1914         case WTAP_ENCAP_MTP2_WITH_PHDR:
1915                 hdrsize = MTP2_HDR_LEN;
1916                 break;
1917
1918         case WTAP_ENCAP_LINUX_LAPD:
1919                 hdrsize = LAPD_SLL_LEN;
1920                 break;
1921
1922         case WTAP_ENCAP_SITA:
1923                 hdrsize = SITA_HDR_LEN;
1924                 break;
1925
1926         case WTAP_ENCAP_ERF:
1927                 hdrsize = (int)sizeof (struct erf_phdr);
1928                 switch (pseudo_header->erf.phdr.type & 0x7F) {
1929
1930                 case ERF_TYPE_MC_HDLC:
1931                 case ERF_TYPE_MC_RAW:
1932                 case ERF_TYPE_MC_ATM:
1933                 case ERF_TYPE_MC_RAW_CHANNEL:
1934                 case ERF_TYPE_MC_AAL5:
1935                 case ERF_TYPE_MC_AAL2:
1936                 case ERF_TYPE_COLOR_MC_HDLC_POS:
1937                         hdrsize += (int)sizeof(struct erf_mc_hdr);
1938                         break;
1939
1940                 case ERF_TYPE_ETH:
1941                 case ERF_TYPE_COLOR_ETH:
1942                 case ERF_TYPE_DSM_COLOR_ETH:
1943                         hdrsize += (int)sizeof(struct erf_eth_hdr);
1944                         break;
1945
1946                 default:
1947                         break;
1948                 }
1949
1950                 /*
1951                  * Add in the lengths of the extension headers.
1952                  */
1953                 if (pseudo_header->erf.phdr.type & 0x80) {
1954                         int i = 0, max = sizeof(pseudo_header->erf.ehdr_list)/sizeof(struct erf_ehdr);
1955                         guint8 erf_exhdr[8];
1956                         guint8 type;
1957
1958                         do {
1959                                 phtonll(erf_exhdr, pseudo_header->erf.ehdr_list[i].ehdr);
1960                                 type = erf_exhdr[0];
1961                                 hdrsize += 8;
1962                                 i++;
1963                         } while (type & 0x80 && i < max);
1964                 }
1965                 break;
1966
1967         case WTAP_ENCAP_I2C:
1968                 hdrsize = (int)sizeof (struct i2c_file_hdr);
1969                 break;
1970
1971         case WTAP_ENCAP_BLUETOOTH_H4_WITH_PHDR:
1972                 hdrsize = (int)sizeof (struct libpcap_bt_phdr);
1973                 break;
1974
1975         case WTAP_ENCAP_PPP_WITH_PHDR:
1976                 hdrsize = (int)sizeof (struct libpcap_ppp_phdr);
1977                 break;
1978
1979         case WTAP_ENCAP_BLUETOOTH_LINUX_MONITOR:
1980                 hdrsize = (int)sizeof (struct libpcap_bt_monitor_phdr);
1981         break;
1982
1983         default:
1984                 hdrsize = 0;
1985                 break;
1986         }
1987
1988         return hdrsize;
1989 }
1990
1991 gboolean
1992 pcap_write_phdr(wtap_dumper *wdh, int encap, const union wtap_pseudo_header *pseudo_header,
1993     int *err)
1994 {
1995         guint8 atm_hdr[SUNATM_LEN];
1996         guint8 irda_hdr[IRDA_SLL_LEN];
1997         guint8 lapd_hdr[LAPD_SLL_LEN];
1998         guint8 mtp2_hdr[MTP2_HDR_LEN];
1999         guint8 sita_hdr[SITA_HDR_LEN];
2000         guint8 erf_hdr[ sizeof(struct erf_mc_phdr)];
2001         struct i2c_file_hdr i2c_hdr;
2002         struct libpcap_bt_phdr bt_hdr;
2003         struct libpcap_bt_monitor_phdr bt_monitor_hdr;
2004         struct libpcap_ppp_phdr ppp_hdr;
2005         size_t size;
2006
2007         switch (encap) {
2008
2009         case WTAP_ENCAP_ATM_PDUS:
2010                 /*
2011                  * Write the ATM header.
2012                  */
2013                 atm_hdr[SUNATM_FLAGS] =
2014                     (pseudo_header->atm.channel == 0) ? 0x80 : 0x00;
2015                 switch (pseudo_header->atm.aal) {
2016
2017                 case AAL_SIGNALLING:
2018                         /* Q.2931 */
2019                         atm_hdr[SUNATM_FLAGS] |= 0x06;
2020                         break;
2021
2022                 case AAL_5:
2023                         switch (pseudo_header->atm.type) {
2024
2025                         case TRAF_LANE:
2026                                 /* LANE */
2027                                 atm_hdr[SUNATM_FLAGS] |= 0x01;
2028                                 break;
2029
2030                         case TRAF_LLCMX:
2031                                 /* RFC 1483 LLC multiplexed traffic */
2032                                 atm_hdr[SUNATM_FLAGS] |= 0x02;
2033                                 break;
2034
2035                         case TRAF_ILMI:
2036                                 /* ILMI */
2037                                 atm_hdr[SUNATM_FLAGS] |= 0x05;
2038                                 break;
2039                         }
2040                         break;
2041                 }
2042                 atm_hdr[SUNATM_VPI] = (guint8)pseudo_header->atm.vpi;
2043                 phtons(&atm_hdr[SUNATM_VCI], pseudo_header->atm.vci);
2044                 if (!wtap_dump_file_write(wdh, atm_hdr, sizeof(atm_hdr), err))
2045                         return FALSE;
2046                 wdh->bytes_dumped += sizeof(atm_hdr);
2047                 break;
2048
2049         case WTAP_ENCAP_IRDA:
2050                 /*
2051                  * Write the IrDA header.
2052                  */
2053                 memset(irda_hdr, 0, sizeof(irda_hdr));
2054                 phtons(&irda_hdr[IRDA_SLL_PKTTYPE_OFFSET],
2055                     pseudo_header->irda.pkttype);
2056                 phtons(&irda_hdr[IRDA_SLL_PROTOCOL_OFFSET], 0x0017);
2057                 if (!wtap_dump_file_write(wdh, irda_hdr, sizeof(irda_hdr), err))
2058                         return FALSE;
2059                 wdh->bytes_dumped += sizeof(irda_hdr);
2060                 break;
2061
2062         case WTAP_ENCAP_MTP2_WITH_PHDR:
2063                 /*
2064                  * Write the MTP2 header.
2065                  */
2066                 memset(&mtp2_hdr, 0, sizeof(mtp2_hdr));
2067                 mtp2_hdr[MTP2_SENT_OFFSET] = pseudo_header->mtp2.sent;
2068                 mtp2_hdr[MTP2_ANNEX_A_USED_OFFSET] = pseudo_header->mtp2.annex_a_used;
2069                 phtons(&mtp2_hdr[MTP2_LINK_NUMBER_OFFSET],
2070                     pseudo_header->mtp2.link_number);
2071                 if (!wtap_dump_file_write(wdh, mtp2_hdr, sizeof(mtp2_hdr), err))
2072                         return FALSE;
2073                 wdh->bytes_dumped += sizeof(mtp2_hdr);
2074                 break;
2075
2076         case WTAP_ENCAP_LINUX_LAPD:
2077                 /*
2078                  * Write the LAPD header.
2079                  */
2080                 memset(&lapd_hdr, 0, sizeof(lapd_hdr));
2081                 phtons(&lapd_hdr[LAPD_SLL_PKTTYPE_OFFSET],
2082                     pseudo_header->lapd.pkttype);
2083                 phtons(&lapd_hdr[LAPD_SLL_PROTOCOL_OFFSET], ETH_P_LAPD);
2084                 lapd_hdr[LAPD_SLL_ADDR_OFFSET + 0] =
2085                     pseudo_header->lapd.we_network?0x01:0x00;
2086                 if (!wtap_dump_file_write(wdh, lapd_hdr, sizeof(lapd_hdr), err))
2087                         return FALSE;
2088                 wdh->bytes_dumped += sizeof(lapd_hdr);
2089                 break;
2090
2091         case WTAP_ENCAP_SITA:
2092                 /*
2093                  * Write the SITA header.
2094                  */
2095                 memset(&sita_hdr, 0, sizeof(sita_hdr));
2096                 sita_hdr[SITA_FLAGS_OFFSET]   = pseudo_header->sita.sita_flags;
2097                 sita_hdr[SITA_SIGNALS_OFFSET] = pseudo_header->sita.sita_signals;
2098                 sita_hdr[SITA_ERRORS1_OFFSET] = pseudo_header->sita.sita_errors1;
2099                 sita_hdr[SITA_ERRORS2_OFFSET] = pseudo_header->sita.sita_errors2;
2100                 sita_hdr[SITA_PROTO_OFFSET]   = pseudo_header->sita.sita_proto;
2101                 if (!wtap_dump_file_write(wdh, sita_hdr, sizeof(sita_hdr), err))
2102                         return FALSE;
2103                 wdh->bytes_dumped += sizeof(sita_hdr);
2104                 break;
2105
2106         case WTAP_ENCAP_ERF:
2107                 /*
2108                  * Write the ERF header.
2109                  */
2110                 memset(&erf_hdr, 0, sizeof(erf_hdr));
2111                 phtolell(&erf_hdr[0], pseudo_header->erf.phdr.ts);
2112                 erf_hdr[8] = pseudo_header->erf.phdr.type;
2113                 erf_hdr[9] = pseudo_header->erf.phdr.flags;
2114                 phtons(&erf_hdr[10], pseudo_header->erf.phdr.rlen);
2115                 phtons(&erf_hdr[12], pseudo_header->erf.phdr.lctr);
2116                 phtons(&erf_hdr[14], pseudo_header->erf.phdr.wlen);
2117                 size = sizeof(struct erf_phdr);
2118
2119                 switch(pseudo_header->erf.phdr.type & 0x7F) {
2120                 case ERF_TYPE_MC_HDLC:
2121                 case ERF_TYPE_MC_RAW:
2122                 case ERF_TYPE_MC_ATM:
2123                 case ERF_TYPE_MC_RAW_CHANNEL:
2124                 case ERF_TYPE_MC_AAL5:
2125                 case ERF_TYPE_COLOR_MC_HDLC_POS:
2126                         phtonl(&erf_hdr[16], pseudo_header->erf.subhdr.mc_hdr);
2127                         size += (int)sizeof(struct erf_mc_hdr);
2128                         break;
2129                 case ERF_TYPE_MC_AAL2:
2130                         phtonl(&erf_hdr[16], pseudo_header->erf.subhdr.aal2_hdr);
2131                         size += (int)sizeof(struct erf_aal2_hdr);
2132                         break;
2133                 case ERF_TYPE_ETH:
2134                 case ERF_TYPE_COLOR_ETH:
2135                 case ERF_TYPE_DSM_COLOR_ETH:
2136                         memcpy(&erf_hdr[16], &pseudo_header->erf.subhdr.eth_hdr, sizeof pseudo_header->erf.subhdr.eth_hdr);
2137                         size += (int)sizeof(struct erf_eth_hdr);
2138                         break;
2139                 default:
2140                         break;
2141                 }
2142                 if (!wtap_dump_file_write(wdh, erf_hdr, size, err))
2143                         return FALSE;
2144                 wdh->bytes_dumped += size;
2145
2146                 /*
2147                  * Now write out the extension headers.
2148                  */
2149                 if (pseudo_header->erf.phdr.type & 0x80) {
2150                         int i = 0, max = sizeof(pseudo_header->erf.ehdr_list)/sizeof(struct erf_ehdr);
2151                         guint8 erf_exhdr[8];
2152                         guint8 type;
2153
2154                         do {
2155                                 phtonll(erf_exhdr, pseudo_header->erf.ehdr_list[i].ehdr);
2156                                 type = erf_exhdr[0];
2157                                 if (!wtap_dump_file_write(wdh, erf_exhdr, 8, err))
2158                                         return FALSE;
2159                                 wdh->bytes_dumped += 8;
2160                                 i++;
2161                         } while (type & 0x80 && i < max);
2162                 }
2163                 break;
2164
2165         case WTAP_ENCAP_I2C:
2166                 /*
2167                  * Write the I2C header.
2168                  */
2169                 memset(&i2c_hdr, 0, sizeof(i2c_hdr));
2170                 i2c_hdr.bus = pseudo_header->i2c.bus |
2171                         (pseudo_header->i2c.is_event ? 0x80 : 0x00);
2172                 phtonl((guint8 *)&i2c_hdr.flags, pseudo_header->i2c.flags);
2173                 if (!wtap_dump_file_write(wdh, &i2c_hdr, sizeof(i2c_hdr), err))
2174                         return FALSE;
2175                 wdh->bytes_dumped += sizeof(i2c_hdr);
2176                 break;
2177
2178         case WTAP_ENCAP_BLUETOOTH_H4_WITH_PHDR:
2179                 bt_hdr.direction = GUINT32_TO_BE(pseudo_header->p2p.sent ? LIBPCAP_BT_PHDR_SENT : LIBPCAP_BT_PHDR_RECV);
2180                 if (!wtap_dump_file_write(wdh, &bt_hdr, sizeof bt_hdr, err))
2181                         return FALSE;
2182                 wdh->bytes_dumped += sizeof bt_hdr;
2183                 break;
2184
2185         case WTAP_ENCAP_BLUETOOTH_LINUX_MONITOR:
2186                 bt_monitor_hdr.adapter_id = GUINT16_TO_BE(pseudo_header->btmon.adapter_id);
2187                 bt_monitor_hdr.opcode = GUINT16_TO_BE(pseudo_header->btmon.opcode);
2188
2189                 if (!wtap_dump_file_write(wdh, &bt_monitor_hdr, sizeof bt_monitor_hdr, err))
2190                         return FALSE;
2191                 wdh->bytes_dumped += sizeof bt_monitor_hdr;
2192                 break;
2193
2194         case WTAP_ENCAP_PPP_WITH_PHDR:
2195                 ppp_hdr.direction = (pseudo_header->p2p.sent ? LIBPCAP_PPP_PHDR_SENT : LIBPCAP_PPP_PHDR_RECV);
2196                 if (!wtap_dump_file_write(wdh, &ppp_hdr, sizeof ppp_hdr, err))
2197                         return FALSE;
2198                 wdh->bytes_dumped += sizeof ppp_hdr;
2199                 break;
2200         }
2201         return TRUE;
2202 }
2203
2204 /*
2205  * Editor modelines  -  http://www.wireshark.org/tools/modelines.html
2206  *
2207  * Local variables:
2208  * c-basic-offset: 8
2209  * tab-width: 8
2210  * indent-tabs-mode: t
2211  * End:
2212  *
2213  * vi: set shiftwidth=8 tabstop=8 noexpandtab:
2214  * :indentSize=8:tabSize=8:noTabs=false:
2215  */