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)); |