Lines Matching refs:chan

83 	struct l2cap_chan *chan = l2cap_pi(sk)->chan;  in l2cap_sock_bind()  local
129 err = l2cap_add_scid(chan, __le16_to_cpu(la.l2_cid)); in l2cap_sock_bind()
131 err = l2cap_add_psm(chan, &la.l2_bdaddr, la.l2_psm); in l2cap_sock_bind()
136 switch (chan->chan_type) { in l2cap_sock_bind()
139 chan->sec_level = BT_SECURITY_SDP; in l2cap_sock_bind()
144 chan->sec_level = BT_SECURITY_SDP; in l2cap_sock_bind()
147 chan->sec_level = BT_SECURITY_SDP; in l2cap_sock_bind()
155 set_bit(FLAG_HOLD_HCI_CONN, &chan->flags); in l2cap_sock_bind()
159 bacpy(&chan->src, &la.l2_bdaddr); in l2cap_sock_bind()
160 chan->src_type = la.l2_bdaddr_type; in l2cap_sock_bind()
162 if (chan->psm && bdaddr_type_is_le(chan->src_type)) in l2cap_sock_bind()
163 chan->mode = L2CAP_MODE_LE_FLOWCTL; in l2cap_sock_bind()
165 chan->state = BT_BOUND; in l2cap_sock_bind()
177 struct l2cap_chan *chan = l2cap_pi(sk)->chan; in l2cap_sock_connect() local
202 if (chan->src_type == BDADDR_BREDR && bacmp(&chan->src, BDADDR_ANY) && in l2cap_sock_connect()
210 if (chan->scid != L2CAP_CID_ATT || in l2cap_sock_connect()
220 chan->src_type = BDADDR_LE_PUBLIC; in l2cap_sock_connect()
223 if (chan->src_type != BDADDR_BREDR && la.l2_bdaddr_type == BDADDR_BREDR) in l2cap_sock_connect()
233 if (chan->psm && bdaddr_type_is_le(chan->src_type)) in l2cap_sock_connect()
234 chan->mode = L2CAP_MODE_LE_FLOWCTL; in l2cap_sock_connect()
236 err = l2cap_chan_connect(chan, la.l2_psm, __le16_to_cpu(la.l2_cid), in l2cap_sock_connect()
254 struct l2cap_chan *chan = l2cap_pi(sk)->chan; in l2cap_sock_listen() local
271 switch (chan->mode) { in l2cap_sock_listen()
292 atomic_set(&chan->nesting, L2CAP_NESTING_PARENT); in l2cap_sock_listen()
294 chan->state = BT_LISTEN; in l2cap_sock_listen()
363 struct l2cap_chan *chan = l2cap_pi(sk)->chan; in l2cap_sock_getname() local
376 la->l2_psm = chan->psm; in l2cap_sock_getname()
379 bacpy(&la->l2_bdaddr, &chan->dst); in l2cap_sock_getname()
380 la->l2_cid = cpu_to_le16(chan->dcid); in l2cap_sock_getname()
381 la->l2_bdaddr_type = chan->dst_type; in l2cap_sock_getname()
383 bacpy(&la->l2_bdaddr, &chan->src); in l2cap_sock_getname()
384 la->l2_cid = cpu_to_le16(chan->scid); in l2cap_sock_getname()
385 la->l2_bdaddr_type = chan->src_type; in l2cap_sock_getname()
395 struct l2cap_chan *chan = l2cap_pi(sk)->chan; in l2cap_sock_getsockopt_old() local
414 if (bdaddr_type_is_le(chan->src_type) && in l2cap_sock_getsockopt_old()
415 chan->scid != L2CAP_CID_ATT) { in l2cap_sock_getsockopt_old()
421 opts.imtu = chan->imtu; in l2cap_sock_getsockopt_old()
422 opts.omtu = chan->omtu; in l2cap_sock_getsockopt_old()
423 opts.flush_to = chan->flush_to; in l2cap_sock_getsockopt_old()
424 opts.mode = chan->mode; in l2cap_sock_getsockopt_old()
425 opts.fcs = chan->fcs; in l2cap_sock_getsockopt_old()
426 opts.max_tx = chan->max_tx; in l2cap_sock_getsockopt_old()
427 opts.txwin_size = chan->tx_win; in l2cap_sock_getsockopt_old()
436 switch (chan->sec_level) { in l2cap_sock_getsockopt_old()
456 if (test_bit(FLAG_ROLE_SWITCH, &chan->flags)) in l2cap_sock_getsockopt_old()
459 if (test_bit(FLAG_FORCE_RELIABLE, &chan->flags)) in l2cap_sock_getsockopt_old()
476 cinfo.hci_handle = chan->conn->hcon->handle; in l2cap_sock_getsockopt_old()
477 memcpy(cinfo.dev_class, chan->conn->hcon->dev_class, 3); in l2cap_sock_getsockopt_old()
498 struct l2cap_chan *chan = l2cap_pi(sk)->chan; in l2cap_sock_getsockopt() local
518 if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED && in l2cap_sock_getsockopt()
519 chan->chan_type != L2CAP_CHAN_FIXED && in l2cap_sock_getsockopt()
520 chan->chan_type != L2CAP_CHAN_RAW) { in l2cap_sock_getsockopt()
526 if (chan->conn) { in l2cap_sock_getsockopt()
527 sec.level = chan->conn->hcon->sec_level; in l2cap_sock_getsockopt()
530 sec.key_size = chan->conn->hcon->enc_key_size; in l2cap_sock_getsockopt()
532 sec.level = chan->sec_level; in l2cap_sock_getsockopt()
554 if (put_user(test_bit(FLAG_FLUSHABLE, &chan->flags), in l2cap_sock_getsockopt()
567 pwr.force_active = test_bit(FLAG_FORCE_ACTIVE, &chan->flags); in l2cap_sock_getsockopt()
576 if (put_user(chan->chan_policy, (u32 __user *) optval)) in l2cap_sock_getsockopt()
581 if (!bdaddr_type_is_le(chan->src_type)) { in l2cap_sock_getsockopt()
591 if (put_user(chan->omtu, (u16 __user *) optval)) in l2cap_sock_getsockopt()
596 if (!bdaddr_type_is_le(chan->src_type)) { in l2cap_sock_getsockopt()
601 if (put_user(chan->imtu, (u16 __user *) optval)) in l2cap_sock_getsockopt()
614 static bool l2cap_valid_mtu(struct l2cap_chan *chan, u16 mtu) in l2cap_valid_mtu() argument
616 switch (chan->scid) { in l2cap_valid_mtu()
634 struct l2cap_chan *chan = l2cap_pi(sk)->chan; in l2cap_sock_setsockopt_old() local
645 if (bdaddr_type_is_le(chan->src_type)) { in l2cap_sock_setsockopt_old()
655 opts.imtu = chan->imtu; in l2cap_sock_setsockopt_old()
656 opts.omtu = chan->omtu; in l2cap_sock_setsockopt_old()
657 opts.flush_to = chan->flush_to; in l2cap_sock_setsockopt_old()
658 opts.mode = chan->mode; in l2cap_sock_setsockopt_old()
659 opts.fcs = chan->fcs; in l2cap_sock_setsockopt_old()
660 opts.max_tx = chan->max_tx; in l2cap_sock_setsockopt_old()
661 opts.txwin_size = chan->tx_win; in l2cap_sock_setsockopt_old()
674 if (!l2cap_valid_mtu(chan, opts.imtu)) { in l2cap_sock_setsockopt_old()
679 chan->mode = opts.mode; in l2cap_sock_setsockopt_old()
680 switch (chan->mode) { in l2cap_sock_setsockopt_old()
684 clear_bit(CONF_STATE2_DEVICE, &chan->conf_state); in l2cap_sock_setsockopt_old()
696 chan->imtu = opts.imtu; in l2cap_sock_setsockopt_old()
697 chan->omtu = opts.omtu; in l2cap_sock_setsockopt_old()
698 chan->fcs = opts.fcs; in l2cap_sock_setsockopt_old()
699 chan->max_tx = opts.max_tx; in l2cap_sock_setsockopt_old()
700 chan->tx_win = opts.txwin_size; in l2cap_sock_setsockopt_old()
701 chan->flush_to = opts.flush_to; in l2cap_sock_setsockopt_old()
716 chan->sec_level = BT_SECURITY_LOW; in l2cap_sock_setsockopt_old()
718 chan->sec_level = BT_SECURITY_MEDIUM; in l2cap_sock_setsockopt_old()
720 chan->sec_level = BT_SECURITY_HIGH; in l2cap_sock_setsockopt_old()
723 set_bit(FLAG_ROLE_SWITCH, &chan->flags); in l2cap_sock_setsockopt_old()
725 clear_bit(FLAG_ROLE_SWITCH, &chan->flags); in l2cap_sock_setsockopt_old()
728 set_bit(FLAG_FORCE_RELIABLE, &chan->flags); in l2cap_sock_setsockopt_old()
730 clear_bit(FLAG_FORCE_RELIABLE, &chan->flags); in l2cap_sock_setsockopt_old()
746 struct l2cap_chan *chan = l2cap_pi(sk)->chan; in l2cap_sock_setsockopt() local
765 if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED && in l2cap_sock_setsockopt()
766 chan->chan_type != L2CAP_CHAN_FIXED && in l2cap_sock_setsockopt()
767 chan->chan_type != L2CAP_CHAN_RAW) { in l2cap_sock_setsockopt()
786 chan->sec_level = sec.level; in l2cap_sock_setsockopt()
788 if (!chan->conn) in l2cap_sock_setsockopt()
791 conn = chan->conn; in l2cap_sock_setsockopt()
794 if (chan->scid == L2CAP_CID_ATT) { in l2cap_sock_setsockopt()
797 set_bit(FLAG_PENDING_SECURITY, &chan->flags); in l2cap_sock_setsockopt()
799 chan->state = BT_CONFIG; in l2cap_sock_setsockopt()
805 if (!l2cap_chan_check_security(chan, true)) in l2cap_sock_setsockopt()
827 set_bit(FLAG_DEFER_SETUP, &chan->flags); in l2cap_sock_setsockopt()
830 clear_bit(FLAG_DEFER_SETUP, &chan->flags); in l2cap_sock_setsockopt()
846 conn = chan->conn; in l2cap_sock_setsockopt()
856 set_bit(FLAG_FLUSHABLE, &chan->flags); in l2cap_sock_setsockopt()
858 clear_bit(FLAG_FLUSHABLE, &chan->flags); in l2cap_sock_setsockopt()
862 if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED && in l2cap_sock_setsockopt()
863 chan->chan_type != L2CAP_CHAN_RAW) { in l2cap_sock_setsockopt()
877 set_bit(FLAG_FORCE_ACTIVE, &chan->flags); in l2cap_sock_setsockopt()
879 clear_bit(FLAG_FORCE_ACTIVE, &chan->flags); in l2cap_sock_setsockopt()
893 if (chan->mode != L2CAP_MODE_ERTM && in l2cap_sock_setsockopt()
894 chan->mode != L2CAP_MODE_STREAMING) { in l2cap_sock_setsockopt()
899 chan->chan_policy = (u8) opt; in l2cap_sock_setsockopt()
902 chan->move_role == L2CAP_MOVE_ROLE_NONE) in l2cap_sock_setsockopt()
903 l2cap_move_start(chan); in l2cap_sock_setsockopt()
908 if (!bdaddr_type_is_le(chan->src_type)) { in l2cap_sock_setsockopt()
920 if (!bdaddr_type_is_le(chan->src_type)) { in l2cap_sock_setsockopt()
935 chan->imtu = opt; in l2cap_sock_setsockopt()
951 struct l2cap_chan *chan = l2cap_pi(sk)->chan; in l2cap_sock_sendmsg() local
972 l2cap_chan_lock(chan); in l2cap_sock_sendmsg()
973 err = l2cap_chan_send(chan, msg, len); in l2cap_sock_sendmsg()
974 l2cap_chan_unlock(chan); in l2cap_sock_sendmsg()
990 if (bdaddr_type_is_le(pi->chan->src_type)) { in l2cap_sock_recvmsg()
992 pi->chan->state = BT_CONNECTED; in l2cap_sock_recvmsg()
993 __l2cap_le_connect_rsp_defer(pi->chan); in l2cap_sock_recvmsg()
996 pi->chan->state = BT_CONFIG; in l2cap_sock_recvmsg()
997 __l2cap_connect_rsp_defer(pi->chan); in l2cap_sock_recvmsg()
1011 if (pi->chan->mode != L2CAP_MODE_ERTM) in l2cap_sock_recvmsg()
1018 if (!test_bit(CONN_LOCAL_BUSY, &pi->chan->conn_state)) in l2cap_sock_recvmsg()
1033 l2cap_chan_busy(pi->chan, 0); in l2cap_sock_recvmsg()
1052 l2cap_chan_put(l2cap_pi(sk)->chan); in l2cap_sock_kill()
1057 static int __l2cap_wait_ack(struct sock *sk, struct l2cap_chan *chan) in __l2cap_wait_ack() argument
1069 chan->unacked_frames, time_after(jiffies, timeout) ? 0 : in __l2cap_wait_ack()
1094 } while (chan->unacked_frames > 0 && in __l2cap_wait_ack()
1095 chan->state == BT_CONNECTED); in __l2cap_wait_ack()
1105 struct l2cap_chan *chan; in l2cap_sock_shutdown() local
1124 chan = l2cap_pi(sk)->chan; in l2cap_sock_shutdown()
1126 l2cap_chan_hold(chan); in l2cap_sock_shutdown()
1128 BT_DBG("chan %p state %s", chan, state_to_string(chan->state)); in l2cap_sock_shutdown()
1130 if (chan->mode == L2CAP_MODE_ERTM && in l2cap_sock_shutdown()
1131 chan->unacked_frames > 0 && in l2cap_sock_shutdown()
1132 chan->state == BT_CONNECTED) { in l2cap_sock_shutdown()
1133 err = __l2cap_wait_ack(sk, chan); in l2cap_sock_shutdown()
1146 l2cap_chan_lock(chan); in l2cap_sock_shutdown()
1147 conn = chan->conn; in l2cap_sock_shutdown()
1151 l2cap_chan_unlock(chan); in l2cap_sock_shutdown()
1157 l2cap_chan_lock(chan); in l2cap_sock_shutdown()
1158 l2cap_chan_close(chan, 0); in l2cap_sock_shutdown()
1159 l2cap_chan_unlock(chan); in l2cap_sock_shutdown()
1174 l2cap_chan_put(chan); in l2cap_sock_shutdown()
1216 struct l2cap_chan *chan = l2cap_pi(sk)->chan; in l2cap_sock_cleanup_listen() local
1218 BT_DBG("child chan %p state %s", chan, in l2cap_sock_cleanup_listen()
1219 state_to_string(chan->state)); in l2cap_sock_cleanup_listen()
1221 l2cap_chan_lock(chan); in l2cap_sock_cleanup_listen()
1222 __clear_chan_timer(chan); in l2cap_sock_cleanup_listen()
1223 l2cap_chan_close(chan, ECONNRESET); in l2cap_sock_cleanup_listen()
1224 l2cap_chan_unlock(chan); in l2cap_sock_cleanup_listen()
1230 static struct l2cap_chan *l2cap_sock_new_connection_cb(struct l2cap_chan *chan) in l2cap_sock_new_connection_cb() argument
1232 struct sock *sk, *parent = chan->data; in l2cap_sock_new_connection_cb()
1258 return l2cap_pi(sk)->chan; in l2cap_sock_new_connection_cb()
1261 static int l2cap_sock_recv_cb(struct l2cap_chan *chan, struct sk_buff *skb) in l2cap_sock_recv_cb() argument
1263 struct sock *sk = chan->data; in l2cap_sock_recv_cb()
1284 if (err < 0 && chan->mode == L2CAP_MODE_ERTM) { in l2cap_sock_recv_cb()
1286 l2cap_chan_busy(chan, 1); in l2cap_sock_recv_cb()
1296 static void l2cap_sock_close_cb(struct l2cap_chan *chan) in l2cap_sock_close_cb() argument
1298 struct sock *sk = chan->data; in l2cap_sock_close_cb()
1303 static void l2cap_sock_teardown_cb(struct l2cap_chan *chan, int err) in l2cap_sock_teardown_cb() argument
1305 struct sock *sk = chan->data; in l2cap_sock_teardown_cb()
1308 BT_DBG("chan %p state %s", chan, state_to_string(chan->state)); in l2cap_sock_teardown_cb()
1317 lock_sock_nested(sk, atomic_read(&chan->nesting)); in l2cap_sock_teardown_cb()
1323 switch (chan->state) { in l2cap_sock_teardown_cb()
1331 chan->state = BT_CLOSED; in l2cap_sock_teardown_cb()
1336 chan->state = BT_CLOSED; in l2cap_sock_teardown_cb()
1353 static void l2cap_sock_state_change_cb(struct l2cap_chan *chan, int state, in l2cap_sock_state_change_cb() argument
1356 struct sock *sk = chan->data; in l2cap_sock_state_change_cb()
1364 static struct sk_buff *l2cap_sock_alloc_skb_cb(struct l2cap_chan *chan, in l2cap_sock_alloc_skb_cb() argument
1368 struct sock *sk = chan->data; in l2cap_sock_alloc_skb_cb()
1372 l2cap_chan_unlock(chan); in l2cap_sock_alloc_skb_cb()
1374 l2cap_chan_lock(chan); in l2cap_sock_alloc_skb_cb()
1381 bt_cb(skb)->l2cap.chan = chan; in l2cap_sock_alloc_skb_cb()
1386 static void l2cap_sock_ready_cb(struct l2cap_chan *chan) in l2cap_sock_ready_cb() argument
1388 struct sock *sk = chan->data; in l2cap_sock_ready_cb()
1406 static void l2cap_sock_defer_cb(struct l2cap_chan *chan) in l2cap_sock_defer_cb() argument
1408 struct sock *parent, *sk = chan->data; in l2cap_sock_defer_cb()
1419 static void l2cap_sock_resume_cb(struct l2cap_chan *chan) in l2cap_sock_resume_cb() argument
1421 struct sock *sk = chan->data; in l2cap_sock_resume_cb()
1423 if (test_and_clear_bit(FLAG_PENDING_SECURITY, &chan->flags)) { in l2cap_sock_resume_cb()
1425 chan->state = BT_CONNECTED; in l2cap_sock_resume_cb()
1432 static void l2cap_sock_set_shutdown_cb(struct l2cap_chan *chan) in l2cap_sock_set_shutdown_cb() argument
1434 struct sock *sk = chan->data; in l2cap_sock_set_shutdown_cb()
1441 static long l2cap_sock_get_sndtimeo_cb(struct l2cap_chan *chan) in l2cap_sock_get_sndtimeo_cb() argument
1443 struct sock *sk = chan->data; in l2cap_sock_get_sndtimeo_cb()
1448 static void l2cap_sock_suspend_cb(struct l2cap_chan *chan) in l2cap_sock_suspend_cb() argument
1450 struct sock *sk = chan->data; in l2cap_sock_suspend_cb()
1476 if (l2cap_pi(sk)->chan) in l2cap_sock_destruct()
1477 l2cap_chan_put(l2cap_pi(sk)->chan); in l2cap_sock_destruct()
1503 struct l2cap_chan *chan = l2cap_pi(sk)->chan; in l2cap_sock_init() local
1508 struct l2cap_chan *pchan = l2cap_pi(parent)->chan; in l2cap_sock_init()
1513 chan->chan_type = pchan->chan_type; in l2cap_sock_init()
1514 chan->imtu = pchan->imtu; in l2cap_sock_init()
1515 chan->omtu = pchan->omtu; in l2cap_sock_init()
1516 chan->conf_state = pchan->conf_state; in l2cap_sock_init()
1517 chan->mode = pchan->mode; in l2cap_sock_init()
1518 chan->fcs = pchan->fcs; in l2cap_sock_init()
1519 chan->max_tx = pchan->max_tx; in l2cap_sock_init()
1520 chan->tx_win = pchan->tx_win; in l2cap_sock_init()
1521 chan->tx_win_max = pchan->tx_win_max; in l2cap_sock_init()
1522 chan->sec_level = pchan->sec_level; in l2cap_sock_init()
1523 chan->flags = pchan->flags; in l2cap_sock_init()
1524 chan->tx_credits = pchan->tx_credits; in l2cap_sock_init()
1525 chan->rx_credits = pchan->rx_credits; in l2cap_sock_init()
1527 if (chan->chan_type == L2CAP_CHAN_FIXED) { in l2cap_sock_init()
1528 chan->scid = pchan->scid; in l2cap_sock_init()
1529 chan->dcid = pchan->scid; in l2cap_sock_init()
1536 chan->chan_type = L2CAP_CHAN_RAW; in l2cap_sock_init()
1539 chan->chan_type = L2CAP_CHAN_CONN_LESS; in l2cap_sock_init()
1544 chan->chan_type = L2CAP_CHAN_CONN_ORIENTED; in l2cap_sock_init()
1548 chan->imtu = L2CAP_DEFAULT_MTU; in l2cap_sock_init()
1549 chan->omtu = 0; in l2cap_sock_init()
1551 chan->mode = L2CAP_MODE_ERTM; in l2cap_sock_init()
1552 set_bit(CONF_STATE2_DEVICE, &chan->conf_state); in l2cap_sock_init()
1554 chan->mode = L2CAP_MODE_BASIC; in l2cap_sock_init()
1557 l2cap_chan_set_defaults(chan); in l2cap_sock_init()
1561 chan->flush_to = L2CAP_DEFAULT_FLUSH_TO; in l2cap_sock_init()
1563 chan->data = sk; in l2cap_sock_init()
1564 chan->ops = &l2cap_chan_ops; in l2cap_sock_init()
1577 struct l2cap_chan *chan; in l2cap_sock_alloc() local
1594 chan = l2cap_chan_create(); in l2cap_sock_alloc()
1595 if (!chan) { in l2cap_sock_alloc()
1600 l2cap_chan_hold(chan); in l2cap_sock_alloc()
1602 l2cap_pi(sk)->chan = chan; in l2cap_sock_alloc()