nimble/l2cap: Move ble_l2cap_chan_mtu() to ble_att MTU Exchange procedure belongs to ATT. Also concept of default MTU belongs to ATT. This patch removes default_mtu from ble_l2cap_chan and moves function choosing MTU for ATT channel to ble_att
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/552adce6 Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/tree/552adce6 Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/diff/552adce6 Branch: refs/heads/develop Commit: 552adce6ed25a46eb40266342c719da478c89a6f Parents: 1c66c79 Author: Åukasz Rymanowski <[email protected]> Authored: Fri Jan 20 13:06:13 2017 +0100 Committer: Åukasz Rymanowski <[email protected]> Committed: Thu Feb 2 12:59:59 2017 +0100 ---------------------------------------------------------------------- net/nimble/host/src/ble_att.c | 26 +++++++++++++++++++++--- net/nimble/host/src/ble_att_clt.c | 2 +- net/nimble/host/src/ble_att_priv.h | 1 + net/nimble/host/src/ble_att_svr.c | 2 +- net/nimble/host/src/ble_l2cap.c | 21 +++---------------- net/nimble/host/src/ble_l2cap_priv.h | 4 +--- net/nimble/host/src/ble_l2cap_sig.c | 1 - net/nimble/host/src/ble_sm.c | 1 - net/nimble/host/test/src/ble_att_svr_test.c | 4 ++-- net/nimble/host/test/src/ble_hs_conn_test.c | 3 --- net/nimble/host/test/src/ble_l2cap_test.c | 1 - 11 files changed, 32 insertions(+), 34 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/552adce6/net/nimble/host/src/ble_att.c ---------------------------------------------------------------------- diff --git a/net/nimble/host/src/ble_att.c b/net/nimble/host/src/ble_att.c index 91bce94..ff1eebf 100644 --- a/net/nimble/host/src/ble_att.c +++ b/net/nimble/host/src/ble_att.c @@ -392,7 +392,7 @@ ble_att_truncate_to_mtu(const struct ble_l2cap_chan *att_chan, int32_t extra_len; uint16_t mtu; - mtu = ble_l2cap_chan_mtu(att_chan); + mtu = ble_att_chan_mtu(att_chan); extra_len = OS_MBUF_PKTLEN(txom) - mtu; if (extra_len > 0) { os_mbuf_adj(txom, -extra_len); @@ -419,7 +419,7 @@ ble_att_mtu(uint16_t conn_handle) ble_att_conn_chan_find(conn_handle, &conn, &chan); if (chan != NULL) { - mtu = ble_l2cap_chan_mtu(chan); + mtu = ble_att_chan_mtu(chan); } else { mtu = 0; } @@ -439,6 +439,27 @@ ble_att_set_peer_mtu(struct ble_l2cap_chan *chan, uint16_t peer_mtu) chan->peer_mtu = peer_mtu; } +uint16_t +ble_att_chan_mtu(const struct ble_l2cap_chan *chan) +{ + uint16_t mtu; + + /* If either side has not exchanged MTU size, use the default. Otherwise, + * use the lesser of the two exchanged values. + */ + if (!(ble_l2cap_is_mtu_req_sent(chan)) || + chan->peer_mtu == 0) { + + mtu = BLE_ATT_MTU_DFLT; + } else { + mtu = min(chan->my_mtu, chan->peer_mtu); + } + + BLE_HS_DBG_ASSERT(mtu >= BLE_ATT_MTU_DFLT); + + return mtu; +} + static int ble_att_rx(uint16_t conn_handle, struct os_mbuf **om) { @@ -541,7 +562,6 @@ ble_att_create_chan(void) chan->scid = BLE_L2CAP_CID_ATT; chan->my_mtu = ble_att_preferred_mtu_val; - chan->default_mtu = BLE_ATT_MTU_DFLT; chan->rx_fn = ble_att_rx; return chan; http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/552adce6/net/nimble/host/src/ble_att_clt.c ---------------------------------------------------------------------- diff --git a/net/nimble/host/src/ble_att_clt.c b/net/nimble/host/src/ble_att_clt.c index cdb4fa3..4a93171 100644 --- a/net/nimble/host/src/ble_att_clt.c +++ b/net/nimble/host/src/ble_att_clt.c @@ -185,7 +185,7 @@ ble_att_clt_rx_mtu(uint16_t conn_handle, struct os_mbuf **rxom) ble_att_conn_chan_find(conn_handle, NULL, &chan); ble_att_set_peer_mtu(chan, cmd.bamc_mtu); - mtu = ble_l2cap_chan_mtu(chan); + mtu = ble_att_chan_mtu(chan); ble_hs_unlock(); http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/552adce6/net/nimble/host/src/ble_att_priv.h ---------------------------------------------------------------------- diff --git a/net/nimble/host/src/ble_att_priv.h b/net/nimble/host/src/ble_att_priv.h index ed696df..22ed62e 100644 --- a/net/nimble/host/src/ble_att_priv.h +++ b/net/nimble/host/src/ble_att_priv.h @@ -166,6 +166,7 @@ void ble_att_inc_tx_stat(uint8_t att_op); void ble_att_truncate_to_mtu(const struct ble_l2cap_chan *att_chan, struct os_mbuf *txom); void ble_att_set_peer_mtu(struct ble_l2cap_chan *chan, uint16_t peer_mtu); +uint16_t ble_att_chan_mtu(const struct ble_l2cap_chan *chan); int ble_att_init(void); #define BLE_ATT_LOG_CMD(is_tx, cmd_name, conn_handle, log_cb, cmd) \ http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/552adce6/net/nimble/host/src/ble_att_svr.c ---------------------------------------------------------------------- diff --git a/net/nimble/host/src/ble_att_svr.c b/net/nimble/host/src/ble_att_svr.c index 8932f2f..1c2d4a2 100644 --- a/net/nimble/host/src/ble_att_svr.c +++ b/net/nimble/host/src/ble_att_svr.c @@ -766,7 +766,7 @@ done: ble_att_conn_chan_find(conn_handle, &conn, &chan); ble_att_set_peer_mtu(chan, cmd.bamc_mtu); chan->flags |= BLE_L2CAP_CHAN_F_TXED_MTU; - mtu = ble_l2cap_chan_mtu(chan); + mtu = ble_att_chan_mtu(chan); ble_hs_unlock(); http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/552adce6/net/nimble/host/src/ble_l2cap.c ---------------------------------------------------------------------- diff --git a/net/nimble/host/src/ble_l2cap.c b/net/nimble/host/src/ble_l2cap.c index 6b857f2..a61ada7 100644 --- a/net/nimble/host/src/ble_l2cap.c +++ b/net/nimble/host/src/ble_l2cap.c @@ -81,25 +81,10 @@ ble_l2cap_chan_free(struct ble_l2cap_chan *chan) STATS_INC(ble_l2cap_stats, chan_delete); } -uint16_t -ble_l2cap_chan_mtu(const struct ble_l2cap_chan *chan) +bool +ble_l2cap_is_mtu_req_sent(const struct ble_l2cap_chan *chan) { - uint16_t mtu; - - /* If either side has not exchanged MTU size, use the default. Otherwise, - * use the lesser of the two exchanged values. - */ - if (!(chan->flags & BLE_L2CAP_CHAN_F_TXED_MTU) || - chan->peer_mtu == 0) { - - mtu = chan->default_mtu; - } else { - mtu = min(chan->my_mtu, chan->peer_mtu); - } - - BLE_HS_DBG_ASSERT(mtu >= chan->default_mtu); - - return mtu; + return (chan->flags & BLE_L2CAP_CHAN_F_TXED_MTU); } int http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/552adce6/net/nimble/host/src/ble_l2cap_priv.h ---------------------------------------------------------------------- diff --git a/net/nimble/host/src/ble_l2cap_priv.h b/net/nimble/host/src/ble_l2cap_priv.h index ecdcf78..7733c20 100644 --- a/net/nimble/host/src/ble_l2cap_priv.h +++ b/net/nimble/host/src/ble_l2cap_priv.h @@ -68,7 +68,6 @@ struct ble_l2cap_chan { uint16_t scid; uint16_t my_mtu; uint16_t peer_mtu; /* 0 if not exchanged. */ - uint16_t default_mtu; ble_l2cap_chan_flags flags; struct os_mbuf *rx_buf; @@ -97,8 +96,7 @@ struct os_mbuf *ble_l2cap_prepend_hdr(struct os_mbuf *om, uint16_t cid, struct ble_l2cap_chan *ble_l2cap_chan_alloc(void); void ble_l2cap_chan_free(struct ble_l2cap_chan *chan); -uint16_t ble_l2cap_chan_mtu(const struct ble_l2cap_chan *chan); - +bool ble_l2cap_is_mtu_req_sent(const struct ble_l2cap_chan *chan); int ble_l2cap_rx(struct ble_hs_conn *conn, struct hci_data_hdr *hci_hdr, http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/552adce6/net/nimble/host/src/ble_l2cap_sig.c ---------------------------------------------------------------------- diff --git a/net/nimble/host/src/ble_l2cap_sig.c b/net/nimble/host/src/ble_l2cap_sig.c index e7c7704..09df2c3 100644 --- a/net/nimble/host/src/ble_l2cap_sig.c +++ b/net/nimble/host/src/ble_l2cap_sig.c @@ -525,7 +525,6 @@ ble_l2cap_sig_create_chan(void) chan->scid = BLE_L2CAP_CID_SIG; chan->my_mtu = BLE_L2CAP_SIG_MTU; - chan->default_mtu = BLE_L2CAP_SIG_MTU; chan->rx_fn = ble_l2cap_sig_rx; return chan; http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/552adce6/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 0227f1a..6f88830 100644 --- a/net/nimble/host/src/ble_sm.c +++ b/net/nimble/host/src/ble_sm.c @@ -2510,7 +2510,6 @@ ble_sm_create_chan(void) chan->scid = BLE_L2CAP_CID_SM; chan->my_mtu = BLE_SM_MTU; - chan->default_mtu = BLE_SM_MTU; chan->rx_fn = ble_sm_rx; return chan; http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/552adce6/net/nimble/host/test/src/ble_att_svr_test.c ---------------------------------------------------------------------- diff --git a/net/nimble/host/test/src/ble_att_svr_test.c b/net/nimble/host/test/src/ble_att_svr_test.c index fa60abc..c2bc64a 100644 --- a/net/nimble/host/test/src/ble_att_svr_test.c +++ b/net/nimble/host/test/src/ble_att_svr_test.c @@ -398,7 +398,7 @@ ble_att_svr_test_misc_verify_tx_read_mult_rsp( rc = ble_hs_misc_conn_chan_find(conn_handle, BLE_L2CAP_CID_ATT, NULL, &chan); TEST_ASSERT_FATAL(rc == 0); - mtu = ble_l2cap_chan_mtu(chan); + mtu = ble_att_chan_mtu(chan); ble_hs_unlock(); @@ -609,7 +609,7 @@ ble_att_svr_test_misc_mtu_exchange(uint16_t my_mtu, uint16_t peer_sent, &conn, &chan); TEST_ASSERT_FATAL(rc == 0); TEST_ASSERT(chan->peer_mtu == peer_actual); - TEST_ASSERT(ble_l2cap_chan_mtu(chan) == chan_mtu); + TEST_ASSERT(ble_att_chan_mtu(chan) == chan_mtu); ble_hs_unlock(); } http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/552adce6/net/nimble/host/test/src/ble_hs_conn_test.c ---------------------------------------------------------------------- diff --git a/net/nimble/host/test/src/ble_hs_conn_test.c b/net/nimble/host/test/src/ble_hs_conn_test.c index eb6da38..8ae4971 100644 --- a/net/nimble/host/test/src/ble_hs_conn_test.c +++ b/net/nimble/host/test/src/ble_hs_conn_test.c @@ -81,7 +81,6 @@ TEST_CASE(ble_hs_conn_test_direct_connect_success) TEST_ASSERT_FATAL(chan != NULL); TEST_ASSERT(chan->my_mtu == BLE_ATT_MTU_PREFERRED_DFLT); TEST_ASSERT(chan->peer_mtu == 0); - TEST_ASSERT(chan->default_mtu == BLE_ATT_MTU_DFLT); ble_hs_unlock(); } @@ -136,7 +135,6 @@ TEST_CASE(ble_hs_conn_test_direct_connectable_success) TEST_ASSERT_FATAL(chan != NULL); TEST_ASSERT(chan->my_mtu == BLE_ATT_MTU_PREFERRED_DFLT); TEST_ASSERT(chan->peer_mtu == 0); - TEST_ASSERT(chan->default_mtu == BLE_ATT_MTU_DFLT); ble_hs_unlock(); } @@ -198,7 +196,6 @@ TEST_CASE(ble_hs_conn_test_undirect_connectable_success) TEST_ASSERT_FATAL(chan != NULL); TEST_ASSERT(chan->my_mtu == BLE_ATT_MTU_PREFERRED_DFLT); TEST_ASSERT(chan->peer_mtu == 0); - TEST_ASSERT(chan->default_mtu == BLE_ATT_MTU_DFLT); ble_hs_unlock(); } http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/552adce6/net/nimble/host/test/src/ble_l2cap_test.c ---------------------------------------------------------------------- diff --git a/net/nimble/host/test/src/ble_l2cap_test.c b/net/nimble/host/test/src/ble_l2cap_test.c index 021ebb7..e8dbfa8 100644 --- a/net/nimble/host/test/src/ble_l2cap_test.c +++ b/net/nimble/host/test/src/ble_l2cap_test.c @@ -120,7 +120,6 @@ ble_l2cap_test_util_create_conn(uint16_t conn_handle, uint8_t *addr, chan->scid = BLE_L2CAP_TEST_CID; chan->my_mtu = 240; - chan->default_mtu = 240; chan->rx_fn = ble_l2cap_test_util_dummy_rx; ble_hs_conn_chan_insert(conn, chan);
