3
* BlueZ - Bluetooth protocol stack for Linux
5
* Copyright (C) 2004-2010 Marcel Holtmann <marcel@holtmann.org>
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 of the License, or
10
* (at your option) any later version.
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.
17
* You should have received a copy of the GNU General Public License
18
* along with this program; if not, write to the Free Software
19
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
31
#include <sys/types.h>
32
#include <sys/ioctl.h>
35
#include <bluetooth/bluetooth.h>
36
#include <bluetooth/hci.h>
37
#include <bluetooth/hci_lib.h>
51
static int child_pipe[2] = { -1, -1 };
53
static guint child_io_id = 0;
54
static guint ctl_io_id = 0;
56
/* Commands sent by kernel on starting an adapter */
64
#define SK(index) devs[(index)].sk
65
#define BDADDR(index) devs[(index)].bdaddr
66
#define FEATURES(index) devs[(index)].features
67
#define VER(index) devs[(index)].ver
68
#define UP(index) devs[(index)].up
69
#define PENDING(index) devs[(index)].pending
70
#define CHANNEL(index) devs[(index)].channel
71
#define WATCH_ID(index) devs[(index)].watch_id
72
#define PIN_LENGTH(index) devs[(index)].pin_length
74
static int max_dev = -1;
75
static struct dev_info {
79
struct hci_version ver;
82
unsigned long pending;
89
static int ignore_device(struct hci_dev_info *di)
91
return hci_test_bit(HCI_RAW, &di->flags) || di->type >> 4 != HCI_BREDR;
94
static void init_dev_info(int index, int sk)
96
memset(&devs[index], 0, sizeof(struct dev_info));
98
PIN_LENGTH(index) = -1;
101
/* Async HCI command handling with callback support */
103
struct hci_cmd_data {
107
gpointer caller_data;
110
static gboolean hci_event_watch(GIOChannel *io,
111
GIOCondition cond, gpointer user_data)
113
unsigned char buf[HCI_MAX_EVENT_SIZE], *body;
114
struct hci_cmd_data *cmd = user_data;
115
evt_cmd_status *evt_status;
116
evt_auth_complete *evt_auth;
117
evt_encrypt_change *evt_enc;
119
set_conn_encrypt_cp cp;
122
uint8_t status = HCI_OE_POWER_OFF;
124
if (cond & G_IO_NVAL) {
125
cmd->cb(status, cmd->caller_data);
129
if (cond & (G_IO_ERR | G_IO_HUP))
132
dd = g_io_channel_unix_get_fd(io);
134
if (read(dd, buf, sizeof(buf)) < 0)
137
hdr = (hci_event_hdr *) (buf + 1);
138
body = buf + (1 + HCI_EVENT_HDR_SIZE);
142
evt_status = (evt_cmd_status *) body;
143
ocf = cmd_opcode_ocf(evt_status->opcode);
147
case OCF_AUTH_REQUESTED:
148
case OCF_SET_CONN_ENCRYPT:
149
if (evt_status->status != 0) {
150
/* Baseband rejected command */
151
status = evt_status->status;
158
/* Wait for the next event */
160
case EVT_AUTH_COMPLETE:
161
evt_auth = (evt_auth_complete *) body;
162
if (evt_auth->handle != cmd->handle) {
167
if (evt_auth->status != 0x00) {
168
status = evt_auth->status;
169
/* Abort encryption */
173
memset(&cp, 0, sizeof(cp));
174
cp.handle = cmd->handle;
177
cmd->ocf = OCF_SET_CONN_ENCRYPT;
179
if (hci_send_cmd(dd, OGF_LINK_CTL, OCF_SET_CONN_ENCRYPT,
180
SET_CONN_ENCRYPT_CP_SIZE, &cp) < 0) {
181
status = HCI_COMMAND_DISALLOWED;
184
/* Wait for encrypt change event */
186
case EVT_ENCRYPT_CHANGE:
187
evt_enc = (evt_encrypt_change *) body;
188
if (evt_enc->handle != cmd->handle)
191
/* Procedure finished: reporting status */
192
status = evt_enc->status;
200
cmd->cb(status, cmd->caller_data);
201
g_io_channel_shutdown(io, TRUE, NULL);
206
static int write_inq_mode(int index, uint8_t mode)
208
write_inquiry_mode_cp cp;
210
memset(&cp, 0, sizeof(cp));
213
if (hci_send_cmd(SK(index), OGF_HOST_CTL, OCF_WRITE_INQUIRY_MODE,
214
WRITE_INQUIRY_MODE_CP_SIZE, &cp) < 0)
220
static uint8_t get_inquiry_mode(int index)
222
if (FEATURES(index)[6] & LMP_EXT_INQ)
225
if (FEATURES(index)[3] & LMP_RSSI_INQ)
228
if (VER(index).manufacturer == 11 && VER(index).hci_rev == 0x00 &&
229
VER(index).lmp_subver == 0x0757)
232
if (VER(index).manufacturer == 15) {
233
if (VER(index).hci_rev == 0x03 &&
234
VER(index).lmp_subver == 0x6963)
236
if (VER(index).hci_rev == 0x09 &&
237
VER(index).lmp_subver == 0x6963)
239
if (VER(index).hci_rev == 0x00 &&
240
VER(index).lmp_subver == 0x6965)
244
if (VER(index).manufacturer == 31 && VER(index).hci_rev == 0x2005 &&
245
VER(index).lmp_subver == 0x1805)
251
static int init_ssp_mode(int index)
253
write_simple_pairing_mode_cp cp;
255
if (ioctl(SK(index), HCIGETAUTHINFO, NULL) < 0 && errno == EINVAL)
258
memset(&cp, 0, sizeof(cp));
261
if (hci_send_cmd(SK(index), OGF_HOST_CTL,
262
OCF_WRITE_SIMPLE_PAIRING_MODE,
263
WRITE_SIMPLE_PAIRING_MODE_CP_SIZE, &cp) < 0)
269
static void start_adapter(int index)
271
uint8_t events[8] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x00 };
274
if (VER(index).lmp_ver > 1) {
275
if (FEATURES(index)[5] & LMP_SNIFF_SUBR)
278
if (FEATURES(index)[5] & LMP_PAUSE_ENC)
281
if (FEATURES(index)[6] & LMP_EXT_INQ)
284
if (FEATURES(index)[6] & LMP_NFLUSH_PKTS)
287
if (FEATURES(index)[7] & LMP_LSTO)
290
if (FEATURES(index)[6] & LMP_SIMPLE_PAIR) {
291
events[6] |= 0x01; /* IO Capability Request */
292
events[6] |= 0x02; /* IO Capability Response */
293
events[6] |= 0x04; /* User Confirmation Request */
294
events[6] |= 0x08; /* User Passkey Request */
295
events[6] |= 0x10; /* Remote OOB Data Request */
296
events[6] |= 0x20; /* Simple Pairing Complete */
297
events[7] |= 0x04; /* User Passkey Notification */
298
events[7] |= 0x08; /* Keypress Notification */
299
events[7] |= 0x10; /* Remote Host Supported
300
* Features Notification */
303
if (FEATURES(index)[4] & LMP_LE)
304
events[7] |= 0x20; /* LE Meta-Event */
306
hci_send_cmd(SK(index), OGF_HOST_CTL, OCF_SET_EVENT_MASK,
307
sizeof(events), events);
310
if (FEATURES(index)[6] & LMP_SIMPLE_PAIR)
311
init_ssp_mode(index);
313
inqmode = get_inquiry_mode(index);
315
write_inq_mode(index, inqmode);
317
if (FEATURES(index)[7] & LMP_INQ_TX_PWR)
318
hci_send_cmd(SK(index), OGF_HOST_CTL,
319
OCF_READ_INQ_RESPONSE_TX_POWER_LEVEL, 0, NULL);
321
manager_start_adapter(index);
324
static int hciops_encrypt_link(int index, bdaddr_t *dst, bt_hci_result_t cb,
328
struct hci_cmd_data *cmd;
329
struct hci_conn_info_req *cr;
330
auth_requested_cp cp;
331
struct hci_filter nf;
336
dd = hci_open_dev(index);
340
cr = g_malloc0(sizeof(*cr) + sizeof(struct hci_conn_info));
342
bacpy(&cr->bdaddr, dst);
344
err = ioctl(dd, HCIGETCONNINFO, cr);
345
link_mode = cr->conn_info->link_mode;
346
handle = cr->conn_info->handle;
354
if (link_mode & HCI_LM_ENCRYPT) {
359
memset(&cp, 0, sizeof(cp));
360
cp.handle = htobs(handle);
362
if (hci_send_cmd(dd, OGF_LINK_CTL, OCF_AUTH_REQUESTED,
363
AUTH_REQUESTED_CP_SIZE, &cp) < 0) {
368
cmd = g_new0(struct hci_cmd_data, 1);
369
cmd->handle = handle;
370
cmd->ocf = OCF_AUTH_REQUESTED;
372
cmd->caller_data = user_data;
374
hci_filter_clear(&nf);
375
hci_filter_set_ptype(HCI_EVENT_PKT, &nf);
376
hci_filter_set_event(EVT_CMD_STATUS, &nf);
377
hci_filter_set_event(EVT_AUTH_COMPLETE, &nf);
378
hci_filter_set_event(EVT_ENCRYPT_CHANGE, &nf);
380
if (setsockopt(dd, SOL_HCI, HCI_FILTER, &nf, sizeof(nf)) < 0) {
386
io = g_io_channel_unix_new(dd);
387
g_io_channel_set_close_on_unref(io, FALSE);
388
g_io_add_watch_full(io, G_PRIORITY_DEFAULT,
389
G_IO_HUP | G_IO_ERR | G_IO_NVAL | G_IO_IN,
390
hci_event_watch, cmd, g_free);
391
g_io_channel_unref(io);
400
/* End async HCI command handling */
402
/* Start of HCI event callbacks */
404
static int get_handle(int index, bdaddr_t *dba, uint16_t *handle)
406
struct hci_conn_list_req *cl;
407
struct hci_conn_info *ci;
410
cl = g_malloc0(10 * sizeof(*ci) + sizeof(*cl));
416
if (ioctl(SK(index), HCIGETCONNLIST, (void *) cl) < 0) {
421
for (i = 0; i < cl->conn_num; i++, ci++) {
422
if (bacmp(&ci->bdaddr, dba) == 0) {
423
*handle = ci->handle;
434
static inline int get_bdaddr(int index, uint16_t handle, bdaddr_t *dba)
436
struct hci_conn_list_req *cl;
437
struct hci_conn_info *ci;
440
cl = g_malloc0(10 * sizeof(*ci) + sizeof(*cl));
446
if (ioctl(SK(index), HCIGETCONNLIST, (void *) cl) < 0) {
451
for (i = 0; i < cl->conn_num; i++, ci++)
452
if (ci->handle == handle) {
453
bacpy(dba, &ci->bdaddr);
463
static inline void update_lastseen(bdaddr_t *sba, bdaddr_t *dba)
471
write_lastseen_info(sba, dba, tm);
474
static inline void update_lastused(bdaddr_t *sba, bdaddr_t *dba)
482
write_lastused_info(sba, dba, tm);
485
/* Link Key handling */
487
static void link_key_request(int index, bdaddr_t *dba)
489
struct btd_adapter *adapter;
490
struct btd_device *device;
491
struct hci_auth_info_req req;
492
unsigned char key[16];
498
DBG("hci%d dba %s", index, da);
500
adapter = manager_find_adapter(&BDADDR(index));
502
device = adapter_find_device(adapter, da);
506
memset(&req, 0, sizeof(req));
507
bacpy(&req.bdaddr, dba);
509
err = ioctl(SK(index), HCIGETAUTHINFO, (unsigned long) &req);
512
DBG("HCIGETAUTHINFO failed %s (%d)",
513
strerror(errno), errno);
517
DBG("kernel auth requirements = 0x%02x", req.type);
519
if (main_opts.debug_keys && device &&
520
device_get_debug_key(device, key))
522
else if (read_link_key(&BDADDR(index), dba, key, &type) < 0 ||
524
/* Link key not found */
525
hci_send_cmd(SK(index), OGF_LINK_CTL, OCF_LINK_KEY_NEG_REPLY,
532
DBG("link key type 0x%02x", type);
534
/* Don't use unauthenticated combination keys if MITM is
536
if (type == 0x04 && req.type != 0xff && (req.type & 0x01))
537
hci_send_cmd(SK(index), OGF_LINK_CTL, OCF_LINK_KEY_NEG_REPLY,
540
link_key_reply_cp lr;
542
memcpy(lr.link_key, key, 16);
543
bacpy(&lr.bdaddr, dba);
545
hci_send_cmd(SK(index), OGF_LINK_CTL, OCF_LINK_KEY_REPLY,
546
LINK_KEY_REPLY_CP_SIZE, &lr);
550
static void link_key_notify(int index, void *ptr)
552
evt_link_key_notify *evt = ptr;
553
bdaddr_t *dba = &evt->bdaddr;
556
unsigned char old_key[16];
557
uint8_t old_key_type;
560
DBG("hci%d dba %s type %d", index, da, evt->key_type);
562
err = read_link_key(&BDADDR(index), dba, old_key, &old_key_type);
566
err = btd_event_link_key_notify(&BDADDR(index), dba, evt->link_key,
567
evt->key_type, PIN_LENGTH(index),
569
PIN_LENGTH(index) = -1;
575
btd_event_bonding_process_complete(&BDADDR(index), dba,
576
HCI_OE_LOW_RESOURCES);
578
btd_event_bonding_process_complete(&BDADDR(index), dba,
581
if (get_handle(index, dba, &handle) == 0) {
584
memset(&cp, 0, sizeof(cp));
585
cp.handle = htobs(handle);
586
cp.reason = HCI_OE_LOW_RESOURCES;
588
hci_send_cmd(SK(index), OGF_LINK_CTL, OCF_DISCONNECT,
589
DISCONNECT_CP_SIZE, &cp);
594
static void return_link_keys(int index, void *ptr)
596
evt_return_link_keys *evt = ptr;
597
uint8_t num = evt->num_keys;
598
unsigned char key[16];
603
DBG("hci%d num_keys %u", index, num);
607
for (i = 0; i < num; i++) {
608
bacpy(&dba, ptr); ba2str(&dba, da);
609
memcpy(key, ptr + 6, 16);
611
DBG("hci%d returned key for %s", index, da);
613
btd_event_returned_link_key(&BDADDR(index), &dba);
619
/* Simple Pairing handling */
621
static void user_confirm_request(int index, void *ptr)
623
evt_user_confirm_request *req = ptr;
627
if (btd_event_user_confirm(&BDADDR(index), &req->bdaddr,
628
btohl(req->passkey)) < 0)
629
hci_send_cmd(SK(index), OGF_LINK_CTL,
630
OCF_USER_CONFIRM_NEG_REPLY, 6, ptr);
633
static void user_passkey_request(int index, void *ptr)
635
evt_user_passkey_request *req = ptr;
639
if (btd_event_user_passkey(&BDADDR(index), &req->bdaddr) < 0)
640
hci_send_cmd(SK(index), OGF_LINK_CTL,
641
OCF_USER_PASSKEY_NEG_REPLY, 6, ptr);
644
static void user_passkey_notify(int index, void *ptr)
646
evt_user_passkey_notify *req = ptr;
650
btd_event_user_notify(&BDADDR(index), &req->bdaddr,
651
btohl(req->passkey));
654
static void remote_oob_data_request(int index, void *ptr)
657
hci_send_cmd(SK(index), OGF_LINK_CTL,
658
OCF_REMOTE_OOB_DATA_NEG_REPLY, 6, ptr);
661
static void io_capa_request(int index, void *ptr)
668
DBG("hci%d IO capability request for %s", index, da);
670
if (btd_event_get_io_cap(&BDADDR(index), dba, &cap, &auth) < 0) {
671
io_capability_neg_reply_cp cp;
672
memset(&cp, 0, sizeof(cp));
673
bacpy(&cp.bdaddr, dba);
674
cp.reason = HCI_PAIRING_NOT_ALLOWED;
675
hci_send_cmd(SK(index), OGF_LINK_CTL,
676
OCF_IO_CAPABILITY_NEG_REPLY,
677
IO_CAPABILITY_NEG_REPLY_CP_SIZE, &cp);
679
io_capability_reply_cp cp;
680
memset(&cp, 0, sizeof(cp));
681
bacpy(&cp.bdaddr, dba);
684
cp.authentication = auth;
685
hci_send_cmd(SK(index), OGF_LINK_CTL, OCF_IO_CAPABILITY_REPLY,
686
IO_CAPABILITY_REPLY_CP_SIZE, &cp);
690
static void io_capa_response(int index, void *ptr)
692
evt_io_capability_response *evt = ptr;
695
ba2str(&evt->bdaddr, da);
696
DBG("hci%d IO capability response from %s", index, da);
698
btd_event_set_io_cap(&BDADDR(index), &evt->bdaddr,
699
evt->capability, evt->authentication);
702
/* PIN code handling */
704
static void pin_code_request(int index, bdaddr_t *dba)
706
pin_code_reply_cp pr;
707
struct hci_conn_info_req *cr;
708
struct hci_conn_info *ci;
709
char da[18], pin[17];
712
memset(&pr, 0, sizeof(pr));
713
bacpy(&pr.bdaddr, dba);
716
DBG("hci%d PIN request for %s", index, da);
718
cr = g_malloc0(sizeof(*cr) + sizeof(*ci));
720
bacpy(&cr->bdaddr, dba);
722
if (ioctl(SK(index), HCIGETCONNINFO, (unsigned long) cr) < 0) {
723
error("Can't get conn info: %s (%d)", strerror(errno), errno);
728
memset(pin, 0, sizeof(pin));
729
pinlen = read_pin_code(&BDADDR(index), dba, pin);
732
PIN_LENGTH(index) = pinlen;
733
memcpy(pr.pin_code, pin, pinlen);
735
hci_send_cmd(SK(index), OGF_LINK_CTL, OCF_PIN_CODE_REPLY,
736
PIN_CODE_REPLY_CP_SIZE, &pr);
738
/* Request PIN from passkey agent */
739
if (btd_event_request_pin(&BDADDR(index), ci) < 0)
750
hci_send_cmd(SK(index), OGF_LINK_CTL, OCF_PIN_CODE_NEG_REPLY, 6, dba);
753
static void start_inquiry(bdaddr_t *local, uint8_t status, gboolean periodic)
755
struct btd_adapter *adapter;
758
/* Don't send the signal if the cmd failed */
760
error("Inquiry Failed with status 0x%02x", status);
764
adapter = manager_find_adapter(local);
766
error("Unable to find matching adapter");
770
state = adapter_get_state(adapter);
775
state |= STATE_STDINQ;
777
adapter_set_state(adapter, state);
780
static void inquiry_complete(bdaddr_t *local, uint8_t status,
783
struct btd_adapter *adapter;
786
/* Don't send the signal if the cmd failed */
788
error("Inquiry Failed with status 0x%02x", status);
792
adapter = manager_find_adapter(local);
794
error("Unable to find matching adapter");
798
state = adapter_get_state(adapter);
799
state &= ~(STATE_STDINQ | STATE_PINQ);
800
adapter_set_state(adapter, state);
803
static inline void remote_features_notify(int index, void *ptr)
805
evt_remote_host_features_notify *evt = ptr;
807
if (evt->features[0] & 0x01)
808
btd_event_set_legacy_pairing(&BDADDR(index), &evt->bdaddr,
811
btd_event_set_legacy_pairing(&BDADDR(index), &evt->bdaddr,
814
write_features_info(&BDADDR(index), &evt->bdaddr, NULL, evt->features);
817
static void write_le_host_complete(bdaddr_t *sba, uint8_t status)
819
struct btd_adapter *adapter;
824
adapter = manager_find_adapter(sba);
826
error("No matching adapter found");
830
btd_adapter_read_local_ext_features(adapter);
833
static void read_local_version_complete(int index,
834
const read_local_version_rp *rp)
839
VER(index).manufacturer = btohs(bt_get_unaligned(&rp->manufacturer));
840
VER(index).hci_ver = rp->hci_ver;
841
VER(index).hci_rev = btohs(bt_get_unaligned(&rp->hci_rev));
842
VER(index).lmp_ver = rp->lmp_ver;
843
VER(index).lmp_subver = btohs(bt_get_unaligned(&rp->lmp_subver));
848
hci_clear_bit(PENDING_VERSION, &PENDING(index));
850
DBG("Got version for hci%d", index);
852
if (!PENDING(index) && UP(index))
853
start_adapter(index);
856
static void read_local_features_complete(int index,
857
const read_local_features_rp *rp)
862
memcpy(FEATURES(index), rp->features, 8);
867
hci_clear_bit(PENDING_FEATURES, &PENDING(index));
869
DBG("Got features for hci%d", index);
871
if (!PENDING(index) && UP(index))
872
start_adapter(index);
875
static void update_name(int index, const char *name)
877
struct btd_adapter *adapter;
879
adapter = manager_find_adapter(&BDADDR(index));
881
adapter_update_local_name(adapter, name);
884
static void read_local_name_complete(int index, read_local_name_rp *rp)
886
DBG("hci%d status %u", index, rp->status);
891
if (!PENDING(index)) {
892
update_name(index, (char *) rp->name);
896
hci_clear_bit(PENDING_NAME, &PENDING(index));
898
DBG("Got name for hci%d", index);
903
/* Even though it shouldn't happen (assuming the kernel behaves
904
* properly) it seems like we might miss the very first
905
* initialization commands that the kernel sends. So check for
906
* it here (since read_local_name is one of the last init
907
* commands) and resend the first ones if we haven't seen
908
* their results yet */
910
if (hci_test_bit(PENDING_FEATURES, &PENDING(index)))
911
hci_send_cmd(SK(index), OGF_INFO_PARAM,
912
OCF_READ_LOCAL_FEATURES, 0, NULL);
914
if (hci_test_bit(PENDING_VERSION, &PENDING(index)))
915
hci_send_cmd(SK(index), OGF_INFO_PARAM,
916
OCF_READ_LOCAL_VERSION, 0, NULL);
919
start_adapter(index);
922
static void read_tx_power_complete(int index, void *ptr)
924
read_inq_response_tx_power_level_rp *rp = ptr;
925
struct btd_adapter *adapter;
927
DBG("hci%d status %u", index, rp->status);
932
adapter = manager_find_adapter(&BDADDR(index));
934
error("No matching adapter found");
938
adapter_update_tx_power(adapter, rp->level);
941
static void read_simple_pairing_mode_complete(int index, void *ptr)
943
read_simple_pairing_mode_rp *rp = ptr;
944
struct btd_adapter *adapter;
946
DBG("hci%d status %u", index, rp->status);
951
adapter = manager_find_adapter(&BDADDR(index));
953
error("No matching adapter found");
957
adapter_update_ssp_mode(adapter, rp->mode);
960
static void read_local_ext_features_complete(int index,
961
const read_local_ext_features_rp *rp)
963
struct btd_adapter *adapter;
965
DBG("hci%d status %u", index, rp->status);
970
adapter = manager_find_adapter(&BDADDR(index));
972
error("No matching adapter found");
976
/* Local Extended feature page number is 1 */
977
if (rp->page_num != 1)
980
btd_adapter_update_local_ext_features(adapter, rp->features);
983
static void read_bd_addr_complete(int index, read_bd_addr_rp *rp)
985
DBG("hci%d status %u", index, rp->status);
990
bacpy(&BDADDR(index), &rp->bdaddr);
995
hci_clear_bit(PENDING_BDADDR, &PENDING(index));
997
DBG("Got bdaddr for hci%d", index);
999
if (!PENDING(index) && UP(index))
1000
start_adapter(index);
1003
static inline void cmd_status(int index, void *ptr)
1005
evt_cmd_status *evt = ptr;
1006
uint16_t opcode = btohs(evt->opcode);
1008
if (opcode == cmd_opcode_pack(OGF_LINK_CTL, OCF_INQUIRY))
1009
start_inquiry(&BDADDR(index), evt->status, FALSE);
1012
static void read_scan_complete(int index, uint8_t status, void *ptr)
1014
struct btd_adapter *adapter;
1015
read_scan_enable_rp *rp = ptr;
1017
DBG("hci%d status %u", index, status);
1019
adapter = manager_find_adapter(&BDADDR(index));
1022
error("Unable to find matching adapter");
1026
adapter_mode_changed(adapter, rp->enable);
1029
static inline void cmd_complete(int index, void *ptr)
1031
evt_cmd_complete *evt = ptr;
1032
uint16_t opcode = btohs(evt->opcode);
1033
uint8_t status = *((uint8_t *) ptr + EVT_CMD_COMPLETE_SIZE);
1036
case cmd_opcode_pack(OGF_INFO_PARAM, OCF_READ_LOCAL_VERSION):
1037
ptr += sizeof(evt_cmd_complete);
1038
read_local_version_complete(index, ptr);
1040
case cmd_opcode_pack(OGF_INFO_PARAM, OCF_READ_LOCAL_FEATURES):
1041
ptr += sizeof(evt_cmd_complete);
1042
read_local_features_complete(index, ptr);
1044
case cmd_opcode_pack(OGF_INFO_PARAM, OCF_READ_LOCAL_EXT_FEATURES):
1045
ptr += sizeof(evt_cmd_complete);
1046
read_local_ext_features_complete(index, ptr);
1048
case cmd_opcode_pack(OGF_INFO_PARAM, OCF_READ_BD_ADDR):
1049
ptr += sizeof(evt_cmd_complete);
1050
read_bd_addr_complete(index, ptr);
1052
case cmd_opcode_pack(OGF_LINK_CTL, OCF_PERIODIC_INQUIRY):
1053
start_inquiry(&BDADDR(index), status, TRUE);
1055
case cmd_opcode_pack(OGF_LINK_CTL, OCF_EXIT_PERIODIC_INQUIRY):
1056
inquiry_complete(&BDADDR(index), status, TRUE);
1058
case cmd_opcode_pack(OGF_LINK_CTL, OCF_INQUIRY_CANCEL):
1059
inquiry_complete(&BDADDR(index), status, FALSE);
1061
case cmd_opcode_pack(OGF_HOST_CTL, OCF_WRITE_LE_HOST_SUPPORTED):
1062
write_le_host_complete(&BDADDR(index), status);
1064
case cmd_opcode_pack(OGF_LE_CTL, OCF_LE_SET_SCAN_ENABLE):
1065
btd_event_le_set_scan_enable_complete(&BDADDR(index), status);
1067
case cmd_opcode_pack(OGF_HOST_CTL, OCF_CHANGE_LOCAL_NAME):
1069
hci_send_cmd(SK(index), OGF_HOST_CTL,
1070
OCF_READ_LOCAL_NAME, 0, 0);
1072
case cmd_opcode_pack(OGF_HOST_CTL, OCF_WRITE_SCAN_ENABLE):
1073
btd_event_setscan_enable_complete(&BDADDR(index));
1075
case cmd_opcode_pack(OGF_HOST_CTL, OCF_READ_SCAN_ENABLE):
1076
ptr += sizeof(evt_cmd_complete);
1077
read_scan_complete(index, status, ptr);
1079
case cmd_opcode_pack(OGF_HOST_CTL, OCF_WRITE_CLASS_OF_DEV):
1080
adapter_set_class_complete(&BDADDR(index), status);
1082
case cmd_opcode_pack(OGF_HOST_CTL, OCF_WRITE_SIMPLE_PAIRING_MODE):
1084
hci_send_cmd(SK(index), OGF_HOST_CTL,
1085
OCF_READ_SIMPLE_PAIRING_MODE, 0, NULL);
1087
case cmd_opcode_pack(OGF_HOST_CTL, OCF_READ_SIMPLE_PAIRING_MODE):
1088
ptr += sizeof(evt_cmd_complete);
1089
read_simple_pairing_mode_complete(index, ptr);
1091
case cmd_opcode_pack(OGF_HOST_CTL, OCF_READ_LOCAL_NAME):
1092
ptr += sizeof(evt_cmd_complete);
1093
read_local_name_complete(index, ptr);
1095
case cmd_opcode_pack(OGF_HOST_CTL,
1096
OCF_READ_INQ_RESPONSE_TX_POWER_LEVEL):
1097
ptr += sizeof(evt_cmd_complete);
1098
read_tx_power_complete(index, ptr);
1103
static inline void remote_name_information(int index, void *ptr)
1105
evt_remote_name_req_complete *evt = ptr;
1106
char name[MAX_NAME_LENGTH + 1];
1108
DBG("hci%d status %u", index, evt->status);
1110
memset(name, 0, sizeof(name));
1113
memcpy(name, evt->name, MAX_NAME_LENGTH);
1115
btd_event_remote_name(&BDADDR(index), &evt->bdaddr, evt->status, name);
1118
static inline void remote_version_information(int index, void *ptr)
1120
evt_read_remote_version_complete *evt = ptr;
1123
DBG("hci%d status %u", index, evt->status);
1128
if (get_bdaddr(index, btohs(evt->handle), &dba) < 0)
1131
write_version_info(&BDADDR(index), &dba, btohs(evt->manufacturer),
1132
evt->lmp_ver, btohs(evt->lmp_subver));
1135
static inline void inquiry_result(int index, int plen, void *ptr)
1137
uint8_t num = *(uint8_t *) ptr++;
1140
for (i = 0; i < num; i++) {
1141
inquiry_info *info = ptr;
1142
uint32_t class = info->dev_class[0] |
1143
(info->dev_class[1] << 8) |
1144
(info->dev_class[2] << 16);
1146
btd_event_inquiry_result(&BDADDR(index), &info->bdaddr, class,
1149
update_lastseen(&BDADDR(index), &info->bdaddr);
1151
ptr += INQUIRY_INFO_SIZE;
1155
static inline void inquiry_result_with_rssi(int index, int plen, void *ptr)
1157
uint8_t num = *(uint8_t *) ptr++;
1163
if ((plen - 1) / num == INQUIRY_INFO_WITH_RSSI_AND_PSCAN_MODE_SIZE) {
1164
for (i = 0; i < num; i++) {
1165
inquiry_info_with_rssi_and_pscan_mode *info = ptr;
1166
uint32_t class = info->dev_class[0]
1167
| (info->dev_class[1] << 8)
1168
| (info->dev_class[2] << 16);
1170
btd_event_inquiry_result(&BDADDR(index), &info->bdaddr,
1171
class, info->rssi, NULL);
1173
update_lastseen(&BDADDR(index), &info->bdaddr);
1175
ptr += INQUIRY_INFO_WITH_RSSI_AND_PSCAN_MODE_SIZE;
1178
for (i = 0; i < num; i++) {
1179
inquiry_info_with_rssi *info = ptr;
1180
uint32_t class = info->dev_class[0]
1181
| (info->dev_class[1] << 8)
1182
| (info->dev_class[2] << 16);
1184
btd_event_inquiry_result(&BDADDR(index), &info->bdaddr,
1185
class, info->rssi, NULL);
1187
update_lastseen(&BDADDR(index), &info->bdaddr);
1189
ptr += INQUIRY_INFO_WITH_RSSI_SIZE;
1194
static inline void extended_inquiry_result(int index, int plen, void *ptr)
1196
uint8_t num = *(uint8_t *) ptr++;
1199
for (i = 0; i < num; i++) {
1200
extended_inquiry_info *info = ptr;
1201
uint32_t class = info->dev_class[0]
1202
| (info->dev_class[1] << 8)
1203
| (info->dev_class[2] << 16);
1205
btd_event_inquiry_result(&BDADDR(index), &info->bdaddr, class,
1206
info->rssi, info->data);
1208
update_lastseen(&BDADDR(index), &info->bdaddr);
1210
ptr += EXTENDED_INQUIRY_INFO_SIZE;
1214
static inline void remote_features_information(int index, void *ptr)
1216
evt_read_remote_features_complete *evt = ptr;
1219
DBG("hci%d status %u", index, evt->status);
1224
if (get_bdaddr(index, btohs(evt->handle), &dba) < 0)
1227
write_features_info(&BDADDR(index), &dba, evt->features, NULL);
1230
static inline void conn_complete(int index, void *ptr)
1232
evt_conn_complete *evt = ptr;
1233
char filename[PATH_MAX];
1234
char local_addr[18], peer_addr[18], *str;
1235
struct btd_adapter *adapter;
1237
adapter = manager_find_adapter(&BDADDR(index));
1239
error("Unable to find matching adapter");
1243
if (evt->link_type != ACL_LINK)
1246
btd_event_conn_complete(&BDADDR(index), evt->status,
1247
btohs(evt->handle), &evt->bdaddr);
1252
update_lastused(&BDADDR(index), &evt->bdaddr);
1254
/* check if the remote version needs be requested */
1255
ba2str(&BDADDR(index), local_addr);
1256
ba2str(&evt->bdaddr, peer_addr);
1258
create_name(filename, sizeof(filename), STORAGEDIR, local_addr,
1261
str = textfile_get(filename, peer_addr);
1263
btd_adapter_get_remote_version(adapter, btohs(evt->handle),
1269
static inline void le_conn_complete(int index, void *ptr)
1271
evt_le_connection_complete *evt = ptr;
1272
char filename[PATH_MAX];
1273
char local_addr[18], peer_addr[18], *str;
1274
struct btd_adapter *adapter;
1276
adapter = manager_find_adapter(&BDADDR(index));
1278
error("Unable to find matching adapter");
1282
btd_event_conn_complete(&BDADDR(index), evt->status,
1283
btohs(evt->handle), &evt->peer_bdaddr);
1288
update_lastused(&BDADDR(index), &evt->peer_bdaddr);
1290
/* check if the remote version needs be requested */
1291
ba2str(&BDADDR(index), local_addr);
1292
ba2str(&evt->peer_bdaddr, peer_addr);
1294
create_name(filename, sizeof(filename), STORAGEDIR, local_addr,
1297
str = textfile_get(filename, peer_addr);
1299
btd_adapter_get_remote_version(adapter, btohs(evt->handle),
1305
static inline void disconn_complete(int index, void *ptr)
1307
evt_disconn_complete *evt = ptr;
1309
btd_event_disconn_complete(&BDADDR(index), evt->status,
1310
btohs(evt->handle), evt->reason);
1313
static inline void auth_complete(int index, void *ptr)
1315
evt_auth_complete *evt = ptr;
1318
DBG("hci%d status %u", index, evt->status);
1320
if (get_bdaddr(index, btohs(evt->handle), &dba) < 0)
1323
btd_event_bonding_process_complete(&BDADDR(index), &dba, evt->status);
1326
static inline void simple_pairing_complete(int index, void *ptr)
1328
evt_simple_pairing_complete *evt = ptr;
1330
DBG("hci%d status %u", index, evt->status);
1332
btd_event_simple_pairing_complete(&BDADDR(index), &evt->bdaddr,
1336
static inline void conn_request(int index, void *ptr)
1338
evt_conn_request *evt = ptr;
1339
uint32_t class = evt->dev_class[0] | (evt->dev_class[1] << 8)
1340
| (evt->dev_class[2] << 16);
1342
btd_event_remote_class(&BDADDR(index), &evt->bdaddr, class);
1345
static inline void le_advertising_report(int index, evt_le_meta_event *meta)
1347
le_advertising_info *info;
1350
num = meta->data[0];
1351
info = (le_advertising_info *) (meta->data + 1);
1353
for (i = 0; i < num; i++) {
1354
btd_event_advertising_report(&BDADDR(index), info);
1355
info = (le_advertising_info *) (info->data + info->length + 1);
1359
static inline void le_metaevent(int index, void *ptr)
1361
evt_le_meta_event *meta = ptr;
1363
DBG("hci%d LE Meta Event %u", index, meta->subevent);
1365
switch (meta->subevent) {
1366
case EVT_LE_ADVERTISING_REPORT:
1367
le_advertising_report(index, meta);
1370
case EVT_LE_CONN_COMPLETE:
1371
le_conn_complete(index, meta->data);
1376
static void stop_hci_dev(int index)
1378
GIOChannel *chan = CHANNEL(index);
1383
info("Stopping hci%d event socket", index);
1385
g_source_remove(WATCH_ID(index));
1386
g_io_channel_unref(CHANNEL(index));
1387
hci_close_dev(SK(index));
1388
init_dev_info(index, -1);
1391
static gboolean io_security_event(GIOChannel *chan, GIOCondition cond,
1394
unsigned char buf[HCI_MAX_EVENT_SIZE], *ptr = buf;
1395
int type, index = GPOINTER_TO_INT(data);
1396
struct hci_dev_info di;
1400
evt_cmd_status *evt;
1402
if (cond & (G_IO_NVAL | G_IO_HUP | G_IO_ERR)) {
1403
stop_hci_dev(index);
1407
if ((err = g_io_channel_read(chan, (gchar *) buf, sizeof(buf), &len))) {
1408
if (err == G_IO_ERROR_AGAIN)
1410
stop_hci_dev(index);
1416
if (type != HCI_EVENT_PKT)
1419
eh = (hci_event_hdr *) ptr;
1420
ptr += HCI_EVENT_HDR_SIZE;
1422
memset(&di, 0, sizeof(di));
1423
if (hci_devinfo(index, &di) == 0) {
1424
bacpy(&BDADDR(index), &di.bdaddr);
1426
if (ignore_device(&di))
1431
case EVT_CMD_STATUS:
1432
cmd_status(index, ptr);
1435
case EVT_CMD_COMPLETE:
1436
cmd_complete(index, ptr);
1439
case EVT_REMOTE_NAME_REQ_COMPLETE:
1440
remote_name_information(index, ptr);
1443
case EVT_READ_REMOTE_VERSION_COMPLETE:
1444
remote_version_information(index, ptr);
1447
case EVT_READ_REMOTE_FEATURES_COMPLETE:
1448
remote_features_information(index, ptr);
1451
case EVT_REMOTE_HOST_FEATURES_NOTIFY:
1452
remote_features_notify(index, ptr);
1455
case EVT_INQUIRY_COMPLETE:
1456
evt = (evt_cmd_status *) ptr;
1457
inquiry_complete(&BDADDR(index), evt->status, FALSE);
1460
case EVT_INQUIRY_RESULT:
1461
inquiry_result(index, eh->plen, ptr);
1464
case EVT_INQUIRY_RESULT_WITH_RSSI:
1465
inquiry_result_with_rssi(index, eh->plen, ptr);
1468
case EVT_EXTENDED_INQUIRY_RESULT:
1469
extended_inquiry_result(index, eh->plen, ptr);
1472
case EVT_CONN_COMPLETE:
1473
conn_complete(index, ptr);
1476
case EVT_DISCONN_COMPLETE:
1477
disconn_complete(index, ptr);
1480
case EVT_AUTH_COMPLETE:
1481
auth_complete(index, ptr);
1484
case EVT_SIMPLE_PAIRING_COMPLETE:
1485
simple_pairing_complete(index, ptr);
1488
case EVT_CONN_REQUEST:
1489
conn_request(index, ptr);
1491
case EVT_LE_META_EVENT:
1492
le_metaevent(index, ptr);
1494
case EVT_PIN_CODE_REQ:
1495
pin_code_request(index, (bdaddr_t *) ptr);
1498
case EVT_LINK_KEY_REQ:
1499
link_key_request(index, (bdaddr_t *) ptr);
1502
case EVT_LINK_KEY_NOTIFY:
1503
link_key_notify(index, ptr);
1506
case EVT_RETURN_LINK_KEYS:
1507
return_link_keys(index, ptr);
1510
case EVT_IO_CAPABILITY_REQUEST:
1511
io_capa_request(index, ptr);
1514
case EVT_IO_CAPABILITY_RESPONSE:
1515
io_capa_response(index, ptr);
1518
case EVT_USER_CONFIRM_REQUEST:
1519
user_confirm_request(index, ptr);
1522
case EVT_USER_PASSKEY_REQUEST:
1523
user_passkey_request(index, ptr);
1526
case EVT_USER_PASSKEY_NOTIFY:
1527
user_passkey_notify(index, ptr);
1530
case EVT_REMOTE_OOB_DATA_REQUEST:
1531
remote_oob_data_request(index, ptr);
1538
static void start_hci_dev(int index)
1540
GIOChannel *chan = CHANNEL(index);
1542
struct hci_filter flt;
1547
info("Listening for HCI events on hci%d", index);
1550
hci_filter_clear(&flt);
1551
hci_filter_set_ptype(HCI_EVENT_PKT, &flt);
1552
hci_filter_set_event(EVT_CMD_STATUS, &flt);
1553
hci_filter_set_event(EVT_CMD_COMPLETE, &flt);
1554
hci_filter_set_event(EVT_PIN_CODE_REQ, &flt);
1555
hci_filter_set_event(EVT_LINK_KEY_REQ, &flt);
1556
hci_filter_set_event(EVT_LINK_KEY_NOTIFY, &flt);
1557
hci_filter_set_event(EVT_RETURN_LINK_KEYS, &flt);
1558
hci_filter_set_event(EVT_IO_CAPABILITY_REQUEST, &flt);
1559
hci_filter_set_event(EVT_IO_CAPABILITY_RESPONSE, &flt);
1560
hci_filter_set_event(EVT_USER_CONFIRM_REQUEST, &flt);
1561
hci_filter_set_event(EVT_USER_PASSKEY_REQUEST, &flt);
1562
hci_filter_set_event(EVT_REMOTE_OOB_DATA_REQUEST, &flt);
1563
hci_filter_set_event(EVT_USER_PASSKEY_NOTIFY, &flt);
1564
hci_filter_set_event(EVT_KEYPRESS_NOTIFY, &flt);
1565
hci_filter_set_event(EVT_SIMPLE_PAIRING_COMPLETE, &flt);
1566
hci_filter_set_event(EVT_AUTH_COMPLETE, &flt);
1567
hci_filter_set_event(EVT_REMOTE_NAME_REQ_COMPLETE, &flt);
1568
hci_filter_set_event(EVT_READ_REMOTE_VERSION_COMPLETE, &flt);
1569
hci_filter_set_event(EVT_READ_REMOTE_FEATURES_COMPLETE, &flt);
1570
hci_filter_set_event(EVT_REMOTE_HOST_FEATURES_NOTIFY, &flt);
1571
hci_filter_set_event(EVT_INQUIRY_COMPLETE, &flt);
1572
hci_filter_set_event(EVT_INQUIRY_RESULT, &flt);
1573
hci_filter_set_event(EVT_INQUIRY_RESULT_WITH_RSSI, &flt);
1574
hci_filter_set_event(EVT_EXTENDED_INQUIRY_RESULT, &flt);
1575
hci_filter_set_event(EVT_CONN_REQUEST, &flt);
1576
hci_filter_set_event(EVT_CONN_COMPLETE, &flt);
1577
hci_filter_set_event(EVT_DISCONN_COMPLETE, &flt);
1578
hci_filter_set_event(EVT_LE_META_EVENT, &flt);
1579
if (setsockopt(SK(index), SOL_HCI, HCI_FILTER, &flt, sizeof(flt)) < 0) {
1580
error("Can't set filter on hci%d: %s (%d)",
1581
index, strerror(errno), errno);
1585
chan = g_io_channel_unix_new(SK(index));
1586
cond = G_IO_IN | G_IO_NVAL | G_IO_HUP | G_IO_ERR;
1587
WATCH_ID(index) = g_io_add_watch_full(chan, G_PRIORITY_LOW, cond,
1589
GINT_TO_POINTER(index), NULL);
1590
CHANNEL(index) = chan;
1591
PIN_LENGTH(index) = -1;
1595
/* End of HCI event callbacks */
1597
static gboolean child_exit(GIOChannel *io, GIOCondition cond, void *user_data)
1599
int status, fd = g_io_channel_unix_get_fd(io);
1602
if (read(fd, &child_pid, sizeof(child_pid)) != sizeof(child_pid)) {
1603
error("child_exit: unable to read child pid from pipe");
1607
if (waitpid(child_pid, &status, 0) != child_pid)
1608
error("waitpid(%d) failed", child_pid);
1610
DBG("child %d exited", child_pid);
1615
static void at_child_exit(void)
1617
pid_t pid = getpid();
1619
if (write(child_pipe[1], &pid, sizeof(pid)) != sizeof(pid))
1620
error("unable to write to child pipe");
1623
static void device_devup_setup(int index)
1625
struct hci_dev_info di;
1627
read_stored_link_key_cp cp;
1629
DBG("hci%d", index);
1631
if (hci_devinfo(index, &di) < 0)
1634
if (ignore_device(&di))
1637
bacpy(&BDADDR(index), &di.bdaddr);
1638
memcpy(FEATURES(index), di.features, 8);
1640
/* Set page timeout */
1641
if ((main_opts.flags & (1 << HCID_SET_PAGETO))) {
1642
write_page_timeout_cp cp;
1644
cp.timeout = htobs(main_opts.pageto);
1645
hci_send_cmd(SK(index), OGF_HOST_CTL, OCF_WRITE_PAGE_TIMEOUT,
1646
WRITE_PAGE_TIMEOUT_CP_SIZE, &cp);
1649
/* Set default link policy */
1650
policy = htobs(main_opts.link_policy);
1651
hci_send_cmd(SK(index), OGF_LINK_POLICY,
1652
OCF_WRITE_DEFAULT_LINK_POLICY, 2, &policy);
1654
bacpy(&cp.bdaddr, BDADDR_ANY);
1656
hci_send_cmd(SK(index), OGF_HOST_CTL, OCF_READ_STORED_LINK_KEY,
1657
READ_STORED_LINK_KEY_CP_SIZE, (void *) &cp);
1659
if (!PENDING(index))
1660
start_adapter(index);
1663
static void init_pending(int index)
1665
hci_set_bit(PENDING_BDADDR, &PENDING(index));
1666
hci_set_bit(PENDING_VERSION, &PENDING(index));
1667
hci_set_bit(PENDING_FEATURES, &PENDING(index));
1668
hci_set_bit(PENDING_NAME, &PENDING(index));
1671
static void init_device(int index)
1673
struct hci_dev_req dr;
1674
struct hci_dev_info di;
1678
DBG("hci%d", index);
1680
dd = hci_open_dev(index);
1682
error("Unable to open hci%d: %s (%d)", index,
1683
strerror(errno), errno);
1687
if (index > max_dev) {
1689
devs = g_realloc(devs, sizeof(devs[0]) * (max_dev + 1));
1692
init_dev_info(index, dd);
1693
init_pending(index);
1694
start_hci_dev(index);
1696
/* Do initialization in the separate process */
1700
atexit(at_child_exit);
1703
error("Fork failed. Can't init device hci%d: %s (%d)",
1704
index, strerror(errno), errno);
1706
DBG("child %d forked", pid);
1710
memset(&dr, 0, sizeof(dr));
1714
dr.dev_opt = main_opts.link_mode;
1715
if (ioctl(dd, HCISETLINKMODE, (unsigned long) &dr) < 0)
1716
error("Can't set link mode on hci%d: %s (%d)",
1717
index, strerror(errno), errno);
1719
/* Set link policy for BR/EDR HCI devices */
1720
if (hci_devinfo(index, &di) < 0)
1723
if (!ignore_device(&di)) {
1724
dr.dev_opt = main_opts.link_policy;
1725
if (ioctl(dd, HCISETLINKPOL, (unsigned long) &dr) < 0 &&
1726
errno != ENETDOWN) {
1727
error("Can't set link policy on hci%d: %s (%d)",
1728
index, strerror(errno), errno);
1732
/* Start HCI device */
1733
if (ioctl(dd, HCIDEVUP, index) < 0 && errno != EALREADY) {
1734
error("Can't init device hci%d: %s (%d)",
1735
index, strerror(errno), errno);
1747
static void device_devreg_setup(int index)
1749
struct hci_dev_info di;
1752
DBG("hci%d", index);
1756
memset(&di, 0, sizeof(di));
1758
if (hci_devinfo(index, &di) < 0)
1761
devup = hci_test_bit(HCI_UP, &di.flags);
1763
if (!ignore_device(&di))
1764
manager_register_adapter(index, devup);
1767
static void device_event(int event, int index)
1771
info("HCI dev %d registered", index);
1772
device_devreg_setup(index);
1776
info("HCI dev %d unregistered", index);
1777
stop_hci_dev(index);
1778
manager_unregister_adapter(index);
1782
info("HCI dev %d up", index);
1784
device_devup_setup(index);
1788
info("HCI dev %d down", index);
1790
if (!PENDING(index)) {
1791
manager_stop_adapter(index);
1792
init_pending(index);
1798
static gboolean init_known_adapters(gpointer user_data)
1800
struct hci_dev_list_req *dl;
1801
struct hci_dev_req *dr;
1802
int i, err, ctl = GPOINTER_TO_INT(user_data);
1807
req_size = HCI_MAX_DEV * sizeof(struct hci_dev_req) + sizeof(uint16_t);
1809
dl = g_try_malloc0(req_size);
1811
error("Can't allocate devlist buffer");
1815
dl->dev_num = HCI_MAX_DEV;
1818
if (ioctl(ctl, HCIGETDEVLIST, dl) < 0) {
1820
error("Can't get device list: %s (%d)", strerror(-err), -err);
1825
for (i = 0; i < dl->dev_num; i++, dr++) {
1826
device_event(HCI_DEV_REG, dr->dev_id);
1828
if (!hci_test_bit(HCI_UP, &dr->dev_opt))
1831
PENDING(dr->dev_id) = 0;
1832
hci_set_bit(PENDING_VERSION, &PENDING(dr->dev_id));
1833
hci_send_cmd(SK(dr->dev_id), OGF_INFO_PARAM,
1834
OCF_READ_LOCAL_VERSION, 0, NULL);
1835
device_event(HCI_DEV_UP, dr->dev_id);
1843
static gboolean io_stack_event(GIOChannel *chan, GIOCondition cond,
1846
unsigned char buf[HCI_MAX_FRAME_SIZE], *ptr;
1847
evt_stack_internal *si;
1856
err = g_io_channel_read(chan, (gchar *) buf, sizeof(buf), &len);
1858
if (err == G_IO_ERROR_AGAIN)
1861
error("Read from control socket failed: %s (%d)",
1862
strerror(errno), errno);
1868
if (type != HCI_EVENT_PKT)
1871
eh = (hci_event_hdr *) ptr;
1872
if (eh->evt != EVT_STACK_INTERNAL)
1875
ptr += HCI_EVENT_HDR_SIZE;
1877
si = (evt_stack_internal *) ptr;
1880
sd = (void *) &si->data;
1881
device_event(sd->event, sd->dev_id);
1888
static int hciops_setup(void)
1890
struct sockaddr_hci addr;
1891
struct hci_filter flt;
1892
GIOChannel *ctl_io, *child_io;
1897
if (child_pipe[0] != -1)
1900
if (pipe(child_pipe) < 0) {
1902
error("pipe(): %s (%d)", strerror(-err), -err);
1906
child_io = g_io_channel_unix_new(child_pipe[0]);
1907
g_io_channel_set_close_on_unref(child_io, TRUE);
1908
child_io_id = g_io_add_watch(child_io,
1909
G_IO_IN | G_IO_ERR | G_IO_HUP | G_IO_NVAL,
1911
g_io_channel_unref(child_io);
1913
/* Create and bind HCI socket */
1914
sock = socket(AF_BLUETOOTH, SOCK_RAW, BTPROTO_HCI);
1917
error("Can't open HCI socket: %s (%d)", strerror(-err),
1923
hci_filter_clear(&flt);
1924
hci_filter_set_ptype(HCI_EVENT_PKT, &flt);
1925
hci_filter_set_event(EVT_STACK_INTERNAL, &flt);
1926
if (setsockopt(sock, SOL_HCI, HCI_FILTER, &flt, sizeof(flt)) < 0) {
1928
error("Can't set filter: %s (%d)", strerror(-err), -err);
1932
memset(&addr, 0, sizeof(addr));
1933
addr.hci_family = AF_BLUETOOTH;
1934
addr.hci_dev = HCI_DEV_NONE;
1935
if (bind(sock, (struct sockaddr *) &addr, sizeof(addr)) < 0) {
1937
error("Can't bind HCI socket: %s (%d)", strerror(-err), -err);
1941
ctl_io = g_io_channel_unix_new(sock);
1942
g_io_channel_set_close_on_unref(ctl_io, TRUE);
1944
ctl_io_id = g_io_add_watch(ctl_io, G_IO_IN, io_stack_event, NULL);
1946
g_io_channel_unref(ctl_io);
1948
g_idle_add(init_known_adapters, GINT_TO_POINTER(sock));
1953
static void hciops_cleanup(void)
1959
for (i = 0; i <= max_dev; i++) {
1961
hci_close_dev(SK(i));
1969
g_source_remove(child_io_id);
1974
g_source_remove(ctl_io_id);
1978
if (child_pipe[0] >= 0) {
1979
close(child_pipe[0]);
1983
if (child_pipe[1] >= 0) {
1984
close(child_pipe[1]);
1989
static int hciops_start(int index)
1993
DBG("hci%d", index);
1995
if (ioctl(SK(index), HCIDEVUP, index) == 0)
1998
if (errno == EALREADY)
2002
error("Can't init device hci%d: %s (%d)",
2003
index, strerror(-err), -err);
2008
static int hciops_stop(int index)
2012
DBG("hci%d", index);
2014
if (ioctl(SK(index), HCIDEVDOWN, index) == 0)
2015
goto done; /* on success */
2017
if (errno != EALREADY) {
2019
error("Can't stop device hci%d: %s (%d)",
2020
index, strerror(-err), -err);
2027
static int hciops_powered(int index, gboolean powered)
2029
uint8_t mode = SCAN_DISABLED;
2031
DBG("hci%d powered %d", index, powered);
2034
return hciops_start(index);
2036
if (hci_send_cmd(SK(index), OGF_HOST_CTL,
2037
OCF_WRITE_SCAN_ENABLE, 1, &mode) < 0)
2040
return hciops_stop(index);
2043
static int hciops_connectable(int index)
2045
uint8_t mode = SCAN_PAGE;
2047
DBG("hci%d", index);
2049
if (hci_send_cmd(SK(index), OGF_HOST_CTL,
2050
OCF_WRITE_SCAN_ENABLE, 1, &mode) < 0)
2056
static int hciops_discoverable(int index)
2058
uint8_t mode = (SCAN_PAGE | SCAN_INQUIRY);
2060
DBG("hci%d", index);
2062
if (hci_send_cmd(SK(index), OGF_HOST_CTL, OCF_WRITE_SCAN_ENABLE,
2069
static int hciops_set_class(int index, uint32_t class)
2071
write_class_of_dev_cp cp;
2073
DBG("hci%d class 0x%06x", index, class);
2075
memcpy(cp.dev_class, &class, 3);
2077
if (hci_send_cmd(SK(index), OGF_HOST_CTL, OCF_WRITE_CLASS_OF_DEV,
2078
WRITE_CLASS_OF_DEV_CP_SIZE, &cp) < 0)
2084
static int hciops_set_limited_discoverable(int index, uint32_t class,
2087
int num = (limited ? 2 : 1);
2088
uint8_t lap[] = { 0x33, 0x8b, 0x9e, 0x00, 0x8b, 0x9e };
2089
write_current_iac_lap_cp cp;
2091
DBG("hci%d, class %06x limited %d", index, class, limited);
2097
memset(&cp, 0, sizeof(cp));
2098
cp.num_current_iac = num;
2099
memcpy(&cp.lap, lap, num * 3);
2101
if (hci_send_cmd(SK(index), OGF_HOST_CTL, OCF_WRITE_CURRENT_IAC_LAP,
2102
(num * 3 + 1), &cp) < 0)
2105
return hciops_set_class(index, class);
2108
static int hciops_start_inquiry(int index, uint8_t length, gboolean periodic)
2110
uint8_t lap[3] = { 0x33, 0x8b, 0x9e };
2113
DBG("hci%d length %u periodic %d", index, length, periodic);
2116
periodic_inquiry_cp cp;
2118
memset(&cp, 0, sizeof(cp));
2119
memcpy(&cp.lap, lap, 3);
2120
cp.max_period = htobs(24);
2121
cp.min_period = htobs(16);
2125
err = hci_send_cmd(SK(index), OGF_LINK_CTL,
2126
OCF_PERIODIC_INQUIRY,
2127
PERIODIC_INQUIRY_CP_SIZE, &cp);
2131
memset(&inq_cp, 0, sizeof(inq_cp));
2132
memcpy(&inq_cp.lap, lap, 3);
2133
inq_cp.length = length;
2134
inq_cp.num_rsp = 0x00;
2136
err = hci_send_cmd(SK(index), OGF_LINK_CTL,
2137
OCF_INQUIRY, INQUIRY_CP_SIZE, &inq_cp);
2146
static int hciops_stop_inquiry(int index)
2148
struct hci_dev_info di;
2151
DBG("hci%d", index);
2153
if (hci_devinfo(index, &di) < 0)
2156
if (hci_test_bit(HCI_INQUIRY, &di.flags))
2157
err = hci_send_cmd(SK(index), OGF_LINK_CTL,
2158
OCF_INQUIRY_CANCEL, 0, 0);
2160
err = hci_send_cmd(SK(index), OGF_LINK_CTL,
2161
OCF_EXIT_PERIODIC_INQUIRY, 0, 0);
2168
static int le_set_scan_enable(int index, uint8_t enable)
2170
le_set_scan_enable_cp cp;
2172
DBG("hci%d enable %u", index, enable);
2174
memset(&cp, 0, sizeof(cp));
2178
if (hci_send_cmd(SK(index), OGF_LE_CTL, OCF_LE_SET_SCAN_ENABLE,
2179
LE_SET_SCAN_ENABLE_CP_SIZE, &cp) < 0)
2185
static int hciops_start_scanning(int index)
2187
le_set_scan_parameters_cp cp;
2189
DBG("hci%d", index);
2191
memset(&cp, 0, sizeof(cp));
2192
cp.type = 0x01; /* Active scanning */
2193
cp.interval = htobs(0x0010);
2194
cp.window = htobs(0x0010);
2195
cp.own_bdaddr_type = 0; /* Public address */
2196
cp.filter = 0; /* Accept all adv packets */
2198
if (hci_send_cmd(SK(index), OGF_LE_CTL, OCF_LE_SET_SCAN_PARAMETERS,
2199
LE_SET_SCAN_PARAMETERS_CP_SIZE, &cp) < 0)
2202
return le_set_scan_enable(index, 1);
2205
static int hciops_stop_scanning(int index)
2207
DBG("hci%d", index);
2209
return le_set_scan_enable(index, 0);
2212
static int hciops_resolve_name(int index, bdaddr_t *bdaddr)
2214
remote_name_req_cp cp;
2217
ba2str(bdaddr, addr);
2218
DBG("hci%d dba %s", index, addr);
2220
memset(&cp, 0, sizeof(cp));
2221
bacpy(&cp.bdaddr, bdaddr);
2222
cp.pscan_rep_mode = 0x02;
2224
if (hci_send_cmd(SK(index), OGF_LINK_CTL, OCF_REMOTE_NAME_REQ,
2225
REMOTE_NAME_REQ_CP_SIZE, &cp) < 0)
2231
static int hciops_set_name(int index, const char *name)
2233
change_local_name_cp cp;
2235
DBG("hci%d, name %s", index, name);
2237
memset(&cp, 0, sizeof(cp));
2238
strncpy((char *) cp.name, name, sizeof(cp.name));
2240
if (hci_send_cmd(SK(index), OGF_HOST_CTL, OCF_CHANGE_LOCAL_NAME,
2241
CHANGE_LOCAL_NAME_CP_SIZE, &cp) < 0)
2247
static int hciops_cancel_resolve_name(int index, bdaddr_t *bdaddr)
2249
remote_name_req_cancel_cp cp;
2252
ba2str(bdaddr, addr);
2253
DBG("hci%d dba %s", index, addr);
2255
memset(&cp, 0, sizeof(cp));
2256
bacpy(&cp.bdaddr, bdaddr);
2258
if (hci_send_cmd(SK(index), OGF_LINK_CTL, OCF_REMOTE_NAME_REQ_CANCEL,
2259
REMOTE_NAME_REQ_CANCEL_CP_SIZE, &cp) < 0)
2265
static int hciops_fast_connectable(int index, gboolean enable)
2267
write_page_activity_cp cp;
2270
DBG("hci%d enable %d", index, enable);
2273
type = PAGE_SCAN_TYPE_INTERLACED;
2274
cp.interval = 0x0024; /* 22.5 msec page scan interval */
2276
type = PAGE_SCAN_TYPE_STANDARD; /* default */
2277
cp.interval = 0x0800; /* default 1.28 sec page scan */
2280
cp.window = 0x0012; /* default 11.25 msec page scan window */
2282
if (hci_send_cmd(SK(index), OGF_HOST_CTL, OCF_WRITE_PAGE_ACTIVITY,
2283
WRITE_PAGE_ACTIVITY_CP_SIZE, &cp) < 0)
2285
else if (hci_send_cmd(SK(index), OGF_HOST_CTL,
2286
OCF_WRITE_PAGE_SCAN_TYPE, 1, &type) < 0)
2292
static int hciops_read_clock(int index, int handle, int which, int timeout,
2293
uint32_t *clock, uint16_t *accuracy)
2295
DBG("hci%d handle %d which %d timeout %d", index, handle, which,
2298
if (hci_read_clock(SK(index), handle, which, clock, accuracy,
2305
static int hciops_conn_handle(int index, const bdaddr_t *bdaddr, int *handle)
2308
struct hci_conn_info_req *cr;
2311
ba2str(bdaddr, addr);
2312
DBG("hci%d dba %s", index, addr);
2314
cr = g_malloc0(sizeof(*cr) + sizeof(struct hci_conn_info));
2315
bacpy(&cr->bdaddr, bdaddr);
2316
cr->type = ACL_LINK;
2318
if (ioctl(SK(index), HCIGETCONNINFO, (unsigned long) cr) < 0) {
2324
*handle = htobs(cr->conn_info->handle);
2331
static int hciops_write_eir_data(int index, uint8_t *data)
2333
write_ext_inquiry_response_cp cp;
2335
DBG("hci%d", index);
2337
memset(&cp, 0, sizeof(cp));
2338
memcpy(cp.data, data, 240);
2340
if (hci_send_cmd(SK(index), OGF_HOST_CTL,
2341
OCF_WRITE_EXT_INQUIRY_RESPONSE,
2342
WRITE_EXT_INQUIRY_RESPONSE_CP_SIZE, &cp) < 0)
2348
static int hciops_read_bdaddr(int index, bdaddr_t *bdaddr)
2350
DBG("hci%d", index);
2351
bacpy(bdaddr, &BDADDR(index));
2355
static int hciops_block_device(int index, bdaddr_t *bdaddr)
2359
ba2str(bdaddr, addr);
2360
DBG("hci%d dba %s", index, addr);
2362
if (ioctl(SK(index), HCIBLOCKADDR, bdaddr) < 0)
2368
static int hciops_unblock_device(int index, bdaddr_t *bdaddr)
2372
ba2str(bdaddr, addr);
2373
DBG("hci%d dba %s", index, addr);
2375
if (ioctl(SK(index), HCIUNBLOCKADDR, bdaddr) < 0)
2381
static int hciops_get_conn_list(int index, GSList **conns)
2383
struct hci_conn_list_req *cl;
2384
struct hci_conn_info *ci;
2387
DBG("hci%d", index);
2389
cl = g_malloc0(10 * sizeof(*ci) + sizeof(*cl));
2395
if (ioctl(SK(index), HCIGETCONNLIST, cl) < 0) {
2403
for (i = 0; i < cl->conn_num; i++, ci++)
2404
*conns = g_slist_append(*conns, g_memdup(ci, sizeof(*ci)));
2411
static int hciops_read_local_version(int index, struct hci_version *ver)
2413
DBG("hci%d", index);
2414
memcpy(ver, &VER(index), sizeof(*ver));
2418
static int hciops_read_local_features(int index, uint8_t *features)
2420
DBG("hci%d", index);
2421
memcpy(features, FEATURES(index), 8);
2425
static int hciops_read_local_ext_features(int index)
2427
uint8_t page_num = 1;
2429
DBG("hci%d", index);
2431
if (hci_send_cmd(SK(index), OGF_INFO_PARAM,
2432
OCF_READ_LOCAL_EXT_FEATURES, 1, &page_num) < 0)
2438
static int hciops_read_link_policy(int index)
2440
DBG("hci%d", index);
2442
if (hci_send_cmd(SK(index), OGF_LINK_POLICY,
2443
OCF_READ_DEFAULT_LINK_POLICY, 0, NULL) < 0)
2449
static int hciops_disconnect(int index, uint16_t handle)
2453
DBG("hci%d handle %u", index, handle);
2455
memset(&cp, 0, sizeof(cp));
2456
cp.handle = htobs(handle);
2457
cp.reason = HCI_OE_USER_ENDED_CONNECTION;
2459
if (hci_send_cmd(SK(index), OGF_LINK_CTL, OCF_DISCONNECT,
2460
DISCONNECT_CP_SIZE, &cp) < 0)
2466
static int hciops_remove_bonding(int index, bdaddr_t *bdaddr)
2468
delete_stored_link_key_cp cp;
2471
ba2str(bdaddr, addr);
2472
DBG("hci%d dba %s", index, addr);
2474
memset(&cp, 0, sizeof(cp));
2475
bacpy(&cp.bdaddr, bdaddr);
2477
/* Delete the link key from the Bluetooth chip */
2478
if (hci_send_cmd(SK(index), OGF_HOST_CTL, OCF_DELETE_STORED_LINK_KEY,
2479
DELETE_STORED_LINK_KEY_CP_SIZE, &cp) < 0)
2485
static int hciops_request_authentication(int index, uint16_t handle)
2487
auth_requested_cp cp;
2489
DBG("hci%d handle %u", index, handle);
2491
memset(&cp, 0, sizeof(cp));
2492
cp.handle = htobs(handle);
2494
if (hci_send_cmd(SK(index), OGF_LINK_CTL, OCF_AUTH_REQUESTED,
2495
AUTH_REQUESTED_CP_SIZE, &cp) < 0)
2501
static int hciops_pincode_reply(int index, bdaddr_t *bdaddr, const char *pin)
2506
ba2str(bdaddr, addr);
2507
DBG("hci%d dba %s", index, addr);
2510
pin_code_reply_cp pr;
2511
size_t len = strlen(pin);
2513
PIN_LENGTH(index) = len;
2515
memset(&pr, 0, sizeof(pr));
2516
bacpy(&pr.bdaddr, bdaddr);
2517
memcpy(pr.pin_code, pin, len);
2519
err = hci_send_cmd(SK(index), OGF_LINK_CTL,
2521
PIN_CODE_REPLY_CP_SIZE, &pr);
2523
err = hci_send_cmd(SK(index), OGF_LINK_CTL,
2524
OCF_PIN_CODE_NEG_REPLY, 6, bdaddr);
2532
static int hciops_confirm_reply(int index, bdaddr_t *bdaddr, gboolean success)
2534
user_confirm_reply_cp cp;
2538
ba2str(bdaddr, addr);
2539
DBG("hci%d dba %s success %d", index, addr, success);
2541
memset(&cp, 0, sizeof(cp));
2542
bacpy(&cp.bdaddr, bdaddr);
2545
err = hci_send_cmd(SK(index), OGF_LINK_CTL,
2546
OCF_USER_CONFIRM_REPLY,
2547
USER_CONFIRM_REPLY_CP_SIZE, &cp);
2549
err = hci_send_cmd(SK(index), OGF_LINK_CTL,
2550
OCF_USER_CONFIRM_NEG_REPLY,
2551
USER_CONFIRM_REPLY_CP_SIZE, &cp);
2559
static int hciops_passkey_reply(int index, bdaddr_t *bdaddr, uint32_t passkey)
2564
ba2str(bdaddr, addr);
2565
DBG("hci%d dba %s", index, addr);
2567
if (passkey != INVALID_PASSKEY) {
2568
user_passkey_reply_cp cp;
2570
memset(&cp, 0, sizeof(cp));
2571
bacpy(&cp.bdaddr, bdaddr);
2572
cp.passkey = passkey;
2574
err = hci_send_cmd(SK(index), OGF_LINK_CTL,
2575
OCF_USER_PASSKEY_REPLY,
2576
USER_PASSKEY_REPLY_CP_SIZE, &cp);
2578
err = hci_send_cmd(SK(index), OGF_LINK_CTL,
2579
OCF_USER_PASSKEY_NEG_REPLY, 6, bdaddr);
2587
static int hciops_get_auth_info(int index, bdaddr_t *bdaddr, uint8_t *auth)
2589
struct hci_auth_info_req req;
2592
ba2str(bdaddr, addr);
2593
DBG("hci%d dba %s", index, addr);
2595
memset(&req, 0, sizeof(req));
2596
bacpy(&req.bdaddr, bdaddr);
2598
if (ioctl(SK(index), HCIGETAUTHINFO, (unsigned long) &req) < 0)
2607
static int hciops_read_scan_enable(int index)
2609
DBG("hci%d", index);
2611
if (hci_send_cmd(SK(index), OGF_HOST_CTL, OCF_READ_SCAN_ENABLE,
2618
static int hciops_write_le_host(int index, uint8_t le, uint8_t simul)
2620
write_le_host_supported_cp cp;
2622
DBG("hci%d le %u simul %u", index, le, simul);
2624
memset(&cp, 0, sizeof(cp));
2628
if (hci_send_cmd(SK(index), OGF_HOST_CTL,
2629
OCF_WRITE_LE_HOST_SUPPORTED,
2630
WRITE_LE_HOST_SUPPORTED_CP_SIZE, &cp) < 0)
2636
struct remote_version_req {
2641
static gboolean get_remote_version(gpointer user_data)
2643
struct remote_version_req *req = user_data;
2644
read_remote_version_cp cp;
2646
DBG("hci%d handle %u", req->index, req->handle);
2648
memset(&cp, 0, sizeof(cp));
2649
cp.handle = htobs(req->handle);
2651
hci_send_cmd(SK(req->index), OGF_LINK_CTL, OCF_READ_REMOTE_VERSION,
2652
READ_REMOTE_VERSION_CP_SIZE, &cp);
2657
static int hciops_get_remote_version(int index, uint16_t handle,
2660
struct remote_version_req *req;
2662
DBG("hci%d handle %u delayed %d", index, handle, delayed);
2664
req = g_new0(struct remote_version_req, 1);
2665
req->handle = handle;
2669
get_remote_version(req);
2674
g_timeout_add_seconds_full(G_PRIORITY_DEFAULT, 1, get_remote_version,
2680
static struct btd_adapter_ops hci_ops = {
2681
.setup = hciops_setup,
2682
.cleanup = hciops_cleanup,
2683
.start = hciops_start,
2684
.stop = hciops_stop,
2685
.set_powered = hciops_powered,
2686
.set_connectable = hciops_connectable,
2687
.set_discoverable = hciops_discoverable,
2688
.set_limited_discoverable = hciops_set_limited_discoverable,
2689
.start_inquiry = hciops_start_inquiry,
2690
.stop_inquiry = hciops_stop_inquiry,
2691
.start_scanning = hciops_start_scanning,
2692
.stop_scanning = hciops_stop_scanning,
2693
.resolve_name = hciops_resolve_name,
2694
.cancel_resolve_name = hciops_cancel_resolve_name,
2695
.set_name = hciops_set_name,
2696
.set_class = hciops_set_class,
2697
.set_fast_connectable = hciops_fast_connectable,
2698
.read_clock = hciops_read_clock,
2699
.get_conn_handle = hciops_conn_handle,
2700
.write_eir_data = hciops_write_eir_data,
2701
.read_bdaddr = hciops_read_bdaddr,
2702
.block_device = hciops_block_device,
2703
.unblock_device = hciops_unblock_device,
2704
.get_conn_list = hciops_get_conn_list,
2705
.read_local_version = hciops_read_local_version,
2706
.read_local_features = hciops_read_local_features,
2707
.read_local_ext_features = hciops_read_local_ext_features,
2708
.read_link_policy = hciops_read_link_policy,
2709
.disconnect = hciops_disconnect,
2710
.remove_bonding = hciops_remove_bonding,
2711
.request_authentication = hciops_request_authentication,
2712
.pincode_reply = hciops_pincode_reply,
2713
.confirm_reply = hciops_confirm_reply,
2714
.passkey_reply = hciops_passkey_reply,
2715
.get_auth_info = hciops_get_auth_info,
2716
.read_scan_enable = hciops_read_scan_enable,
2717
.write_le_host = hciops_write_le_host,
2718
.get_remote_version = hciops_get_remote_version,
2719
.encrypt_link = hciops_encrypt_link,
2722
static int hciops_init(void)
2725
return btd_register_adapter_ops(&hci_ops, FALSE);
2728
static void hciops_exit(void)
2731
btd_adapter_cleanup_ops(&hci_ops);
2734
BLUETOOTH_PLUGIN_DEFINE(hciops, VERSION,
2735
BLUETOOTH_PLUGIN_PRIORITY_LOW, hciops_init, hciops_exit)