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