Lines Matching refs:sk
29 struct sock *sk; member
41 static void iso_sock_close(struct sock *sk);
42 static void iso_sock_kill(struct sock *sk);
45 #define iso_pi(sk) ((struct iso_pinfo *)sk) argument
75 struct sock *sk; in iso_sock_timeout() local
78 sk = conn->sk; in iso_sock_timeout()
79 if (sk) in iso_sock_timeout()
80 sock_hold(sk); in iso_sock_timeout()
83 if (!sk) in iso_sock_timeout()
86 BT_DBG("sock %p state %d", sk, sk->sk_state); in iso_sock_timeout()
88 lock_sock(sk); in iso_sock_timeout()
89 sk->sk_err = ETIMEDOUT; in iso_sock_timeout()
90 sk->sk_state_change(sk); in iso_sock_timeout()
91 release_sock(sk); in iso_sock_timeout()
92 sock_put(sk); in iso_sock_timeout()
95 static void iso_sock_set_timer(struct sock *sk, long timeout) in iso_sock_set_timer() argument
97 if (!iso_pi(sk)->conn) in iso_sock_set_timer()
100 BT_DBG("sock %p state %d timeout %ld", sk, sk->sk_state, timeout); in iso_sock_set_timer()
101 cancel_delayed_work(&iso_pi(sk)->conn->timeout_work); in iso_sock_set_timer()
102 schedule_delayed_work(&iso_pi(sk)->conn->timeout_work, timeout); in iso_sock_set_timer()
105 static void iso_sock_clear_timer(struct sock *sk) in iso_sock_clear_timer() argument
107 if (!iso_pi(sk)->conn) in iso_sock_clear_timer()
110 BT_DBG("sock %p state %d", sk, sk->sk_state); in iso_sock_clear_timer()
111 cancel_delayed_work(&iso_pi(sk)->conn->timeout_work); in iso_sock_clear_timer()
139 static void iso_chan_del(struct sock *sk, int err) in iso_chan_del() argument
144 conn = iso_pi(sk)->conn; in iso_chan_del()
146 BT_DBG("sk %p, conn %p, err %d", sk, conn, err); in iso_chan_del()
150 conn->sk = NULL; in iso_chan_del()
151 iso_pi(sk)->conn = NULL; in iso_chan_del()
158 sk->sk_state = BT_CLOSED; in iso_chan_del()
159 sk->sk_err = err; in iso_chan_del()
161 parent = bt_sk(sk)->parent; in iso_chan_del()
163 bt_accept_unlink(sk); in iso_chan_del()
166 sk->sk_state_change(sk); in iso_chan_del()
169 sock_set_flag(sk, SOCK_ZAPPED); in iso_chan_del()
175 struct sock *sk; in iso_conn_del() local
184 sk = conn->sk; in iso_conn_del()
185 if (sk) in iso_conn_del()
186 sock_hold(sk); in iso_conn_del()
189 if (sk) { in iso_conn_del()
190 lock_sock(sk); in iso_conn_del()
191 iso_sock_clear_timer(sk); in iso_conn_del()
192 iso_chan_del(sk, err); in iso_conn_del()
193 release_sock(sk); in iso_conn_del()
194 sock_put(sk); in iso_conn_del()
204 static int __iso_chan_add(struct iso_conn *conn, struct sock *sk, in __iso_chan_add() argument
209 if (iso_pi(sk)->conn == conn && conn->sk == sk) in __iso_chan_add()
212 if (conn->sk) { in __iso_chan_add()
217 iso_pi(sk)->conn = conn; in __iso_chan_add()
218 conn->sk = sk; in __iso_chan_add()
221 bt_accept_enqueue(parent, sk, true); in __iso_chan_add()
226 static int iso_chan_add(struct iso_conn *conn, struct sock *sk, in iso_chan_add() argument
232 err = __iso_chan_add(conn, sk, parent); in iso_chan_add()
246 static int iso_connect_bis(struct sock *sk) in iso_connect_bis() argument
253 BT_DBG("%pMR", &iso_pi(sk)->src); in iso_connect_bis()
255 hdev = hci_get_route(&iso_pi(sk)->dst, &iso_pi(sk)->src, in iso_connect_bis()
256 iso_pi(sk)->src_type); in iso_connect_bis()
268 if (!iso_pi(sk)->qos.out.phy) { in iso_connect_bis()
273 hcon = hci_connect_bis(hdev, &iso_pi(sk)->dst, iso_pi(sk)->dst_type, in iso_connect_bis()
274 &iso_pi(sk)->qos, iso_pi(sk)->base_len, in iso_connect_bis()
275 iso_pi(sk)->base); in iso_connect_bis()
289 bacpy(&iso_pi(sk)->src, &hcon->src); in iso_connect_bis()
291 err = iso_chan_add(conn, sk, NULL); in iso_connect_bis()
296 iso_sock_clear_timer(sk); in iso_connect_bis()
297 sk->sk_state = BT_CONNECTED; in iso_connect_bis()
299 sk->sk_state = BT_CONNECT; in iso_connect_bis()
300 iso_sock_set_timer(sk, sk->sk_sndtimeo); in iso_connect_bis()
309 static int iso_connect_cis(struct sock *sk) in iso_connect_cis() argument
316 BT_DBG("%pMR -> %pMR", &iso_pi(sk)->src, &iso_pi(sk)->dst); in iso_connect_cis()
318 hdev = hci_get_route(&iso_pi(sk)->dst, &iso_pi(sk)->src, in iso_connect_cis()
319 iso_pi(sk)->src_type); in iso_connect_cis()
331 if (!iso_pi(sk)->qos.in.phy && !iso_pi(sk)->qos.out.phy) { in iso_connect_cis()
337 if (test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags)) { in iso_connect_cis()
338 hcon = hci_bind_cis(hdev, &iso_pi(sk)->dst, in iso_connect_cis()
339 le_addr_type(iso_pi(sk)->dst_type), in iso_connect_cis()
340 &iso_pi(sk)->qos); in iso_connect_cis()
346 hcon = hci_connect_cis(hdev, &iso_pi(sk)->dst, in iso_connect_cis()
347 le_addr_type(iso_pi(sk)->dst_type), in iso_connect_cis()
348 &iso_pi(sk)->qos); in iso_connect_cis()
363 bacpy(&iso_pi(sk)->src, &hcon->src); in iso_connect_cis()
365 err = iso_chan_add(conn, sk, NULL); in iso_connect_cis()
370 iso_sock_clear_timer(sk); in iso_connect_cis()
371 sk->sk_state = BT_CONNECTED; in iso_connect_cis()
372 } else if (test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags)) { in iso_connect_cis()
373 iso_sock_clear_timer(sk); in iso_connect_cis()
374 sk->sk_state = BT_CONNECT; in iso_connect_cis()
376 sk->sk_state = BT_CONNECT; in iso_connect_cis()
377 iso_sock_set_timer(sk, sk->sk_sndtimeo); in iso_connect_cis()
386 static struct bt_iso_qos *iso_sock_get_qos(struct sock *sk) in iso_sock_get_qos() argument
388 if (sk->sk_state == BT_CONNECTED || sk->sk_state == BT_CONNECT2) in iso_sock_get_qos()
389 return &iso_pi(sk)->conn->hcon->iso_qos; in iso_sock_get_qos()
391 return &iso_pi(sk)->qos; in iso_sock_get_qos()
394 static int iso_send_frame(struct sock *sk, struct sk_buff *skb) in iso_send_frame() argument
396 struct iso_conn *conn = iso_pi(sk)->conn; in iso_send_frame()
397 struct bt_iso_qos *qos = iso_sock_get_qos(sk); in iso_send_frame()
401 BT_DBG("sk %p len %d", sk, skb->len); in iso_send_frame()
414 if (sk->sk_state == BT_CONNECTED) in iso_send_frame()
424 struct sock *sk; in iso_recv_frame() local
427 sk = conn->sk; in iso_recv_frame()
430 if (!sk) in iso_recv_frame()
433 BT_DBG("sk %p len %d", sk, skb->len); in iso_recv_frame()
435 if (sk->sk_state != BT_CONNECTED) in iso_recv_frame()
438 if (!sock_queue_rcv_skb(sk, skb)) in iso_recv_frame()
448 struct sock *sk; in __iso_get_sock_listen_by_addr() local
450 sk_for_each(sk, &iso_sk_list.head) { in __iso_get_sock_listen_by_addr()
451 if (sk->sk_state != BT_LISTEN) in __iso_get_sock_listen_by_addr()
454 if (!bacmp(&iso_pi(sk)->src, ba)) in __iso_get_sock_listen_by_addr()
455 return sk; in __iso_get_sock_listen_by_addr()
464 struct sock *sk; in __iso_get_sock_listen_by_sid() local
466 sk_for_each(sk, &iso_sk_list.head) { in __iso_get_sock_listen_by_sid()
467 if (sk->sk_state != BT_LISTEN) in __iso_get_sock_listen_by_sid()
470 if (bacmp(&iso_pi(sk)->src, ba)) in __iso_get_sock_listen_by_sid()
473 if (bacmp(&iso_pi(sk)->dst, bc)) in __iso_get_sock_listen_by_sid()
476 if (iso_pi(sk)->bc_sid == sid) in __iso_get_sock_listen_by_sid()
477 return sk; in __iso_get_sock_listen_by_sid()
483 typedef bool (*iso_sock_match_t)(struct sock *sk, void *data);
495 struct sock *sk = NULL, *sk1 = NULL; in iso_get_sock_listen() local
499 sk_for_each(sk, &iso_sk_list.head) { in iso_get_sock_listen()
500 if (sk->sk_state != BT_LISTEN) in iso_get_sock_listen()
504 if (bacmp(dst, BDADDR_ANY) && bacmp(&iso_pi(sk)->dst, dst)) in iso_get_sock_listen()
508 if (match && !match(sk, data)) in iso_get_sock_listen()
512 if (!bacmp(&iso_pi(sk)->src, src)) in iso_get_sock_listen()
516 if (!bacmp(&iso_pi(sk)->src, BDADDR_ANY)) in iso_get_sock_listen()
517 sk1 = sk; in iso_get_sock_listen()
522 return sk ? sk : sk1; in iso_get_sock_listen()
525 static void iso_sock_destruct(struct sock *sk) in iso_sock_destruct() argument
527 BT_DBG("sk %p", sk); in iso_sock_destruct()
529 skb_queue_purge(&sk->sk_receive_queue); in iso_sock_destruct()
530 skb_queue_purge(&sk->sk_write_queue); in iso_sock_destruct()
535 struct sock *sk; in iso_sock_cleanup_listen() local
540 while ((sk = bt_accept_dequeue(parent, NULL))) { in iso_sock_cleanup_listen()
541 iso_sock_close(sk); in iso_sock_cleanup_listen()
542 iso_sock_kill(sk); in iso_sock_cleanup_listen()
552 static void iso_sock_kill(struct sock *sk) in iso_sock_kill() argument
554 if (!sock_flag(sk, SOCK_ZAPPED) || sk->sk_socket || in iso_sock_kill()
555 sock_flag(sk, SOCK_DEAD)) in iso_sock_kill()
558 BT_DBG("sk %p state %d", sk, sk->sk_state); in iso_sock_kill()
561 bt_sock_unlink(&iso_sk_list, sk); in iso_sock_kill()
562 sock_set_flag(sk, SOCK_DEAD); in iso_sock_kill()
563 sock_put(sk); in iso_sock_kill()
578 static void __iso_sock_close(struct sock *sk) in __iso_sock_close() argument
580 BT_DBG("sk %p state %d socket %p", sk, sk->sk_state, sk->sk_socket); in __iso_sock_close()
582 switch (sk->sk_state) { in __iso_sock_close()
584 iso_sock_cleanup_listen(sk); in __iso_sock_close()
589 if (iso_pi(sk)->conn->hcon) { in __iso_sock_close()
590 sk->sk_state = BT_DISCONN; in __iso_sock_close()
591 iso_sock_set_timer(sk, ISO_DISCONN_TIMEOUT); in __iso_sock_close()
592 iso_conn_lock(iso_pi(sk)->conn); in __iso_sock_close()
593 hci_conn_drop(iso_pi(sk)->conn->hcon); in __iso_sock_close()
594 iso_pi(sk)->conn->hcon = NULL; in __iso_sock_close()
595 iso_conn_unlock(iso_pi(sk)->conn); in __iso_sock_close()
597 iso_chan_del(sk, ECONNRESET); in __iso_sock_close()
602 if (iso_pi(sk)->conn->hcon) in __iso_sock_close()
603 iso_conn_defer_reject(iso_pi(sk)->conn->hcon); in __iso_sock_close()
604 iso_chan_del(sk, ECONNRESET); in __iso_sock_close()
611 if (test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags) && in __iso_sock_close()
612 iso_pi(sk)->conn->hcon) { in __iso_sock_close()
613 hci_conn_del(iso_pi(sk)->conn->hcon); in __iso_sock_close()
614 iso_pi(sk)->conn->hcon = NULL; in __iso_sock_close()
617 iso_chan_del(sk, ECONNRESET); in __iso_sock_close()
620 iso_chan_del(sk, ECONNRESET); in __iso_sock_close()
624 sock_set_flag(sk, SOCK_ZAPPED); in __iso_sock_close()
630 static void iso_sock_close(struct sock *sk) in iso_sock_close() argument
632 iso_sock_clear_timer(sk); in iso_sock_close()
633 lock_sock(sk); in iso_sock_close()
634 __iso_sock_close(sk); in iso_sock_close()
635 release_sock(sk); in iso_sock_close()
636 iso_sock_kill(sk); in iso_sock_close()
639 static void iso_sock_init(struct sock *sk, struct sock *parent) in iso_sock_init() argument
641 BT_DBG("sk %p", sk); in iso_sock_init()
644 sk->sk_type = parent->sk_type; in iso_sock_init()
645 bt_sk(sk)->flags = bt_sk(parent)->flags; in iso_sock_init()
646 security_sk_clone(parent, sk); in iso_sock_init()
678 struct sock *sk; in iso_sock_alloc() local
680 sk = sk_alloc(net, PF_BLUETOOTH, prio, &iso_proto, kern); in iso_sock_alloc()
681 if (!sk) in iso_sock_alloc()
684 sock_init_data(sock, sk); in iso_sock_alloc()
685 INIT_LIST_HEAD(&bt_sk(sk)->accept_q); in iso_sock_alloc()
687 sk->sk_destruct = iso_sock_destruct; in iso_sock_alloc()
688 sk->sk_sndtimeo = ISO_CONN_TIMEOUT; in iso_sock_alloc()
690 sock_reset_flag(sk, SOCK_ZAPPED); in iso_sock_alloc()
692 sk->sk_protocol = proto; in iso_sock_alloc()
693 sk->sk_state = BT_OPEN; in iso_sock_alloc()
696 iso_pi(sk)->src_type = BDADDR_LE_PUBLIC; in iso_sock_alloc()
698 iso_pi(sk)->qos = default_qos; in iso_sock_alloc()
700 bt_sock_link(&iso_sk_list, sk); in iso_sock_alloc()
701 return sk; in iso_sock_alloc()
707 struct sock *sk; in iso_sock_create() local
718 sk = iso_sock_alloc(net, sock, protocol, GFP_ATOMIC, kern); in iso_sock_create()
719 if (!sk) in iso_sock_create()
722 iso_sock_init(sk, NULL); in iso_sock_create()
730 struct sock *sk = sock->sk; in iso_sock_bind_bc() local
733 BT_DBG("sk %p bc_sid %u bc_num_bis %u", sk, sa->iso_bc->bc_sid, in iso_sock_bind_bc()
740 bacpy(&iso_pi(sk)->dst, &sa->iso_bc->bc_bdaddr); in iso_sock_bind_bc()
741 iso_pi(sk)->dst_type = sa->iso_bc->bc_bdaddr_type; in iso_sock_bind_bc()
742 iso_pi(sk)->sync_handle = -1; in iso_sock_bind_bc()
743 iso_pi(sk)->bc_sid = sa->iso_bc->bc_sid; in iso_sock_bind_bc()
744 iso_pi(sk)->bc_num_bis = sa->iso_bc->bc_num_bis; in iso_sock_bind_bc()
746 for (i = 0; i < iso_pi(sk)->bc_num_bis; i++) { in iso_sock_bind_bc()
751 memcpy(iso_pi(sk)->bc_bis, sa->iso_bc->bc_bis, in iso_sock_bind_bc()
752 iso_pi(sk)->bc_num_bis); in iso_sock_bind_bc()
762 struct sock *sk = sock->sk; in iso_sock_bind() local
765 BT_DBG("sk %p %pMR type %u", sk, &sa->iso_bdaddr, sa->iso_bdaddr_type); in iso_sock_bind()
771 lock_sock(sk); in iso_sock_bind()
773 if (sk->sk_state != BT_OPEN) { in iso_sock_bind()
778 if (sk->sk_type != SOCK_SEQPACKET) { in iso_sock_bind()
789 bacpy(&iso_pi(sk)->src, &sa->iso_bdaddr); in iso_sock_bind()
790 iso_pi(sk)->src_type = sa->iso_bdaddr_type; in iso_sock_bind()
799 sk->sk_state = BT_BOUND; in iso_sock_bind()
802 release_sock(sk); in iso_sock_bind()
810 struct sock *sk = sock->sk; in iso_sock_connect() local
813 BT_DBG("sk %p", sk); in iso_sock_connect()
819 if (sk->sk_state != BT_OPEN && sk->sk_state != BT_BOUND) in iso_sock_connect()
822 if (sk->sk_type != SOCK_SEQPACKET) in iso_sock_connect()
829 lock_sock(sk); in iso_sock_connect()
831 bacpy(&iso_pi(sk)->dst, &sa->iso_bdaddr); in iso_sock_connect()
832 iso_pi(sk)->dst_type = sa->iso_bdaddr_type; in iso_sock_connect()
834 if (bacmp(&iso_pi(sk)->dst, BDADDR_ANY)) in iso_sock_connect()
835 err = iso_connect_cis(sk); in iso_sock_connect()
837 err = iso_connect_bis(sk); in iso_sock_connect()
842 if (!test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags)) { in iso_sock_connect()
843 err = bt_sock_wait_state(sk, BT_CONNECTED, in iso_sock_connect()
844 sock_sndtimeo(sk, flags & O_NONBLOCK)); in iso_sock_connect()
848 release_sock(sk); in iso_sock_connect()
852 static int iso_listen_bis(struct sock *sk) in iso_listen_bis() argument
857 BT_DBG("%pMR -> %pMR (SID 0x%2.2x)", &iso_pi(sk)->src, in iso_listen_bis()
858 &iso_pi(sk)->dst, iso_pi(sk)->bc_sid); in iso_listen_bis()
862 if (__iso_get_sock_listen_by_sid(&iso_pi(sk)->src, &iso_pi(sk)->dst, in iso_listen_bis()
863 iso_pi(sk)->bc_sid)) in iso_listen_bis()
871 hdev = hci_get_route(&iso_pi(sk)->dst, &iso_pi(sk)->src, in iso_listen_bis()
872 iso_pi(sk)->src_type); in iso_listen_bis()
878 err = hci_pa_create_sync(hdev, &iso_pi(sk)->dst, iso_pi(sk)->dst_type, in iso_listen_bis()
879 iso_pi(sk)->bc_sid); in iso_listen_bis()
887 static int iso_listen_cis(struct sock *sk) in iso_listen_cis() argument
891 BT_DBG("%pMR", &iso_pi(sk)->src); in iso_listen_cis()
895 if (__iso_get_sock_listen_by_addr(&iso_pi(sk)->src)) in iso_listen_cis()
905 struct sock *sk = sock->sk; in iso_sock_listen() local
908 BT_DBG("sk %p backlog %d", sk, backlog); in iso_sock_listen()
910 lock_sock(sk); in iso_sock_listen()
912 if (sk->sk_state != BT_BOUND) { in iso_sock_listen()
917 if (sk->sk_type != SOCK_SEQPACKET) { in iso_sock_listen()
922 if (!bacmp(&iso_pi(sk)->dst, BDADDR_ANY)) in iso_sock_listen()
923 err = iso_listen_cis(sk); in iso_sock_listen()
925 err = iso_listen_bis(sk); in iso_sock_listen()
930 sk->sk_max_ack_backlog = backlog; in iso_sock_listen()
931 sk->sk_ack_backlog = 0; in iso_sock_listen()
933 sk->sk_state = BT_LISTEN; in iso_sock_listen()
936 release_sock(sk); in iso_sock_listen()
944 struct sock *sk = sock->sk, *ch; in iso_sock_accept() local
948 lock_sock(sk); in iso_sock_accept()
950 timeo = sock_rcvtimeo(sk, flags & O_NONBLOCK); in iso_sock_accept()
952 BT_DBG("sk %p timeo %ld", sk, timeo); in iso_sock_accept()
955 add_wait_queue_exclusive(sk_sleep(sk), &wait); in iso_sock_accept()
957 if (sk->sk_state != BT_LISTEN) { in iso_sock_accept()
962 ch = bt_accept_dequeue(sk, newsock); in iso_sock_accept()
976 release_sock(sk); in iso_sock_accept()
979 lock_sock(sk); in iso_sock_accept()
981 remove_wait_queue(sk_sleep(sk), &wait); in iso_sock_accept()
991 release_sock(sk); in iso_sock_accept()
999 struct sock *sk = sock->sk; in iso_sock_getname() local
1001 BT_DBG("sock %p, sk %p", sock, sk); in iso_sock_getname()
1006 bacpy(&sa->iso_bdaddr, &iso_pi(sk)->dst); in iso_sock_getname()
1007 sa->iso_bdaddr_type = iso_pi(sk)->dst_type; in iso_sock_getname()
1009 bacpy(&sa->iso_bdaddr, &iso_pi(sk)->src); in iso_sock_getname()
1010 sa->iso_bdaddr_type = iso_pi(sk)->src_type; in iso_sock_getname()
1019 struct sock *sk = sock->sk; in iso_sock_sendmsg() local
1020 struct iso_conn *conn = iso_pi(sk)->conn; in iso_sock_sendmsg()
1024 BT_DBG("sock %p, sk %p", sock, sk); in iso_sock_sendmsg()
1026 err = sock_error(sk); in iso_sock_sendmsg()
1033 if (sk->sk_state != BT_CONNECTED) in iso_sock_sendmsg()
1036 skb = bt_skb_sendmsg(sk, msg, len, conn->hcon->hdev->iso_mtu, in iso_sock_sendmsg()
1043 BT_DBG("skb %p len %d", sk, skb->len); in iso_sock_sendmsg()
1050 tmp = bt_skb_sendmsg(sk, msg, len, conn->hcon->hdev->iso_mtu, in iso_sock_sendmsg()
1069 lock_sock(sk); in iso_sock_sendmsg()
1071 if (sk->sk_state == BT_CONNECTED) in iso_sock_sendmsg()
1072 err = iso_send_frame(sk, skb); in iso_sock_sendmsg()
1076 release_sock(sk); in iso_sock_sendmsg()
1100 struct sock *sk = sock->sk; in iso_sock_recvmsg() local
1101 struct iso_pinfo *pi = iso_pi(sk); in iso_sock_recvmsg()
1104 BT_DBG("sk %p", sk); in iso_sock_recvmsg()
1106 lock_sock(sk); in iso_sock_recvmsg()
1108 if (test_and_clear_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags)) { in iso_sock_recvmsg()
1109 switch (sk->sk_state) { in iso_sock_recvmsg()
1112 sk->sk_state = BT_CONFIG; in iso_sock_recvmsg()
1113 release_sock(sk); in iso_sock_recvmsg()
1116 err = iso_connect_cis(sk); in iso_sock_recvmsg()
1117 release_sock(sk); in iso_sock_recvmsg()
1122 release_sock(sk); in iso_sock_recvmsg()
1168 struct sock *sk = sock->sk; in iso_sock_setsockopt() local
1173 BT_DBG("sk %p", sk); in iso_sock_setsockopt()
1175 lock_sock(sk); in iso_sock_setsockopt()
1179 if (sk->sk_state != BT_BOUND && sk->sk_state != BT_LISTEN) { in iso_sock_setsockopt()
1190 set_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags); in iso_sock_setsockopt()
1192 clear_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags); in iso_sock_setsockopt()
1196 if (sk->sk_state != BT_OPEN && sk->sk_state != BT_BOUND && in iso_sock_setsockopt()
1197 sk->sk_state != BT_CONNECT2) { in iso_sock_setsockopt()
1220 iso_pi(sk)->qos = qos; in iso_sock_setsockopt()
1225 if (sk->sk_state != BT_OPEN && sk->sk_state != BT_BOUND && in iso_sock_setsockopt()
1226 sk->sk_state != BT_CONNECT2) { in iso_sock_setsockopt()
1231 if (optlen > sizeof(iso_pi(sk)->base)) { in iso_sock_setsockopt()
1236 len = min_t(unsigned int, sizeof(iso_pi(sk)->base), optlen); in iso_sock_setsockopt()
1238 if (copy_from_sockptr(iso_pi(sk)->base, optval, len)) { in iso_sock_setsockopt()
1243 iso_pi(sk)->base_len = len; in iso_sock_setsockopt()
1252 release_sock(sk); in iso_sock_setsockopt()
1259 struct sock *sk = sock->sk; in iso_sock_getsockopt() local
1265 BT_DBG("sk %p", sk); in iso_sock_getsockopt()
1270 lock_sock(sk); in iso_sock_getsockopt()
1274 if (sk->sk_state == BT_CONNECTED) { in iso_sock_getsockopt()
1279 if (put_user(test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags), in iso_sock_getsockopt()
1286 qos = iso_sock_get_qos(sk); in iso_sock_getsockopt()
1295 if (sk->sk_state == BT_CONNECTED) { in iso_sock_getsockopt()
1296 base_len = iso_pi(sk)->conn->hcon->le_per_adv_data_len; in iso_sock_getsockopt()
1297 base = iso_pi(sk)->conn->hcon->le_per_adv_data; in iso_sock_getsockopt()
1299 base_len = iso_pi(sk)->base_len; in iso_sock_getsockopt()
1300 base = iso_pi(sk)->base; in iso_sock_getsockopt()
1314 release_sock(sk); in iso_sock_getsockopt()
1320 struct sock *sk = sock->sk; in iso_sock_shutdown() local
1323 BT_DBG("sock %p, sk %p, how %d", sock, sk, how); in iso_sock_shutdown()
1325 if (!sk) in iso_sock_shutdown()
1328 sock_hold(sk); in iso_sock_shutdown()
1329 lock_sock(sk); in iso_sock_shutdown()
1333 if (sk->sk_shutdown & RCV_SHUTDOWN) in iso_sock_shutdown()
1335 sk->sk_shutdown |= RCV_SHUTDOWN; in iso_sock_shutdown()
1338 if (sk->sk_shutdown & SEND_SHUTDOWN) in iso_sock_shutdown()
1340 sk->sk_shutdown |= SEND_SHUTDOWN; in iso_sock_shutdown()
1343 if (sk->sk_shutdown & SHUTDOWN_MASK) in iso_sock_shutdown()
1345 sk->sk_shutdown |= SHUTDOWN_MASK; in iso_sock_shutdown()
1349 iso_sock_clear_timer(sk); in iso_sock_shutdown()
1350 __iso_sock_close(sk); in iso_sock_shutdown()
1352 if (sock_flag(sk, SOCK_LINGER) && sk->sk_lingertime && in iso_sock_shutdown()
1354 err = bt_sock_wait_state(sk, BT_CLOSED, sk->sk_lingertime); in iso_sock_shutdown()
1357 release_sock(sk); in iso_sock_shutdown()
1358 sock_put(sk); in iso_sock_shutdown()
1365 struct sock *sk = sock->sk; in iso_sock_release() local
1368 BT_DBG("sock %p, sk %p", sock, sk); in iso_sock_release()
1370 if (!sk) in iso_sock_release()
1373 iso_sock_close(sk); in iso_sock_release()
1375 if (sock_flag(sk, SOCK_LINGER) && sk->sk_lingertime && in iso_sock_release()
1377 lock_sock(sk); in iso_sock_release()
1378 err = bt_sock_wait_state(sk, BT_CLOSED, sk->sk_lingertime); in iso_sock_release()
1379 release_sock(sk); in iso_sock_release()
1382 sock_orphan(sk); in iso_sock_release()
1383 iso_sock_kill(sk); in iso_sock_release()
1387 static void iso_sock_ready(struct sock *sk) in iso_sock_ready() argument
1389 BT_DBG("sk %p", sk); in iso_sock_ready()
1391 if (!sk) in iso_sock_ready()
1394 lock_sock(sk); in iso_sock_ready()
1395 iso_sock_clear_timer(sk); in iso_sock_ready()
1396 sk->sk_state = BT_CONNECTED; in iso_sock_ready()
1397 sk->sk_state_change(sk); in iso_sock_ready()
1398 release_sock(sk); in iso_sock_ready()
1406 static bool iso_match_big(struct sock *sk, void *data) in iso_match_big() argument
1410 return ev->handle == iso_pi(sk)->qos.big; in iso_match_big()
1416 struct sock *sk = conn->sk; in iso_conn_ready() local
1421 if (sk) { in iso_conn_ready()
1422 iso_sock_ready(conn->sk); in iso_conn_ready()
1448 sk = iso_sock_alloc(sock_net(parent), NULL, in iso_conn_ready()
1450 if (!sk) { in iso_conn_ready()
1456 iso_sock_init(sk, parent); in iso_conn_ready()
1458 bacpy(&iso_pi(sk)->src, &conn->hcon->src); in iso_conn_ready()
1459 iso_pi(sk)->src_type = conn->hcon->src_type; in iso_conn_ready()
1471 bacpy(&iso_pi(sk)->dst, &conn->hcon->dst); in iso_conn_ready()
1472 iso_pi(sk)->dst_type = conn->hcon->dst_type; in iso_conn_ready()
1475 __iso_chan_add(conn, sk, parent); in iso_conn_ready()
1478 sk->sk_state = BT_CONNECT2; in iso_conn_ready()
1480 sk->sk_state = BT_CONNECTED; in iso_conn_ready()
1491 static bool iso_match_sid(struct sock *sk, void *data) in iso_match_sid() argument
1495 return ev->sid == iso_pi(sk)->bc_sid; in iso_match_sid()
1498 static bool iso_match_sync_handle(struct sock *sk, void *data) in iso_match_sync_handle() argument
1502 return le16_to_cpu(ev->sync_handle) == iso_pi(sk)->sync_handle; in iso_match_sync_handle()
1511 struct sock *sk; in iso_connect_ind() local
1529 sk = iso_get_sock_listen(&hdev->bdaddr, bdaddr, iso_match_sid, in iso_connect_ind()
1531 if (sk) in iso_connect_ind()
1532 iso_pi(sk)->sync_handle = le16_to_cpu(ev1->handle); in iso_connect_ind()
1539 sk = iso_get_sock_listen(&hdev->bdaddr, bdaddr, in iso_connect_ind()
1541 if (sk) { in iso_connect_ind()
1544 if (ev2->num_bis < iso_pi(sk)->bc_num_bis) in iso_connect_ind()
1545 iso_pi(sk)->bc_num_bis = ev2->num_bis; in iso_connect_ind()
1548 &iso_pi(sk)->qos, in iso_connect_ind()
1549 iso_pi(sk)->sync_handle, in iso_connect_ind()
1550 iso_pi(sk)->bc_num_bis, in iso_connect_ind()
1551 iso_pi(sk)->bc_bis); in iso_connect_ind()
1555 sk = NULL; in iso_connect_ind()
1559 sk = iso_get_sock_listen(&hdev->bdaddr, BDADDR_ANY, NULL, NULL); in iso_connect_ind()
1563 if (!sk) in iso_connect_ind()
1568 if (test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags)) in iso_connect_ind()
1744 struct sock *sk; in iso_debugfs_show() local
1748 sk_for_each(sk, &iso_sk_list.head) { in iso_debugfs_show()
1749 seq_printf(f, "%pMR %pMR %d\n", &iso_pi(sk)->src, in iso_debugfs_show()
1750 &iso_pi(sk)->dst, sk->sk_state); in iso_debugfs_show()