64
65
#define LENGTH_BR_INQ 0x08
65
66
#define LENGTH_BR_LE_INQ 0x04
67
static int hciops_start_scanning(int index, int timeout);
68
static int start_scanning(int index, int timeout);
69
70
static int child_pipe[2] = { -1, -1 };
154
168
GSList *connections;
156
173
guint stop_scan_id;
159
static inline int get_state(int index)
161
struct dev_info *dev = &devs[index];
163
return dev->discov_state;
166
static inline gboolean is_resolvname_enabled(void)
168
return main_opts.name_resolv ? TRUE : FALSE;
176
static int found_dev_rssi_cmp(gconstpointer a, gconstpointer b)
178
const struct found_dev *d1 = a, *d2 = b;
181
if (d2->name_state == NAME_NOT_NEEDED)
184
rssi1 = d1->rssi < 0 ? -d1->rssi : d1->rssi;
185
rssi2 = d2->rssi < 0 ? -d2->rssi : d2->rssi;
187
return rssi1 - rssi2;
190
static int found_dev_bda_cmp(gconstpointer a, gconstpointer b)
192
const struct found_dev *d1 = a, *d2 = b;
194
return bacmp(&d1->bdaddr, &d2->bdaddr);
197
static void found_dev_cleanup(struct dev_info *info)
199
g_slist_free_full(info->found_devs, g_free);
200
info->found_devs = NULL;
202
g_slist_free_full(info->need_name, g_free);
203
info->need_name = NULL;
206
static int resolve_name(struct dev_info *info, bdaddr_t *bdaddr)
208
remote_name_req_cp cp;
211
ba2str(bdaddr, addr);
212
DBG("hci%d dba %s", info->id, addr);
214
memset(&cp, 0, sizeof(cp));
215
bacpy(&cp.bdaddr, bdaddr);
216
cp.pscan_rep_mode = 0x02;
218
if (hci_send_cmd(info->sk, OGF_LINK_CTL, OCF_REMOTE_NAME_REQ,
219
REMOTE_NAME_REQ_CP_SIZE, &cp) < 0)
225
static int resolve_names(struct dev_info *info, struct btd_adapter *adapter)
227
struct found_dev *dev;
229
DBG("found_dev %u need_name %u", g_slist_length(info->found_devs),
230
g_slist_length(info->need_name));
232
if (g_slist_length(info->need_name) == 0)
235
dev = info->need_name->data;
236
resolve_name(info, &dev->bdaddr);
237
dev->name_state = NAME_PENDING;
171
242
static void set_state(int index, int state)
189
260
switch (dev->discov_state) {
190
261
case DISCOV_HALTED:
191
if (adapter_get_state(adapter) == STATE_SUSPENDED)
194
if (is_resolvname_enabled() &&
195
adapter_has_discov_sessions(adapter))
196
adapter_set_state(adapter, STATE_RESOLVNAME);
198
adapter_set_state(adapter, STATE_IDLE);
262
found_dev_cleanup(dev);
263
adapter_set_discovering(adapter, FALSE);
201
266
case DISCOV_SCAN:
202
adapter_set_state(adapter, STATE_DISCOV);
267
adapter_set_discovering(adapter, TRUE);
270
if (resolve_names(dev, adapter) < 0)
271
set_state(index, DISCOV_HALTED);
833
904
conn->bonding_initiator = FALSE;
835
btd_event_bonding_complete(&dev->bdaddr, &conn->bdaddr, status);
906
adapter = manager_find_adapter(&dev->bdaddr);
908
adapter_bonding_complete(adapter, &conn->bdaddr, status);
838
911
static int get_auth_info(int index, bdaddr_t *bdaddr, uint8_t *auth)
1372
1445
write_features_info(&dev->bdaddr, &evt->bdaddr, NULL, evt->features);
1375
static void write_le_host_complete(int index, uint8_t status)
1377
struct dev_info *dev = &devs[index];
1378
uint8_t page_num = 0x01;
1383
if (hci_send_cmd(dev->sk, OGF_INFO_PARAM,
1384
OCF_READ_LOCAL_EXT_FEATURES, 1, &page_num) < 0)
1385
error("Unable to read extended local features: %s (%d)",
1386
strerror(errno), errno);
1389
1448
static void read_local_version_complete(int index,
1390
1449
const read_local_version_rp *rp)
1472
1531
adapter = manager_find_adapter_by_id(index);
1474
adapter_update_local_name(adapter, name);
1533
adapter_name_changed(adapter, name);
1476
1535
update_ext_inquiry_response(index);
1497
1556
DBG("Got name for hci%d", index);
1499
/* Even though it shouldn't happen (assuming the kernel behaves
1500
* properly) it seems like we might miss the very first
1501
* initialization commands that the kernel sends. So check for
1502
* it here (since read_local_name is one of the last init
1503
* commands) and resend the first ones if we haven't seen
1504
* their results yet */
1506
if (hci_test_bit(PENDING_FEATURES, &dev->pending))
1507
hci_send_cmd(dev->sk, OGF_INFO_PARAM,
1508
OCF_READ_LOCAL_FEATURES, 0, NULL);
1510
if (hci_test_bit(PENDING_VERSION, &dev->pending))
1511
hci_send_cmd(dev->sk, OGF_INFO_PARAM,
1512
OCF_READ_LOCAL_VERSION, 0, NULL);
1514
1558
if (!dev->pending && dev->up)
1515
1559
init_adapter(index);
1739
1783
adapter_type = get_adapter_type(index);
1741
1785
if (adapter_type == BR_EDR_LE &&
1742
adapter_has_discov_sessions(adapter)) {
1743
int err = hciops_start_scanning(index, TIMEOUT_BR_LE_SCAN);
1745
set_state(index, DISCOV_HALTED);
1747
set_state(index, DISCOV_HALTED);
1786
start_scanning(index, TIMEOUT_BR_LE_SCAN) == 0)
1789
set_state(index, DISCOV_NAMES);
1751
1792
static inline void cc_inquiry_cancel(int index, uint8_t status)
1761
1802
static inline void cc_le_set_scan_enable(int index, uint8_t status)
1804
struct dev_info *info = &devs[index];
1766
1807
error("LE Set Scan Enable Failed with status 0x%02x", status);
1770
state = get_state(index);
1771
if (state == DISCOV_SCAN)
1811
if (info->discov_state == DISCOV_SCAN)
1772
1812
set_state(index, DISCOV_HALTED);
1774
1814
set_state(index, DISCOV_SCAN);
1801
1841
case cmd_opcode_pack(OGF_LINK_CTL, OCF_INQUIRY_CANCEL):
1802
1842
cc_inquiry_cancel(index, status);
1804
case cmd_opcode_pack(OGF_HOST_CTL, OCF_WRITE_LE_HOST_SUPPORTED):
1805
write_le_host_complete(index, status);
1807
1844
case cmd_opcode_pack(OGF_LE_CTL, OCF_LE_SET_SCAN_ENABLE):
1808
1845
cc_le_set_scan_enable(index, status);
1853
1890
struct dev_info *dev = &devs[index];
1854
1891
evt_remote_name_req_complete *evt = ptr;
1892
struct btd_adapter *adapter;
1855
1893
char name[MAX_NAME_LENGTH + 1];
1894
struct found_dev *found;
1857
1898
DBG("hci%d status %u", index, evt->status);
1859
1900
memset(name, 0, sizeof(name));
1902
if (evt->status == 0) {
1862
1903
memcpy(name, evt->name, MAX_NAME_LENGTH);
1864
btd_event_remote_name(&dev->bdaddr, &evt->bdaddr, evt->status, name);
1904
btd_event_remote_name(&dev->bdaddr, &evt->bdaddr, name);
1907
adapter = manager_find_adapter_by_id(index);
1909
error("No matching adapter found");
1913
match = g_slist_find_custom(dev->need_name, &evt->bdaddr,
1918
found = match->data;
1919
found->name_state = NAME_NOT_NEEDED;
1921
dev->need_name = g_slist_remove_link(dev->need_name, match);
1923
match->next = dev->found_devs;
1924
dev->found_devs = match;
1925
dev->found_devs = g_slist_sort(dev->found_devs, found_dev_rssi_cmp);
1927
if (resolve_names(dev, adapter) < 0)
1928
set_state(index, DISCOV_HALTED);
1867
1931
static inline void remote_version_information(int index, void *ptr)
1884
1948
btohs(evt->lmp_subver));
1951
static void dev_found(struct dev_info *info, bdaddr_t *dba, addr_type_t type,
1952
uint32_t cod, int8_t rssi, uint8_t cfm_name,
1953
uint8_t *eir, uint8_t eir_len)
1955
struct found_dev *dev;
1958
match = g_slist_find_custom(info->found_devs, dba, found_dev_bda_cmp);
1959
if (match != NULL) {
1964
dev = g_new0(struct found_dev, 1);
1965
bacpy(&dev->bdaddr, dba);
1968
dev->name_state = NAME_UNKNOWN;
1970
dev->name_state = NAME_NOT_NEEDED;
1972
info->found_devs = g_slist_prepend(info->found_devs, dev);
1975
btd_event_device_found(&info->bdaddr, dba, type, cod, rssi, cfm_name,
1887
1979
static inline void inquiry_result(int index, int plen, void *ptr)
1889
1981
struct dev_info *dev = &devs[index];
1890
1982
uint8_t num = *(uint8_t *) ptr++;
1893
/* Skip if it is not in Inquiry state */
1894
if (get_state(index) != DISCOV_INQ)
1897
1985
for (i = 0; i < num; i++) {
1898
1986
inquiry_info *info = ptr;
1899
1987
uint32_t class = info->dev_class[0] |
1900
1988
(info->dev_class[1] << 8) |
1901
1989
(info->dev_class[2] << 16);
1903
btd_event_device_found(&dev->bdaddr, &info->bdaddr, class,
1991
dev_found(dev, &info->bdaddr, ADDR_TYPE_BREDR, class, 0, 1,
1905
1993
ptr += INQUIRY_INFO_SIZE;
1922
2010
| (info->dev_class[1] << 8)
1923
2011
| (info->dev_class[2] << 16);
1925
btd_event_device_found(&dev->bdaddr, &info->bdaddr,
1926
class, info->rssi, NULL);
2013
dev_found(dev, &info->bdaddr, ADDR_TYPE_BREDR, class,
2014
info->rssi, 1, NULL, 0);
1927
2015
ptr += INQUIRY_INFO_WITH_RSSI_AND_PSCAN_MODE_SIZE;
1933
2021
| (info->dev_class[1] << 8)
1934
2022
| (info->dev_class[2] << 16);
1936
btd_event_device_found(&dev->bdaddr, &info->bdaddr,
1937
class, info->rssi, NULL);
2024
dev_found(dev, &info->bdaddr, ADDR_TYPE_BREDR, class,
2025
info->rssi, 1, NULL, 0);
1938
2026
ptr += INQUIRY_INFO_WITH_RSSI_SIZE;
1951
2039
uint32_t class = info->dev_class[0]
1952
2040
| (info->dev_class[1] << 8)
1953
2041
| (info->dev_class[2] << 16);
1955
btd_event_device_found(&dev->bdaddr, &info->bdaddr, class,
1956
info->rssi, info->data);
2044
if (eir_has_complete_name(info->data, sizeof(info->data)))
2049
dev_found(dev, &info->bdaddr, ADDR_TYPE_BREDR, class,
2050
info->rssi, cfm_name,
2051
info->data, sizeof(info->data));
1957
2052
ptr += EXTENDED_INQUIRY_INFO_SIZE;
2168
2263
btd_event_remote_class(&dev->bdaddr, &evt->bdaddr, class);
2266
static inline addr_type_t le_addr_type(uint8_t bdaddr_type)
2268
switch (bdaddr_type) {
2269
case LE_RANDOM_ADDRESS:
2270
return ADDR_TYPE_LE_RANDOM;
2271
case LE_PUBLIC_ADDRESS:
2273
return ADDR_TYPE_LE_PUBLIC;
2171
2277
static inline void le_advertising_report(int index, evt_le_meta_event *meta)
2173
2279
struct dev_info *dev = &devs[index];
2174
2280
le_advertising_info *info;
2175
uint8_t num_reports, rssi, eir[HCI_MAX_EIR_LENGTH];
2281
uint8_t num_reports, rssi;
2176
2282
const uint8_t RSSI_SIZE = 1;
2178
2284
num_reports = meta->data[0];
2180
2286
info = (le_advertising_info *) &meta->data[1];
2181
2287
rssi = *(info->data + info->length);
2183
memset(eir, 0, sizeof(eir));
2184
memcpy(eir, info->data, info->length);
2186
btd_event_device_found(&dev->bdaddr, &info->bdaddr, 0, rssi, eir);
2289
dev_found(dev, &info->bdaddr, le_addr_type(info->bdaddr_type), 0, rssi,
2290
0, info->data, info->length);
2193
2297
rssi = *(info->data + info->length);
2195
memset(eir, 0, sizeof(eir));
2196
memcpy(eir, info->data, info->length);
2198
btd_event_device_found(&dev->bdaddr, &info->bdaddr, 0, rssi,
2299
dev_found(dev, &info->bdaddr, le_addr_type(info->bdaddr_type),
2300
0, rssi, 0, info->data, info->length);
2498
2599
bacpy(&dev->bdaddr, &di.bdaddr);
2499
2600
memcpy(dev->features, di.features, 8);
2602
if (dev->features[7] & LMP_EXT_FEAT) {
2603
uint8_t page_num = 0x01;
2605
hci_send_cmd(dev->sk, OGF_INFO_PARAM,
2606
OCF_READ_LOCAL_EXT_FEATURES, 1, &page_num);
2501
2609
/* Set page timeout */
2502
2610
if ((main_opts.flags & (1 << HCID_SET_PAGETO))) {
2503
2611
write_page_timeout_cp cp;
2512
2620
hci_send_cmd(dev->sk, OGF_HOST_CTL, OCF_READ_STORED_LINK_KEY,
2513
2621
READ_STORED_LINK_KEY_CP_SIZE, &cp);
2623
if (!dev->pending) {
2516
2624
init_adapter(index);
2628
/* Even though it shouldn't happen (assuming the kernel behaves
2629
* properly) it seems like we might miss the very first
2630
* initialization commands that the kernel sends. So check for
2631
* it here and resend the ones we haven't seen their results yet */
2633
if (hci_test_bit(PENDING_FEATURES, &dev->pending))
2634
hci_send_cmd(dev->sk, OGF_INFO_PARAM,
2635
OCF_READ_LOCAL_FEATURES, 0, NULL);
2637
if (hci_test_bit(PENDING_VERSION, &dev->pending))
2638
hci_send_cmd(dev->sk, OGF_INFO_PARAM,
2639
OCF_READ_LOCAL_VERSION, 0, NULL);
2641
if (hci_test_bit(PENDING_NAME, &dev->pending))
2642
hci_send_cmd(dev->sk, OGF_HOST_CTL,
2643
OCF_READ_LOCAL_NAME, 0, 0);
2645
if (hci_test_bit(PENDING_BDADDR, &dev->pending))
2646
hci_send_cmd(dev->sk, OGF_INFO_PARAM,
2647
OCF_READ_BD_ADDR, 0, NULL);
2519
2650
static void init_pending(int index)
2654
2785
devs[index].up = FALSE;
2655
2786
devs[index].pending_cod = 0;
2656
2787
devs[index].cache_enable = TRUE;
2788
devs[index].discov_state = DISCOV_HALTED;
2657
2789
if (!devs[index].pending) {
2658
2790
struct btd_adapter *adapter;
2918
static int hciops_start_inquiry(int index, uint8_t length)
3050
static int start_inquiry(int index, uint8_t length)
2920
3052
struct dev_info *dev = &devs[index];
2921
3053
uint8_t lap[3] = { 0x33, 0x8b, 0x9e };
2970
static int hciops_start_scanning(int index, int timeout)
3102
static int start_scanning(int index, int timeout)
2972
3104
struct dev_info *dev = &devs[index];
2973
3105
le_set_scan_parameters_cp cp;
3012
3144
return le_set_scan_enable(index, 0);
3015
static int hciops_resolve_name(int index, bdaddr_t *bdaddr)
3017
struct dev_info *dev = &devs[index];
3018
remote_name_req_cp cp;
3021
ba2str(bdaddr, addr);
3022
DBG("hci%d dba %s", index, addr);
3024
memset(&cp, 0, sizeof(cp));
3025
bacpy(&cp.bdaddr, bdaddr);
3026
cp.pscan_rep_mode = 0x02;
3028
if (hci_send_cmd(dev->sk, OGF_LINK_CTL, OCF_REMOTE_NAME_REQ,
3029
REMOTE_NAME_REQ_CP_SIZE, &cp) < 0)
3035
3147
static int hciops_set_name(int index, const char *name)
3037
3149
struct dev_info *dev = &devs[index];
3055
static int hciops_cancel_resolve_name(int index, bdaddr_t *bdaddr)
3167
static int cancel_resolve_name(int index)
3057
struct dev_info *dev = &devs[index];
3169
struct dev_info *info = &devs[index];
3170
struct found_dev *dev;
3058
3171
remote_name_req_cancel_cp cp;
3061
ba2str(bdaddr, addr);
3062
DBG("hci%d dba %s", index, addr);
3172
struct btd_adapter *adapter;
3174
DBG("hci%d", index);
3176
if (g_slist_length(info->need_name) == 0)
3179
dev = info->need_name->data;
3180
if (dev->name_state != NAME_PENDING)
3064
3183
memset(&cp, 0, sizeof(cp));
3065
bacpy(&cp.bdaddr, bdaddr);
3067
if (hci_send_cmd(dev->sk, OGF_LINK_CTL, OCF_REMOTE_NAME_REQ_CANCEL,
3184
bacpy(&cp.bdaddr, &dev->bdaddr);
3186
adapter = manager_find_adapter_by_id(index);
3188
adapter_set_discovering(adapter, FALSE);
3190
found_dev_cleanup(info);
3192
if (hci_send_cmd(info->sk, OGF_LINK_CTL, OCF_REMOTE_NAME_REQ_CANCEL,
3068
3193
REMOTE_NAME_REQ_CANCEL_CP_SIZE, &cp) < 0)
3076
3201
int adapter_type = get_adapter_type(index);
3203
DBG("hci%u", index);
3078
3205
switch (adapter_type) {
3079
3206
case BR_EDR_LE:
3080
return hciops_start_inquiry(index, LENGTH_BR_LE_INQ);
3207
return start_inquiry(index, LENGTH_BR_LE_INQ);
3082
return hciops_start_inquiry(index, LENGTH_BR_INQ);
3209
return start_inquiry(index, LENGTH_BR_INQ);
3084
return hciops_start_scanning(index, TIMEOUT_LE_SCAN);
3211
return start_scanning(index, TIMEOUT_LE_SCAN);
3086
3213
return -EINVAL;
3098
3225
return hciops_stop_inquiry(index);
3099
3226
case DISCOV_SCAN:
3100
3227
return hciops_stop_scanning(index);
3229
cancel_resolve_name(index);
3102
3231
return -EINVAL;
3106
static int hciops_fast_connectable(int index, gboolean enable)
3235
static int hciops_set_fast_connectable(int index, gboolean enable)
3108
3237
struct dev_info *dev = &devs[index];
3109
3238
write_page_activity_cp cp;
3310
static int hciops_enable_le(int index)
3312
struct dev_info *dev = &devs[index];
3313
write_le_host_supported_cp cp;
3315
DBG("hci%d", index);
3317
if (!(dev->features[4] & LMP_LE))
3321
cp.simul = (dev->features[6] & LMP_LE_BREDR) ? 0x01 : 0x00;
3323
if (hci_send_cmd(dev->sk, OGF_HOST_CTL,
3324
OCF_WRITE_LE_HOST_SUPPORTED,
3325
WRITE_LE_HOST_SUPPORTED_CP_SIZE, &cp) < 0)
3331
3439
static uint8_t generate_service_class(int index)
3333
3441
struct dev_info *dev = &devs[index];
3598
3706
ba2str(bdaddr, addr);
3599
3707
DBG("hci%d bdaddr %s", index, addr);
3601
match = g_slist_find_custom(dev->oob_data, &bdaddr, oob_bdaddr_cmp);
3709
match = g_slist_find_custom(dev->oob_data, bdaddr, oob_bdaddr_cmp);
3604
3712
data = match->data;
3623
3731
ba2str(bdaddr, addr);
3624
3732
DBG("hci%d bdaddr %s", index, addr);
3626
match = g_slist_find_custom(dev->oob_data, &bdaddr, oob_bdaddr_cmp);
3734
match = g_slist_find_custom(dev->oob_data, bdaddr, oob_bdaddr_cmp);
3629
3737
return -ENOENT;
3745
static int hciops_confirm_name(int index, bdaddr_t *bdaddr,
3746
gboolean name_known)
3748
struct dev_info *info = &devs[index];
3749
struct found_dev *dev;
3753
ba2str(bdaddr, addr);
3754
DBG("hci%u %s name_known %u", index, addr, name_known);
3756
match = g_slist_find_custom(info->found_devs, bdaddr,
3764
dev->name_state = NAME_NOT_NEEDED;
3765
info->found_devs = g_slist_sort(info->found_devs,
3766
found_dev_rssi_cmp);
3770
dev->name_state = NAME_NEEDED;
3771
info->found_devs = g_slist_remove_link(info->found_devs, match);
3773
match->next = info->need_name;
3774
info->need_name = match;
3775
info->need_name = g_slist_sort(info->need_name, found_dev_rssi_cmp);
3637
3780
static struct btd_adapter_ops hci_ops = {
3638
3781
.setup = hciops_setup,
3639
3782
.cleanup = hciops_cleanup,
3643
3786
.set_limited_discoverable = hciops_set_limited_discoverable,
3644
3787
.start_discovery = hciops_start_discovery,
3645
3788
.stop_discovery = hciops_stop_discovery,
3646
.resolve_name = hciops_resolve_name,
3647
.cancel_resolve_name = hciops_cancel_resolve_name,
3648
3789
.set_name = hciops_set_name,
3649
3790
.set_dev_class = hciops_set_dev_class,
3650
.set_fast_connectable = hciops_fast_connectable,
3791
.set_fast_connectable = hciops_set_fast_connectable,
3651
3792
.read_clock = hciops_read_clock,
3652
3793
.read_bdaddr = hciops_read_bdaddr,
3653
3794
.block_device = hciops_block_device,
3658
3799
.pincode_reply = hciops_pincode_reply,
3659
3800
.confirm_reply = hciops_confirm_reply,
3660
3801
.passkey_reply = hciops_passkey_reply,
3661
.enable_le = hciops_enable_le,
3662
3802
.encrypt_link = hciops_encrypt_link,
3663
3803
.set_did = hciops_set_did,
3664
3804
.add_uuid = hciops_add_uuid,
3672
3812
.read_local_oob_data = hciops_read_local_oob_data,
3673
3813
.add_remote_oob_data = hciops_add_remote_oob_data,
3674
3814
.remove_remote_oob_data = hciops_remove_remote_oob_data,
3815
.confirm_name = hciops_confirm_name,
3677
3818
static int hciops_init(void)