diff options
| -rw-r--r-- | include/net/bluetooth/bluetooth.h | 5 | ||||
| -rw-r--r-- | include/net/bluetooth/hci_core.h | 16 | ||||
| -rw-r--r-- | net/bluetooth/mgmt.c | 30 |
3 files changed, 26 insertions, 25 deletions
diff --git a/include/net/bluetooth/bluetooth.h b/include/net/bluetooth/bluetooth.h index d0e44a4151e6..27a6a936487d 100644 --- a/include/net/bluetooth/bluetooth.h +++ b/include/net/bluetooth/bluetooth.h | |||
| @@ -163,6 +163,11 @@ typedef struct { | |||
| 163 | __u8 b[6]; | 163 | __u8 b[6]; |
| 164 | } __packed bdaddr_t; | 164 | } __packed bdaddr_t; |
| 165 | 165 | ||
| 166 | /* BD Address type */ | ||
| 167 | #define BDADDR_BREDR 0x00 | ||
| 168 | #define BDADDR_LE_PUBLIC 0x01 | ||
| 169 | #define BDADDR_LE_RANDOM 0x02 | ||
| 170 | |||
| 166 | #define BDADDR_ANY (&(bdaddr_t) {{0, 0, 0, 0, 0, 0}}) | 171 | #define BDADDR_ANY (&(bdaddr_t) {{0, 0, 0, 0, 0, 0}}) |
| 167 | #define BDADDR_LOCAL (&(bdaddr_t) {{0, 0, 0, 0xff, 0xff, 0xff}}) | 172 | #define BDADDR_LOCAL (&(bdaddr_t) {{0, 0, 0, 0xff, 0xff, 0xff}}) |
| 168 | 173 | ||
diff --git a/include/net/bluetooth/hci_core.h b/include/net/bluetooth/hci_core.h index ef6e6541aa2a..6777432ca61e 100644 --- a/include/net/bluetooth/hci_core.h +++ b/include/net/bluetooth/hci_core.h | |||
| @@ -963,16 +963,12 @@ void hci_send_to_monitor(struct hci_dev *hdev, struct sk_buff *skb); | |||
| 963 | void hci_sock_dev_event(struct hci_dev *hdev, int event); | 963 | void hci_sock_dev_event(struct hci_dev *hdev, int event); |
| 964 | 964 | ||
| 965 | /* Management interface */ | 965 | /* Management interface */ |
| 966 | #define MGMT_ADDR_BREDR 0x00 | 966 | #define DISCOV_TYPE_BREDR (BIT(BDADDR_BREDR)) |
| 967 | #define MGMT_ADDR_LE_PUBLIC 0x01 | 967 | #define DISCOV_TYPE_LE (BIT(BDADDR_LE_PUBLIC) | \ |
| 968 | #define MGMT_ADDR_LE_RANDOM 0x02 | 968 | BIT(BDADDR_LE_RANDOM)) |
| 969 | 969 | #define DISCOV_TYPE_INTERLEAVED (BIT(BDADDR_BREDR) | \ | |
| 970 | #define DISCOV_TYPE_BREDR (BIT(MGMT_ADDR_BREDR)) | 970 | BIT(BDADDR_LE_PUBLIC) | \ |
| 971 | #define DISCOV_TYPE_LE (BIT(MGMT_ADDR_LE_PUBLIC) | \ | 971 | BIT(BDADDR_LE_RANDOM)) |
| 972 | BIT(MGMT_ADDR_LE_RANDOM)) | ||
| 973 | #define DISCOV_TYPE_INTERLEAVED (BIT(MGMT_ADDR_BREDR) | \ | ||
| 974 | BIT(MGMT_ADDR_LE_PUBLIC) | \ | ||
| 975 | BIT(MGMT_ADDR_LE_RANDOM)) | ||
| 976 | 972 | ||
| 977 | int mgmt_control(struct sock *sk, struct msghdr *msg, size_t len); | 973 | int mgmt_control(struct sock *sk, struct msghdr *msg, size_t len); |
| 978 | int mgmt_index_added(struct hci_dev *hdev); | 974 | int mgmt_index_added(struct hci_dev *hdev); |
diff --git a/net/bluetooth/mgmt.c b/net/bluetooth/mgmt.c index 7d37c88e4bf5..d064ca9fa006 100644 --- a/net/bluetooth/mgmt.c +++ b/net/bluetooth/mgmt.c | |||
| @@ -1524,7 +1524,7 @@ static int unpair_device(struct sock *sk, struct hci_dev *hdev, void *data, | |||
| 1524 | goto unlock; | 1524 | goto unlock; |
| 1525 | } | 1525 | } |
| 1526 | 1526 | ||
| 1527 | if (cp->addr.type == MGMT_ADDR_BREDR) | 1527 | if (cp->addr.type == BDADDR_BREDR) |
| 1528 | err = hci_remove_link_key(hdev, &cp->addr.bdaddr); | 1528 | err = hci_remove_link_key(hdev, &cp->addr.bdaddr); |
| 1529 | else | 1529 | else |
| 1530 | err = hci_remove_ltk(hdev, &cp->addr.bdaddr); | 1530 | err = hci_remove_ltk(hdev, &cp->addr.bdaddr); |
| @@ -1536,7 +1536,7 @@ static int unpair_device(struct sock *sk, struct hci_dev *hdev, void *data, | |||
| 1536 | } | 1536 | } |
| 1537 | 1537 | ||
| 1538 | if (cp->disconnect) { | 1538 | if (cp->disconnect) { |
| 1539 | if (cp->addr.type == MGMT_ADDR_BREDR) | 1539 | if (cp->addr.type == BDADDR_BREDR) |
| 1540 | conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, | 1540 | conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, |
| 1541 | &cp->addr.bdaddr); | 1541 | &cp->addr.bdaddr); |
| 1542 | else | 1542 | else |
| @@ -1596,7 +1596,7 @@ static int disconnect(struct sock *sk, struct hci_dev *hdev, void *data, | |||
| 1596 | goto failed; | 1596 | goto failed; |
| 1597 | } | 1597 | } |
| 1598 | 1598 | ||
| 1599 | if (cp->addr.type == MGMT_ADDR_BREDR) | 1599 | if (cp->addr.type == BDADDR_BREDR) |
| 1600 | conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &cp->addr.bdaddr); | 1600 | conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &cp->addr.bdaddr); |
| 1601 | else | 1601 | else |
| 1602 | conn = hci_conn_hash_lookup_ba(hdev, LE_LINK, &cp->addr.bdaddr); | 1602 | conn = hci_conn_hash_lookup_ba(hdev, LE_LINK, &cp->addr.bdaddr); |
| @@ -1631,23 +1631,23 @@ static u8 link_to_mgmt(u8 link_type, u8 addr_type) | |||
| 1631 | case LE_LINK: | 1631 | case LE_LINK: |
| 1632 | switch (addr_type) { | 1632 | switch (addr_type) { |
| 1633 | case ADDR_LE_DEV_PUBLIC: | 1633 | case ADDR_LE_DEV_PUBLIC: |
| 1634 | return MGMT_ADDR_LE_PUBLIC; | 1634 | return BDADDR_LE_PUBLIC; |
| 1635 | 1635 | ||
| 1636 | default: | 1636 | default: |
| 1637 | /* Fallback to LE Random address type */ | 1637 | /* Fallback to LE Random address type */ |
| 1638 | return MGMT_ADDR_LE_RANDOM; | 1638 | return BDADDR_LE_RANDOM; |
| 1639 | } | 1639 | } |
| 1640 | 1640 | ||
| 1641 | default: | 1641 | default: |
| 1642 | /* Fallback to BR/EDR type */ | 1642 | /* Fallback to BR/EDR type */ |
| 1643 | return MGMT_ADDR_BREDR; | 1643 | return BDADDR_BREDR; |
| 1644 | } | 1644 | } |
| 1645 | } | 1645 | } |
| 1646 | 1646 | ||
| 1647 | static u8 mgmt_to_le(u8 mgmt_type) | 1647 | static u8 mgmt_to_le(u8 mgmt_type) |
| 1648 | { | 1648 | { |
| 1649 | switch (mgmt_type) { | 1649 | switch (mgmt_type) { |
| 1650 | case MGMT_ADDR_LE_PUBLIC: | 1650 | case BDADDR_LE_PUBLIC: |
| 1651 | return ADDR_LE_DEV_PUBLIC; | 1651 | return ADDR_LE_DEV_PUBLIC; |
| 1652 | 1652 | ||
| 1653 | default: | 1653 | default: |
| @@ -1914,7 +1914,7 @@ static int pair_device(struct sock *sk, struct hci_dev *hdev, void *data, | |||
| 1914 | else | 1914 | else |
| 1915 | auth_type = HCI_AT_DEDICATED_BONDING_MITM; | 1915 | auth_type = HCI_AT_DEDICATED_BONDING_MITM; |
| 1916 | 1916 | ||
| 1917 | if (cp->addr.type == MGMT_ADDR_BREDR) | 1917 | if (cp->addr.type == BDADDR_BREDR) |
| 1918 | conn = hci_connect(hdev, ACL_LINK, &cp->addr.bdaddr, sec_level, | 1918 | conn = hci_connect(hdev, ACL_LINK, &cp->addr.bdaddr, sec_level, |
| 1919 | auth_type); | 1919 | auth_type); |
| 1920 | else | 1920 | else |
| @@ -1947,7 +1947,7 @@ static int pair_device(struct sock *sk, struct hci_dev *hdev, void *data, | |||
| 1947 | } | 1947 | } |
| 1948 | 1948 | ||
| 1949 | /* For LE, just connecting isn't a proof that the pairing finished */ | 1949 | /* For LE, just connecting isn't a proof that the pairing finished */ |
| 1950 | if (cp->addr.type == MGMT_ADDR_BREDR) | 1950 | if (cp->addr.type == BDADDR_BREDR) |
| 1951 | conn->connect_cfm_cb = pairing_complete_cb; | 1951 | conn->connect_cfm_cb = pairing_complete_cb; |
| 1952 | 1952 | ||
| 1953 | conn->security_cfm_cb = pairing_complete_cb; | 1953 | conn->security_cfm_cb = pairing_complete_cb; |
| @@ -2024,7 +2024,7 @@ static int user_pairing_resp(struct sock *sk, struct hci_dev *hdev, | |||
| 2024 | goto done; | 2024 | goto done; |
| 2025 | } | 2025 | } |
| 2026 | 2026 | ||
| 2027 | if (type == MGMT_ADDR_BREDR) | 2027 | if (type == BDADDR_BREDR) |
| 2028 | conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, bdaddr); | 2028 | conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, bdaddr); |
| 2029 | else | 2029 | else |
| 2030 | conn = hci_conn_hash_lookup_ba(hdev, LE_LINK, bdaddr); | 2030 | conn = hci_conn_hash_lookup_ba(hdev, LE_LINK, bdaddr); |
| @@ -2035,7 +2035,7 @@ static int user_pairing_resp(struct sock *sk, struct hci_dev *hdev, | |||
| 2035 | goto done; | 2035 | goto done; |
| 2036 | } | 2036 | } |
| 2037 | 2037 | ||
| 2038 | if (type == MGMT_ADDR_LE_PUBLIC || type == MGMT_ADDR_LE_RANDOM) { | 2038 | if (type == BDADDR_LE_PUBLIC || type == BDADDR_LE_RANDOM) { |
| 2039 | /* Continue with pairing via SMP */ | 2039 | /* Continue with pairing via SMP */ |
| 2040 | err = smp_user_confirm_reply(conn, mgmt_op, passkey); | 2040 | err = smp_user_confirm_reply(conn, mgmt_op, passkey); |
| 2041 | 2041 | ||
| @@ -2967,7 +2967,7 @@ int mgmt_new_link_key(struct hci_dev *hdev, struct link_key *key, bool persisten | |||
| 2967 | 2967 | ||
| 2968 | ev.store_hint = persistent; | 2968 | ev.store_hint = persistent; |
| 2969 | bacpy(&ev.key.addr.bdaddr, &key->bdaddr); | 2969 | bacpy(&ev.key.addr.bdaddr, &key->bdaddr); |
| 2970 | ev.key.addr.type = MGMT_ADDR_BREDR; | 2970 | ev.key.addr.type = BDADDR_BREDR; |
| 2971 | ev.key.type = key->type; | 2971 | ev.key.type = key->type; |
| 2972 | memcpy(ev.key.val, key->val, 16); | 2972 | memcpy(ev.key.val, key->val, 16); |
| 2973 | ev.key.pin_len = key->pin_len; | 2973 | ev.key.pin_len = key->pin_len; |
| @@ -3125,7 +3125,7 @@ int mgmt_pin_code_request(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 secure) | |||
| 3125 | struct mgmt_ev_pin_code_request ev; | 3125 | struct mgmt_ev_pin_code_request ev; |
| 3126 | 3126 | ||
| 3127 | bacpy(&ev.addr.bdaddr, bdaddr); | 3127 | bacpy(&ev.addr.bdaddr, bdaddr); |
| 3128 | ev.addr.type = MGMT_ADDR_BREDR; | 3128 | ev.addr.type = BDADDR_BREDR; |
| 3129 | ev.secure = secure; | 3129 | ev.secure = secure; |
| 3130 | 3130 | ||
| 3131 | return mgmt_event(MGMT_EV_PIN_CODE_REQUEST, hdev, &ev, sizeof(ev), | 3131 | return mgmt_event(MGMT_EV_PIN_CODE_REQUEST, hdev, &ev, sizeof(ev), |
| @@ -3144,7 +3144,7 @@ int mgmt_pin_code_reply_complete(struct hci_dev *hdev, bdaddr_t *bdaddr, | |||
| 3144 | return -ENOENT; | 3144 | return -ENOENT; |
| 3145 | 3145 | ||
| 3146 | bacpy(&rp.addr.bdaddr, bdaddr); | 3146 | bacpy(&rp.addr.bdaddr, bdaddr); |
| 3147 | rp.addr.type = MGMT_ADDR_BREDR; | 3147 | rp.addr.type = BDADDR_BREDR; |
| 3148 | 3148 | ||
| 3149 | err = cmd_complete(cmd->sk, hdev->id, MGMT_OP_PIN_CODE_REPLY, | 3149 | err = cmd_complete(cmd->sk, hdev->id, MGMT_OP_PIN_CODE_REPLY, |
| 3150 | mgmt_status(status), &rp, sizeof(rp)); | 3150 | mgmt_status(status), &rp, sizeof(rp)); |
| @@ -3166,7 +3166,7 @@ int mgmt_pin_code_neg_reply_complete(struct hci_dev *hdev, bdaddr_t *bdaddr, | |||
| 3166 | return -ENOENT; | 3166 | return -ENOENT; |
| 3167 | 3167 | ||
| 3168 | bacpy(&rp.addr.bdaddr, bdaddr); | 3168 | bacpy(&rp.addr.bdaddr, bdaddr); |
| 3169 | rp.addr.type = MGMT_ADDR_BREDR; | 3169 | rp.addr.type = BDADDR_BREDR; |
| 3170 | 3170 | ||
| 3171 | err = cmd_complete(cmd->sk, hdev->id, MGMT_OP_PIN_CODE_NEG_REPLY, | 3171 | err = cmd_complete(cmd->sk, hdev->id, MGMT_OP_PIN_CODE_NEG_REPLY, |
| 3172 | mgmt_status(status), &rp, sizeof(rp)); | 3172 | mgmt_status(status), &rp, sizeof(rp)); |
