summaryrefslogtreecommitdiff
path: root/src/btd.h
blob: b7e7ebd618cf7bfaa79af1a3aaa4e4c7f601db34 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
/* SPDX-License-Identifier: GPL-2.0-or-later */
/*
 *
 *  BlueZ - Bluetooth protocol stack for Linux
 *
 *  Copyright (C) 2000-2001  Qualcomm Incorporated
 *  Copyright (C) 2002-2003  Maxim Krasnyansky <maxk@qualcomm.com>
 *  Copyright (C) 2002-2010  Marcel Holtmann <marcel@holtmann.org>
 *
 *
 */

#include <stdbool.h>

typedef enum {
	BT_MODE_DUAL,
	BT_MODE_BREDR,
	BT_MODE_LE,
} bt_mode_t;

typedef enum {
	BT_GATT_CACHE_ALWAYS,
	BT_GATT_CACHE_YES,
	BT_GATT_CACHE_NO,
} bt_gatt_cache_t;

enum jw_repairing_t {
	JW_REPAIRING_NEVER,
	JW_REPAIRING_CONFIRM,
	JW_REPAIRING_ALWAYS,
};

enum mps_mode_t {
	MPS_OFF,
	MPS_SINGLE,
	MPS_MULTIPLE,
};

enum sc_mode_t {
	SC_OFF,
	SC_ON,
	SC_ONLY,
};

struct btd_br_defaults {
	uint16_t	page_scan_type;
	uint16_t	page_scan_interval;
	uint16_t	page_scan_win;

	uint16_t	scan_type;
	uint16_t	scan_interval;
	uint16_t	scan_win;

	uint16_t	link_supervision_timeout;
	uint16_t	page_timeout;

	uint16_t	min_sniff_interval;
	uint16_t	max_sniff_interval;
};

struct btd_le_defaults {
	uint16_t	min_adv_interval;
	uint16_t	max_adv_interval;
	uint16_t	adv_rotation_interval;

	uint16_t	scan_interval_autoconnect;
	uint16_t	scan_win_autoconnect;
	uint16_t	scan_interval_suspend;
	uint16_t	scan_win_suspend;
	uint16_t	scan_interval_discovery;
	uint16_t	scan_win_discovery;
	uint16_t	scan_interval_adv_monitor;
	uint16_t	scan_win_adv_monitor;
	uint16_t	scan_interval_connect;
	uint16_t	scan_win_connect;

	uint16_t	min_conn_interval;
	uint16_t	max_conn_interval;
	uint16_t	conn_latency;
	uint16_t	conn_lsto;
	uint16_t	autoconnect_timeout;

	uint16_t	advmon_allowlist_scan_duration;
	uint16_t	advmon_no_filter_scan_duration;
	uint8_t		enable_advmon_interleave_scan;
};

struct btd_defaults {
	uint16_t	num_entries;

	struct btd_br_defaults br;
	struct btd_le_defaults le;
};

struct btd_csis {
	bool    encrypt;
	uint8_t sirk[16];
	uint8_t size;
	uint8_t rank;
};

struct btd_avdtp_opts {
	uint8_t  session_mode;
	uint8_t  stream_mode;
};

struct btd_advmon_opts {
	uint8_t		rssi_sampling_period;
};

struct btd_opts {
	char		*name;
	uint32_t	class;
	bool		pairable;
	uint32_t	pairto;
	uint32_t	discovto;
	uint32_t	tmpto;
	uint8_t		privacy;
	bool		device_privacy;
	uint32_t	name_request_retry_delay;
	uint8_t		secure_conn;

	struct btd_defaults defaults;

	bool		reverse_discovery;
	bool		name_resolv;
	bool		debug_keys;
	bool		fast_conn;
	bool		refresh_discovery;
	bool		experimental;
	struct queue	*kernel;

	uint16_t	did_source;
	uint16_t	did_vendor;
	uint16_t	did_product;
	uint16_t	did_version;

	bt_mode_t	mode;
	uint16_t	max_adapters;
	bt_gatt_cache_t gatt_cache;
	uint16_t	gatt_mtu;
	uint8_t		gatt_channels;
	enum mps_mode_t	mps;

	struct btd_avdtp_opts avdtp;

	uint8_t		key_size;

	enum jw_repairing_t jw_repairing;

	struct btd_advmon_opts	advmon;

	struct btd_csis csis;
};

extern struct btd_opts btd_opts;

gboolean plugin_init(const char *enable, const char *disable);
void plugin_cleanup(void);

void rfkill_init(void);
void rfkill_exit(void);
int rfkill_get_blocked(uint16_t index);

GKeyFile *btd_get_main_conf(void);
bool btd_kernel_experimental_enabled(const char *uuid);

void btd_exit(void);