aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/net/bluetooth/bluetooth.h5
-rw-r--r--include/net/bluetooth/hci_core.h16
-rw-r--r--net/bluetooth/mgmt.c30
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);
963void hci_sock_dev_event(struct hci_dev *hdev, int event); 963void 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
977int mgmt_control(struct sock *sk, struct msghdr *msg, size_t len); 973int mgmt_control(struct sock *sk, struct msghdr *msg, size_t len);
978int mgmt_index_added(struct hci_dev *hdev); 974int 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
1647static u8 mgmt_to_le(u8 mgmt_type) 1647static 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));