Commit 89bc500e authored by Gustavo F. Padovan's avatar Gustavo F. Padovan

Bluetooth: Add state tracking to struct l2cap_chan

Now socket state is tracked by struct sock and channel state is tracked by
chan->state. At this point both says the same, but this is going to change
when we add AMP Support for example.
Signed-off-by: default avatarGustavo F. Padovan <padovan@profusion.mobi>
parent ba3bd0ee
...@@ -287,6 +287,8 @@ struct l2cap_chan { ...@@ -287,6 +287,8 @@ struct l2cap_chan {
struct l2cap_conn *conn; struct l2cap_conn *conn;
__u8 state;
__le16 psm; __le16 psm;
__u16 dcid; __u16 dcid;
__u16 scid; __u16 scid;
...@@ -365,6 +367,7 @@ struct l2cap_ops { ...@@ -365,6 +367,7 @@ struct l2cap_ops {
struct l2cap_chan *(*new_connection) (void *data); struct l2cap_chan *(*new_connection) (void *data);
int (*recv) (void *data, struct sk_buff *skb); int (*recv) (void *data, struct sk_buff *skb);
void (*close) (void *data); void (*close) (void *data);
void (*state_change) (void *data, int state);
}; };
struct l2cap_conn { struct l2cap_conn {
......
This diff is collapsed.
...@@ -89,6 +89,8 @@ static int l2cap_sock_bind(struct socket *sock, struct sockaddr *addr, int alen) ...@@ -89,6 +89,8 @@ static int l2cap_sock_bind(struct socket *sock, struct sockaddr *addr, int alen)
chan->sec_level = BT_SECURITY_SDP; chan->sec_level = BT_SECURITY_SDP;
bacpy(&bt_sk(sk)->src, &la.l2_bdaddr); bacpy(&bt_sk(sk)->src, &la.l2_bdaddr);
chan->state = BT_BOUND;
sk->sk_state = BT_BOUND; sk->sk_state = BT_BOUND;
done: done:
...@@ -214,6 +216,8 @@ static int l2cap_sock_listen(struct socket *sock, int backlog) ...@@ -214,6 +216,8 @@ static int l2cap_sock_listen(struct socket *sock, int backlog)
sk->sk_max_ack_backlog = backlog; sk->sk_max_ack_backlog = backlog;
sk->sk_ack_backlog = 0; sk->sk_ack_backlog = 0;
chan->state = BT_LISTEN;
sk->sk_state = BT_LISTEN; sk->sk_state = BT_LISTEN;
done: done:
...@@ -803,11 +807,19 @@ static void l2cap_sock_close_cb(void *data) ...@@ -803,11 +807,19 @@ static void l2cap_sock_close_cb(void *data)
l2cap_sock_kill(sk); l2cap_sock_kill(sk);
} }
static void l2cap_sock_state_change_cb(void *data, int state)
{
struct sock *sk = data;
sk->sk_state = state;
}
static struct l2cap_ops l2cap_chan_ops = { static struct l2cap_ops l2cap_chan_ops = {
.name = "L2CAP Socket Interface", .name = "L2CAP Socket Interface",
.new_connection = l2cap_sock_new_connection_cb, .new_connection = l2cap_sock_new_connection_cb,
.recv = l2cap_sock_recv_cb, .recv = l2cap_sock_recv_cb,
.close = l2cap_sock_close_cb, .close = l2cap_sock_close_cb,
.state_change = l2cap_sock_state_change_cb,
}; };
static void l2cap_sock_destruct(struct sock *sk) static void l2cap_sock_destruct(struct sock *sk)
......
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