Lines Matching refs:iucv
151 struct iucv_sock *iucv; in afiucv_pm_freeze() local
160 iucv = iucv_sk(sk); in afiucv_pm_freeze()
174 skb_queue_purge(&iucv->send_skb_q); in afiucv_pm_freeze()
175 skb_queue_purge(&iucv->backlog_skb_q); in afiucv_pm_freeze()
287 struct iucv_sock *iucv = iucv_sk(sk); in iucv_below_msglim() local
291 if (iucv->transport == AF_IUCV_TRANS_IUCV) in iucv_below_msglim()
292 return (skb_queue_len(&iucv->send_skb_q) < iucv->path->msglim); in iucv_below_msglim()
294 return ((atomic_read(&iucv->msg_sent) < iucv->msglimit_peer) && in iucv_below_msglim()
295 (atomic_read(&iucv->pendings) <= 0)); in iucv_below_msglim()
319 struct iucv_sock *iucv = iucv_sk(sock); in afiucv_hs_send() local
337 phs_hdr->window = iucv->msglimit; in afiucv_hs_send()
339 confirm_recv = atomic_read(&iucv->msg_recv); in afiucv_hs_send()
344 memcpy(phs_hdr->destUserID, iucv->dst_user_id, 8); in afiucv_hs_send()
345 memcpy(phs_hdr->destAppName, iucv->dst_name, 8); in afiucv_hs_send()
346 memcpy(phs_hdr->srcUserID, iucv->src_user_id, 8); in afiucv_hs_send()
347 memcpy(phs_hdr->srcAppName, iucv->src_name, 8); in afiucv_hs_send()
355 skb->dev = iucv->hs_dev; in afiucv_hs_send()
370 skb_queue_tail(&iucv->send_skb_q, nskb); in afiucv_hs_send()
373 skb_unlink(nskb, &iucv->send_skb_q); in afiucv_hs_send()
376 atomic_sub(confirm_recv, &iucv->msg_recv); in afiucv_hs_send()
377 WARN_ON(atomic_read(&iucv->msg_recv) < 0); in afiucv_hs_send()
440 struct iucv_sock *iucv = iucv_sk(sk); in iucv_sever_path() local
441 struct iucv_path *path = iucv->path; in iucv_sever_path()
443 if (iucv->path) { in iucv_sever_path()
444 iucv->path = NULL; in iucv_sever_path()
446 low_nmcpy(user_data, iucv->src_name); in iucv_sever_path()
447 high_nmcpy(user_data, iucv->dst_name); in iucv_sever_path()
475 struct iucv_sock *iucv = iucv_sk(sk); in iucv_sock_close() local
487 if (iucv->transport == AF_IUCV_TRANS_HIPER) { in iucv_sock_close()
496 if (!err && !skb_queue_empty(&iucv->send_skb_q)) { in iucv_sock_close()
513 skb_queue_purge(&iucv->send_skb_q); in iucv_sock_close()
514 skb_queue_purge(&iucv->backlog_skb_q); in iucv_sock_close()
520 if (iucv->hs_dev) { in iucv_sock_close()
521 dev_put(iucv->hs_dev); in iucv_sock_close()
522 iucv->hs_dev = NULL; in iucv_sock_close()
541 struct iucv_sock *iucv; in iucv_sock_alloc() local
546 iucv = iucv_sk(sk); in iucv_sock_alloc()
549 INIT_LIST_HEAD(&iucv->accept_q); in iucv_sock_alloc()
550 spin_lock_init(&iucv->accept_q_lock); in iucv_sock_alloc()
551 skb_queue_head_init(&iucv->send_skb_q); in iucv_sock_alloc()
552 INIT_LIST_HEAD(&iucv->message_q.list); in iucv_sock_alloc()
553 spin_lock_init(&iucv->message_q.lock); in iucv_sock_alloc()
554 skb_queue_head_init(&iucv->backlog_skb_q); in iucv_sock_alloc()
555 iucv->send_tag = 0; in iucv_sock_alloc()
556 atomic_set(&iucv->pendings, 0); in iucv_sock_alloc()
557 iucv->flags = 0; in iucv_sock_alloc()
558 iucv->msglimit = 0; in iucv_sock_alloc()
559 atomic_set(&iucv->msg_sent, 0); in iucv_sock_alloc()
560 atomic_set(&iucv->msg_recv, 0); in iucv_sock_alloc()
561 iucv->path = NULL; in iucv_sock_alloc()
562 iucv->sk_txnotify = afiucv_hs_callback_txnotify; in iucv_sock_alloc()
563 memset(&iucv->src_user_id , 0, 32); in iucv_sock_alloc()
565 iucv->transport = AF_IUCV_TRANS_IUCV; in iucv_sock_alloc()
567 iucv->transport = AF_IUCV_TRANS_HIPER; in iucv_sock_alloc()
685 static void __iucv_auto_name(struct iucv_sock *iucv) in __iucv_auto_name() argument
694 memcpy(iucv->src_name, name, 8); in __iucv_auto_name()
703 struct iucv_sock *iucv; in iucv_sock_bind() local
723 iucv = iucv_sk(sk); in iucv_sock_bind()
728 if (iucv->path) in iucv_sock_bind()
742 memcpy(iucv->src_user_id, sa->siucv_user_id, 8); in iucv_sock_bind()
745 __iucv_auto_name(iucv); in iucv_sock_bind()
747 memcpy(iucv->src_name, sa->siucv_name, 8); in iucv_sock_bind()
749 iucv->hs_dev = dev; in iucv_sock_bind()
752 iucv->transport = AF_IUCV_TRANS_HIPER; in iucv_sock_bind()
753 if (!iucv->msglimit) in iucv_sock_bind()
754 iucv->msglimit = IUCV_HIPER_MSGLIM_DEFAULT; in iucv_sock_bind()
763 memcpy(iucv->src_name, sa->siucv_name, 8); in iucv_sock_bind()
764 memcpy(iucv->src_user_id, iucv_userid, 8); in iucv_sock_bind()
766 iucv->transport = AF_IUCV_TRANS_IUCV; in iucv_sock_bind()
767 if (!iucv->msglimit) in iucv_sock_bind()
768 iucv->msglimit = IUCV_QUEUELEN_DEFAULT; in iucv_sock_bind()
784 struct iucv_sock *iucv = iucv_sk(sk); in iucv_sock_autobind() local
790 memcpy(iucv->src_user_id, iucv_userid, 8); in iucv_sock_autobind()
793 __iucv_auto_name(iucv); in iucv_sock_autobind()
796 if (!iucv->msglimit) in iucv_sock_autobind()
797 iucv->msglimit = IUCV_QUEUELEN_DEFAULT; in iucv_sock_autobind()
806 struct iucv_sock *iucv = iucv_sk(sk); in afiucv_path_connect() local
811 low_nmcpy(user_data, iucv->src_name); in afiucv_path_connect()
815 iucv->path = iucv_path_alloc(iucv->msglimit, in afiucv_path_connect()
817 if (!iucv->path) { in afiucv_path_connect()
821 err = pr_iucv->path_connect(iucv->path, &af_iucv_handler, in afiucv_path_connect()
825 iucv_path_free(iucv->path); in afiucv_path_connect()
826 iucv->path = NULL; in afiucv_path_connect()
853 struct iucv_sock *iucv = iucv_sk(sk); in iucv_sock_connect() local
863 iucv->transport == AF_IUCV_TRANS_HIPER) in iucv_sock_connect()
878 memcpy(iucv->dst_user_id, sa->siucv_user_id, 8); in iucv_sock_connect()
879 memcpy(iucv->dst_name, sa->siucv_name, 8); in iucv_sock_connect()
881 if (iucv->transport == AF_IUCV_TRANS_HIPER) in iucv_sock_connect()
896 if (err && iucv->transport == AF_IUCV_TRANS_IUCV) in iucv_sock_connect()
989 struct iucv_sock *iucv = iucv_sk(sk); in iucv_sock_getname() local
995 memcpy(siucv->siucv_user_id, iucv->dst_user_id, 8); in iucv_sock_getname()
996 memcpy(siucv->siucv_name, iucv->dst_name, 8); in iucv_sock_getname()
998 memcpy(siucv->siucv_user_id, iucv->src_user_id, 8); in iucv_sock_getname()
999 memcpy(siucv->siucv_name, iucv->src_name, 8); in iucv_sock_getname()
1036 struct iucv_sock *iucv = iucv_sk(sk); in iucv_sock_sendmsg() local
1114 if (iucv->transport == AF_IUCV_TRANS_HIPER) in iucv_sock_sendmsg()
1122 if (iucv->transport == AF_IUCV_TRANS_HIPER) in iucv_sock_sendmsg()
1142 txmsg.tag = iucv->send_tag++; in iucv_sock_sendmsg()
1145 if (iucv->transport == AF_IUCV_TRANS_HIPER) { in iucv_sock_sendmsg()
1146 atomic_inc(&iucv->msg_sent); in iucv_sock_sendmsg()
1149 atomic_dec(&iucv->msg_sent); in iucv_sock_sendmsg()
1154 skb_queue_tail(&iucv->send_skb_q, skb); in iucv_sock_sendmsg()
1156 if (((iucv->path->flags & IUCV_IPRMDATA) & iucv->flags) in iucv_sock_sendmsg()
1158 err = iucv_send_iprm(iucv->path, &txmsg, skb); in iucv_sock_sendmsg()
1163 skb_unlink(skb, &iucv->send_skb_q); in iucv_sock_sendmsg()
1170 pr_iucv->path_sever(iucv->path, NULL); in iucv_sock_sendmsg()
1171 skb_unlink(skb, &iucv->send_skb_q); in iucv_sock_sendmsg()
1176 err = pr_iucv->message_send(iucv->path, &txmsg, 0, 0, in iucv_sock_sendmsg()
1181 memcpy(user_id, iucv->dst_user_id, 8); in iucv_sock_sendmsg()
1183 memcpy(appl_id, iucv->dst_name, 8); in iucv_sock_sendmsg()
1190 skb_unlink(skb, &iucv->send_skb_q); in iucv_sock_sendmsg()
1305 struct iucv_sock *iucv = iucv_sk(sk); in iucv_process_message_q() local
1309 list_for_each_entry_safe(p, n, &iucv->message_q.list, list) { in iucv_process_message_q()
1316 if (!skb_queue_empty(&iucv->backlog_skb_q)) in iucv_process_message_q()
1326 struct iucv_sock *iucv = iucv_sk(sk); in iucv_sock_recvmsg() local
1333 skb_queue_empty(&iucv->backlog_skb_q) && in iucv_sock_recvmsg()
1335 list_empty(&iucv->message_q.list)) in iucv_sock_recvmsg()
1396 if (iucv->transport == AF_IUCV_TRANS_HIPER) { in iucv_sock_recvmsg()
1397 atomic_inc(&iucv->msg_recv); in iucv_sock_recvmsg()
1398 if (atomic_read(&iucv->msg_recv) > iucv->msglimit) { in iucv_sock_recvmsg()
1406 spin_lock_bh(&iucv->message_q.lock); in iucv_sock_recvmsg()
1407 rskb = skb_dequeue(&iucv->backlog_skb_q); in iucv_sock_recvmsg()
1411 skb_queue_head(&iucv->backlog_skb_q, in iucv_sock_recvmsg()
1415 rskb = skb_dequeue(&iucv->backlog_skb_q); in iucv_sock_recvmsg()
1418 if (skb_queue_empty(&iucv->backlog_skb_q)) { in iucv_sock_recvmsg()
1419 if (!list_empty(&iucv->message_q.list)) in iucv_sock_recvmsg()
1421 if (atomic_read(&iucv->msg_recv) >= in iucv_sock_recvmsg()
1422 iucv->msglimit / 2) { in iucv_sock_recvmsg()
1430 spin_unlock_bh(&iucv->message_q.lock); in iucv_sock_recvmsg()
1498 struct iucv_sock *iucv = iucv_sk(sk); in iucv_sock_shutdown() local
1520 if (iucv->transport == AF_IUCV_TRANS_IUCV) { in iucv_sock_shutdown()
1523 err = pr_iucv->message_send(iucv->path, &txmsg, in iucv_sock_shutdown()
1544 if ((iucv->transport == AF_IUCV_TRANS_IUCV) && in iucv_sock_shutdown()
1545 iucv->path) { in iucv_sock_shutdown()
1546 err = pr_iucv->path_quiesce(iucv->path, NULL); in iucv_sock_shutdown()
1582 struct iucv_sock *iucv = iucv_sk(sk); in iucv_sock_setsockopt() local
1601 iucv->flags |= IUCV_IPRMDATA; in iucv_sock_setsockopt()
1603 iucv->flags &= ~IUCV_IPRMDATA; in iucv_sock_setsockopt()
1612 iucv->msglimit = val; in iucv_sock_setsockopt()
1632 struct iucv_sock *iucv = iucv_sk(sk); in iucv_sock_getsockopt() local
1649 val = (iucv->flags & IUCV_IPRMDATA) ? 1 : 0; in iucv_sock_getsockopt()
1653 val = (iucv->path != NULL) ? iucv->path->msglim /* connected */ in iucv_sock_getsockopt()
1654 : iucv->msglimit; /* default */ in iucv_sock_getsockopt()
1660 val = (iucv->hs_dev) ? iucv->hs_dev->mtu - in iucv_sock_getsockopt()
1685 struct iucv_sock *iucv, *niucv; in iucv_callback_connreq() local
1692 iucv = NULL; in iucv_callback_connreq()
1701 iucv = iucv_sk(sk); in iucv_callback_connreq()
1705 if (!iucv) in iucv_callback_connreq()
1712 low_nmcpy(user_data, iucv->src_name); in iucv_callback_connreq()
1713 high_nmcpy(user_data, iucv->dst_name); in iucv_callback_connreq()
1743 memcpy(niucv->src_name, iucv->src_name, 8); in iucv_callback_connreq()
1744 memcpy(niucv->src_user_id, iucv->src_user_id, 8); in iucv_callback_connreq()
1753 niucv->msglimit = iucv->msglimit; in iucv_callback_connreq()
1754 path->msglim = iucv->msglimit; in iucv_callback_connreq()
1784 struct iucv_sock *iucv = iucv_sk(sk); in iucv_callback_rx() local
1794 spin_lock(&iucv->message_q.lock); in iucv_callback_rx()
1796 if (!list_empty(&iucv->message_q.list) || in iucv_callback_rx()
1797 !skb_queue_empty(&iucv->backlog_skb_q)) in iucv_callback_rx()
1819 list_add_tail(&save_msg->list, &iucv->message_q.list); in iucv_callback_rx()
1822 spin_unlock(&iucv->message_q.lock); in iucv_callback_rx()
1925 struct iucv_sock *iucv, *niucv; in afiucv_hs_callback_syn() local
1929 iucv = iucv_sk(sk); in afiucv_hs_callback_syn()
1931 if (!iucv) { in afiucv_hs_callback_syn()
1956 niucv->msglimit = iucv->msglimit; in afiucv_hs_callback_syn()
1963 memcpy(niucv->src_name, iucv->src_name, 8); in afiucv_hs_callback_syn()
1964 memcpy(niucv->src_user_id, iucv->src_user_id, 8); in afiucv_hs_callback_syn()
1966 niucv->hs_dev = iucv->hs_dev; in afiucv_hs_callback_syn()
1990 struct iucv_sock *iucv = iucv_sk(sk); in afiucv_hs_callback_synack() local
1994 if (!iucv) in afiucv_hs_callback_synack()
1999 iucv->msglimit_peer = trans_hdr->window; in afiucv_hs_callback_synack()
2013 struct iucv_sock *iucv = iucv_sk(sk); in afiucv_hs_callback_synfin() local
2015 if (!iucv) in afiucv_hs_callback_synfin()
2033 struct iucv_sock *iucv = iucv_sk(sk); in afiucv_hs_callback_fin() local
2036 if (!iucv) in afiucv_hs_callback_fin()
2054 struct iucv_sock *iucv = iucv_sk(sk); in afiucv_hs_callback_win() local
2058 if (!iucv) in afiucv_hs_callback_win()
2064 atomic_sub(trans_hdr->window, &iucv->msg_sent); in afiucv_hs_callback_win()
2074 struct iucv_sock *iucv = iucv_sk(sk); in afiucv_hs_callback_rx() local
2076 if (!iucv) { in afiucv_hs_callback_rx()
2100 spin_lock(&iucv->message_q.lock); in afiucv_hs_callback_rx()
2101 if (skb_queue_empty(&iucv->backlog_skb_q)) { in afiucv_hs_callback_rx()
2104 skb_queue_tail(&iucv->backlog_skb_q, skb); in afiucv_hs_callback_rx()
2108 spin_unlock(&iucv->message_q.lock); in afiucv_hs_callback_rx()
2121 struct iucv_sock *iucv; in afiucv_hs_rcv() local
2133 iucv = NULL; in afiucv_hs_rcv()
2145 iucv = iucv_sk(sk); in afiucv_hs_rcv()
2157 iucv = iucv_sk(sk); in afiucv_hs_rcv()
2163 if (!iucv) in afiucv_hs_rcv()
2223 struct iucv_sock *iucv = NULL; in afiucv_hs_callback_txnotify() local
2232 iucv = iucv_sk(sk); in afiucv_hs_callback_txnotify()
2237 if (!iucv || sock_flag(sk, SOCK_ZAPPED)) in afiucv_hs_callback_txnotify()
2240 list = &iucv->send_skb_q; in afiucv_hs_callback_txnotify()
2255 atomic_inc(&iucv->pendings); in afiucv_hs_callback_txnotify()
2259 atomic_dec(&iucv->pendings); in afiucv_hs_callback_txnotify()
2260 if (atomic_read(&iucv->pendings) <= 0) in afiucv_hs_callback_txnotify()
2302 struct iucv_sock *iucv; in afiucv_netdev_event() local
2308 iucv = iucv_sk(sk); in afiucv_netdev_event()
2309 if ((iucv->hs_dev == event_dev) && in afiucv_netdev_event()