You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mynewt.apache.org by cc...@apache.org on 2016/06/14 16:27:39 UTC
[12/15] incubator-mynewt-core git commit: BLE Host - ble_hs_addrs()
function.
BLE Host - ble_hs_addrs() function.
Project: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/commit/1b32494e
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/tree/1b32494e
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/diff/1b32494e
Branch: refs/heads/upf54
Commit: 1b32494e0efd17808fb2a47652445ef8585b2f78
Parents: ae493ae
Author: Christopher Collins <cc...@apache.org>
Authored: Mon Jun 13 16:23:39 2016 -0700
Committer: Christopher Collins <cc...@apache.org>
Committed: Tue Jun 14 09:27:02 2016 -0700
----------------------------------------------------------------------
net/nimble/host/src/ble_gap.c | 20 ++++----
net/nimble/host/src/ble_hs_conn.c | 79 +++++++----------------------
net/nimble/host/src/ble_hs_conn_priv.h | 20 +++++---
net/nimble/host/src/ble_sm.c | 66 ++++++++----------------
net/nimble/host/src/ble_sm_priv.h | 6 ++-
net/nimble/host/src/ble_sm_sc.c | 11 ++--
6 files changed, 71 insertions(+), 131 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/1b32494e/net/nimble/host/src/ble_gap.c
----------------------------------------------------------------------
diff --git a/net/nimble/host/src/ble_gap.c b/net/nimble/host/src/ble_gap.c
index a3d6388..de396ea 100644
--- a/net/nimble/host/src/ble_gap.c
+++ b/net/nimble/host/src/ble_gap.c
@@ -273,20 +273,18 @@ static void
ble_gap_fill_conn_desc(struct ble_hs_conn *conn,
struct ble_gap_conn_desc *desc)
{
- uint8_t *peer_ota_addr;
- uint8_t *peer_id_addr;
- uint8_t *our_ota_addr;
+ struct ble_hs_conn_addrs addrs;
- ble_hs_conn_addrs(conn,
- &desc->our_ota_addr_type, &our_ota_addr,
- NULL, NULL,
- &desc->peer_ota_addr_type, &peer_ota_addr,
- &desc->peer_id_addr_type, &peer_id_addr);
+ ble_hs_conn_addrs(conn, &addrs);
+
+ desc->our_ota_addr_type = addrs.our_ota_addr_type;
+ memcpy(desc->our_ota_addr, addrs.our_ota_addr, 6);
+ desc->peer_ota_addr_type = addrs.peer_ota_addr_type;
+ memcpy(desc->peer_ota_addr, addrs.peer_ota_addr, 6);
+ desc->peer_id_addr_type = addrs.peer_id_addr_type;
+ memcpy(desc->peer_id_addr, addrs.peer_id_addr, 6);
desc->conn_handle = conn->bhc_handle;
- memcpy(desc->peer_ota_addr, peer_ota_addr, 6);
- memcpy(desc->peer_id_addr, peer_id_addr, 6);
- memcpy(desc->our_ota_addr, our_ota_addr, 6);
desc->conn_itvl = conn->bhc_itvl;
desc->conn_latency = conn->bhc_latency;
desc->supervision_timeout = conn->bhc_supervision_timeout;
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/1b32494e/net/nimble/host/src/ble_hs_conn.c
----------------------------------------------------------------------
diff --git a/net/nimble/host/src/ble_hs_conn.c b/net/nimble/host/src/ble_hs_conn.c
index 87374e1..faab9dc 100644
--- a/net/nimble/host/src/ble_hs_conn.c
+++ b/net/nimble/host/src/ble_hs_conn.c
@@ -317,101 +317,58 @@ ble_hs_conn_first(void)
void
ble_hs_conn_addrs(struct ble_hs_conn *conn,
- uint8_t *out_our_ota_addr_type,
- uint8_t **out_our_ota_addr,
- uint8_t *out_our_id_addr_type,
- uint8_t **out_our_id_addr,
- uint8_t *out_peer_ota_addr_type,
- uint8_t **out_peer_ota_addr,
- uint8_t *out_peer_id_addr_type,
- uint8_t **out_peer_id_addr)
+ struct ble_hs_conn_addrs *addrs)
{
-
- uint8_t peer_ota_addr_type;
- uint8_t peer_id_addr_type;
- uint8_t our_ota_addr_type;
- uint8_t our_id_addr_type;
- uint8_t *peer_ota_addr;
- uint8_t *peer_id_addr;
- uint8_t *our_ota_addr;
- uint8_t *our_id_addr;
-
/* Determine our address information. */
- our_id_addr =
- bls_hs_priv_get_local_identity_addr(&our_id_addr_type);
+ addrs->our_id_addr =
+ bls_hs_priv_get_local_identity_addr(&addrs->our_id_addr_type);
if (memcmp(conn->our_rpa_addr, ble_hs_conn_null_addr, 6) == 0) {
- our_ota_addr_type = our_id_addr_type;
- our_ota_addr = our_id_addr;
+ addrs->our_ota_addr = addrs->our_id_addr;
} else {
- switch (our_id_addr_type) {
+ switch (addrs->our_id_addr_type) {
case BLE_ADDR_TYPE_PUBLIC:
- our_ota_addr_type = BLE_ADDR_TYPE_RPA_PUB_DEFAULT;
+ addrs->our_ota_addr_type = BLE_ADDR_TYPE_RPA_PUB_DEFAULT;
break;
case BLE_ADDR_TYPE_RANDOM:
- our_ota_addr_type = BLE_ADDR_TYPE_RPA_RND_DEFAULT;
+ addrs->our_ota_addr_type = BLE_ADDR_TYPE_RPA_RND_DEFAULT;
break;
default:
BLE_HS_DBG_ASSERT(0);
}
- our_ota_addr = conn->our_rpa_addr;
+ addrs->our_ota_addr = conn->our_rpa_addr;
}
/* Determine peer address information. */
- peer_ota_addr_type = conn->bhc_addr_type;
- peer_id_addr = conn->bhc_addr;
+ addrs->peer_ota_addr_type = conn->bhc_addr_type;
+ addrs->peer_id_addr = conn->bhc_addr;
switch (conn->bhc_addr_type) {
case BLE_ADDR_TYPE_PUBLIC:
- peer_id_addr_type = BLE_ADDR_TYPE_PUBLIC;
- peer_ota_addr = conn->bhc_addr;
+ addrs->peer_id_addr_type = BLE_ADDR_TYPE_PUBLIC;
+ addrs->peer_ota_addr = conn->bhc_addr;
break;
case BLE_ADDR_TYPE_RANDOM:
- peer_id_addr_type = BLE_ADDR_TYPE_RANDOM;
- peer_ota_addr = conn->bhc_addr;
+ addrs->peer_id_addr_type = BLE_ADDR_TYPE_RANDOM;
+ addrs->peer_ota_addr = conn->bhc_addr;
break;
case BLE_ADDR_TYPE_RPA_PUB_DEFAULT:
- peer_id_addr_type = BLE_ADDR_TYPE_PUBLIC;
- peer_ota_addr = conn->peer_rpa_addr;
+ addrs->peer_id_addr_type = BLE_ADDR_TYPE_PUBLIC;
+ addrs->peer_ota_addr = conn->peer_rpa_addr;
break;
case BLE_ADDR_TYPE_RPA_RND_DEFAULT:
- peer_id_addr_type = BLE_ADDR_TYPE_RANDOM;
- peer_ota_addr = conn->peer_rpa_addr;
+ addrs->peer_id_addr_type = BLE_ADDR_TYPE_RANDOM;
+ addrs->peer_ota_addr = conn->peer_rpa_addr;
break;
default:
BLE_HS_DBG_ASSERT(0);
return;
}
-
- if (out_our_ota_addr_type != NULL) {
- *out_our_ota_addr_type = our_ota_addr_type;
- }
- if (out_our_ota_addr != NULL) {
- *out_our_ota_addr = our_ota_addr;
- }
- if (out_our_id_addr_type != NULL) {
- *out_our_id_addr_type = our_id_addr_type;
- }
- if (out_our_id_addr != NULL) {
- *out_our_id_addr = our_id_addr;
- }
- if (out_peer_ota_addr_type != NULL) {
- *out_peer_ota_addr_type = peer_ota_addr_type;
- }
- if (out_peer_ota_addr != NULL) {
- *out_peer_ota_addr = peer_ota_addr;
- }
- if (out_peer_id_addr_type != NULL) {
- *out_peer_id_addr_type = peer_id_addr_type;
- }
- if (out_peer_id_addr != NULL) {
- *out_peer_id_addr = peer_id_addr;
- }
}
static void
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/1b32494e/net/nimble/host/src/ble_hs_conn_priv.h
----------------------------------------------------------------------
diff --git a/net/nimble/host/src/ble_hs_conn_priv.h b/net/nimble/host/src/ble_hs_conn_priv.h
index e6d940e..36b483d 100644
--- a/net/nimble/host/src/ble_hs_conn_priv.h
+++ b/net/nimble/host/src/ble_hs_conn_priv.h
@@ -61,6 +61,17 @@ struct ble_hs_conn {
void *bhc_cb_arg;
};
+struct ble_hs_conn_addrs {
+ uint8_t our_ota_addr_type;
+ uint8_t our_id_addr_type;
+ uint8_t peer_ota_addr_type;
+ uint8_t peer_id_addr_type;
+ uint8_t *our_ota_addr;
+ uint8_t *our_id_addr;
+ uint8_t *peer_ota_addr;
+ uint8_t *peer_id_addr;
+};
+
int ble_hs_conn_can_alloc(void);
struct ble_hs_conn *ble_hs_conn_alloc(void);
void ble_hs_conn_free(struct ble_hs_conn *conn);
@@ -76,14 +87,7 @@ struct ble_l2cap_chan *ble_hs_conn_chan_find(struct ble_hs_conn *conn,
int ble_hs_conn_chan_insert(struct ble_hs_conn *conn,
struct ble_l2cap_chan *chan);
void ble_hs_conn_addrs(struct ble_hs_conn *conn,
- uint8_t *our_ota_addr_type,
- uint8_t **our_ota_addr,
- uint8_t *our_id_addr_type,
- uint8_t **our_id_addr,
- uint8_t *peer_ota_addr_type,
- uint8_t **peer_ota_addr,
- uint8_t *peer_id_addr_type,
- uint8_t **peer_id_addr);
+ struct ble_hs_conn_addrs *addrs);
int ble_hs_conn_init(void);
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/1b32494e/net/nimble/host/src/ble_sm.c
----------------------------------------------------------------------
diff --git a/net/nimble/host/src/ble_sm.c b/net/nimble/host/src/ble_sm.c
index 6027f50..5dedf98 100644
--- a/net/nimble/host/src/ble_sm.c
+++ b/net/nimble/host/src/ble_sm.c
@@ -150,8 +150,6 @@ static uint64_t ble_sm_dbg_next_start_rand;
static uint8_t ble_sm_dbg_next_start_rand_set;
static uint8_t ble_sm_dbg_next_ltk[16];
static uint8_t ble_sm_dbg_next_ltk_set;
-static uint8_t ble_sm_dbg_next_irk[16];
-static uint8_t ble_sm_dbg_next_irk_set;
static uint8_t ble_sm_dbg_next_csrk[16];
static uint8_t ble_sm_dbg_next_csrk_set;
static uint8_t ble_sm_dbg_sc_pub_key[64];
@@ -189,14 +187,6 @@ ble_sm_dbg_set_next_ltk(uint8_t *next_ltk)
}
void
-ble_sm_dbg_set_next_irk(uint8_t *next_irk)
-{
- memcpy(ble_sm_dbg_next_irk, next_irk,
- sizeof ble_sm_dbg_next_irk);
- ble_sm_dbg_next_irk_set = 1;
-}
-
-void
ble_sm_dbg_set_next_csrk(uint8_t *next_csrk)
{
memcpy(ble_sm_dbg_next_csrk, next_csrk,
@@ -526,35 +516,28 @@ ble_sm_ia_ra(struct ble_sm_proc *proc,
uint8_t *out_iat, uint8_t *out_ia,
uint8_t *out_rat, uint8_t *out_ra)
{
+ struct ble_hs_conn_addrs addrs;
struct ble_hs_conn *conn;
- uint8_t *peer_ota_addr;
- uint8_t *our_ota_addr;
- uint8_t peer_id_addr_type;
- uint8_t our_id_addr_type;
conn = ble_hs_conn_find(proc->conn_handle);
if (conn == NULL) {
return BLE_HS_ENOTCONN;
}
- ble_hs_conn_addrs(conn,
- NULL, &our_ota_addr,
- &our_id_addr_type, NULL,
- NULL, &peer_ota_addr,
- &peer_id_addr_type, NULL);
+ ble_hs_conn_addrs(conn, &addrs);
if (proc->flags & BLE_SM_PROC_F_INITIATOR) {
- *out_iat = our_id_addr_type;
- memcpy(out_ia, our_ota_addr, 6);
+ *out_iat = addrs.our_id_addr_type;
+ memcpy(out_ia, addrs.our_ota_addr, 6);
- *out_rat = peer_id_addr_type;
- memcpy(out_ra, peer_ota_addr, 6);
+ *out_rat = addrs.peer_id_addr_type;
+ memcpy(out_ra, addrs.peer_ota_addr, 6);
} else {
- *out_iat = peer_id_addr_type;
- memcpy(out_ia, peer_ota_addr, 6);
+ *out_iat = addrs.peer_id_addr_type;
+ memcpy(out_ia, addrs.peer_ota_addr, 6);
- *out_rat = our_id_addr_type;
- memcpy(out_ra, our_ota_addr, 6);
+ *out_rat = addrs.our_id_addr_type;
+ memcpy(out_ra, addrs.our_ota_addr, 6);
}
return 0;
@@ -1174,18 +1157,14 @@ int
ble_sm_ltk_req_rx(struct hci_le_lt_key_req *evt)
{
struct ble_store_value_sec value_sec;
+ struct ble_hs_conn_addrs addrs;
struct ble_sm_result res;
struct ble_sm_proc *proc;
struct ble_hs_conn *conn;
- uint8_t peer_addr[6];
- uint8_t *peer_id_addr;
- uint8_t peer_addr_type;
+ uint8_t peer_id_addr[6];
int store_rc;
int restore;
- /* Silence gcc warning. */
- peer_addr_type = BLE_STORE_ADDR_TYPE_NONE;
-
memset(&res, 0, sizeof res);
ble_hs_lock();
@@ -1233,10 +1212,8 @@ ble_sm_ltk_req_rx(struct hci_le_lt_key_req *evt)
if (conn == NULL) {
res.app_status = BLE_HS_ENOTCONN;
} else {
- ble_hs_conn_addrs(conn,
- NULL, NULL, NULL, NULL,
- NULL, NULL, &peer_addr_type, &peer_id_addr);
- memcpy(peer_addr, peer_id_addr, 6);
+ ble_hs_conn_addrs(conn, &addrs);
+ memcpy(peer_id_addr, addrs.peer_id_addr, 6);
}
}
@@ -1248,8 +1225,8 @@ ble_sm_ltk_req_rx(struct hci_le_lt_key_req *evt)
if (res.app_status == 0) {
if (restore) {
- store_rc = ble_sm_retrieve_ltk(evt, peer_addr_type, peer_addr,
- &value_sec);
+ store_rc = ble_sm_retrieve_ltk(evt, addrs.peer_id_addr_type,
+ peer_id_addr, &value_sec);
if (store_rc == 0) {
/* Send the key to the controller. */
res.state_arg = &value_sec;
@@ -1631,11 +1608,11 @@ static void
ble_sm_sec_req_rx(uint16_t conn_handle, uint8_t op, struct os_mbuf **om,
struct ble_sm_result *res)
{
- struct ble_sm_sec_req cmd;
struct ble_store_value_sec value_sec;
struct ble_store_key_sec key_sec;
+ struct ble_hs_conn_addrs addrs;
+ struct ble_sm_sec_req cmd;
struct ble_hs_conn *conn;
- uint8_t *peer_id_addr;
int authreq_mitm;
res->app_status = ble_hs_misc_pullup_base(om, BLE_SM_SEC_REQ_SZ);
@@ -1664,11 +1641,10 @@ ble_sm_sec_req_rx(uint16_t conn_handle, uint8_t op, struct os_mbuf **om,
* sender; remember the sender's address while the connection list is
* locked.
*/
- ble_hs_conn_addrs(conn,
- NULL, NULL, NULL, NULL,
- NULL, NULL, &key_sec.peer_addr_type, &peer_id_addr);
+ ble_hs_conn_addrs(conn, &addrs);
memset(&key_sec, 0, sizeof key_sec);
- memcpy(key_sec.peer_addr, peer_id_addr, 6);
+ key_sec.peer_addr_type = addrs.peer_id_addr_type;
+ memcpy(key_sec.peer_addr, addrs.peer_id_addr, 6);
}
ble_hs_unlock();
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/1b32494e/net/nimble/host/src/ble_sm_priv.h
----------------------------------------------------------------------
diff --git a/net/nimble/host/src/ble_sm_priv.h b/net/nimble/host/src/ble_sm_priv.h
index 733d04d..afdfdd6 100644
--- a/net/nimble/host/src/ble_sm_priv.h
+++ b/net/nimble/host/src/ble_sm_priv.h
@@ -293,7 +293,6 @@ void ble_sm_dbg_set_next_pair_rand(uint8_t *next_pair_rand);
void ble_sm_dbg_set_next_ediv(uint16_t next_ediv);
void ble_sm_dbg_set_next_start_rand(uint64_t next_start_rand);
void ble_sm_dbg_set_next_ltk(uint8_t *next_ltk);
-void ble_sm_dbg_set_next_irk(uint8_t *next_irk);
void ble_sm_dbg_set_next_csrk(uint8_t *next_csrk);
void ble_sm_dbg_set_sc_keys(uint8_t *pubkey, uint8_t *privkey);
int ble_sm_dbg_num_procs(void);
@@ -341,15 +340,20 @@ int ble_sm_master_id_tx(uint16_t conn_handle, struct ble_sm_master_id *cmd);
void ble_sm_master_id_log(struct ble_sm_master_id *cmd);
void ble_sm_id_info_parse(void *payload, int len, struct ble_sm_id_info *cmd);
int ble_sm_id_info_tx(uint16_t conn_handle, struct ble_sm_id_info *cmd);
+void ble_sm_id_info_write(void *payload, int len, struct ble_sm_id_info *cmd);
void ble_sm_id_info_log(struct ble_sm_id_info *cmd);
void ble_sm_id_addr_info_parse(void *payload, int len,
struct ble_sm_id_addr_info *cmd);
int ble_sm_id_addr_info_tx(uint16_t conn_handle,
struct ble_sm_id_addr_info *cmd);
+void ble_sm_id_addr_info_write(void *payload, int len,
+ struct ble_sm_id_addr_info *cmd);
void ble_sm_id_addr_info_log(struct ble_sm_id_addr_info *cmd);
void ble_sm_sign_info_parse(void *payload, int len,
struct ble_sm_sign_info *cmd);
int ble_sm_sign_info_tx(uint16_t conn_handle, struct ble_sm_sign_info *cmd);
+void ble_sm_sign_info_write(void *payload, int len,
+ struct ble_sm_sign_info *cmd);
void ble_sm_sign_info_log(struct ble_sm_sign_info *cmd);
void ble_sm_sec_req_parse(void *payload, int len, struct ble_sm_sec_req *cmd);
void ble_sm_sec_req_write(void *payload, int len, struct ble_sm_sec_req *cmd);
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/1b32494e/net/nimble/host/src/ble_sm_sc.c
----------------------------------------------------------------------
diff --git a/net/nimble/host/src/ble_sm_sc.c b/net/nimble/host/src/ble_sm_sc.c
index c3a2666..acc91eb 100644
--- a/net/nimble/host/src/ble_sm_sc.c
+++ b/net/nimble/host/src/ble_sm_sc.c
@@ -531,6 +531,7 @@ ble_sm_sc_dhkey_addrs(struct ble_sm_proc *proc,
uint8_t *out_peer_id_addr_type,
uint8_t **out_peer_ota_addr)
{
+ struct ble_hs_conn_addrs addrs;
struct ble_hs_conn *conn;
conn = ble_hs_conn_find(proc->conn_handle);
@@ -538,11 +539,11 @@ ble_sm_sc_dhkey_addrs(struct ble_sm_proc *proc,
return BLE_HS_ENOTCONN;
}
- ble_hs_conn_addrs(conn,
- NULL, out_our_ota_addr,
- out_our_id_addr_type, NULL,
- NULL, out_peer_ota_addr,
- out_peer_id_addr_type, NULL);
+ ble_hs_conn_addrs(conn, &addrs);
+ *out_our_id_addr_type = addrs.our_id_addr_type;
+ *out_our_ota_addr = addrs.our_ota_addr;
+ *out_peer_id_addr_type = addrs.peer_id_addr_type;
+ *out_peer_ota_addr = addrs.peer_ota_addr;
return 0;
}