Commit 416fa752 authored by Andrei Emeltchenko's avatar Andrei Emeltchenko Committed by Johan Hedberg

Bluetooth: A2MP: Handling fixed channels

A2MP fixed channel do not have sk
Signed-off-by: default avatarAndrei Emeltchenko <andrei.emeltchenko@intel.com>
Signed-off-by: default avatarGustavo Padovan <gustavo.padovan@collabora.co.uk>
parent f6410a84
...@@ -581,6 +581,7 @@ struct l2cap_conn { ...@@ -581,6 +581,7 @@ struct l2cap_conn {
#define L2CAP_CHAN_RAW 1 #define L2CAP_CHAN_RAW 1
#define L2CAP_CHAN_CONN_LESS 2 #define L2CAP_CHAN_CONN_LESS 2
#define L2CAP_CHAN_CONN_ORIENTED 3 #define L2CAP_CHAN_CONN_ORIENTED 3
#define L2CAP_CHAN_CONN_FIX_A2MP 4
/* ----- L2CAP socket info ----- */ /* ----- L2CAP socket info ----- */
#define l2cap_pi(sk) ((struct l2cap_pinfo *) sk) #define l2cap_pi(sk) ((struct l2cap_pinfo *) sk)
......
...@@ -483,8 +483,7 @@ static struct l2cap_chan *a2mp_chan_open(struct l2cap_conn *conn) ...@@ -483,8 +483,7 @@ static struct l2cap_chan *a2mp_chan_open(struct l2cap_conn *conn)
hci_conn_hold(conn->hcon); hci_conn_hold(conn->hcon);
chan->omtu = L2CAP_A2MP_DEFAULT_MTU; chan->chan_type = L2CAP_CHAN_CONN_FIX_A2MP;
chan->imtu = L2CAP_A2MP_DEFAULT_MTU;
chan->flush_to = L2CAP_DEFAULT_FLUSH_TO; chan->flush_to = L2CAP_DEFAULT_FLUSH_TO;
chan->ops = &a2mp_chan_ops; chan->ops = &a2mp_chan_ops;
......
...@@ -465,6 +465,13 @@ static void __l2cap_chan_add(struct l2cap_conn *conn, struct l2cap_chan *chan) ...@@ -465,6 +465,13 @@ static void __l2cap_chan_add(struct l2cap_conn *conn, struct l2cap_chan *chan)
chan->omtu = L2CAP_DEFAULT_MTU; chan->omtu = L2CAP_DEFAULT_MTU;
break; break;
case L2CAP_CHAN_CONN_FIX_A2MP:
chan->scid = L2CAP_CID_A2MP;
chan->dcid = L2CAP_CID_A2MP;
chan->omtu = L2CAP_A2MP_DEFAULT_MTU;
chan->imtu = L2CAP_A2MP_DEFAULT_MTU;
break;
default: default:
/* Raw socket can send/recv signalling messages only */ /* Raw socket can send/recv signalling messages only */
chan->scid = L2CAP_CID_SIGNALING; chan->scid = L2CAP_CID_SIGNALING;
...@@ -1001,6 +1008,11 @@ static void l2cap_send_disconn_req(struct l2cap_conn *conn, struct l2cap_chan *c ...@@ -1001,6 +1008,11 @@ static void l2cap_send_disconn_req(struct l2cap_conn *conn, struct l2cap_chan *c
__clear_ack_timer(chan); __clear_ack_timer(chan);
} }
if (chan->chan_type == L2CAP_CHAN_CONN_FIX_A2MP) {
__l2cap_state_change(chan, BT_DISCONN);
return;
}
req.dcid = cpu_to_le16(chan->dcid); req.dcid = cpu_to_le16(chan->dcid);
req.scid = cpu_to_le16(chan->scid); req.scid = cpu_to_le16(chan->scid);
l2cap_send_cmd(conn, l2cap_get_ident(conn), l2cap_send_cmd(conn, l2cap_get_ident(conn),
...@@ -1195,6 +1207,11 @@ static void l2cap_conn_ready(struct l2cap_conn *conn) ...@@ -1195,6 +1207,11 @@ static void l2cap_conn_ready(struct l2cap_conn *conn)
l2cap_chan_lock(chan); l2cap_chan_lock(chan);
if (chan->chan_type == L2CAP_CHAN_CONN_FIX_A2MP) {
l2cap_chan_unlock(chan);
continue;
}
if (conn->hcon->type == LE_LINK) { if (conn->hcon->type == LE_LINK) {
if (smp_conn_security(conn, chan->sec_level)) if (smp_conn_security(conn, chan->sec_level))
l2cap_chan_ready(chan); l2cap_chan_ready(chan);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment