Clean up handling of the data before the Ethernet packet in ERF files.
[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         /* raw USB packets */
330         { 186,          WTAP_ENCAP_USB },
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 },
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 encap) {
696         if (
697                 (encap == WTAP_ENCAP_ATM_PDUS) ||
698                 (encap == WTAP_ENCAP_IRDA) ||
699                 (encap == WTAP_ENCAP_MTP2_WITH_PHDR) ||
700                 (encap == WTAP_ENCAP_LINUX_LAPD) ||
701                 (encap == WTAP_ENCAP_SITA) ||
702                 (encap == WTAP_ENCAP_ERF) ||
703                 (encap == WTAP_ENCAP_I2C) ||
704                 (encap == WTAP_ENCAP_BLUETOOTH_H4_WITH_PHDR) ||
705                 (encap == WTAP_ENCAP_BLUETOOTH_LINUX_MONITOR) ||
706                 (encap == WTAP_ENCAP_PPP_WITH_PHDR)
707         ) {
708                 return TRUE;
709         }
710         return FALSE;
711 }
712
713
714 /*
715  * Various pseudo-headers that appear at the beginning of packet data.
716  *
717  * We represent them as sets of offsets, as they might not be aligned on
718  * an appropriate structure boundary in the buffer, and as that makes them
719  * independent of the way the compiler might align fields.
720  */
721
722 /*
723  * The link-layer header on SunATM packets.
724  */
725 #define SUNATM_FLAGS    0       /* destination and traffic type - 1 byte */
726 #define SUNATM_VPI      1       /* VPI - 1 byte */
727 #define SUNATM_VCI      2       /* VCI - 2 bytes */
728 #define SUNATM_LEN      4       /* length of the header */
729
730 /*
731  * The link-layer header on Nokia IPSO ATM packets.
732  */
733 #define NOKIAATM_FLAGS  0       /* destination - 1 byte */
734 #define NOKIAATM_VPI    1       /* VPI - 1 byte */
735 #define NOKIAATM_VCI    2       /* VCI - 2 bytes */
736 #define NOKIAATM_LEN    4       /* length of the header */
737
738 /*
739  * The link-layer header on Nokia IPSO packets.
740  */
741 #define NOKIA_LEN       4       /* length of the header */
742
743 /*
744  * The fake link-layer header of IrDA packets as introduced by Jean Tourrilhes
745  * to libpcap.
746  */
747 #define IRDA_SLL_PKTTYPE_OFFSET         0       /* packet type - 2 bytes */
748 /* 12 unused bytes */
749 #define IRDA_SLL_PROTOCOL_OFFSET        14      /* protocol, should be ETH_P_LAPD - 2 bytes */
750 #define IRDA_SLL_LEN                    16      /* length of the header */
751
752 /*
753  * A header containing additional MTP information.
754  */
755 #define MTP2_SENT_OFFSET                0       /* 1 byte */
756 #define MTP2_ANNEX_A_USED_OFFSET        1       /* 1 byte */
757 #define MTP2_LINK_NUMBER_OFFSET         2       /* 2 bytes */
758 #define MTP2_HDR_LEN                    4       /* length of the header */
759
760 /*
761  * A header containing additional SITA WAN information.
762  */
763 #define SITA_FLAGS_OFFSET               0       /* 1 byte */
764 #define SITA_SIGNALS_OFFSET             1       /* 1 byte */
765 #define SITA_ERRORS1_OFFSET             2       /* 1 byte */
766 #define SITA_ERRORS2_OFFSET             3       /* 1 byte */
767 #define SITA_PROTO_OFFSET               4       /* 1 byte */
768 #define SITA_HDR_LEN                    5       /* length of the header */
769
770 /*
771  * The fake link-layer header of LAPD packets.
772  */
773 #ifndef ETH_P_LAPD
774 #define ETH_P_LAPD 0x0030
775 #endif
776
777 #define LAPD_SLL_PKTTYPE_OFFSET         0       /* packet type - 2 bytes */
778 #define LAPD_SLL_HATYPE_OFFSET          2       /* hardware address type - 2 bytes */
779 #define LAPD_SLL_HALEN_OFFSET           4       /* hardware address length - 2 bytes */
780 #define LAPD_SLL_ADDR_OFFSET            6       /* address - 8 bytes */
781 #define LAPD_SLL_PROTOCOL_OFFSET        14      /* protocol, should be ETH_P_LAPD - 2 bytes */
782 #define LAPD_SLL_LEN                    16      /* length of the header */
783
784 /*
785  * The NFC LLCP per-packet header.
786  */
787 #define LLCP_ADAPTER_OFFSET             0
788 #define LLCP_FLAGS_OFFSET               1
789 #define LLCP_HEADER_LEN                 2
790
791 /*
792  * I2C link-layer on-disk format
793  */
794 struct i2c_file_hdr {
795         guint8 bus;
796         guint8 flags[4];
797 };
798
799 static gboolean
800 pcap_read_sunatm_pseudoheader(FILE_T fh,
801     union wtap_pseudo_header *pseudo_header, int *err, gchar **err_info)
802 {
803         guint8  atm_phdr[SUNATM_LEN];
804         guint8  vpi;
805         guint16 vci;
806
807         if (!wtap_read_bytes(fh, atm_phdr, SUNATM_LEN, err, err_info))
808                 return FALSE;
809
810         vpi = atm_phdr[SUNATM_VPI];
811         vci = pntoh16(&atm_phdr[SUNATM_VCI]);
812
813         switch (atm_phdr[SUNATM_FLAGS] & 0x0F) {
814
815         case 0x01:      /* LANE */
816                 pseudo_header->atm.aal = AAL_5;
817                 pseudo_header->atm.type = TRAF_LANE;
818                 break;
819
820         case 0x02:      /* RFC 1483 LLC multiplexed traffic */
821                 pseudo_header->atm.aal = AAL_5;
822                 pseudo_header->atm.type = TRAF_LLCMX;
823                 break;
824
825         case 0x05:      /* ILMI */
826                 pseudo_header->atm.aal = AAL_5;
827                 pseudo_header->atm.type = TRAF_ILMI;
828                 break;
829
830         case 0x06:      /* Q.2931 */
831                 pseudo_header->atm.aal = AAL_SIGNALLING;
832                 pseudo_header->atm.type = TRAF_UNKNOWN;
833                 break;
834
835         case 0x03:      /* MARS (RFC 2022) */
836                 pseudo_header->atm.aal = AAL_5;
837                 pseudo_header->atm.type = TRAF_UNKNOWN;
838                 break;
839
840         case 0x04:      /* IFMP (Ipsilon Flow Management Protocol; see RFC 1954) */
841                 pseudo_header->atm.aal = AAL_5;
842                 pseudo_header->atm.type = TRAF_UNKNOWN; /* XXX - TRAF_IPSILON? */
843                 break;
844
845         default:
846                 /*
847                  * Assume it's AAL5, unless it's VPI 0 and VCI 5, in which
848                  * case assume it's AAL_SIGNALLING; we know nothing more
849                  * about it.
850                  *
851                  * XXX - is this necessary?  Or are we guaranteed that
852                  * all signalling traffic has a type of 0x06?
853                  *
854                  * XXX - is this guaranteed to be AAL5?  Or, if the type is
855                  * 0x00 ("raw"), might it be non-AAL5 traffic?
856                  */
857                 if (vpi == 0 && vci == 5)
858                         pseudo_header->atm.aal = AAL_SIGNALLING;
859                 else
860                         pseudo_header->atm.aal = AAL_5;
861                 pseudo_header->atm.type = TRAF_UNKNOWN;
862                 break;
863         }
864         pseudo_header->atm.subtype = TRAF_ST_UNKNOWN;
865
866         pseudo_header->atm.vpi = vpi;
867         pseudo_header->atm.vci = vci;
868         pseudo_header->atm.channel = (atm_phdr[SUNATM_FLAGS] & 0x80) ? 0 : 1;
869
870         /* We don't have this information */
871         pseudo_header->atm.flags = 0;
872         pseudo_header->atm.cells = 0;
873         pseudo_header->atm.aal5t_u2u = 0;
874         pseudo_header->atm.aal5t_len = 0;
875         pseudo_header->atm.aal5t_chksum = 0;
876
877         return TRUE;
878 }
879
880 static gboolean
881 pcap_read_nokiaatm_pseudoheader(FILE_T fh,
882     union wtap_pseudo_header *pseudo_header, int *err, gchar **err_info)
883 {
884         guint8  atm_phdr[NOKIAATM_LEN];
885         guint8  vpi;
886         guint16 vci;
887
888         if (!wtap_read_bytes(fh, atm_phdr, NOKIAATM_LEN, err, err_info))
889                 return FALSE;
890
891         vpi = atm_phdr[NOKIAATM_VPI];
892         vci = pntoh16(&atm_phdr[NOKIAATM_VCI]);
893
894         pseudo_header->atm.vpi = vpi;
895         pseudo_header->atm.vci = vci;
896         pseudo_header->atm.channel = (atm_phdr[NOKIAATM_FLAGS] & 0x80) ? 0 : 1;
897
898         /* We don't have this information */
899         pseudo_header->atm.flags = 0;
900         pseudo_header->atm.cells = 0;
901         pseudo_header->atm.aal5t_u2u = 0;
902         pseudo_header->atm.aal5t_len = 0;
903         pseudo_header->atm.aal5t_chksum = 0;
904
905         return TRUE;
906 }
907
908 static gboolean
909 pcap_read_nokia_pseudoheader(FILE_T fh,
910     union wtap_pseudo_header *pseudo_header, int *err, gchar **err_info)
911 {
912         guint8  phdr[NOKIA_LEN];
913
914
915         /* backtrack to read the 4 mysterious bytes that aren't considered
916         * part of the packet size
917         */
918         if (file_seek(fh, -NOKIA_LEN, SEEK_CUR, err) == -1)
919         {
920                 *err = file_error(fh, err_info);
921                 if (*err == 0)
922                         *err = WTAP_ERR_SHORT_READ;
923                 return FALSE;
924         }
925
926         if (!wtap_read_bytes(fh, phdr, NOKIA_LEN, err, err_info))
927                 return FALSE;
928
929         memcpy(pseudo_header->nokia.stuff, phdr, NOKIA_LEN);
930
931         return TRUE;
932 }
933
934 static gboolean
935 pcap_read_irda_pseudoheader(FILE_T fh, union wtap_pseudo_header *pseudo_header,
936     int *err, gchar **err_info)
937 {
938         guint8  irda_phdr[IRDA_SLL_LEN];
939
940         if (!wtap_read_bytes(fh, irda_phdr, IRDA_SLL_LEN, err, err_info))
941                 return FALSE;
942
943         if (pntoh16(&irda_phdr[IRDA_SLL_PROTOCOL_OFFSET]) != 0x0017) {
944                 *err = WTAP_ERR_BAD_FILE;
945                 if (err_info != NULL)
946                         *err_info = g_strdup("libpcap: IrDA capture has a packet with an invalid sll_protocol field");
947                 return FALSE;
948         }
949
950         pseudo_header->irda.pkttype = pntoh16(&irda_phdr[IRDA_SLL_PKTTYPE_OFFSET]);
951
952         return TRUE;
953 }
954
955 static gboolean
956 pcap_read_mtp2_pseudoheader(FILE_T fh, union wtap_pseudo_header *pseudo_header, int *err, gchar **err_info)
957 {
958         guint8 mtp2_hdr[MTP2_HDR_LEN];
959
960         if (!wtap_read_bytes(fh, mtp2_hdr, MTP2_HDR_LEN, err, err_info))
961                 return FALSE;
962
963         pseudo_header->mtp2.sent         = mtp2_hdr[MTP2_SENT_OFFSET];
964         pseudo_header->mtp2.annex_a_used = mtp2_hdr[MTP2_ANNEX_A_USED_OFFSET];
965         pseudo_header->mtp2.link_number  = pntoh16(&mtp2_hdr[MTP2_LINK_NUMBER_OFFSET]);
966
967         return TRUE;
968 }
969
970 static gboolean
971 pcap_read_lapd_pseudoheader(FILE_T fh, union wtap_pseudo_header *pseudo_header,
972     int *err, gchar **err_info)
973 {
974         guint8  lapd_phdr[LAPD_SLL_LEN];
975
976         if (!wtap_read_bytes(fh, lapd_phdr, LAPD_SLL_LEN, err, err_info))
977                 return FALSE;
978
979         if (pntoh16(&lapd_phdr[LAPD_SLL_PROTOCOL_OFFSET]) != ETH_P_LAPD) {
980                 *err = WTAP_ERR_BAD_FILE;
981                 if (err_info != NULL)
982                         *err_info = g_strdup("libpcap: LAPD capture has a packet with an invalid sll_protocol field");
983                 return FALSE;
984         }
985
986         pseudo_header->lapd.pkttype = pntoh16(&lapd_phdr[LAPD_SLL_PKTTYPE_OFFSET]);
987         pseudo_header->lapd.we_network = !!lapd_phdr[LAPD_SLL_ADDR_OFFSET+0];
988
989         return TRUE;
990 }
991
992 static gboolean
993 pcap_read_sita_pseudoheader(FILE_T fh, union wtap_pseudo_header *pseudo_header, int *err, gchar **err_info)
994 {
995         guint8  sita_phdr[SITA_HDR_LEN];
996
997         if (!wtap_read_bytes(fh, sita_phdr, SITA_HDR_LEN, err, err_info))
998                 return FALSE;
999
1000         pseudo_header->sita.sita_flags   = sita_phdr[SITA_FLAGS_OFFSET];
1001         pseudo_header->sita.sita_signals = sita_phdr[SITA_SIGNALS_OFFSET];
1002         pseudo_header->sita.sita_errors1 = sita_phdr[SITA_ERRORS1_OFFSET];
1003         pseudo_header->sita.sita_errors2 = sita_phdr[SITA_ERRORS2_OFFSET];
1004         pseudo_header->sita.sita_proto   = sita_phdr[SITA_PROTO_OFFSET];
1005
1006         return TRUE;
1007 }
1008
1009 /*
1010  * When not using the memory-mapped interface to capture USB events,
1011  * code that reads those events can use the MON_IOCX_GET ioctl to
1012  * read a 48-byte header consisting of a "struct linux_usb_phdr", as
1013  * defined below, followed immediately by one of:
1014  *
1015  *      8 bytes of a "struct usb_device_setup_hdr", if "setup_flag"
1016  *      in the preceding "struct linux_usb_phdr" is 0;
1017  *
1018  *      in Linux 2.6.30 or later, 8 bytes of a "struct iso_rec", if
1019  *      this is an isochronous transfer;
1020  *
1021  *      8 bytes of junk, otherwise.
1022  *
1023  * In Linux 2.6.31 and later, it can also use the MON_IOCX_GETX ioctl
1024  * to read a 64-byte header; that header consists of the 48 bytes
1025  * above, followed immediately by 16 bytes of a "struct linux_usb_phdr_ext",
1026  * as defined below.
1027  *
1028  * In Linux 2.6.21 and later, there's a memory-mapped interface to
1029  * capture USB events.  In that interface, the events in the memory-mapped
1030  * buffer have a 64-byte header, followed immediately by the data.
1031  * In Linux 2.6.21 through 2.6.30.x, the 64-byte header is the 48-byte
1032  * header described above, followed by 16 bytes of zeroes; in Linux
1033  * 2.6.31 and later, the 64-byte header is the 64-byte header described
1034  * above.
1035  *
1036  * See linux/Documentation/usb/usbmon.txt and libpcap/pcap/usb.h for details.
1037  *
1038  * With WTAP_ENCAP_USB_LINUX, packets have the 48-byte header; with
1039  * WTAP_ENCAP_USB_LINUX_MMAPPED, they have the 64-byte header.  There
1040  * is no indication of whether the header has the "struct iso_rec", or
1041  * whether the last 16 bytes of a 64-byte header are all zeros or are
1042  * a "struct linux_usb_phdr_ext".
1043  */
1044
1045 /*
1046  * URB transfer_type values
1047  */
1048 #define URB_ISOCHRONOUS   0x0
1049 #define URB_INTERRUPT     0x1
1050 #define URB_CONTROL       0x2
1051 #define URB_BULK          0x3
1052
1053 /*
1054  * Information from the URB for Isochronous transfers.
1055  *
1056  * This structure is 8 bytes long.
1057  */
1058 struct iso_rec {
1059         gint32 error_count;
1060         gint32 numdesc;
1061 };
1062
1063 /*
1064  * Header prepended by Linux kernel to each USB event.
1065  *
1066  * (Setup flag is '-', 'D', 'Z', or 0.  Data flag is '<', '>', 'Z', or 0.)
1067  *
1068  * The values are in *host* byte order.
1069  */
1070 struct linux_usb_phdr {
1071         guint64 id;             /* urb id, to link submission and completion events */
1072         guint8 event_type;      /* Submit ('S'), Completed ('C'), Error ('E') */
1073         guint8 transfer_type;   /* ISO (0), Intr, Control, Bulk (3) */
1074         guint8 endpoint_number; /* Endpoint number (0-15) and transfer direction */
1075         guint8 device_address;  /* 0-127 */
1076         guint16 bus_id;
1077         gint8 setup_flag;       /* 0, if the urb setup header is meaningful */
1078         gint8 data_flag;        /* 0, if urb data is present */
1079         gint64 ts_sec;
1080         gint32 ts_usec;
1081         gint32 status;
1082         guint32 urb_len;        /* whole len of urb this event refers to */
1083         guint32 data_len;       /* amount of urb data really present in this event */
1084
1085         /*
1086          * Packet-type-dependent data.
1087          * USB setup information of setup_flag is true.
1088          * Otherwise, some isochronous transfer information.
1089          */
1090         union {
1091                 guint8 data[8];
1092                 struct iso_rec iso;
1093         } s;
1094
1095         /*
1096          * This data is provided by Linux 2.6.31 and later kernels.
1097          *
1098          * For WTAP_ENCAP_USB_LINUX, it's not in the pseudo-header, so
1099          * the pseudo-header is always 48 bytes long, including the
1100          * packet-type-dependent data.
1101          *
1102          * For WTAP_ENCAP_USB_LINUX_MMAPPED, the pseudo-header is always
1103          * 64 bytes long, with the packet-type-dependent data preceding
1104          * these last 16 bytes.  In pre-2.6.31 kernels, it's zero padding;
1105          * in 2.6.31 and later, it's the following data.
1106          */
1107         gint32 interval;    /* only for Interrupt and Isochronous events */
1108         gint32 start_frame; /* for Isochronous */
1109         guint32 xfer_flags; /* copy of URB's transfer_flags */
1110         guint32 ndesc;      /* actual number of isochronous descriptors */
1111 };
1112
1113 struct linux_usb_isodesc {
1114         gint32 iso_status;
1115         guint32 iso_off;
1116         guint32 iso_len;
1117         guint32 _pad;
1118 };
1119
1120 /*
1121  * USB setup header as defined in USB specification
1122  * See usb_20.pdf, Chapter 9.3 'USB Device Requests' for details.
1123  * http://www.usb.org/developers/docs/usb_20_122909-2.zip
1124  *
1125  * This structure is 8 bytes long.
1126  */
1127 struct usb_device_setup_hdr {
1128         gint8 bmRequestType;
1129         guint8 bRequest;
1130         guint16 wValue;
1131         guint16 wIndex;
1132         guint16 wLength;
1133 };
1134
1135
1136 /*
1137  * Offset of the *end* of a field within a particular structure.
1138  */
1139 #define END_OFFSETOF(basep, fieldp) \
1140         (((char *)(void *)(fieldp)) - ((char *)(void *)(basep)) + \
1141             sizeof(*fieldp))
1142
1143 /*
1144  * Is that offset within the bounds of the packet?
1145  */
1146 #define WITHIN_PACKET(basep, fieldp) \
1147         (packet_size >= END_OFFSETOF((basep), (fieldp)))
1148
1149 #define CHECK_AND_SWAP16(fieldp) \
1150         { \
1151                 if (!WITHIN_PACKET(usb_phdr, fieldp)) \
1152                         return; \
1153                 PBSWAP16((guint8 *)fieldp); \
1154         }
1155
1156 #define CHECK_AND_SWAP32(fieldp) \
1157         { \
1158                 if (!WITHIN_PACKET(usb_phdr, fieldp)) \
1159                         return; \
1160                 PBSWAP32((guint8 *)fieldp); \
1161         }
1162
1163 #define CHECK_AND_SWAP64(fieldp) \
1164         { \
1165                 if (!WITHIN_PACKET(usb_phdr, fieldp)) \
1166                         return; \
1167                 PBSWAP64((guint8 *)fieldp); \
1168         }
1169
1170 static void
1171 pcap_byteswap_linux_usb_pseudoheader(struct wtap_pkthdr *phdr, guint8 *pd,
1172     gboolean header_len_64_bytes)
1173 {
1174         guint packet_size;
1175         struct linux_usb_phdr *usb_phdr;
1176         struct linux_usb_isodesc *pisodesc;
1177         gint32 iso_numdesc, i;
1178
1179         /*
1180          * Minimum of captured and actual length (just in case the
1181          * actual length < the captured length, which Should Never
1182          * Happen).
1183          */
1184         packet_size = phdr->caplen;
1185         if (packet_size > phdr->len)
1186                 packet_size = phdr->len;
1187
1188         /*
1189          * Greasy hack, but we never directly dereference any of
1190          * the fields in *usb_phdr, we just get offsets of and
1191          * addresses of its members and byte-swap it with a
1192          * byte-at-a-time macro, so it's alignment-safe.
1193          */
1194         usb_phdr = (struct linux_usb_phdr *)(void *)pd;
1195
1196         CHECK_AND_SWAP64(&usb_phdr->id);
1197         CHECK_AND_SWAP16(&usb_phdr->bus_id);
1198         CHECK_AND_SWAP64(&usb_phdr->ts_sec);
1199         CHECK_AND_SWAP32(&usb_phdr->ts_usec);
1200         CHECK_AND_SWAP32(&usb_phdr->status);
1201         CHECK_AND_SWAP32(&usb_phdr->urb_len);
1202         CHECK_AND_SWAP32(&usb_phdr->data_len);
1203
1204         if (usb_phdr->transfer_type == URB_ISOCHRONOUS) {
1205                 CHECK_AND_SWAP32(&usb_phdr->s.iso.error_count);
1206                 CHECK_AND_SWAP32(&usb_phdr->s.iso.numdesc);
1207         }
1208
1209         if (header_len_64_bytes) {
1210                 /*
1211                  * This is either the "version 1" header, with
1212                  * 16 bytes of additional fields at the end, or
1213                  * a "version 0" header from a memory-mapped
1214                  * capture, with 16 bytes of zeroed-out padding
1215                  * at the end.  Byte swap them as if this were
1216                  * a "version 1" header.
1217                  *
1218                  * Yes, the first argument to END_OFFSETOF() should
1219                  * be usb_phdr, not usb_phdr_ext; we want the offset of
1220                  * the additional fields from the beginning of
1221                  * the packet.
1222                  */
1223                 CHECK_AND_SWAP32(&usb_phdr->interval);
1224                 CHECK_AND_SWAP32(&usb_phdr->start_frame);
1225                 CHECK_AND_SWAP32(&usb_phdr->xfer_flags);
1226                 CHECK_AND_SWAP32(&usb_phdr->ndesc);
1227         }
1228
1229         if (usb_phdr->transfer_type == URB_ISOCHRONOUS) {
1230                 /* swap the values in struct linux_usb_isodesc */
1231
1232                 /*
1233                  * See previous "Greasy hack" comment.
1234                  */
1235                 if (header_len_64_bytes) {
1236                         pisodesc = (struct linux_usb_isodesc*)(void *)(pd + 64);
1237                 } else {
1238                         pisodesc = (struct linux_usb_isodesc*)(void *)(pd + 48);
1239                 }
1240                 iso_numdesc = usb_phdr->s.iso.numdesc;
1241                 for (i = 0; i < iso_numdesc; i++) {
1242                         CHECK_AND_SWAP32(&pisodesc->iso_status);
1243                         CHECK_AND_SWAP32(&pisodesc->iso_off);
1244                         CHECK_AND_SWAP32(&pisodesc->iso_len);
1245                         CHECK_AND_SWAP32(&pisodesc->_pad);
1246
1247                         pisodesc++;
1248                 }
1249         }
1250 }
1251
1252 struct nflog_hdr {
1253         guint8 nflog_family;            /* address family */
1254         guint8 nflog_version;           /* version */
1255         guint16 nflog_rid;              /* resource ID */
1256 };
1257
1258 struct nflog_tlv {
1259         guint16 tlv_length;             /* tlv length */
1260         guint16 tlv_type;               /* tlv type */
1261         /* value follows this */
1262 };
1263
1264 static void
1265 pcap_byteswap_nflog_pseudoheader(struct wtap_pkthdr *phdr, guint8 *pd)
1266 {
1267         guint packet_size;
1268         guint8 *p;
1269         struct nflog_hdr *nfhdr;
1270         struct nflog_tlv *tlv;
1271         guint size;
1272
1273         /*
1274          * Minimum of captured and actual length (just in case the
1275          * actual length < the captured length, which Should Never
1276          * Happen).
1277          */
1278         packet_size = phdr->caplen;
1279         if (packet_size > phdr->len)
1280                 packet_size = phdr->len;
1281
1282         if (packet_size < sizeof(struct nflog_hdr)) {
1283                 /* Not enough data to have any TLVs. */
1284                 return;
1285         }
1286
1287         p = pd;
1288         nfhdr = (struct nflog_hdr *)pd;
1289         if (nfhdr->nflog_version != 0) {
1290                 /* Unknown NFLOG version */
1291                 return;
1292         }
1293
1294         packet_size -= (guint)sizeof(struct nflog_hdr);
1295         p += sizeof(struct nflog_hdr);
1296
1297         while (packet_size >= sizeof(struct nflog_tlv)) {
1298                 tlv = (struct nflog_tlv *) p;
1299
1300                 /* Swap the type and length. */
1301                 PBSWAP16((guint8 *)&tlv->tlv_type);
1302                 PBSWAP16((guint8 *)&tlv->tlv_length);
1303
1304                 /* Get the length of the TLV. */
1305                 size = tlv->tlv_length;
1306                 if (size % 4 != 0)
1307                         size += 4 - size % 4;
1308
1309                 /* Is the TLV's length less than the minimum? */
1310                 if (size < sizeof(struct nflog_tlv)) {
1311                         /* Yes. Give up now. */
1312                         return;
1313                 }
1314
1315                 /* Do we have enough data for the full TLV? */
1316                 if (packet_size < size) {
1317                         /* No. */
1318                         return;
1319                 }
1320
1321                 /* Skip over the TLV. */
1322                 packet_size -= size;
1323                 p += size;
1324         }
1325 }
1326
1327 /*
1328  * Pseudo-header at the beginning of DLT_BLUETOOTH_HCI_H4_WITH_PHDR frames.
1329  * Values in network byte order.
1330  */
1331 struct libpcap_bt_phdr {
1332         guint32 direction;     /* Bit 0 hold the frame direction. */
1333 };
1334
1335 #define LIBPCAP_BT_PHDR_SENT    0
1336 #define LIBPCAP_BT_PHDR_RECV    1
1337
1338 static gboolean
1339 pcap_read_bt_pseudoheader(FILE_T fh,
1340     union wtap_pseudo_header *pseudo_header, int *err, gchar **err_info)
1341 {
1342         struct libpcap_bt_phdr phdr;
1343
1344         if (!wtap_read_bytes(fh, &phdr, sizeof (struct libpcap_bt_phdr),
1345             err, err_info))
1346                 return FALSE;
1347         pseudo_header->p2p.sent = ((g_ntohl(phdr.direction) & LIBPCAP_BT_PHDR_RECV) == 0)? TRUE: FALSE;
1348         return TRUE;
1349 }
1350
1351 /*
1352  * Pseudo-header at the beginning of DLT_BLUETOOTH_LINUX_MONITOR frames.
1353  * Values in network byte order.
1354  */
1355 struct libpcap_bt_monitor_phdr {
1356         guint16 adapter_id;
1357         guint16 opcode;
1358 };
1359
1360 static gboolean
1361 pcap_read_bt_monitor_pseudoheader(FILE_T fh,
1362     union wtap_pseudo_header *pseudo_header, int *err, gchar **err_info)
1363 {
1364         struct libpcap_bt_monitor_phdr phdr;
1365
1366         if (!wtap_read_bytes(fh, &phdr, sizeof (struct libpcap_bt_monitor_phdr),
1367             err, err_info))
1368                 return FALSE;
1369
1370         pseudo_header->btmon.adapter_id = g_ntohs(phdr.adapter_id);
1371         pseudo_header->btmon.opcode = g_ntohs(phdr.opcode);
1372         return TRUE;
1373 }
1374
1375 static gboolean
1376 pcap_read_llcp_pseudoheader(FILE_T fh,
1377     union wtap_pseudo_header *pseudo_header, int *err, gchar **err_info)
1378 {
1379         guint8 phdr[LLCP_HEADER_LEN];
1380
1381         if (!wtap_read_bytes(fh, phdr, LLCP_HEADER_LEN, err, err_info))
1382                 return FALSE;
1383         pseudo_header->llcp.adapter = phdr[LLCP_ADAPTER_OFFSET];
1384         pseudo_header->llcp.flags = phdr[LLCP_FLAGS_OFFSET];
1385         return TRUE;
1386 }
1387
1388 /*
1389  * Pseudo-header at the beginning of DLT_PPP_WITH_DIR frames.
1390  */
1391 struct libpcap_ppp_phdr {
1392         guint8 direction;
1393 };
1394
1395 #define LIBPCAP_PPP_PHDR_RECV    0
1396 #define LIBPCAP_PPP_PHDR_SENT    1
1397
1398 static gboolean
1399 pcap_read_ppp_pseudoheader(FILE_T fh,
1400     union wtap_pseudo_header *pseudo_header, int *err, gchar **err_info)
1401 {
1402         struct libpcap_ppp_phdr phdr;
1403
1404         if (!wtap_read_bytes(fh, &phdr, sizeof (struct libpcap_ppp_phdr),
1405             err, err_info))
1406                 return FALSE;
1407         pseudo_header->p2p.sent = (phdr.direction == LIBPCAP_PPP_PHDR_SENT) ? TRUE: FALSE;
1408         return TRUE;
1409 }
1410
1411 static gboolean
1412 pcap_read_erf_pseudoheader(FILE_T fh, struct wtap_pkthdr *whdr,
1413                            union wtap_pseudo_header *pseudo_header, int *err, gchar **err_info)
1414 {
1415         guint8 erf_hdr[sizeof(struct erf_phdr)];
1416
1417         if (!wtap_read_bytes(fh, erf_hdr, sizeof(struct erf_phdr), err, err_info))
1418                 return FALSE;
1419         pseudo_header->erf.phdr.ts = pletoh64(&erf_hdr[0]); /* timestamp */
1420         pseudo_header->erf.phdr.type =  erf_hdr[8];
1421         pseudo_header->erf.phdr.flags = erf_hdr[9];
1422         pseudo_header->erf.phdr.rlen = pntoh16(&erf_hdr[10]);
1423         pseudo_header->erf.phdr.lctr = pntoh16(&erf_hdr[12]);
1424         pseudo_header->erf.phdr.wlen = pntoh16(&erf_hdr[14]);
1425
1426         /* The high 32 bits of the timestamp contain the integer number of seconds
1427          * while the lower 32 bits contain the binary fraction of the second.
1428          * This allows an ultimate resolution of 1/(2^32) seconds, or approximately 233 picoseconds */
1429         if (whdr) {
1430                 guint64 ts = pseudo_header->erf.phdr.ts;
1431                 whdr->ts.secs = (guint32) (ts >> 32);
1432                 ts = ((ts & 0xffffffff) * 1000 * 1000 * 1000);
1433                 ts += (ts & 0x80000000) << 1; /* rounding */
1434                 whdr->ts.nsecs = ((guint32) (ts >> 32));
1435                 if ( whdr->ts.nsecs >= 1000000000) {
1436                         whdr->ts.nsecs -= 1000000000;
1437                         whdr->ts.secs += 1;
1438                 }
1439         }
1440         return TRUE;
1441 }
1442
1443 /*
1444  * If the type of record given in the pseudo header indicate the presence of an extension
1445  * header then, read all the extension headers
1446  */
1447 static gboolean
1448 pcap_read_erf_exheader(FILE_T fh, union wtap_pseudo_header *pseudo_header,
1449                        int *err, gchar **err_info, guint * psize)
1450 {
1451         guint8 erf_exhdr[8];
1452         guint64 erf_exhdr_sw;
1453         int i = 0, max = sizeof(pseudo_header->erf.ehdr_list)/sizeof(struct erf_ehdr);
1454         guint8 type;
1455         *psize = 0;
1456         if (pseudo_header->erf.phdr.type & 0x80){
1457                 do{
1458                         if (!wtap_read_bytes(fh, erf_exhdr, 8, err, err_info))
1459                                 return FALSE;
1460                         type = erf_exhdr[0];
1461                         erf_exhdr_sw = pntoh64(erf_exhdr);
1462                         if (i < max)
1463                                 memcpy(&pseudo_header->erf.ehdr_list[i].ehdr, &erf_exhdr_sw, sizeof(erf_exhdr_sw));
1464                         *psize += 8;
1465                         i++;
1466                 } while (type & 0x80);
1467         }
1468         return TRUE;
1469 }
1470
1471 /*
1472  * If the type of record given in the pseudo header indicate the precense of a subheader
1473  * then, read this optional subheader
1474  */
1475 static gboolean
1476 pcap_read_erf_subheader(FILE_T fh, union wtap_pseudo_header *pseudo_header,
1477                         int *err, gchar **err_info, guint * psize)
1478 {
1479         guint8 erf_subhdr[sizeof(union erf_subhdr)];
1480
1481         *psize=0;
1482         switch(pseudo_header->erf.phdr.type & 0x7F) {
1483         case ERF_TYPE_MC_HDLC:
1484         case ERF_TYPE_MC_RAW:
1485         case ERF_TYPE_MC_ATM:
1486         case ERF_TYPE_MC_RAW_CHANNEL:
1487         case ERF_TYPE_MC_AAL5:
1488         case ERF_TYPE_COLOR_MC_HDLC_POS:
1489                 /* Extract the Multi Channel header to include it in the pseudo header part */
1490                 if (!wtap_read_bytes(fh, erf_subhdr, sizeof(erf_mc_header_t), err, err_info))
1491                         return FALSE;
1492                 pseudo_header->erf.subhdr.mc_hdr = pntoh32(&erf_subhdr[0]);
1493                 *psize = sizeof(erf_mc_header_t);
1494                 break;
1495         case ERF_TYPE_MC_AAL2:
1496                 /* Extract the AAL2 header to include it in the pseudo header part */
1497                 if (!wtap_read_bytes(fh, erf_subhdr, sizeof(erf_aal2_header_t), err, err_info))
1498                         return FALSE;
1499                 pseudo_header->erf.subhdr.aal2_hdr = pntoh32(&erf_subhdr[0]);
1500                 *psize = sizeof(erf_aal2_header_t);
1501                 break;
1502         case ERF_TYPE_ETH:
1503         case ERF_TYPE_COLOR_ETH:
1504         case ERF_TYPE_DSM_COLOR_ETH:
1505                 /* Extract the Ethernet additional header to include it in the pseudo header part */
1506                 if (!wtap_read_bytes(fh, erf_subhdr, sizeof(erf_eth_header_t), err, err_info))
1507                         return FALSE;
1508                 memcpy(&pseudo_header->erf.subhdr.eth_hdr, erf_subhdr, sizeof pseudo_header->erf.subhdr.eth_hdr);
1509                 *psize = sizeof(erf_eth_header_t);
1510                 break;
1511         default:
1512                 /* No optional pseudo header for this ERF type */
1513                 break;
1514         }
1515         return TRUE;
1516 }
1517
1518 static gboolean
1519 pcap_read_i2c_pseudoheader(FILE_T fh, union wtap_pseudo_header *pseudo_header, int *err, gchar **err_info)
1520 {
1521         struct i2c_file_hdr i2c_hdr;
1522
1523         if (!wtap_read_bytes(fh, &i2c_hdr, sizeof (i2c_hdr), err, err_info))
1524                 return FALSE;
1525
1526         pseudo_header->i2c.is_event = i2c_hdr.bus & 0x80 ? 1 : 0;
1527         pseudo_header->i2c.bus = i2c_hdr.bus & 0x7f;
1528         pseudo_header->i2c.flags = pntoh32(&i2c_hdr.flags);
1529
1530         return TRUE;
1531 }
1532
1533 int
1534 pcap_process_pseudo_header(FILE_T fh, int file_type, int wtap_encap,
1535     guint packet_size, gboolean check_packet_size,
1536     struct wtap_pkthdr *phdr, int *err, gchar **err_info)
1537 {
1538         int phdr_len = 0;
1539         guint size;
1540
1541         phdr->pkt_encap = wtap_encap;
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  */