xref: /libbtbb/lib/src/pcap-common.h (revision 8f3e7eea1eae731e517c4fd7ac22f1ce3ad3cd5f)
1*8f3e7eeaSChristopher Kilgour /* -*- c -*- */
2*8f3e7eeaSChristopher Kilgour /*
3*8f3e7eeaSChristopher Kilgour  * Copyright 2014 Christopher D. Kilgour techie AT whiterocker.com
4*8f3e7eeaSChristopher Kilgour  *
5*8f3e7eeaSChristopher Kilgour  * This file is part of libbtbb
6*8f3e7eeaSChristopher Kilgour  *
7*8f3e7eeaSChristopher Kilgour  * This program is free software; you can redistribute it and/or modify
8*8f3e7eeaSChristopher Kilgour  * it under the terms of the GNU General Public License as published by
9*8f3e7eeaSChristopher Kilgour  * the Free Software Foundation; either version 2, or (at your option)
10*8f3e7eeaSChristopher Kilgour  * any later version.
11*8f3e7eeaSChristopher Kilgour  *
12*8f3e7eeaSChristopher Kilgour  * This program is distributed in the hope that it will be useful,
13*8f3e7eeaSChristopher Kilgour  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14*8f3e7eeaSChristopher Kilgour  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15*8f3e7eeaSChristopher Kilgour  * GNU General Public License for more details.
16*8f3e7eeaSChristopher Kilgour  *
17*8f3e7eeaSChristopher Kilgour  * You should have received a copy of the GNU General Public License
18*8f3e7eeaSChristopher Kilgour  * along with libbtbb; see the file COPYING.  If not, write to
19*8f3e7eeaSChristopher Kilgour  * the Free Software Foundation, Inc., 51 Franklin Street,
20*8f3e7eeaSChristopher Kilgour  * Boston, MA 02110-1301, USA.
21*8f3e7eeaSChristopher Kilgour  */
22*8f3e7eeaSChristopher Kilgour #ifndef PCAP_COMMON_DOT_H
23*8f3e7eeaSChristopher Kilgour #define PCAP_COMMON_DOT_H
24*8f3e7eeaSChristopher Kilgour 
25*8f3e7eeaSChristopher Kilgour /* pull definitions for BT DLTs and pseudoheaders from libpcap, if possible */
26*8f3e7eeaSChristopher Kilgour #if defined(USE_PCAP)
27*8f3e7eeaSChristopher Kilgour #include <pcap/pcap.h>
28*8f3e7eeaSChristopher Kilgour #include <pcap/bluetooth.h>
29*8f3e7eeaSChristopher Kilgour #endif
30*8f3e7eeaSChristopher Kilgour 
31*8f3e7eeaSChristopher Kilgour #if defined( __APPLE__ )
32*8f3e7eeaSChristopher Kilgour #include <CoreServices/CoreServices.h>
33*8f3e7eeaSChristopher Kilgour #define htobe32 EndianU32_NtoB
34*8f3e7eeaSChristopher Kilgour #define be32toh EndianU32_BtoN
35*8f3e7eeaSChristopher Kilgour #define le32toh EndianU32_LtoN
36*8f3e7eeaSChristopher Kilgour #define htobe64 EndianU64_NtoB
37*8f3e7eeaSChristopher Kilgour #define be64toh EndianU64_BtoN
38*8f3e7eeaSChristopher Kilgour #define htole16 EndianU16_NtoL
39*8f3e7eeaSChristopher Kilgour #define htole32 EndianU32_NtoL
40*8f3e7eeaSChristopher Kilgour #else
41*8f3e7eeaSChristopher Kilgour #include <endian.h>
42*8f3e7eeaSChristopher Kilgour #endif
43*8f3e7eeaSChristopher Kilgour 
44*8f3e7eeaSChristopher Kilgour #if !defined( htole16 ) /* will be defined under Linux when endian.h already included */
45*8f3e7eeaSChristopher Kilgour #if defined( __GNUC__ )
46*8f3e7eeaSChristopher Kilgour #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
47*8f3e7eeaSChristopher Kilgour inline uint16_t htole16(uint16_t host_16bits) { return host_16bits; }
48*8f3e7eeaSChristopher Kilgour inline uint16_t le16toh(uint16_t little_endian_16bits) { return little_endian_16bits; }
49*8f3e7eeaSChristopher Kilgour inline uint32_t htole32(uint32_t host_32bits) { return host_32bits; }
50*8f3e7eeaSChristopher Kilgour inline uint32_t le32toh(uint32_t little_endian_32bits) { return little_endian_32bits; }
51*8f3e7eeaSChristopher Kilgour inline uint64_t htole64(uint64_t host_64bits) { return host_64bits; }
52*8f3e7eeaSChristopher Kilgour inline uint64_t le64toh(uint64_t little_endian_64bits) { return little_endian_64bits; }
53*8f3e7eeaSChristopher Kilgour #else
54*8f3e7eeaSChristopher Kilgour #error "FIXME: need to support big-endian under GNU"
55*8f3e7eeaSChristopher Kilgour #endif /* __BYTE_ORDER__ */
56*8f3e7eeaSChristopher Kilgour #else /* not GNU C */
57*8f3e7eeaSChristopher Kilgour #error "FIXME: need to support non-GNU compiler"
58*8f3e7eeaSChristopher Kilgour #endif /* __GNUC__ */
59*8f3e7eeaSChristopher Kilgour #endif /* htole16 */
60*8f3e7eeaSChristopher Kilgour 
61*8f3e7eeaSChristopher Kilgour /* --------------------------------- BR/EDR ----------------------------- */
62*8f3e7eeaSChristopher Kilgour 
63*8f3e7eeaSChristopher Kilgour #if !defined( DLT_BLUETOOTH_BREDR_BB )
64*8f3e7eeaSChristopher Kilgour #define DLT_BLUETOOTH_BREDR_BB 255
65*8f3e7eeaSChristopher Kilgour typedef struct __attribute__((packed)) _pcap_bluetooth_bredr_bb_header {
66*8f3e7eeaSChristopher Kilgour         uint8_t rf_channel;
67*8f3e7eeaSChristopher Kilgour         int8_t signal_power;
68*8f3e7eeaSChristopher Kilgour         int8_t noise_power;
69*8f3e7eeaSChristopher Kilgour         uint8_t access_code_offenses;
70*8f3e7eeaSChristopher Kilgour         uint8_t payload_transport_rate;
71*8f3e7eeaSChristopher Kilgour         uint8_t corrected_header_bits;
72*8f3e7eeaSChristopher Kilgour         int16_t corrected_payload_bits;
73*8f3e7eeaSChristopher Kilgour         uint32_t lap;
74*8f3e7eeaSChristopher Kilgour         uint32_t ref_lap_uap;
75*8f3e7eeaSChristopher Kilgour         uint32_t bt_header;
76*8f3e7eeaSChristopher Kilgour         uint16_t flags;
77*8f3e7eeaSChristopher Kilgour         uint8_t  br_edr_payload[0];
78*8f3e7eeaSChristopher Kilgour } pcap_bluetooth_bredr_bb_header;
79*8f3e7eeaSChristopher Kilgour #endif
80*8f3e7eeaSChristopher Kilgour 
81*8f3e7eeaSChristopher Kilgour #define BREDR_GFSK              0x00
82*8f3e7eeaSChristopher Kilgour #define BREDR_PI_OVER_2_DQPSK   0x01
83*8f3e7eeaSChristopher Kilgour #define BREDR_8DPSK             0x02
84*8f3e7eeaSChristopher Kilgour #define BREDR_TRANSPORT_ANY     0x00
85*8f3e7eeaSChristopher Kilgour #define BREDR_TRANSPORT_SCO     0x01
86*8f3e7eeaSChristopher Kilgour #define BREDR_TRANSPORT_ESCO    0x02
87*8f3e7eeaSChristopher Kilgour #define BREDR_TRANSPORT_ACL     0x03
88*8f3e7eeaSChristopher Kilgour #define BREDR_TRANSPORT_CSB     0x04
89*8f3e7eeaSChristopher Kilgour 
90*8f3e7eeaSChristopher Kilgour #define BREDR_DEWHITENED        0x0001
91*8f3e7eeaSChristopher Kilgour #define BREDR_SIGPOWER_VALID    0x0002
92*8f3e7eeaSChristopher Kilgour #define BREDR_NOISEPOWER_VALID  0x0004
93*8f3e7eeaSChristopher Kilgour #define BREDR_PAYLOAD_DECRYPTED 0x0008
94*8f3e7eeaSChristopher Kilgour #define BREDR_REFLAP_VALID      0x0010
95*8f3e7eeaSChristopher Kilgour #define BREDR_PAYLOAD_PRESENT   0x0020
96*8f3e7eeaSChristopher Kilgour #define BREDR_CHANNEL_ALIASED   0x0040
97*8f3e7eeaSChristopher Kilgour #define BREDR_REFUAP_VALID      0x0080
98*8f3e7eeaSChristopher Kilgour #define BREDR_HEC_CHECKED       0x0100
99*8f3e7eeaSChristopher Kilgour #define BREDR_HEC_VALID         0x0200
100*8f3e7eeaSChristopher Kilgour #define BREDR_CRC_CHECKED       0x0400
101*8f3e7eeaSChristopher Kilgour #define BREDR_CRC_VALID         0x0800
102*8f3e7eeaSChristopher Kilgour #define BREDR_MIC_CHECKED       0x1000
103*8f3e7eeaSChristopher Kilgour #define BREDR_MIC_VALID         0x2000
104*8f3e7eeaSChristopher Kilgour 
105*8f3e7eeaSChristopher Kilgour /* --------------------------------- Low Energy ---------------------------- */
106*8f3e7eeaSChristopher Kilgour 
107*8f3e7eeaSChristopher Kilgour #if !defined( DLT_BLUETOOTH_LE_LL_WITH_PHDR )
108*8f3e7eeaSChristopher Kilgour #define DLT_BLUETOOTH_LE_LL_WITH_PHDR 256
109*8f3e7eeaSChristopher Kilgour typedef struct __attribute__((packed)) _pcap_bluetooth_le_ll_header {
110*8f3e7eeaSChristopher Kilgour         uint8_t rf_channel;
111*8f3e7eeaSChristopher Kilgour         int8_t signal_power;
112*8f3e7eeaSChristopher Kilgour         int8_t noise_power;
113*8f3e7eeaSChristopher Kilgour         uint8_t access_address_offenses;
114*8f3e7eeaSChristopher Kilgour         uint32_t ref_access_address;
115*8f3e7eeaSChristopher Kilgour         uint16_t flags;
116*8f3e7eeaSChristopher Kilgour         uint8_t le_packet[0];
117*8f3e7eeaSChristopher Kilgour } pcap_bluetooth_le_ll_header;
118*8f3e7eeaSChristopher Kilgour #endif
119*8f3e7eeaSChristopher Kilgour 
120*8f3e7eeaSChristopher Kilgour #define LE_DEWHITENED        0x0001
121*8f3e7eeaSChristopher Kilgour #define LE_SIGPOWER_VALID    0x0002
122*8f3e7eeaSChristopher Kilgour #define LE_NOISEPOWER_VALID  0x0004
123*8f3e7eeaSChristopher Kilgour #define LE_PACKET_DECRYPTED  0x0008
124*8f3e7eeaSChristopher Kilgour #define LE_REF_AA_VALID      0x0010
125*8f3e7eeaSChristopher Kilgour #define LE_AA_OFFENSES_VALID 0x0020
126*8f3e7eeaSChristopher Kilgour #define LE_CHANNEL_ALIASED   0x0040
127*8f3e7eeaSChristopher Kilgour #define LE_CRC_CHECKED       0x0400
128*8f3e7eeaSChristopher Kilgour #define LE_CRC_VALID         0x0800
129*8f3e7eeaSChristopher Kilgour #define LE_MIC_CHECKED       0x1000
130*8f3e7eeaSChristopher Kilgour #define LE_MIC_VALID         0x2000
131*8f3e7eeaSChristopher Kilgour 
132*8f3e7eeaSChristopher Kilgour #endif /* PCAP_COMMON_DOT_H */
133