diff options
author | Andrei Emeltchenko <andrei.emeltchenko@intel.com> | 2012-05-29 06:59:16 -0400 |
---|---|---|
committer | Johan Hedberg <johan.hedberg@intel.com> | 2012-06-04 23:34:13 -0400 |
commit | 416fa7527d6bf658e5517ea36d2de9270be2c11e (patch) | |
tree | 60f3f131884ff8aa5e0d02c9a098e612138aa5a2 /net/bluetooth/l2cap_core.c | |
parent | f6410a849b76f56c78d989786eb427b85a559b9f (diff) |
Bluetooth: A2MP: Handling fixed channels
A2MP fixed channel do not have sk
Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
Signed-off-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk>
Diffstat (limited to 'net/bluetooth/l2cap_core.c')
-rw-r--r-- | net/bluetooth/l2cap_core.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/net/bluetooth/l2cap_core.c b/net/bluetooth/l2cap_core.c index 2c616cf24c71..fc572795497a 100644 --- a/net/bluetooth/l2cap_core.c +++ b/net/bluetooth/l2cap_core.c | |||
@@ -465,6 +465,13 @@ static void __l2cap_chan_add(struct l2cap_conn *conn, struct l2cap_chan *chan) | |||
465 | chan->omtu = L2CAP_DEFAULT_MTU; | 465 | chan->omtu = L2CAP_DEFAULT_MTU; |
466 | break; | 466 | break; |
467 | 467 | ||
468 | case L2CAP_CHAN_CONN_FIX_A2MP: | ||
469 | chan->scid = L2CAP_CID_A2MP; | ||
470 | chan->dcid = L2CAP_CID_A2MP; | ||
471 | chan->omtu = L2CAP_A2MP_DEFAULT_MTU; | ||
472 | chan->imtu = L2CAP_A2MP_DEFAULT_MTU; | ||
473 | break; | ||
474 | |||
468 | default: | 475 | default: |
469 | /* Raw socket can send/recv signalling messages only */ | 476 | /* Raw socket can send/recv signalling messages only */ |
470 | chan->scid = L2CAP_CID_SIGNALING; | 477 | chan->scid = L2CAP_CID_SIGNALING; |
@@ -1001,6 +1008,11 @@ static void l2cap_send_disconn_req(struct l2cap_conn *conn, struct l2cap_chan *c | |||
1001 | __clear_ack_timer(chan); | 1008 | __clear_ack_timer(chan); |
1002 | } | 1009 | } |
1003 | 1010 | ||
1011 | if (chan->chan_type == L2CAP_CHAN_CONN_FIX_A2MP) { | ||
1012 | __l2cap_state_change(chan, BT_DISCONN); | ||
1013 | return; | ||
1014 | } | ||
1015 | |||
1004 | req.dcid = cpu_to_le16(chan->dcid); | 1016 | req.dcid = cpu_to_le16(chan->dcid); |
1005 | req.scid = cpu_to_le16(chan->scid); | 1017 | req.scid = cpu_to_le16(chan->scid); |
1006 | l2cap_send_cmd(conn, l2cap_get_ident(conn), | 1018 | l2cap_send_cmd(conn, l2cap_get_ident(conn), |
@@ -1195,6 +1207,11 @@ static void l2cap_conn_ready(struct l2cap_conn *conn) | |||
1195 | 1207 | ||
1196 | l2cap_chan_lock(chan); | 1208 | l2cap_chan_lock(chan); |
1197 | 1209 | ||
1210 | if (chan->chan_type == L2CAP_CHAN_CONN_FIX_A2MP) { | ||
1211 | l2cap_chan_unlock(chan); | ||
1212 | continue; | ||
1213 | } | ||
1214 | |||
1198 | if (conn->hcon->type == LE_LINK) { | 1215 | if (conn->hcon->type == LE_LINK) { |
1199 | if (smp_conn_security(conn, chan->sec_level)) | 1216 | if (smp_conn_security(conn, chan->sec_level)) |
1200 | l2cap_chan_ready(chan); | 1217 | l2cap_chan_ready(chan); |