hciops.c revision 6429d27b421dedd32797d91cc0e0b788882b51a3
1/*
2 *
3 *  BlueZ - Bluetooth protocol stack for Linux
4 *
5 *  Copyright (C) 2004-2010  Marcel Holtmann <marcel@holtmann.org>
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 of the License, or
10 *  (at your option) 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 this program; if not, write to the Free Software
19 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
20 *
21 */
22
23#ifdef HAVE_CONFIG_H
24#include <config.h>
25#endif
26
27#include <stdio.h>
28#include <errno.h>
29#include <unistd.h>
30#include <stdlib.h>
31#include <sys/types.h>
32#include <sys/ioctl.h>
33#include <sys/wait.h>
34
35#include <bluetooth/bluetooth.h>
36#include <bluetooth/hci.h>
37#include <bluetooth/hci_lib.h>
38
39#include <glib.h>
40
41#include "hcid.h"
42#include "sdpd.h"
43#include "adapter.h"
44#include "plugin.h"
45#include "log.h"
46#include "storage.h"
47#include "event.h"
48#include "device.h"
49#include "manager.h"
50
51#define HCI_REQ_TIMEOUT         5000
52
53static int child_pipe[2] = { -1, -1 };
54
55static guint child_io_id = 0;
56static guint ctl_io_id = 0;
57
58/* Commands sent by kernel on starting an adapter */
59enum {
60	PENDING_BDADDR,
61	PENDING_VERSION,
62	PENDING_FEATURES,
63	PENDING_NAME,
64};
65
66#define set_bit(nr, addr) (*(addr) |= (1 << (nr)))
67#define clear_bit(nr, addr) (*(addr) &= ~(1 << (nr)))
68
69#define SK(index) devs[(index)].sk
70#define BDADDR(index) devs[(index)].bdaddr
71#define FEATURES(index) devs[(index)].features
72#define VER(index) devs[(index)].ver
73#define UP(index) devs[(index)].up
74#define PENDING(index) devs[(index)].pending
75#define CHANNEL(index) devs[(index)].channel
76#define WATCH_ID(index) devs[(index)].watch_id
77#define PIN_LENGTH(index) devs[(index)].pin_length
78
79static int max_dev = -1;
80static struct dev_info {
81	int sk;
82	bdaddr_t bdaddr;
83	uint8_t features[8];
84	struct hci_version ver;
85
86	gboolean up;
87	unsigned long pending;
88
89	GIOChannel *channel;
90	guint watch_id;
91	int pin_length;
92} *devs = NULL;
93
94static int ignore_device(struct hci_dev_info *di)
95{
96	return hci_test_bit(HCI_RAW, &di->flags) || di->type >> 4 != HCI_BREDR;
97}
98
99static void init_dev_info(int index, int sk)
100{
101	memset(&devs[index], 0, sizeof(struct dev_info));
102	SK(index) = sk;
103	PIN_LENGTH(index) = -1;
104}
105
106/* Async HCI command handling with callback support */
107
108struct hci_cmd_data {
109	bt_hci_result_t		cb;
110	uint16_t		handle;
111	uint16_t		ocf;
112	gpointer		caller_data;
113};
114
115static gboolean hci_event_watch(GIOChannel *io,
116			GIOCondition cond, gpointer user_data)
117{
118	unsigned char buf[HCI_MAX_EVENT_SIZE], *body;
119	struct hci_cmd_data *cmd = user_data;
120	evt_cmd_status *evt_status;
121	evt_auth_complete *evt_auth;
122	evt_encrypt_change *evt_enc;
123	hci_event_hdr *hdr;
124	set_conn_encrypt_cp cp;
125	int dd;
126	uint16_t ocf;
127	uint8_t status = HCI_OE_POWER_OFF;
128
129	if (cond & G_IO_NVAL) {
130		cmd->cb(status, cmd->caller_data);
131		return FALSE;
132	}
133
134	if (cond & (G_IO_ERR | G_IO_HUP))
135		goto failed;
136
137	dd = g_io_channel_unix_get_fd(io);
138
139	if (read(dd, buf, sizeof(buf)) < 0)
140		goto failed;
141
142	hdr = (hci_event_hdr *) (buf + 1);
143	body = buf + (1 + HCI_EVENT_HDR_SIZE);
144
145	switch (hdr->evt) {
146	case EVT_CMD_STATUS:
147		evt_status = (evt_cmd_status *) body;
148		ocf = cmd_opcode_ocf(evt_status->opcode);
149		if (ocf != cmd->ocf)
150			return TRUE;
151		switch (ocf) {
152		case OCF_AUTH_REQUESTED:
153		case OCF_SET_CONN_ENCRYPT:
154			if (evt_status->status != 0) {
155				/* Baseband rejected command */
156				status = evt_status->status;
157				goto failed;
158			}
159			break;
160		default:
161			return TRUE;
162		}
163		/* Wait for the next event */
164		return TRUE;
165	case EVT_AUTH_COMPLETE:
166		evt_auth = (evt_auth_complete *) body;
167		if (evt_auth->handle != cmd->handle) {
168			/* Skipping */
169			return TRUE;
170		}
171
172		if (evt_auth->status != 0x00) {
173			status = evt_auth->status;
174			/* Abort encryption */
175			goto failed;
176		}
177
178		memset(&cp, 0, sizeof(cp));
179		cp.handle  = cmd->handle;
180		cp.encrypt = 1;
181
182		cmd->ocf = OCF_SET_CONN_ENCRYPT;
183
184		if (hci_send_cmd(dd, OGF_LINK_CTL, OCF_SET_CONN_ENCRYPT,
185					SET_CONN_ENCRYPT_CP_SIZE, &cp) < 0) {
186			status = HCI_COMMAND_DISALLOWED;
187			goto failed;
188		}
189		/* Wait for encrypt change event */
190		return TRUE;
191	case EVT_ENCRYPT_CHANGE:
192		evt_enc = (evt_encrypt_change *) body;
193		if (evt_enc->handle != cmd->handle)
194			return TRUE;
195
196		/* Procedure finished: reporting status */
197		status = evt_enc->status;
198		break;
199	default:
200		/* Skipping */
201		return TRUE;
202	}
203
204failed:
205	cmd->cb(status, cmd->caller_data);
206	g_io_channel_shutdown(io, TRUE, NULL);
207
208	return FALSE;
209}
210
211static int hciops_encrypt_link(int index, bdaddr_t *dst, bt_hci_result_t cb,
212							gpointer user_data)
213{
214	GIOChannel *io;
215	struct hci_cmd_data *cmd;
216	struct hci_conn_info_req *cr;
217	auth_requested_cp cp;
218	struct hci_filter nf;
219	int dd, err;
220	uint32_t link_mode;
221	uint16_t handle;
222
223	cr = g_malloc0(sizeof(*cr) + sizeof(struct hci_conn_info));
224	cr->type = ACL_LINK;
225	bacpy(&cr->bdaddr, dst);
226
227	err = ioctl(SK(index), HCIGETCONNINFO, cr);
228	link_mode = cr->conn_info->link_mode;
229	handle = cr->conn_info->handle;
230	g_free(cr);
231
232	if (err < 0)
233		return -errno;
234
235	if (link_mode & HCI_LM_ENCRYPT)
236		return -EALREADY;
237
238	memset(&cp, 0, sizeof(cp));
239	cp.handle = htobs(handle);
240
241	if (hci_send_cmd(SK(index), OGF_LINK_CTL, OCF_AUTH_REQUESTED,
242				AUTH_REQUESTED_CP_SIZE, &cp) < 0)
243		return -errno;
244
245	dd = dup(SK(index));
246	if (dd < 0)
247		return -errno;
248
249	cmd = g_new0(struct hci_cmd_data, 1);
250	cmd->handle = handle;
251	cmd->ocf = OCF_AUTH_REQUESTED;
252	cmd->cb	= cb;
253	cmd->caller_data = user_data;
254
255	hci_filter_clear(&nf);
256	hci_filter_set_ptype(HCI_EVENT_PKT, &nf);
257	hci_filter_set_event(EVT_CMD_STATUS, &nf);
258	hci_filter_set_event(EVT_AUTH_COMPLETE, &nf);
259	hci_filter_set_event(EVT_ENCRYPT_CHANGE, &nf);
260
261	if (setsockopt(dd, SOL_HCI, HCI_FILTER, &nf, sizeof(nf)) < 0) {
262		err = -errno;
263		g_free(cmd);
264		close(dd);
265		return -err;
266	}
267
268	io = g_io_channel_unix_new(dup(SK(index)));
269	g_io_channel_set_close_on_unref(io, FALSE);
270	g_io_add_watch_full(io, G_PRIORITY_DEFAULT,
271			G_IO_HUP | G_IO_ERR | G_IO_NVAL | G_IO_IN,
272			hci_event_watch, cmd, g_free);
273	g_io_channel_unref(io);
274
275	return 0;
276}
277
278/* End async HCI command handling */
279
280/* Start of HCI event callbacks */
281
282static int get_handle(int index, bdaddr_t *dba, uint16_t *handle)
283{
284	struct hci_conn_list_req *cl;
285	struct hci_conn_info *ci;
286	int i;
287
288	cl = g_malloc0(10 * sizeof(*ci) + sizeof(*cl));
289
290	cl->dev_id = index;
291	cl->conn_num = 10;
292	ci = cl->conn_info;
293
294	if (ioctl(SK(index), HCIGETCONNLIST, (void *) cl) < 0) {
295		g_free(cl);
296		return -EIO;
297	}
298
299	for (i = 0; i < cl->conn_num; i++, ci++) {
300		if (bacmp(&ci->bdaddr, dba) == 0) {
301			*handle = ci->handle;
302			g_free(cl);
303			return 0;
304		}
305	}
306
307	g_free(cl);
308
309	return -ENOENT;
310}
311
312static inline int get_bdaddr(int index, uint16_t handle, bdaddr_t *dba)
313{
314	struct hci_conn_list_req *cl;
315	struct hci_conn_info *ci;
316	int i;
317
318	cl = g_malloc0(10 * sizeof(*ci) + sizeof(*cl));
319
320	cl->dev_id = index;
321	cl->conn_num = 10;
322	ci = cl->conn_info;
323
324	if (ioctl(SK(index), HCIGETCONNLIST, (void *) cl) < 0) {
325		g_free(cl);
326		return -EIO;
327	}
328
329	for (i = 0; i < cl->conn_num; i++, ci++)
330		if (ci->handle == handle) {
331			bacpy(dba, &ci->bdaddr);
332			g_free(cl);
333			return 0;
334		}
335
336	g_free(cl);
337
338	return -ENOENT;
339}
340
341static inline void update_lastseen(bdaddr_t *sba, bdaddr_t *dba)
342{
343	time_t t;
344	struct tm *tm;
345
346	t = time(NULL);
347	tm = gmtime(&t);
348
349	write_lastseen_info(sba, dba, tm);
350}
351
352static inline void update_lastused(bdaddr_t *sba, bdaddr_t *dba)
353{
354	time_t t;
355	struct tm *tm;
356
357	t = time(NULL);
358	tm = gmtime(&t);
359
360	write_lastused_info(sba, dba, tm);
361}
362
363/* Link Key handling */
364
365static void link_key_request(int index, bdaddr_t *dba)
366{
367	struct btd_adapter *adapter;
368	struct btd_device *device;
369	struct hci_auth_info_req req;
370	unsigned char key[16];
371	char sa[18], da[18];
372	uint8_t type;
373	int err;
374
375	ba2str(&BDADDR(index), sa); ba2str(dba, da);
376	info("link_key_request (sba=%s, dba=%s)", sa, da);
377
378	adapter = manager_find_adapter(&BDADDR(index));
379	if (adapter)
380		device = adapter_find_device(adapter, da);
381	else
382		device = NULL;
383
384	memset(&req, 0, sizeof(req));
385	bacpy(&req.bdaddr, dba);
386
387	err = ioctl(SK(index), HCIGETAUTHINFO, (unsigned long) &req);
388	if (err < 0) {
389		if (errno != EINVAL)
390			DBG("HCIGETAUTHINFO failed %s (%d)",
391						strerror(errno), errno);
392		req.type = 0x00;
393	}
394
395	DBG("kernel auth requirements = 0x%02x", req.type);
396
397	if (main_opts.debug_keys && device &&
398					device_get_debug_key(device, key))
399		type = 0x03;
400	else if (read_link_key(&BDADDR(index), dba, key, &type) < 0 ||
401								type == 0x03) {
402		/* Link key not found */
403		hci_send_cmd(SK(index), OGF_LINK_CTL, OCF_LINK_KEY_NEG_REPLY,
404								6, dba);
405		return;
406	}
407
408	/* Link key found */
409
410	DBG("link key type = 0x%02x", type);
411
412	/* Don't use unauthenticated combination keys if MITM is
413	 * required */
414	if (type == 0x04 && req.type != 0xff && (req.type & 0x01))
415		hci_send_cmd(SK(index), OGF_LINK_CTL, OCF_LINK_KEY_NEG_REPLY,
416								6, dba);
417	else {
418		link_key_reply_cp lr;
419
420		memcpy(lr.link_key, key, 16);
421		bacpy(&lr.bdaddr, dba);
422
423		hci_send_cmd(SK(index), OGF_LINK_CTL, OCF_LINK_KEY_REPLY,
424						LINK_KEY_REPLY_CP_SIZE, &lr);
425	}
426}
427
428static void link_key_notify(int index, void *ptr)
429{
430	evt_link_key_notify *evt = ptr;
431	bdaddr_t *dba = &evt->bdaddr;
432	char sa[18], da[18];
433	int err;
434	unsigned char old_key[16];
435	uint8_t old_key_type;
436
437	ba2str(&BDADDR(index), sa); ba2str(dba, da);
438	info("link_key_notify (sba=%s, dba=%s, type=%d)", sa, da,
439							evt->key_type);
440
441	err = read_link_key(&BDADDR(index), dba, old_key, &old_key_type);
442	if (err < 0)
443		old_key_type = 0xff;
444
445	err = btd_event_link_key_notify(&BDADDR(index), dba, evt->link_key,
446					evt->key_type, PIN_LENGTH(index),
447					old_key_type);
448	PIN_LENGTH(index) = -1;
449
450	if (err < 0) {
451		uint16_t handle;
452
453		if (err == -ENODEV)
454			btd_event_bonding_process_complete(&BDADDR(index), dba,
455							HCI_OE_LOW_RESOURCES);
456		else
457			btd_event_bonding_process_complete(&BDADDR(index), dba,
458							HCI_MEMORY_FULL);
459
460		if (get_handle(index, dba, &handle) == 0) {
461			disconnect_cp cp;
462
463			memset(&cp, 0, sizeof(cp));
464			cp.handle = htobs(handle);
465			cp.reason = HCI_OE_LOW_RESOURCES;
466
467			hci_send_cmd(SK(index), OGF_LINK_CTL, OCF_DISCONNECT,
468						DISCONNECT_CP_SIZE, &cp);
469		}
470	}
471}
472
473static void return_link_keys(int index, void *ptr)
474{
475	evt_return_link_keys *evt = ptr;
476	uint8_t num = evt->num_keys;
477	unsigned char key[16];
478	char sa[18], da[18];
479	bdaddr_t dba;
480	int i;
481
482	ba2str(&BDADDR(index), sa);
483	ptr++;
484
485	for (i = 0; i < num; i++) {
486		bacpy(&dba, ptr); ba2str(&dba, da);
487		memcpy(key, ptr + 6, 16);
488
489		info("return_link_keys (sba=%s, dba=%s)", sa, da);
490
491		btd_event_returned_link_key(&BDADDR(index), &dba);
492
493		ptr += 22;
494	}
495}
496
497/* Simple Pairing handling */
498
499static void user_confirm_request(int index, void *ptr)
500{
501	evt_user_confirm_request *req = ptr;
502
503	if (btd_event_user_confirm(&BDADDR(index), &req->bdaddr,
504					btohl(req->passkey)) < 0)
505		hci_send_cmd(SK(index), OGF_LINK_CTL,
506				OCF_USER_CONFIRM_NEG_REPLY, 6, ptr);
507}
508
509static void user_passkey_request(int index, void *ptr)
510{
511	evt_user_passkey_request *req = ptr;
512
513	if (btd_event_user_passkey(&BDADDR(index), &req->bdaddr) < 0)
514		hci_send_cmd(SK(index), OGF_LINK_CTL,
515				OCF_USER_PASSKEY_NEG_REPLY, 6, ptr);
516}
517
518static void user_passkey_notify(int index, void *ptr)
519{
520	evt_user_passkey_notify *req = ptr;
521
522	btd_event_user_notify(&BDADDR(index), &req->bdaddr,
523						btohl(req->passkey));
524}
525
526static void remote_oob_data_request(int index, void *ptr)
527{
528	hci_send_cmd(SK(index), OGF_LINK_CTL,
529				OCF_REMOTE_OOB_DATA_NEG_REPLY, 6, ptr);
530}
531
532static void io_capa_request(int index, void *ptr)
533{
534	bdaddr_t *dba = ptr;
535	char sa[18], da[18];
536	uint8_t cap, auth;
537
538	ba2str(&BDADDR(index), sa); ba2str(dba, da);
539	info("io_capa_request (sba=%s, dba=%s)", sa, da);
540
541	if (btd_event_get_io_cap(&BDADDR(index), dba, &cap, &auth) < 0) {
542		io_capability_neg_reply_cp cp;
543		memset(&cp, 0, sizeof(cp));
544		bacpy(&cp.bdaddr, dba);
545		cp.reason = HCI_PAIRING_NOT_ALLOWED;
546		hci_send_cmd(SK(index), OGF_LINK_CTL,
547					OCF_IO_CAPABILITY_NEG_REPLY,
548					IO_CAPABILITY_NEG_REPLY_CP_SIZE, &cp);
549	} else {
550		io_capability_reply_cp cp;
551		memset(&cp, 0, sizeof(cp));
552		bacpy(&cp.bdaddr, dba);
553		cp.capability = cap;
554		cp.oob_data = 0x00;
555		cp.authentication = auth;
556		hci_send_cmd(SK(index), OGF_LINK_CTL, OCF_IO_CAPABILITY_REPLY,
557					IO_CAPABILITY_REPLY_CP_SIZE, &cp);
558	}
559}
560
561static void io_capa_response(int index, void *ptr)
562{
563	evt_io_capability_response *evt = ptr;
564	char sa[18], da[18];
565
566	ba2str(&BDADDR(index), sa); ba2str(&evt->bdaddr, da);
567	info("io_capa_response (sba=%s, dba=%s)", sa, da);
568
569	btd_event_set_io_cap(&BDADDR(index), &evt->bdaddr,
570				evt->capability, evt->authentication);
571}
572
573/* PIN code handling */
574
575static void pin_code_request(int index, bdaddr_t *dba)
576{
577	pin_code_reply_cp pr;
578	struct hci_conn_info_req *cr;
579	struct hci_conn_info *ci;
580	char sa[18], da[18], pin[17];
581	int pinlen;
582
583	memset(&pr, 0, sizeof(pr));
584	bacpy(&pr.bdaddr, dba);
585
586	ba2str(&BDADDR(index), sa); ba2str(dba, da);
587	info("pin_code_request (sba=%s, dba=%s)", sa, da);
588
589	cr = g_malloc0(sizeof(*cr) + sizeof(*ci));
590
591	bacpy(&cr->bdaddr, dba);
592	cr->type = ACL_LINK;
593	if (ioctl(SK(index), HCIGETCONNINFO, (unsigned long) cr) < 0) {
594		error("Can't get conn info: %s (%d)", strerror(errno), errno);
595		goto reject;
596	}
597	ci = cr->conn_info;
598
599	memset(pin, 0, sizeof(pin));
600	pinlen = read_pin_code(&BDADDR(index), dba, pin);
601
602	if (pinlen > 0) {
603		PIN_LENGTH(index) = pinlen;
604		memcpy(pr.pin_code, pin, pinlen);
605		pr.pin_len = pinlen;
606		hci_send_cmd(SK(index), OGF_LINK_CTL, OCF_PIN_CODE_REPLY,
607						PIN_CODE_REPLY_CP_SIZE, &pr);
608	} else {
609		/* Request PIN from passkey agent */
610		if (btd_event_request_pin(&BDADDR(index), ci) < 0)
611			goto reject;
612	}
613
614	g_free(cr);
615
616	return;
617
618reject:
619	g_free(cr);
620
621	hci_send_cmd(SK(index), OGF_LINK_CTL, OCF_PIN_CODE_NEG_REPLY, 6, dba);
622}
623
624static void start_inquiry(bdaddr_t *local, uint8_t status, gboolean periodic)
625{
626	struct btd_adapter *adapter;
627	int state;
628
629	/* Don't send the signal if the cmd failed */
630	if (status) {
631		error("Inquiry Failed with status 0x%02x", status);
632		return;
633	}
634
635	adapter = manager_find_adapter(local);
636	if (!adapter) {
637		error("Unable to find matching adapter");
638		return;
639	}
640
641	state = adapter_get_state(adapter);
642
643	if (periodic)
644		state |= STATE_PINQ;
645	else
646		state |= STATE_STDINQ;
647
648	adapter_set_state(adapter, state);
649}
650
651static void inquiry_complete(bdaddr_t *local, uint8_t status,
652							gboolean periodic)
653{
654	struct btd_adapter *adapter;
655	int state;
656
657	/* Don't send the signal if the cmd failed */
658	if (status) {
659		error("Inquiry Failed with status 0x%02x", status);
660		return;
661	}
662
663	adapter = manager_find_adapter(local);
664	if (!adapter) {
665		error("Unable to find matching adapter");
666		return;
667	}
668
669	state = adapter_get_state(adapter);
670	state &= ~(STATE_STDINQ | STATE_PINQ);
671	adapter_set_state(adapter, state);
672}
673
674static inline void remote_features_notify(int index, void *ptr)
675{
676	evt_remote_host_features_notify *evt = ptr;
677
678	if (evt->features[0] & 0x01)
679		btd_event_set_legacy_pairing(&BDADDR(index), &evt->bdaddr,
680									FALSE);
681	else
682		btd_event_set_legacy_pairing(&BDADDR(index), &evt->bdaddr,
683									TRUE);
684
685	write_features_info(&BDADDR(index), &evt->bdaddr, NULL, evt->features);
686}
687
688static void write_le_host_complete(bdaddr_t *sba, uint8_t status)
689{
690	struct btd_adapter *adapter;
691
692	if (status)
693		return;
694
695	adapter = manager_find_adapter(sba);
696	if (!adapter) {
697		error("No matching adapter found");
698		return;
699	}
700
701	btd_adapter_read_local_ext_features(adapter);
702}
703
704static void read_local_version_complete(int index,
705				const read_local_version_rp *rp)
706{
707	if (rp->status)
708		return;
709
710	VER(index).manufacturer = btohs(bt_get_unaligned(&rp->manufacturer));
711	VER(index).hci_ver = rp->hci_ver;
712	VER(index).hci_rev = btohs(bt_get_unaligned(&rp->hci_rev));
713	VER(index).lmp_ver = rp->lmp_ver;
714	VER(index).lmp_subver = btohs(bt_get_unaligned(&rp->lmp_subver));
715
716	if (!PENDING(index))
717		return;
718
719	clear_bit(PENDING_VERSION, &PENDING(index));
720
721	DBG("Got version for hci%d", index);
722
723	if (!PENDING(index) && UP(index))
724		manager_start_adapter(index);
725}
726
727static void read_local_features_complete(int index,
728				const read_local_features_rp *rp)
729{
730	if (rp->status)
731		return;
732
733	memcpy(FEATURES(index), rp->features, 8);
734
735	if (!PENDING(index))
736		return;
737
738	clear_bit(PENDING_FEATURES, &PENDING(index));
739
740	DBG("Got features for hci%d", index);
741
742	if (!PENDING(index) && UP(index))
743		manager_start_adapter(index);
744}
745
746static void read_local_name_complete(int index, read_local_name_rp *rp)
747{
748	if (rp->status)
749		return;
750
751	if (!PENDING(index)) {
752		adapter_update_local_name(&BDADDR(index), rp);
753		return;
754	}
755
756	clear_bit(PENDING_NAME, &PENDING(index));
757
758	DBG("Got name for hci%d", index);
759
760	if (!PENDING(index) && UP(index))
761		manager_start_adapter(index);
762}
763
764static void read_local_ext_features_complete(bdaddr_t *sba,
765				const read_local_ext_features_rp *rp)
766{
767	struct btd_adapter *adapter;
768
769	if (rp->status)
770		return;
771
772	adapter = manager_find_adapter(sba);
773	if (!adapter) {
774		error("No matching adapter found");
775		return;
776	}
777
778	/* Local Extended feature page number is 1 */
779	if (rp->page_num != 1)
780		return;
781
782	btd_adapter_update_local_ext_features(adapter, rp->features);
783}
784
785static void read_bd_addr_complete(int index, read_bd_addr_rp *rp)
786{
787	if (rp->status)
788		return;
789
790	bacpy(&BDADDR(index), &rp->bdaddr);
791
792	if (!PENDING(index))
793		return;
794
795	clear_bit(PENDING_BDADDR, &PENDING(index));
796
797	DBG("Got bdaddr for hci%d", index);
798
799	if (!PENDING(index) && UP(index))
800		manager_start_adapter(index);
801}
802
803static inline void cmd_status(int index, void *ptr)
804{
805	evt_cmd_status *evt = ptr;
806	uint16_t opcode = btohs(evt->opcode);
807
808	if (opcode == cmd_opcode_pack(OGF_LINK_CTL, OCF_INQUIRY))
809		start_inquiry(&BDADDR(index), evt->status, FALSE);
810}
811
812static void read_scan_complete(int index, uint8_t status, void *ptr)
813{
814	struct btd_adapter *adapter;
815	read_scan_enable_rp *rp = ptr;
816
817	adapter = manager_find_adapter(&BDADDR(index));
818
819	if (!adapter) {
820		error("Unable to find matching adapter");
821		return;
822	}
823
824	adapter_mode_changed(adapter, rp->enable);
825}
826
827static inline void cmd_complete(int index, void *ptr)
828{
829	evt_cmd_complete *evt = ptr;
830	uint16_t opcode = btohs(evt->opcode);
831	uint8_t status = *((uint8_t *) ptr + EVT_CMD_COMPLETE_SIZE);
832
833	switch (opcode) {
834	case cmd_opcode_pack(OGF_INFO_PARAM, OCF_READ_LOCAL_VERSION):
835		ptr += sizeof(evt_cmd_complete);
836		read_local_version_complete(index, ptr);
837		break;
838	case cmd_opcode_pack(OGF_INFO_PARAM, OCF_READ_LOCAL_FEATURES):
839		ptr += sizeof(evt_cmd_complete);
840		read_local_features_complete(index, ptr);
841		break;
842	case cmd_opcode_pack(OGF_INFO_PARAM, OCF_READ_LOCAL_EXT_FEATURES):
843		ptr += sizeof(evt_cmd_complete);
844		read_local_ext_features_complete(&BDADDR(index), ptr);
845		break;
846	case cmd_opcode_pack(OGF_INFO_PARAM, OCF_READ_BD_ADDR):
847		ptr += sizeof(evt_cmd_complete);
848		read_bd_addr_complete(index, ptr);
849		break;
850	case cmd_opcode_pack(OGF_LINK_CTL, OCF_PERIODIC_INQUIRY):
851		start_inquiry(&BDADDR(index), status, TRUE);
852		break;
853	case cmd_opcode_pack(OGF_LINK_CTL, OCF_EXIT_PERIODIC_INQUIRY):
854		inquiry_complete(&BDADDR(index), status, TRUE);
855		break;
856	case cmd_opcode_pack(OGF_LINK_CTL, OCF_INQUIRY_CANCEL):
857		inquiry_complete(&BDADDR(index), status, FALSE);
858		break;
859	case cmd_opcode_pack(OGF_HOST_CTL, OCF_WRITE_LE_HOST_SUPPORTED):
860		write_le_host_complete(&BDADDR(index), status);
861		break;
862	case cmd_opcode_pack(OGF_LE_CTL, OCF_LE_SET_SCAN_ENABLE):
863		btd_event_le_set_scan_enable_complete(&BDADDR(index), status);
864		break;
865	case cmd_opcode_pack(OGF_HOST_CTL, OCF_CHANGE_LOCAL_NAME):
866		adapter_setname_complete(&BDADDR(index), status);
867		break;
868	case cmd_opcode_pack(OGF_HOST_CTL, OCF_WRITE_SCAN_ENABLE):
869		btd_event_setscan_enable_complete(&BDADDR(index));
870		break;
871	case cmd_opcode_pack(OGF_HOST_CTL, OCF_READ_SCAN_ENABLE):
872		ptr += sizeof(evt_cmd_complete);
873		read_scan_complete(index, status, ptr);
874		break;
875	case cmd_opcode_pack(OGF_HOST_CTL, OCF_WRITE_CLASS_OF_DEV):
876		adapter_set_class_complete(&BDADDR(index), status);
877		break;
878	case cmd_opcode_pack(OGF_HOST_CTL, OCF_WRITE_SIMPLE_PAIRING_MODE):
879		btd_event_write_simple_pairing_mode_complete(&BDADDR(index));
880		break;
881	case cmd_opcode_pack(OGF_HOST_CTL, OCF_READ_SIMPLE_PAIRING_MODE):
882		ptr += sizeof(evt_cmd_complete);
883		btd_event_read_simple_pairing_mode_complete(&BDADDR(index),
884									ptr);
885		break;
886	case cmd_opcode_pack(OGF_HOST_CTL, OCF_READ_LOCAL_NAME):
887		ptr += sizeof(evt_cmd_complete);
888		read_local_name_complete(index, ptr);
889		break;
890	case cmd_opcode_pack(OGF_HOST_CTL,
891					OCF_READ_INQ_RESPONSE_TX_POWER_LEVEL):
892		ptr += sizeof(evt_cmd_complete);
893		adapter_update_tx_power(&BDADDR(index), status, ptr);
894		break;
895	};
896}
897
898static inline void remote_name_information(int index, void *ptr)
899{
900	evt_remote_name_req_complete *evt = ptr;
901	char name[MAX_NAME_LENGTH + 1];
902
903	memset(name, 0, sizeof(name));
904
905	if (!evt->status)
906		memcpy(name, evt->name, MAX_NAME_LENGTH);
907
908	btd_event_remote_name(&BDADDR(index), &evt->bdaddr, evt->status, name);
909}
910
911static inline void remote_version_information(int index, void *ptr)
912{
913	evt_read_remote_version_complete *evt = ptr;
914	bdaddr_t dba;
915
916	if (evt->status)
917		return;
918
919	if (get_bdaddr(index, btohs(evt->handle), &dba) < 0)
920		return;
921
922	write_version_info(&BDADDR(index), &dba, btohs(evt->manufacturer),
923				evt->lmp_ver, btohs(evt->lmp_subver));
924}
925
926static inline void inquiry_result(int index, int plen, void *ptr)
927{
928	uint8_t num = *(uint8_t *) ptr++;
929	int i;
930
931	for (i = 0; i < num; i++) {
932		inquiry_info *info = ptr;
933		uint32_t class = info->dev_class[0] |
934						(info->dev_class[1] << 8) |
935						(info->dev_class[2] << 16);
936
937		btd_event_inquiry_result(&BDADDR(index), &info->bdaddr, class,
938								0, NULL);
939
940		update_lastseen(&BDADDR(index), &info->bdaddr);
941
942		ptr += INQUIRY_INFO_SIZE;
943	}
944}
945
946static inline void inquiry_result_with_rssi(int index, int plen, void *ptr)
947{
948	uint8_t num = *(uint8_t *) ptr++;
949	int i;
950
951	if (!num)
952		return;
953
954	if ((plen - 1) / num == INQUIRY_INFO_WITH_RSSI_AND_PSCAN_MODE_SIZE) {
955		for (i = 0; i < num; i++) {
956			inquiry_info_with_rssi_and_pscan_mode *info = ptr;
957			uint32_t class = info->dev_class[0]
958						| (info->dev_class[1] << 8)
959						| (info->dev_class[2] << 16);
960
961			btd_event_inquiry_result(&BDADDR(index), &info->bdaddr,
962						class, info->rssi, NULL);
963
964			update_lastseen(&BDADDR(index), &info->bdaddr);
965
966			ptr += INQUIRY_INFO_WITH_RSSI_AND_PSCAN_MODE_SIZE;
967		}
968	} else {
969		for (i = 0; i < num; i++) {
970			inquiry_info_with_rssi *info = ptr;
971			uint32_t class = info->dev_class[0]
972						| (info->dev_class[1] << 8)
973						| (info->dev_class[2] << 16);
974
975			btd_event_inquiry_result(&BDADDR(index), &info->bdaddr,
976						class, info->rssi, NULL);
977
978			update_lastseen(&BDADDR(index), &info->bdaddr);
979
980			ptr += INQUIRY_INFO_WITH_RSSI_SIZE;
981		}
982	}
983}
984
985static inline void extended_inquiry_result(int index, int plen, void *ptr)
986{
987	uint8_t num = *(uint8_t *) ptr++;
988	int i;
989
990	for (i = 0; i < num; i++) {
991		extended_inquiry_info *info = ptr;
992		uint32_t class = info->dev_class[0]
993					| (info->dev_class[1] << 8)
994					| (info->dev_class[2] << 16);
995
996		btd_event_inquiry_result(&BDADDR(index), &info->bdaddr, class,
997						info->rssi, info->data);
998
999		update_lastseen(&BDADDR(index), &info->bdaddr);
1000
1001		ptr += EXTENDED_INQUIRY_INFO_SIZE;
1002	}
1003}
1004
1005static inline void remote_features_information(int index, void *ptr)
1006{
1007	evt_read_remote_features_complete *evt = ptr;
1008	bdaddr_t dba;
1009
1010	if (evt->status)
1011		return;
1012
1013	if (get_bdaddr(index, btohs(evt->handle), &dba) < 0)
1014		return;
1015
1016	write_features_info(&BDADDR(index), &dba, evt->features, NULL);
1017}
1018
1019static inline void conn_complete(int index, void *ptr)
1020{
1021	evt_conn_complete *evt = ptr;
1022	char filename[PATH_MAX];
1023	char local_addr[18], peer_addr[18], *str;
1024	struct btd_adapter *adapter;
1025
1026	adapter = manager_find_adapter(&BDADDR(index));
1027	if (!adapter) {
1028		error("Unable to find matching adapter");
1029		return;
1030	}
1031
1032	if (evt->link_type != ACL_LINK)
1033		return;
1034
1035	btd_event_conn_complete(&BDADDR(index), evt->status,
1036					btohs(evt->handle), &evt->bdaddr);
1037
1038	if (evt->status)
1039		return;
1040
1041	update_lastused(&BDADDR(index), &evt->bdaddr);
1042
1043	/* check if the remote version needs be requested */
1044	ba2str(&BDADDR(index), local_addr);
1045	ba2str(&evt->bdaddr, peer_addr);
1046
1047	create_name(filename, sizeof(filename), STORAGEDIR, local_addr,
1048							"manufacturers");
1049
1050	str = textfile_get(filename, peer_addr);
1051	if (!str)
1052		btd_adapter_get_remote_version(adapter, btohs(evt->handle),
1053									TRUE);
1054	else
1055		free(str);
1056}
1057
1058static inline void disconn_complete(int index, void *ptr)
1059{
1060	evt_disconn_complete *evt = ptr;
1061
1062	btd_event_disconn_complete(&BDADDR(index), evt->status,
1063					btohs(evt->handle), evt->reason);
1064}
1065
1066static inline void auth_complete(int index, void *ptr)
1067{
1068	evt_auth_complete *evt = ptr;
1069	bdaddr_t dba;
1070
1071	if (get_bdaddr(index, btohs(evt->handle), &dba) < 0)
1072		return;
1073
1074	btd_event_bonding_process_complete(&BDADDR(index), &dba, evt->status);
1075}
1076
1077static inline void simple_pairing_complete(int index, void *ptr)
1078{
1079	evt_simple_pairing_complete *evt = ptr;
1080
1081	btd_event_simple_pairing_complete(&BDADDR(index), &evt->bdaddr,
1082								evt->status);
1083}
1084
1085static inline void conn_request(int index, void *ptr)
1086{
1087	evt_conn_request *evt = ptr;
1088	uint32_t class = evt->dev_class[0] | (evt->dev_class[1] << 8)
1089				| (evt->dev_class[2] << 16);
1090
1091	btd_event_remote_class(&BDADDR(index), &evt->bdaddr, class);
1092}
1093
1094static inline void le_metaevent(int index, void *ptr)
1095{
1096	evt_le_meta_event *meta = ptr;
1097	le_advertising_info *info;
1098	uint8_t *rssi, num, i;
1099
1100	DBG("LE Meta Event");
1101
1102	if (meta->subevent != EVT_LE_ADVERTISING_REPORT)
1103		return;
1104
1105	num = meta->data[0];
1106	info = (le_advertising_info *) (meta->data + 1);
1107
1108	for (i = 0; i < num; i++) {
1109		/* RSSI is last byte of the advertising report event */
1110		rssi = info->data + info->length;
1111		btd_event_inquiry_result(&BDADDR(index), &info->bdaddr, 0,
1112								*rssi, NULL);
1113		info = (le_advertising_info *) (rssi + 1);
1114	}
1115}
1116
1117static void stop_hci_dev(int index)
1118{
1119	GIOChannel *chan = CHANNEL(index);
1120
1121	if (!chan)
1122		return;
1123
1124	info("Stopping hci%d event socket", index);
1125
1126	g_source_remove(WATCH_ID(index));
1127	g_io_channel_unref(CHANNEL(index));
1128	hci_close_dev(SK(index));
1129	init_dev_info(index, -1);
1130}
1131
1132static gboolean io_security_event(GIOChannel *chan, GIOCondition cond,
1133								gpointer data)
1134{
1135	unsigned char buf[HCI_MAX_EVENT_SIZE], *ptr = buf;
1136	int type, index = GPOINTER_TO_INT(data);
1137	struct hci_dev_info di;
1138	size_t len;
1139	hci_event_hdr *eh;
1140	GIOError err;
1141	evt_cmd_status *evt;
1142
1143	if (cond & (G_IO_NVAL | G_IO_HUP | G_IO_ERR)) {
1144		stop_hci_dev(index);
1145		return FALSE;
1146	}
1147
1148	if ((err = g_io_channel_read(chan, (gchar *) buf, sizeof(buf), &len))) {
1149		if (err == G_IO_ERROR_AGAIN)
1150			return TRUE;
1151		stop_hci_dev(index);
1152		return FALSE;
1153	}
1154
1155	type = *ptr++;
1156
1157	if (type != HCI_EVENT_PKT)
1158		return TRUE;
1159
1160	eh = (hci_event_hdr *) ptr;
1161	ptr += HCI_EVENT_HDR_SIZE;
1162
1163	memset(&di, 0, sizeof(di));
1164	if (hci_devinfo(index, &di) == 0) {
1165		bacpy(&BDADDR(index), &di.bdaddr);
1166
1167		if (ignore_device(&di))
1168			return TRUE;
1169	}
1170
1171	switch (eh->evt) {
1172	case EVT_CMD_STATUS:
1173		cmd_status(index, ptr);
1174		break;
1175
1176	case EVT_CMD_COMPLETE:
1177		cmd_complete(index, ptr);
1178		break;
1179
1180	case EVT_REMOTE_NAME_REQ_COMPLETE:
1181		remote_name_information(index, ptr);
1182		break;
1183
1184	case EVT_READ_REMOTE_VERSION_COMPLETE:
1185		remote_version_information(index, ptr);
1186		break;
1187
1188	case EVT_READ_REMOTE_FEATURES_COMPLETE:
1189		remote_features_information(index, ptr);
1190		break;
1191
1192	case EVT_REMOTE_HOST_FEATURES_NOTIFY:
1193		remote_features_notify(index, ptr);
1194		break;
1195
1196	case EVT_INQUIRY_COMPLETE:
1197		evt = (evt_cmd_status *) ptr;
1198		inquiry_complete(&BDADDR(index), evt->status, FALSE);
1199		break;
1200
1201	case EVT_INQUIRY_RESULT:
1202		inquiry_result(index, eh->plen, ptr);
1203		break;
1204
1205	case EVT_INQUIRY_RESULT_WITH_RSSI:
1206		inquiry_result_with_rssi(index, eh->plen, ptr);
1207		break;
1208
1209	case EVT_EXTENDED_INQUIRY_RESULT:
1210		extended_inquiry_result(index, eh->plen, ptr);
1211		break;
1212
1213	case EVT_CONN_COMPLETE:
1214		conn_complete(index, ptr);
1215		break;
1216
1217	case EVT_DISCONN_COMPLETE:
1218		disconn_complete(index, ptr);
1219		break;
1220
1221	case EVT_AUTH_COMPLETE:
1222		auth_complete(index, ptr);
1223		break;
1224
1225	case EVT_SIMPLE_PAIRING_COMPLETE:
1226		simple_pairing_complete(index, ptr);
1227		break;
1228
1229	case EVT_CONN_REQUEST:
1230		conn_request(index, ptr);
1231		break;
1232	case EVT_LE_META_EVENT:
1233		le_metaevent(index, ptr);
1234		break;
1235	case EVT_PIN_CODE_REQ:
1236		pin_code_request(index, (bdaddr_t *) ptr);
1237		break;
1238
1239	case EVT_LINK_KEY_REQ:
1240		link_key_request(index, (bdaddr_t *) ptr);
1241		break;
1242
1243	case EVT_LINK_KEY_NOTIFY:
1244		link_key_notify(index, ptr);
1245		break;
1246
1247	case EVT_RETURN_LINK_KEYS:
1248		return_link_keys(index, ptr);
1249		break;
1250
1251	case EVT_IO_CAPABILITY_REQUEST:
1252		io_capa_request(index, ptr);
1253		break;
1254
1255	case EVT_IO_CAPABILITY_RESPONSE:
1256		io_capa_response(index, ptr);
1257		break;
1258
1259	case EVT_USER_CONFIRM_REQUEST:
1260		user_confirm_request(index, ptr);
1261		break;
1262
1263	case EVT_USER_PASSKEY_REQUEST:
1264		user_passkey_request(index, ptr);
1265		break;
1266
1267	case EVT_USER_PASSKEY_NOTIFY:
1268		user_passkey_notify(index, ptr);
1269		break;
1270
1271	case EVT_REMOTE_OOB_DATA_REQUEST:
1272		remote_oob_data_request(index, ptr);
1273		break;
1274	}
1275
1276	return TRUE;
1277}
1278
1279static void start_hci_dev(int index)
1280{
1281	GIOChannel *chan = CHANNEL(index);
1282	GIOCondition cond;
1283	struct hci_filter flt;
1284
1285	if (chan)
1286		return;
1287
1288	info("Listening for HCI events on hci%d", index);
1289
1290	/* Set filter */
1291	hci_filter_clear(&flt);
1292	hci_filter_set_ptype(HCI_EVENT_PKT, &flt);
1293	hci_filter_set_event(EVT_CMD_STATUS, &flt);
1294	hci_filter_set_event(EVT_CMD_COMPLETE, &flt);
1295	hci_filter_set_event(EVT_PIN_CODE_REQ, &flt);
1296	hci_filter_set_event(EVT_LINK_KEY_REQ, &flt);
1297	hci_filter_set_event(EVT_LINK_KEY_NOTIFY, &flt);
1298	hci_filter_set_event(EVT_RETURN_LINK_KEYS, &flt);
1299	hci_filter_set_event(EVT_IO_CAPABILITY_REQUEST, &flt);
1300	hci_filter_set_event(EVT_IO_CAPABILITY_RESPONSE, &flt);
1301	hci_filter_set_event(EVT_USER_CONFIRM_REQUEST, &flt);
1302	hci_filter_set_event(EVT_USER_PASSKEY_REQUEST, &flt);
1303	hci_filter_set_event(EVT_REMOTE_OOB_DATA_REQUEST, &flt);
1304	hci_filter_set_event(EVT_USER_PASSKEY_NOTIFY, &flt);
1305	hci_filter_set_event(EVT_KEYPRESS_NOTIFY, &flt);
1306	hci_filter_set_event(EVT_SIMPLE_PAIRING_COMPLETE, &flt);
1307	hci_filter_set_event(EVT_AUTH_COMPLETE, &flt);
1308	hci_filter_set_event(EVT_REMOTE_NAME_REQ_COMPLETE, &flt);
1309	hci_filter_set_event(EVT_READ_REMOTE_VERSION_COMPLETE, &flt);
1310	hci_filter_set_event(EVT_READ_REMOTE_FEATURES_COMPLETE, &flt);
1311	hci_filter_set_event(EVT_REMOTE_HOST_FEATURES_NOTIFY, &flt);
1312	hci_filter_set_event(EVT_INQUIRY_COMPLETE, &flt);
1313	hci_filter_set_event(EVT_INQUIRY_RESULT, &flt);
1314	hci_filter_set_event(EVT_INQUIRY_RESULT_WITH_RSSI, &flt);
1315	hci_filter_set_event(EVT_EXTENDED_INQUIRY_RESULT, &flt);
1316	hci_filter_set_event(EVT_CONN_REQUEST, &flt);
1317	hci_filter_set_event(EVT_CONN_COMPLETE, &flt);
1318	hci_filter_set_event(EVT_DISCONN_COMPLETE, &flt);
1319	hci_filter_set_event(EVT_LE_META_EVENT, &flt);
1320	if (setsockopt(SK(index), SOL_HCI, HCI_FILTER, &flt, sizeof(flt)) < 0) {
1321		error("Can't set filter on hci%d: %s (%d)",
1322						index, strerror(errno), errno);
1323		return;
1324	}
1325
1326	chan = g_io_channel_unix_new(SK(index));
1327	cond = G_IO_IN | G_IO_NVAL | G_IO_HUP | G_IO_ERR;
1328	WATCH_ID(index) = g_io_add_watch_full(chan, G_PRIORITY_LOW, cond,
1329						io_security_event,
1330						GINT_TO_POINTER(index), NULL);
1331	CHANNEL(index) = chan;
1332	PIN_LENGTH(index) = -1;
1333
1334}
1335
1336/* End of HCI event callbacks */
1337
1338static gboolean child_exit(GIOChannel *io, GIOCondition cond, void *user_data)
1339{
1340	int status, fd = g_io_channel_unix_get_fd(io);
1341	pid_t child_pid;
1342
1343	if (read(fd, &child_pid, sizeof(child_pid)) != sizeof(child_pid)) {
1344		error("child_exit: unable to read child pid from pipe");
1345		return TRUE;
1346	}
1347
1348	if (waitpid(child_pid, &status, 0) != child_pid)
1349		error("waitpid(%d) failed", child_pid);
1350	else
1351		DBG("child %d exited", child_pid);
1352
1353	return TRUE;
1354}
1355
1356static void at_child_exit(void)
1357{
1358	pid_t pid = getpid();
1359
1360	if (write(child_pipe[1], &pid, sizeof(pid)) != sizeof(pid))
1361		error("unable to write to child pipe");
1362}
1363
1364static void device_devup_setup(int index)
1365{
1366	struct hci_dev_info di;
1367	uint16_t policy;
1368	read_stored_link_key_cp cp;
1369
1370	if (hci_devinfo(index, &di) < 0)
1371		return;
1372
1373	if (ignore_device(&di))
1374		return;
1375
1376	bacpy(&BDADDR(index), &di.bdaddr);
1377	memcpy(FEATURES(index), di.features, 8);
1378
1379	/* Set page timeout */
1380	if ((main_opts.flags & (1 << HCID_SET_PAGETO))) {
1381		write_page_timeout_cp cp;
1382
1383		cp.timeout = htobs(main_opts.pageto);
1384		hci_send_cmd(SK(index), OGF_HOST_CTL, OCF_WRITE_PAGE_TIMEOUT,
1385					WRITE_PAGE_TIMEOUT_CP_SIZE, &cp);
1386	}
1387
1388	/* Set default link policy */
1389	policy = htobs(main_opts.link_policy);
1390	hci_send_cmd(SK(index), OGF_LINK_POLICY,
1391				OCF_WRITE_DEFAULT_LINK_POLICY, 2, &policy);
1392
1393	bacpy(&cp.bdaddr, BDADDR_ANY);
1394	cp.read_all = 1;
1395	hci_send_cmd(SK(index), OGF_HOST_CTL, OCF_READ_STORED_LINK_KEY,
1396			READ_STORED_LINK_KEY_CP_SIZE, (void *) &cp);
1397
1398	if (!PENDING(index))
1399		manager_start_adapter(index);
1400}
1401
1402static void init_pending(int index)
1403{
1404	set_bit(PENDING_BDADDR, &PENDING(index));
1405	set_bit(PENDING_VERSION, &PENDING(index));
1406	set_bit(PENDING_FEATURES, &PENDING(index));
1407	set_bit(PENDING_NAME, &PENDING(index));
1408}
1409
1410static void init_device(int index)
1411{
1412	struct hci_dev_req dr;
1413	struct hci_dev_info di;
1414	int dd;
1415	pid_t pid;
1416
1417	dd = hci_open_dev(index);
1418	if (dd < 0) {
1419		error("Unable to open hci%d: %s (%d)", index,
1420						strerror(errno), errno);
1421		return;
1422	}
1423
1424	if (index > max_dev) {
1425		max_dev = index;
1426		devs = g_realloc(devs, sizeof(devs[0]) * (max_dev + 1));
1427	}
1428
1429	init_dev_info(index, dd);
1430	init_pending(index);
1431	start_hci_dev(index);
1432
1433	/* Do initialization in the separate process */
1434	pid = fork();
1435	switch (pid) {
1436		case 0:
1437			atexit(at_child_exit);
1438			break;
1439		case -1:
1440			error("Fork failed. Can't init device hci%d: %s (%d)",
1441					index, strerror(errno), errno);
1442		default:
1443			DBG("child %d forked", pid);
1444			return;
1445	}
1446
1447	memset(&dr, 0, sizeof(dr));
1448	dr.dev_id = index;
1449
1450	/* Set link mode */
1451	dr.dev_opt = main_opts.link_mode;
1452	if (ioctl(dd, HCISETLINKMODE, (unsigned long) &dr) < 0)
1453		error("Can't set link mode on hci%d: %s (%d)",
1454						index, strerror(errno), errno);
1455
1456	/* Set link policy for BR/EDR HCI devices */
1457	if (hci_devinfo(index, &di) < 0)
1458		goto fail;
1459
1460	if (!ignore_device(&di)) {
1461		dr.dev_opt = main_opts.link_policy;
1462		if (ioctl(dd, HCISETLINKPOL, (unsigned long) &dr) < 0 &&
1463							errno != ENETDOWN) {
1464			error("Can't set link policy on hci%d: %s (%d)",
1465						index, strerror(errno), errno);
1466		}
1467	}
1468
1469	/* Start HCI device */
1470	if (ioctl(dd, HCIDEVUP, index) < 0 && errno != EALREADY) {
1471		error("Can't init device hci%d: %s (%d)",
1472					index, strerror(errno), errno);
1473		goto fail;
1474	}
1475
1476	hci_close_dev(dd);
1477	exit(0);
1478
1479fail:
1480	hci_close_dev(dd);
1481	exit(1);
1482}
1483
1484static void device_devreg_setup(int index)
1485{
1486	struct hci_dev_info di;
1487	gboolean devup;
1488
1489	init_device(index);
1490
1491	memset(&di, 0, sizeof(di));
1492
1493	if (hci_devinfo(index, &di) < 0)
1494		return;
1495
1496	devup = hci_test_bit(HCI_UP, &di.flags);
1497
1498	if (!ignore_device(&di))
1499		manager_register_adapter(index, devup);
1500}
1501
1502static void device_event(int event, int index)
1503{
1504	switch (event) {
1505	case HCI_DEV_REG:
1506		info("HCI dev %d registered", index);
1507		device_devreg_setup(index);
1508		break;
1509
1510	case HCI_DEV_UNREG:
1511		info("HCI dev %d unregistered", index);
1512		stop_hci_dev(index);
1513		manager_unregister_adapter(index);
1514		break;
1515
1516	case HCI_DEV_UP:
1517		info("HCI dev %d up", index);
1518		UP(index) = TRUE;
1519		device_devup_setup(index);
1520		break;
1521
1522	case HCI_DEV_DOWN:
1523		info("HCI dev %d down", index);
1524		UP(index) = FALSE;
1525		if (!PENDING(index)) {
1526			manager_stop_adapter(index);
1527			init_pending(index);
1528		}
1529		break;
1530	}
1531}
1532
1533static gboolean init_known_adapters(gpointer user_data)
1534{
1535	struct hci_dev_list_req *dl;
1536	struct hci_dev_req *dr;
1537	int i, err, ctl = GPOINTER_TO_INT(user_data);
1538	size_t req_size;
1539
1540	req_size = HCI_MAX_DEV * sizeof(struct hci_dev_req) + sizeof(uint16_t);
1541
1542	dl = g_try_malloc0(req_size);
1543	if (!dl) {
1544		error("Can't allocate devlist buffer");
1545		return FALSE;
1546	}
1547
1548	dl->dev_num = HCI_MAX_DEV;
1549	dr = dl->dev_req;
1550
1551	if (ioctl(ctl, HCIGETDEVLIST, dl) < 0) {
1552		err = -errno;
1553		error("Can't get device list: %s (%d)", strerror(-err), -err);
1554		g_free(dl);
1555		return FALSE;
1556	}
1557
1558	for (i = 0; i < dl->dev_num; i++, dr++) {
1559		device_event(HCI_DEV_REG, dr->dev_id);
1560
1561		if (!hci_test_bit(HCI_UP, &dr->dev_opt))
1562			continue;
1563
1564		PENDING(dr->dev_id) = 0;
1565		set_bit(PENDING_VERSION, &PENDING(dr->dev_id));
1566		hci_send_cmd(SK(dr->dev_id), OGF_INFO_PARAM,
1567					OCF_READ_LOCAL_VERSION, 0, NULL);
1568		device_event(HCI_DEV_UP, dr->dev_id);
1569	}
1570
1571	g_free(dl);
1572
1573	return FALSE;
1574}
1575
1576static gboolean io_stack_event(GIOChannel *chan, GIOCondition cond,
1577								gpointer data)
1578{
1579	unsigned char buf[HCI_MAX_FRAME_SIZE], *ptr;
1580	evt_stack_internal *si;
1581	evt_si_device *sd;
1582	hci_event_hdr *eh;
1583	int type;
1584	size_t len;
1585	GIOError err;
1586
1587	ptr = buf;
1588
1589	err = g_io_channel_read(chan, (gchar *) buf, sizeof(buf), &len);
1590	if (err) {
1591		if (err == G_IO_ERROR_AGAIN)
1592			return TRUE;
1593
1594		error("Read from control socket failed: %s (%d)",
1595						strerror(errno), errno);
1596		return FALSE;
1597	}
1598
1599	type = *ptr++;
1600
1601	if (type != HCI_EVENT_PKT)
1602		return TRUE;
1603
1604	eh = (hci_event_hdr *) ptr;
1605	if (eh->evt != EVT_STACK_INTERNAL)
1606		return TRUE;
1607
1608	ptr += HCI_EVENT_HDR_SIZE;
1609
1610	si = (evt_stack_internal *) ptr;
1611	switch (si->type) {
1612	case EVT_SI_DEVICE:
1613		sd = (void *) &si->data;
1614		device_event(sd->event, sd->dev_id);
1615		break;
1616	}
1617
1618	return TRUE;
1619}
1620
1621static int hciops_setup(void)
1622{
1623	struct sockaddr_hci addr;
1624	struct hci_filter flt;
1625	GIOChannel *ctl_io, *child_io;
1626	int sock, err;
1627
1628	if (child_pipe[0] != -1)
1629		return -EALREADY;
1630
1631	if (pipe(child_pipe) < 0) {
1632		err = -errno;
1633		error("pipe(): %s (%d)", strerror(-err), -err);
1634		return err;
1635	}
1636
1637	child_io = g_io_channel_unix_new(child_pipe[0]);
1638	g_io_channel_set_close_on_unref(child_io, TRUE);
1639	child_io_id = g_io_add_watch(child_io,
1640				G_IO_IN | G_IO_ERR | G_IO_HUP | G_IO_NVAL,
1641				child_exit, NULL);
1642	g_io_channel_unref(child_io);
1643
1644	/* Create and bind HCI socket */
1645	sock = socket(AF_BLUETOOTH, SOCK_RAW, BTPROTO_HCI);
1646	if (sock < 0) {
1647		err = -errno;
1648		error("Can't open HCI socket: %s (%d)", strerror(-err),
1649								-err);
1650		return err;
1651	}
1652
1653	/* Set filter */
1654	hci_filter_clear(&flt);
1655	hci_filter_set_ptype(HCI_EVENT_PKT, &flt);
1656	hci_filter_set_event(EVT_STACK_INTERNAL, &flt);
1657	if (setsockopt(sock, SOL_HCI, HCI_FILTER, &flt, sizeof(flt)) < 0) {
1658		err = -errno;
1659		error("Can't set filter: %s (%d)", strerror(-err), -err);
1660		return err;
1661	}
1662
1663	memset(&addr, 0, sizeof(addr));
1664	addr.hci_family = AF_BLUETOOTH;
1665	addr.hci_dev = HCI_DEV_NONE;
1666	if (bind(sock, (struct sockaddr *) &addr, sizeof(addr)) < 0) {
1667		err = -errno;
1668		error("Can't bind HCI socket: %s (%d)", strerror(-err), -err);
1669		return err;
1670	}
1671
1672	ctl_io = g_io_channel_unix_new(sock);
1673	g_io_channel_set_close_on_unref(ctl_io, TRUE);
1674
1675	ctl_io_id = g_io_add_watch(ctl_io, G_IO_IN, io_stack_event, NULL);
1676
1677	g_io_channel_unref(ctl_io);
1678
1679	g_idle_add(init_known_adapters, GINT_TO_POINTER(sock));
1680
1681	return 0;
1682}
1683
1684static void hciops_cleanup(void)
1685{
1686	int i;
1687
1688	for (i = 0; i <= max_dev; i++) {
1689		if (SK(i) >= 0)
1690			hci_close_dev(SK(i));
1691	}
1692
1693	g_free(devs);
1694	devs = NULL;
1695	max_dev = -1;
1696
1697	if (child_io_id) {
1698		g_source_remove(child_io_id);
1699		child_io_id = 0;
1700	}
1701
1702	if (ctl_io_id) {
1703		g_source_remove(ctl_io_id);
1704		ctl_io_id = 0;
1705	}
1706
1707	if (child_pipe[0] >= 0) {
1708		close(child_pipe[0]);
1709		child_pipe[0] = -1;
1710	}
1711
1712	if (child_pipe[1] >= 0) {
1713		close(child_pipe[1]);
1714		child_pipe[1] = -1;
1715	}
1716}
1717
1718static int hciops_start(int index)
1719{
1720	int err;
1721
1722	if (ioctl(SK(index), HCIDEVUP, index) == 0)
1723		return 0;
1724
1725	if (errno == EALREADY)
1726		return 0;
1727
1728	err = -errno;
1729	error("Can't init device hci%d: %s (%d)",
1730					index, strerror(-err), -err);
1731
1732	return err;
1733}
1734
1735static int hciops_stop(int index)
1736{
1737	int err = 0;
1738
1739	if (ioctl(SK(index), HCIDEVDOWN, index) == 0)
1740		goto done; /* on success */
1741
1742	if (errno != EALREADY) {
1743		err = -errno;
1744		error("Can't stop device hci%d: %s (%d)",
1745				index, strerror(-err), -err);
1746	}
1747
1748done:
1749	return err;
1750}
1751
1752static int hciops_powered(int index, gboolean powered)
1753{
1754	uint8_t mode = SCAN_DISABLED;
1755
1756	if (powered)
1757		return hciops_start(index);
1758
1759	if (hci_send_cmd(SK(index), OGF_HOST_CTL,
1760					OCF_WRITE_SCAN_ENABLE, 1, &mode) < 0)
1761		return -errno;
1762
1763	return hciops_stop(index);
1764}
1765
1766static int hciops_connectable(int index)
1767{
1768	uint8_t mode = SCAN_PAGE;
1769
1770	if (hci_send_cmd(SK(index), OGF_HOST_CTL,
1771					OCF_WRITE_SCAN_ENABLE, 1, &mode) < 0)
1772		return -errno;
1773
1774	return 0;
1775}
1776
1777static int hciops_discoverable(int index)
1778{
1779	uint8_t mode = (SCAN_PAGE | SCAN_INQUIRY);
1780
1781	if (hci_send_cmd(SK(index), OGF_HOST_CTL, OCF_WRITE_SCAN_ENABLE,
1782								1, &mode) < 0)
1783		return -errno;
1784
1785	return 0;
1786}
1787
1788static int hciops_set_class(int index, uint32_t class)
1789{
1790	write_class_of_dev_cp cp;
1791
1792	memcpy(cp.dev_class, &class, 3);
1793
1794	if (hci_send_cmd(SK(index), OGF_HOST_CTL, OCF_WRITE_CLASS_OF_DEV,
1795					WRITE_CLASS_OF_DEV_CP_SIZE, &cp) < 0)
1796		return -errno;
1797
1798	return 0;
1799}
1800
1801static int hciops_set_limited_discoverable(int index, uint32_t class,
1802							gboolean limited)
1803{
1804	int num = (limited ? 2 : 1);
1805	uint8_t lap[] = { 0x33, 0x8b, 0x9e, 0x00, 0x8b, 0x9e };
1806	write_current_iac_lap_cp cp;
1807
1808	/*
1809	 * 1: giac
1810	 * 2: giac + liac
1811	 */
1812	memset(&cp, 0, sizeof(cp));
1813	cp.num_current_iac = num;
1814	memcpy(&cp.lap, lap, num * 3);
1815
1816	if (hci_send_cmd(SK(index), OGF_HOST_CTL, OCF_WRITE_CURRENT_IAC_LAP,
1817						(num * 3 + 1), &cp) < 0)
1818		return -errno;
1819
1820	return hciops_set_class(index, class);
1821}
1822
1823static int hciops_start_inquiry(int index, uint8_t length, gboolean periodic)
1824{
1825	uint8_t lap[3] = { 0x33, 0x8b, 0x9e };
1826	int err;
1827
1828	if (periodic) {
1829		periodic_inquiry_cp cp;
1830
1831		memset(&cp, 0, sizeof(cp));
1832		memcpy(&cp.lap, lap, 3);
1833		cp.max_period = htobs(24);
1834		cp.min_period = htobs(16);
1835		cp.length  = length;
1836		cp.num_rsp = 0x00;
1837
1838		err = hci_send_cmd(SK(index), OGF_LINK_CTL,
1839						OCF_PERIODIC_INQUIRY,
1840						PERIODIC_INQUIRY_CP_SIZE, &cp);
1841	} else {
1842		inquiry_cp inq_cp;
1843
1844		memset(&inq_cp, 0, sizeof(inq_cp));
1845		memcpy(&inq_cp.lap, lap, 3);
1846		inq_cp.length = length;
1847		inq_cp.num_rsp = 0x00;
1848
1849		err = hci_send_cmd(SK(index), OGF_LINK_CTL,
1850					OCF_INQUIRY, INQUIRY_CP_SIZE, &inq_cp);
1851	}
1852
1853	if (err < 0)
1854		err = -errno;
1855
1856	return err;
1857}
1858
1859static int hciops_stop_inquiry(int index)
1860{
1861	struct hci_dev_info di;
1862	int err;
1863
1864	if (hci_devinfo(index, &di) < 0)
1865		return -errno;
1866
1867	if (hci_test_bit(HCI_INQUIRY, &di.flags))
1868		err = hci_send_cmd(SK(index), OGF_LINK_CTL,
1869						OCF_INQUIRY_CANCEL, 0, 0);
1870	else
1871		err = hci_send_cmd(SK(index), OGF_LINK_CTL,
1872					OCF_EXIT_PERIODIC_INQUIRY, 0, 0);
1873	if (err < 0)
1874		err = -errno;
1875
1876	return err;
1877}
1878
1879static int le_set_scan_enable(int index, uint8_t enable)
1880{
1881	le_set_scan_enable_cp cp;
1882
1883	memset(&cp, 0, sizeof(cp));
1884	cp.enable = enable;
1885	cp.filter_dup = 0;
1886
1887	if (hci_send_cmd(SK(index), OGF_LE_CTL, OCF_LE_SET_SCAN_ENABLE,
1888				LE_SET_SCAN_ENABLE_CP_SIZE, &cp) < 0)
1889		return -errno;
1890
1891	return 0;
1892}
1893
1894static int hciops_start_scanning(int index)
1895{
1896	le_set_scan_parameters_cp cp;
1897
1898	memset(&cp, 0, sizeof(cp));
1899	cp.type = 0x01;			/* Active scanning */
1900	cp.interval = htobs(0x0010);
1901	cp.window = htobs(0x0010);
1902	cp.own_bdaddr_type = 0;		/* Public address */
1903	cp.filter = 0;			/* Accept all adv packets */
1904
1905	if (hci_send_cmd(SK(index), OGF_LE_CTL, OCF_LE_SET_SCAN_PARAMETERS,
1906				LE_SET_SCAN_PARAMETERS_CP_SIZE, &cp) < 0)
1907		return -errno;
1908
1909	return le_set_scan_enable(index, 1);
1910}
1911
1912static int hciops_stop_scanning(int index)
1913{
1914	return le_set_scan_enable(index, 0);
1915}
1916
1917static int hciops_resolve_name(int index, bdaddr_t *bdaddr)
1918{
1919	remote_name_req_cp cp;
1920
1921	memset(&cp, 0, sizeof(cp));
1922	bacpy(&cp.bdaddr, bdaddr);
1923	cp.pscan_rep_mode = 0x02;
1924
1925	if (hci_send_cmd(SK(index), OGF_LINK_CTL, OCF_REMOTE_NAME_REQ,
1926					REMOTE_NAME_REQ_CP_SIZE, &cp) < 0)
1927		return -errno;
1928
1929	return 0;
1930}
1931
1932static int hciops_set_name(int index, const char *name)
1933{
1934	change_local_name_cp cp;
1935
1936	memset(&cp, 0, sizeof(cp));
1937	strncpy((char *) cp.name, name, sizeof(cp.name));
1938
1939	if (hci_send_cmd(SK(index), OGF_HOST_CTL, OCF_CHANGE_LOCAL_NAME,
1940				CHANGE_LOCAL_NAME_CP_SIZE, &cp) < 0)
1941		return -errno;
1942
1943	return 0;
1944}
1945
1946static int hciops_read_name(int index)
1947{
1948	if (hci_send_cmd(SK(index), OGF_HOST_CTL, OCF_READ_LOCAL_NAME,
1949								0, 0) < 0)
1950		return -errno;
1951
1952	return 0;
1953}
1954
1955static int hciops_cancel_resolve_name(int index, bdaddr_t *bdaddr)
1956{
1957	remote_name_req_cancel_cp cp;
1958
1959	memset(&cp, 0, sizeof(cp));
1960	bacpy(&cp.bdaddr, bdaddr);
1961
1962	if (hci_send_cmd(SK(index), OGF_LINK_CTL, OCF_REMOTE_NAME_REQ_CANCEL,
1963				REMOTE_NAME_REQ_CANCEL_CP_SIZE, &cp) < 0)
1964		return -errno;
1965
1966	return 0;
1967}
1968
1969static int hciops_fast_connectable(int index, gboolean enable)
1970{
1971	write_page_activity_cp cp;
1972	uint8_t type;
1973
1974	if (enable) {
1975		type = PAGE_SCAN_TYPE_INTERLACED;
1976		cp.interval = 0x0024;	/* 22.5 msec page scan interval */
1977	} else {
1978		type = PAGE_SCAN_TYPE_STANDARD;	/* default */
1979		cp.interval = 0x0800;	/* default 1.28 sec page scan */
1980	}
1981
1982	cp.window = 0x0012;	/* default 11.25 msec page scan window */
1983
1984	if (hci_send_cmd(SK(index), OGF_HOST_CTL, OCF_WRITE_PAGE_ACTIVITY,
1985					WRITE_PAGE_ACTIVITY_CP_SIZE, &cp) < 0)
1986		return -errno;
1987	else if (hci_send_cmd(SK(index), OGF_HOST_CTL,
1988				OCF_WRITE_PAGE_SCAN_TYPE, 1, &type) < 0)
1989		return -errno;
1990
1991	return 0;
1992}
1993
1994static int hciops_read_clock(int index, int handle, int which, int timeout,
1995					uint32_t *clock, uint16_t *accuracy)
1996{
1997	if (hci_read_clock(SK(index), handle, which, clock, accuracy,
1998								timeout) < 0)
1999		return -errno;
2000
2001	return 0;
2002}
2003
2004static int hciops_conn_handle(int index, const bdaddr_t *bdaddr, int *handle)
2005{
2006	int err;
2007	struct hci_conn_info_req *cr;
2008
2009	cr = g_malloc0(sizeof(*cr) + sizeof(struct hci_conn_info));
2010	bacpy(&cr->bdaddr, bdaddr);
2011	cr->type = ACL_LINK;
2012
2013	if (ioctl(SK(index), HCIGETCONNINFO, (unsigned long) cr) < 0) {
2014		err = -errno;
2015		goto fail;
2016	}
2017
2018	err = 0;
2019	*handle = htobs(cr->conn_info->handle);
2020
2021fail:
2022	g_free(cr);
2023	return err;
2024}
2025
2026static int hciops_write_eir_data(int index, uint8_t *data)
2027{
2028	write_ext_inquiry_response_cp cp;
2029
2030	memset(&cp, 0, sizeof(cp));
2031	memcpy(cp.data, data, 240);
2032
2033	if (hci_send_cmd(SK(index), OGF_HOST_CTL,
2034				OCF_WRITE_EXT_INQUIRY_RESPONSE,
2035				WRITE_EXT_INQUIRY_RESPONSE_CP_SIZE, &cp) < 0)
2036		return -errno;
2037
2038	return 0;
2039}
2040
2041static int hciops_read_bdaddr(int index, bdaddr_t *bdaddr)
2042{
2043	bacpy(bdaddr, &BDADDR(index));
2044	return 0;
2045}
2046
2047static int hciops_set_event_mask(int index, uint8_t *events, size_t count)
2048{
2049	if (hci_send_cmd(SK(index), OGF_HOST_CTL, OCF_SET_EVENT_MASK,
2050							count, events) < 0)
2051		return -errno;
2052
2053	return 0;
2054}
2055
2056static int hciops_write_inq_mode(int index, uint8_t mode)
2057{
2058	write_inquiry_mode_cp cp;
2059
2060	memset(&cp, 0, sizeof(cp));
2061	cp.mode = mode;
2062
2063	if (hci_send_cmd(SK(index), OGF_HOST_CTL, OCF_WRITE_INQUIRY_MODE,
2064					WRITE_INQUIRY_MODE_CP_SIZE, &cp) < 0)
2065		return -errno;
2066
2067	return 0;
2068}
2069
2070static int hciops_read_inq_tx_pwr(int index)
2071{
2072	if (hci_send_cmd(SK(index), OGF_HOST_CTL,
2073			OCF_READ_INQ_RESPONSE_TX_POWER_LEVEL, 0, NULL) < 0)
2074		return -errno;
2075
2076	return 0;
2077}
2078
2079static int hciops_block_device(int index, bdaddr_t *bdaddr)
2080{
2081	if (ioctl(SK(index), HCIBLOCKADDR, bdaddr) < 0)
2082		return -errno;
2083
2084	return 0;
2085}
2086
2087static int hciops_unblock_device(int index, bdaddr_t *bdaddr)
2088{
2089	if (ioctl(SK(index), HCIUNBLOCKADDR, bdaddr) < 0)
2090		return -errno;
2091
2092	return 0;
2093}
2094
2095static int hciops_get_conn_list(int index, GSList **conns)
2096{
2097	struct hci_conn_list_req *cl;
2098	struct hci_conn_info *ci;
2099	int err, i;
2100
2101	cl = g_malloc0(10 * sizeof(*ci) + sizeof(*cl));
2102
2103	cl->dev_id = index;
2104	cl->conn_num = 10;
2105	ci = cl->conn_info;
2106
2107	if (ioctl(SK(index), HCIGETCONNLIST, cl) < 0) {
2108		err = -errno;
2109		goto fail;
2110	}
2111
2112	err = 0;
2113	*conns = NULL;
2114
2115	for (i = 0; i < cl->conn_num; i++, ci++)
2116		*conns = g_slist_append(*conns, g_memdup(ci, sizeof(*ci)));
2117
2118fail:
2119	g_free(cl);
2120	return err;
2121}
2122
2123static int hciops_read_local_version(int index, struct hci_version *ver)
2124{
2125	memcpy(ver, &VER(index), sizeof(*ver));
2126	return 0;
2127}
2128
2129static int hciops_read_local_features(int index, uint8_t *features)
2130{
2131	memcpy(features, FEATURES(index), 8);
2132	return  0;
2133}
2134
2135static int hciops_read_local_ext_features(int index)
2136{
2137	uint8_t page_num = 1;
2138
2139	if (hci_send_cmd(SK(index), OGF_INFO_PARAM,
2140				OCF_READ_LOCAL_EXT_FEATURES, 1, &page_num) < 0)
2141		return -errno;
2142
2143	return 0;
2144}
2145
2146static int hciops_init_ssp_mode(int index, uint8_t *mode)
2147{
2148	write_simple_pairing_mode_cp cp;
2149
2150	if (ioctl(SK(index), HCIGETAUTHINFO, NULL) < 0 && errno == EINVAL)
2151		return 0;
2152
2153	memset(&cp, 0, sizeof(cp));
2154	cp.mode = 0x01;
2155
2156	if (hci_send_cmd(SK(index), OGF_HOST_CTL,
2157				OCF_WRITE_SIMPLE_PAIRING_MODE,
2158				WRITE_SIMPLE_PAIRING_MODE_CP_SIZE, &cp) < 0)
2159		return -errno;
2160
2161	return 0;
2162}
2163
2164static int hciops_read_link_policy(int index)
2165{
2166	if (hci_send_cmd(SK(index), OGF_LINK_POLICY,
2167				OCF_READ_DEFAULT_LINK_POLICY, 0, NULL) < 0)
2168		return -errno;
2169
2170	return 0;
2171}
2172
2173static int hciops_disconnect(int index, uint16_t handle)
2174{
2175	disconnect_cp cp;
2176
2177	memset(&cp, 0, sizeof(cp));
2178	cp.handle = htobs(handle);
2179	cp.reason = HCI_OE_USER_ENDED_CONNECTION;
2180
2181	if (hci_send_cmd(SK(index), OGF_LINK_CTL, OCF_DISCONNECT,
2182						DISCONNECT_CP_SIZE, &cp) < 0)
2183		return -errno;
2184
2185	return 0;
2186}
2187
2188static int hciops_remove_bonding(int index, bdaddr_t *bdaddr)
2189{
2190	delete_stored_link_key_cp cp;
2191
2192	memset(&cp, 0, sizeof(cp));
2193	bacpy(&cp.bdaddr, bdaddr);
2194
2195	/* Delete the link key from the Bluetooth chip */
2196	if (hci_send_cmd(SK(index), OGF_HOST_CTL, OCF_DELETE_STORED_LINK_KEY,
2197				DELETE_STORED_LINK_KEY_CP_SIZE, &cp) < 0)
2198		return -errno;
2199
2200	return 0;
2201}
2202
2203static int hciops_request_authentication(int index, uint16_t handle,
2204							uint8_t *status)
2205{
2206	struct hci_request rq;
2207	auth_requested_cp cp;
2208	evt_cmd_status rp;
2209
2210	memset(&rp, 0, sizeof(rp));
2211
2212	memset(&cp, 0, sizeof(cp));
2213	cp.handle = htobs(handle);
2214
2215	memset(&rq, 0, sizeof(rq));
2216	rq.ogf    = OGF_LINK_CTL;
2217	rq.ocf    = OCF_AUTH_REQUESTED;
2218	rq.cparam = &cp;
2219	rq.clen   = AUTH_REQUESTED_CP_SIZE;
2220	rq.rparam = &rp;
2221	rq.rlen   = EVT_CMD_STATUS_SIZE;
2222	rq.event  = EVT_CMD_STATUS;
2223
2224	if (hci_send_req(SK(index), &rq, HCI_REQ_TIMEOUT) < 0)
2225		return -errno;
2226
2227	if (status)
2228		*status = rp.status;
2229
2230	return 0;
2231}
2232
2233static int hciops_pincode_reply(int index, bdaddr_t *bdaddr, const char *pin)
2234{
2235	int err;
2236
2237	if (pin) {
2238		pin_code_reply_cp pr;
2239		size_t len = strlen(pin);
2240
2241		PIN_LENGTH(index) = len;
2242
2243		memset(&pr, 0, sizeof(pr));
2244		bacpy(&pr.bdaddr, bdaddr);
2245		memcpy(pr.pin_code, pin, len);
2246		pr.pin_len = len;
2247		err = hci_send_cmd(SK(index), OGF_LINK_CTL,
2248						OCF_PIN_CODE_REPLY,
2249						PIN_CODE_REPLY_CP_SIZE, &pr);
2250	} else
2251		err = hci_send_cmd(SK(index), OGF_LINK_CTL,
2252					OCF_PIN_CODE_NEG_REPLY, 6, bdaddr);
2253
2254	if (err < 0)
2255		err = -errno;
2256
2257	return err;
2258}
2259
2260static int hciops_confirm_reply(int index, bdaddr_t *bdaddr, gboolean success)
2261{
2262	int err;
2263	user_confirm_reply_cp cp;
2264
2265	memset(&cp, 0, sizeof(cp));
2266	bacpy(&cp.bdaddr, bdaddr);
2267
2268	if (success)
2269		err = hci_send_cmd(SK(index), OGF_LINK_CTL,
2270					OCF_USER_CONFIRM_REPLY,
2271					USER_CONFIRM_REPLY_CP_SIZE, &cp);
2272	else
2273		err = hci_send_cmd(SK(index), OGF_LINK_CTL,
2274					OCF_USER_CONFIRM_NEG_REPLY,
2275					USER_CONFIRM_REPLY_CP_SIZE, &cp);
2276
2277	if (err < 0)
2278		err = -errno;
2279
2280	return err;
2281}
2282
2283static int hciops_passkey_reply(int index, bdaddr_t *bdaddr, uint32_t passkey)
2284{
2285	int err;
2286
2287	if (passkey != INVALID_PASSKEY) {
2288		user_passkey_reply_cp cp;
2289
2290		memset(&cp, 0, sizeof(cp));
2291		bacpy(&cp.bdaddr, bdaddr);
2292		cp.passkey = passkey;
2293
2294		err = hci_send_cmd(SK(index), OGF_LINK_CTL,
2295					OCF_USER_PASSKEY_REPLY,
2296					USER_PASSKEY_REPLY_CP_SIZE, &cp);
2297	} else
2298		err = hci_send_cmd(SK(index), OGF_LINK_CTL,
2299					OCF_USER_PASSKEY_NEG_REPLY, 6, bdaddr);
2300
2301	if (err < 0)
2302		err = -errno;
2303
2304	return err;
2305}
2306
2307static int hciops_get_auth_info(int index, bdaddr_t *bdaddr, uint8_t *auth)
2308{
2309	struct hci_auth_info_req req;
2310
2311	memset(&req, 0, sizeof(req));
2312	bacpy(&req.bdaddr, bdaddr);
2313
2314	if (ioctl(SK(index), HCIGETAUTHINFO, (unsigned long) &req) < 0)
2315		return -errno;
2316
2317	if (auth)
2318		*auth = req.type;
2319
2320	return 0;
2321}
2322
2323static int hciops_read_scan_enable(int index)
2324{
2325	if (hci_send_cmd(SK(index), OGF_HOST_CTL, OCF_READ_SCAN_ENABLE,
2326								0, NULL) < 0)
2327		return -errno;
2328
2329	return 0;
2330}
2331
2332static int hciops_read_ssp_mode(int index)
2333{
2334	if (hci_send_cmd(SK(index), OGF_HOST_CTL,
2335				OCF_READ_SIMPLE_PAIRING_MODE, 0, NULL) < 0)
2336		return -errno;
2337
2338	return 0;
2339}
2340
2341static int hciops_write_le_host(int index, uint8_t le, uint8_t simul)
2342{
2343	write_le_host_supported_cp cp;
2344
2345	memset(&cp, 0, sizeof(cp));
2346	cp.le = le;
2347	cp.simul = simul;
2348
2349	if (hci_send_cmd(SK(index), OGF_HOST_CTL,
2350				OCF_WRITE_LE_HOST_SUPPORTED,
2351				WRITE_LE_HOST_SUPPORTED_CP_SIZE, &cp) < 0)
2352		return -errno;
2353
2354	return 0;
2355}
2356
2357struct remote_version_req {
2358	int index;
2359	uint16_t handle;
2360};
2361
2362static gboolean get_remote_version(gpointer user_data)
2363{
2364	struct remote_version_req *req = user_data;
2365	read_remote_version_cp cp;
2366
2367	memset(&cp, 0, sizeof(cp));
2368	cp.handle = htobs(req->handle);
2369
2370	hci_send_cmd(SK(req->index), OGF_LINK_CTL, OCF_READ_REMOTE_VERSION,
2371					READ_REMOTE_VERSION_CP_SIZE, &cp);
2372
2373	return FALSE;
2374}
2375
2376static int hciops_get_remote_version(int index, uint16_t handle,
2377							gboolean delayed)
2378{
2379	struct remote_version_req *req;
2380
2381	req = g_new0(struct remote_version_req, 1);
2382	req->handle = handle;
2383	req->index = index;
2384
2385	if (!delayed) {
2386		get_remote_version(req);
2387		g_free(req);
2388		return 0;
2389	}
2390
2391	g_timeout_add_seconds_full(G_PRIORITY_DEFAULT, 1, get_remote_version,
2392								req, g_free);
2393
2394	return 0;
2395}
2396
2397static struct btd_adapter_ops hci_ops = {
2398	.setup = hciops_setup,
2399	.cleanup = hciops_cleanup,
2400	.start = hciops_start,
2401	.stop = hciops_stop,
2402	.set_powered = hciops_powered,
2403	.set_connectable = hciops_connectable,
2404	.set_discoverable = hciops_discoverable,
2405	.set_limited_discoverable = hciops_set_limited_discoverable,
2406	.start_inquiry = hciops_start_inquiry,
2407	.stop_inquiry = hciops_stop_inquiry,
2408	.start_scanning = hciops_start_scanning,
2409	.stop_scanning = hciops_stop_scanning,
2410	.resolve_name = hciops_resolve_name,
2411	.cancel_resolve_name = hciops_cancel_resolve_name,
2412	.set_name = hciops_set_name,
2413	.read_name = hciops_read_name,
2414	.set_class = hciops_set_class,
2415	.set_fast_connectable = hciops_fast_connectable,
2416	.read_clock = hciops_read_clock,
2417	.get_conn_handle = hciops_conn_handle,
2418	.write_eir_data = hciops_write_eir_data,
2419	.read_bdaddr = hciops_read_bdaddr,
2420	.set_event_mask = hciops_set_event_mask,
2421	.write_inq_mode = hciops_write_inq_mode,
2422	.read_inq_tx_pwr = hciops_read_inq_tx_pwr,
2423	.block_device = hciops_block_device,
2424	.unblock_device = hciops_unblock_device,
2425	.get_conn_list = hciops_get_conn_list,
2426	.read_local_version = hciops_read_local_version,
2427	.read_local_features = hciops_read_local_features,
2428	.read_local_ext_features = hciops_read_local_ext_features,
2429	.init_ssp_mode = hciops_init_ssp_mode,
2430	.read_link_policy = hciops_read_link_policy,
2431	.disconnect = hciops_disconnect,
2432	.remove_bonding = hciops_remove_bonding,
2433	.request_authentication = hciops_request_authentication,
2434	.pincode_reply = hciops_pincode_reply,
2435	.confirm_reply = hciops_confirm_reply,
2436	.passkey_reply = hciops_passkey_reply,
2437	.get_auth_info = hciops_get_auth_info,
2438	.read_scan_enable = hciops_read_scan_enable,
2439	.read_ssp_mode = hciops_read_ssp_mode,
2440	.write_le_host = hciops_write_le_host,
2441	.get_remote_version = hciops_get_remote_version,
2442	.encrypt_link = hciops_encrypt_link,
2443};
2444
2445static int hciops_init(void)
2446{
2447	return btd_register_adapter_ops(&hci_ops, FALSE);
2448}
2449
2450static void hciops_exit(void)
2451{
2452	btd_adapter_cleanup_ops(&hci_ops);
2453}
2454
2455BLUETOOTH_PLUGIN_DEFINE(hciops, VERSION,
2456		BLUETOOTH_PLUGIN_PRIORITY_LOW, hciops_init, hciops_exit)
2457