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