xref: /libbtbb/lib/src/pcapng-bt.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 PCAPNG_BT_DOT_H
23*8f3e7eeaSChristopher Kilgour #define PCAPNG_BT_DOT_H
24*8f3e7eeaSChristopher Kilgour 
25*8f3e7eeaSChristopher Kilgour #include "pcap-common.h"
26*8f3e7eeaSChristopher Kilgour #include "pcapng.h"
27*8f3e7eeaSChristopher Kilgour 
28*8f3e7eeaSChristopher Kilgour typedef struct __attribute__((packed)) {
29*8f3e7eeaSChristopher Kilgour 	uint32_t centre_freq;
30*8f3e7eeaSChristopher Kilgour 	uint32_t analog_bandwidth;
31*8f3e7eeaSChristopher Kilgour 	int32_t  intermediate_freq;
32*8f3e7eeaSChristopher Kilgour 	uint32_t sampling_bandwidth;
33*8f3e7eeaSChristopher Kilgour } bt_wideband_rf_info;
34*8f3e7eeaSChristopher Kilgour 
35*8f3e7eeaSChristopher Kilgour typedef struct __attribute__((packed)) {
36*8f3e7eeaSChristopher Kilgour   option_header header;
37*8f3e7eeaSChristopher Kilgour   bt_wideband_rf_info wideband_rf_info;
38*8f3e7eeaSChristopher Kilgour } bt_wideband_rf_option;
39*8f3e7eeaSChristopher Kilgour 
40*8f3e7eeaSChristopher Kilgour #define PCAPNG_BT_WIDEBAND_RF_INFO 0xd300
41*8f3e7eeaSChristopher Kilgour 
42*8f3e7eeaSChristopher Kilgour /* --------------------------------- BR/EDR ----------------------------- */
43*8f3e7eeaSChristopher Kilgour 
44*8f3e7eeaSChristopher Kilgour typedef struct __attribute__((packed)) {
45*8f3e7eeaSChristopher Kilgour   enhanced_packet_block blk_header;
46*8f3e7eeaSChristopher Kilgour   pcap_bluetooth_bredr_bb_header bredr_bb_header;
47*8f3e7eeaSChristopher Kilgour   uint8_t bredr_payload[400];
48*8f3e7eeaSChristopher Kilgour } pcapng_bredr_packet;
49*8f3e7eeaSChristopher Kilgour 
50*8f3e7eeaSChristopher Kilgour typedef struct __attribute__((packed)) {
51*8f3e7eeaSChristopher Kilgour   uint8_t bd_addr[6];
52*8f3e7eeaSChristopher Kilgour   uint8_t uap_mask;
53*8f3e7eeaSChristopher Kilgour   uint8_t nap_valid;
54*8f3e7eeaSChristopher Kilgour } bredr_bd_addr_info;
55*8f3e7eeaSChristopher Kilgour 
56*8f3e7eeaSChristopher Kilgour typedef struct __attribute__((packed)) {
57*8f3e7eeaSChristopher Kilgour   option_header header;
58*8f3e7eeaSChristopher Kilgour   bredr_bd_addr_info bd_addr_info;
59*8f3e7eeaSChristopher Kilgour } bredr_br_addr_option;
60*8f3e7eeaSChristopher Kilgour 
61*8f3e7eeaSChristopher Kilgour typedef struct __attribute__((packed)) {
62*8f3e7eeaSChristopher Kilgour   uint64_t ts;
63*8f3e7eeaSChristopher Kilgour   uint32_t lap_uap;
64*8f3e7eeaSChristopher Kilgour   uint32_t clk;
65*8f3e7eeaSChristopher Kilgour   uint32_t clk_mask;
66*8f3e7eeaSChristopher Kilgour } bredr_clk_info;
67*8f3e7eeaSChristopher Kilgour 
68*8f3e7eeaSChristopher Kilgour typedef struct __attribute__((packed)) {
69*8f3e7eeaSChristopher Kilgour   option_header header;
70*8f3e7eeaSChristopher Kilgour   bredr_clk_info clock_info;
71*8f3e7eeaSChristopher Kilgour } bredr_clk_option;
72*8f3e7eeaSChristopher Kilgour 
73*8f3e7eeaSChristopher Kilgour #define PCAPNG_BREDR_OPTION_BD_ADDR           0xd340
74*8f3e7eeaSChristopher Kilgour #define PCAPNG_BREDR_OPTION_MASTER_CLOCK_INFO 0xd341
75*8f3e7eeaSChristopher Kilgour 
76*8f3e7eeaSChristopher Kilgour /* --------------------------------- Low Energy ---------------------------- */
77*8f3e7eeaSChristopher Kilgour 
78*8f3e7eeaSChristopher Kilgour typedef struct __attribute__((packed)) {
79*8f3e7eeaSChristopher Kilgour   enhanced_packet_block blk_header;
80*8f3e7eeaSChristopher Kilgour   pcap_bluetooth_le_ll_header le_ll_header;
81*8f3e7eeaSChristopher Kilgour   uint8_t le_packet[48];
82*8f3e7eeaSChristopher Kilgour } pcapng_le_packet;
83*8f3e7eeaSChristopher Kilgour 
84*8f3e7eeaSChristopher Kilgour typedef struct __attribute__((packed)) {
85*8f3e7eeaSChristopher Kilgour   uint64_t ns;
86*8f3e7eeaSChristopher Kilgour   union {
87*8f3e7eeaSChristopher Kilgour     struct {
88*8f3e7eeaSChristopher Kilgour       uint8_t InitA[6];
89*8f3e7eeaSChristopher Kilgour       uint8_t AdvA[6];
90*8f3e7eeaSChristopher Kilgour       uint8_t AA[4];
91*8f3e7eeaSChristopher Kilgour       uint8_t CRCInit[3];
92*8f3e7eeaSChristopher Kilgour       uint8_t WinSize;
93*8f3e7eeaSChristopher Kilgour       uint8_t WinOffset[2];
94*8f3e7eeaSChristopher Kilgour       uint8_t Interval[2];
95*8f3e7eeaSChristopher Kilgour       uint8_t Latency[2];
96*8f3e7eeaSChristopher Kilgour       uint8_t Timeout[2];
97*8f3e7eeaSChristopher Kilgour       uint8_t ChM[5];
98*8f3e7eeaSChristopher Kilgour       uint8_t HopSCA;
99*8f3e7eeaSChristopher Kilgour     } fields;
100*8f3e7eeaSChristopher Kilgour     uint8_t bytes[0];
101*8f3e7eeaSChristopher Kilgour   } pdu;
102*8f3e7eeaSChristopher Kilgour } le_ll_connection_info;
103*8f3e7eeaSChristopher Kilgour 
104*8f3e7eeaSChristopher Kilgour typedef struct __attribute__((packed)) {
105*8f3e7eeaSChristopher Kilgour   option_header header;
106*8f3e7eeaSChristopher Kilgour   le_ll_connection_info connection_info;
107*8f3e7eeaSChristopher Kilgour } le_ll_connection_info_option;
108*8f3e7eeaSChristopher Kilgour 
109*8f3e7eeaSChristopher Kilgour #define PCAPNG_LE_LL_CONNECTION_INFO 0xd380
110*8f3e7eeaSChristopher Kilgour 
111*8f3e7eeaSChristopher Kilgour #endif /* PCAPNG_BT_DOT_H */
112