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