Lines Matching refs:iucv

180 	struct iucv_sock *iucv = iucv_sk(sk);  in iucv_below_msglim()  local
184 if (iucv->transport == AF_IUCV_TRANS_IUCV) in iucv_below_msglim()
185 return (skb_queue_len(&iucv->send_skb_q) < iucv->path->msglim); in iucv_below_msglim()
187 return ((atomic_read(&iucv->msg_sent) < iucv->msglimit_peer) && in iucv_below_msglim()
188 (atomic_read(&iucv->pendings) <= 0)); in iucv_below_msglim()
212 struct iucv_sock *iucv = iucv_sk(sock); in afiucv_hs_send() local
225 phs_hdr->window = iucv->msglimit; in afiucv_hs_send()
227 confirm_recv = atomic_read(&iucv->msg_recv); in afiucv_hs_send()
232 memcpy(phs_hdr->destUserID, iucv->dst_user_id, 8); in afiucv_hs_send()
233 memcpy(phs_hdr->destAppName, iucv->dst_name, 8); in afiucv_hs_send()
234 memcpy(phs_hdr->srcUserID, iucv->src_user_id, 8); in afiucv_hs_send()
235 memcpy(phs_hdr->srcAppName, iucv->src_name, 8); in afiucv_hs_send()
243 skb->dev = iucv->hs_dev; in afiucv_hs_send()
271 skb_queue_tail(&iucv->send_skb_q, nskb); in afiucv_hs_send()
274 skb_unlink(nskb, &iucv->send_skb_q); in afiucv_hs_send()
277 atomic_sub(confirm_recv, &iucv->msg_recv); in afiucv_hs_send()
278 WARN_ON(atomic_read(&iucv->msg_recv) < 0); in afiucv_hs_send()
359 struct iucv_sock *iucv = iucv_sk(sk); in iucv_sever_path() local
360 struct iucv_path *path = iucv->path; in iucv_sever_path()
362 if (iucv->path) { in iucv_sever_path()
363 iucv->path = NULL; in iucv_sever_path()
365 low_nmcpy(user_data, iucv->src_name); in iucv_sever_path()
366 high_nmcpy(user_data, iucv->dst_name); in iucv_sever_path()
378 struct iucv_sock *iucv = iucv_sk(sk); in iucv_send_ctrl() local
385 LL_RESERVED_SPACE(iucv->hs_dev); in iucv_send_ctrl()
404 struct iucv_sock *iucv = iucv_sk(sk); in iucv_sock_close() local
416 if (iucv->transport == AF_IUCV_TRANS_HIPER) { in iucv_sock_close()
427 if (!err && !skb_queue_empty(&iucv->send_skb_q)) { in iucv_sock_close()
445 skb_queue_purge(&iucv->send_skb_q); in iucv_sock_close()
446 skb_queue_purge(&iucv->backlog_skb_q); in iucv_sock_close()
453 if (iucv->hs_dev) { in iucv_sock_close()
454 dev_put(iucv->hs_dev); in iucv_sock_close()
455 iucv->hs_dev = NULL; in iucv_sock_close()
476 struct iucv_sock *iucv; in iucv_sock_alloc() local
481 iucv = iucv_sk(sk); in iucv_sock_alloc()
484 INIT_LIST_HEAD(&iucv->accept_q); in iucv_sock_alloc()
485 spin_lock_init(&iucv->accept_q_lock); in iucv_sock_alloc()
486 skb_queue_head_init(&iucv->send_skb_q); in iucv_sock_alloc()
487 INIT_LIST_HEAD(&iucv->message_q.list); in iucv_sock_alloc()
488 spin_lock_init(&iucv->message_q.lock); in iucv_sock_alloc()
489 skb_queue_head_init(&iucv->backlog_skb_q); in iucv_sock_alloc()
490 iucv->send_tag = 0; in iucv_sock_alloc()
491 atomic_set(&iucv->pendings, 0); in iucv_sock_alloc()
492 iucv->flags = 0; in iucv_sock_alloc()
493 iucv->msglimit = 0; in iucv_sock_alloc()
494 atomic_set(&iucv->msg_sent, 0); in iucv_sock_alloc()
495 atomic_set(&iucv->msg_recv, 0); in iucv_sock_alloc()
496 iucv->path = NULL; in iucv_sock_alloc()
497 iucv->sk_txnotify = afiucv_hs_callback_txnotify; in iucv_sock_alloc()
498 memset(&iucv->src_user_id , 0, 32); in iucv_sock_alloc()
500 iucv->transport = AF_IUCV_TRANS_IUCV; in iucv_sock_alloc()
502 iucv->transport = AF_IUCV_TRANS_HIPER; in iucv_sock_alloc()
574 static void __iucv_auto_name(struct iucv_sock *iucv) in __iucv_auto_name() argument
583 memcpy(iucv->src_name, name, 8); in __iucv_auto_name()
593 struct iucv_sock *iucv; in iucv_sock_bind() local
610 iucv = iucv_sk(sk); in iucv_sock_bind()
615 if (iucv->path) in iucv_sock_bind()
629 memcpy(iucv->src_user_id, sa->siucv_user_id, 8); in iucv_sock_bind()
632 __iucv_auto_name(iucv); in iucv_sock_bind()
634 memcpy(iucv->src_name, sa->siucv_name, 8); in iucv_sock_bind()
636 iucv->hs_dev = dev; in iucv_sock_bind()
639 iucv->transport = AF_IUCV_TRANS_HIPER; in iucv_sock_bind()
640 if (!iucv->msglimit) in iucv_sock_bind()
641 iucv->msglimit = IUCV_HIPER_MSGLIM_DEFAULT; in iucv_sock_bind()
650 memcpy(iucv->src_name, sa->siucv_name, 8); in iucv_sock_bind()
651 memcpy(iucv->src_user_id, iucv_userid, 8); in iucv_sock_bind()
653 iucv->transport = AF_IUCV_TRANS_IUCV; in iucv_sock_bind()
655 if (!iucv->msglimit) in iucv_sock_bind()
656 iucv->msglimit = IUCV_QUEUELEN_DEFAULT; in iucv_sock_bind()
672 struct iucv_sock *iucv = iucv_sk(sk); in iucv_sock_autobind() local
678 memcpy(iucv->src_user_id, iucv_userid, 8); in iucv_sock_autobind()
679 iucv->transport = AF_IUCV_TRANS_IUCV; in iucv_sock_autobind()
683 __iucv_auto_name(iucv); in iucv_sock_autobind()
686 if (!iucv->msglimit) in iucv_sock_autobind()
687 iucv->msglimit = IUCV_QUEUELEN_DEFAULT; in iucv_sock_autobind()
696 struct iucv_sock *iucv = iucv_sk(sk); in afiucv_path_connect() local
701 low_nmcpy(user_data, iucv->src_name); in afiucv_path_connect()
705 iucv->path = iucv_path_alloc(iucv->msglimit, in afiucv_path_connect()
707 if (!iucv->path) { in afiucv_path_connect()
711 err = pr_iucv->path_connect(iucv->path, &af_iucv_handler, in afiucv_path_connect()
715 iucv_path_free(iucv->path); in afiucv_path_connect()
716 iucv->path = NULL; in afiucv_path_connect()
743 struct iucv_sock *iucv = iucv_sk(sk); in iucv_sock_connect() local
753 iucv->transport == AF_IUCV_TRANS_HIPER) in iucv_sock_connect()
768 memcpy(iucv->dst_user_id, sa->siucv_user_id, 8); in iucv_sock_connect()
769 memcpy(iucv->dst_name, sa->siucv_name, 8); in iucv_sock_connect()
771 if (iucv->transport == AF_IUCV_TRANS_HIPER) in iucv_sock_connect()
786 if (err && iucv->transport == AF_IUCV_TRANS_IUCV) in iucv_sock_connect()
879 struct iucv_sock *iucv = iucv_sk(sk); in iucv_sock_getname() local
884 memcpy(siucv->siucv_user_id, iucv->dst_user_id, 8); in iucv_sock_getname()
885 memcpy(siucv->siucv_name, iucv->dst_name, 8); in iucv_sock_getname()
887 memcpy(siucv->siucv_user_id, iucv->src_user_id, 8); in iucv_sock_getname()
888 memcpy(siucv->siucv_name, iucv->src_name, 8); in iucv_sock_getname()
925 struct iucv_sock *iucv = iucv_sk(sk); in iucv_sock_sendmsg() local
1004 if (iucv->transport == AF_IUCV_TRANS_HIPER) { in iucv_sock_sendmsg()
1006 LL_RESERVED_SPACE(iucv->hs_dev); in iucv_sock_sendmsg()
1046 txmsg.tag = iucv->send_tag++; in iucv_sock_sendmsg()
1049 if (iucv->transport == AF_IUCV_TRANS_HIPER) { in iucv_sock_sendmsg()
1050 atomic_inc(&iucv->msg_sent); in iucv_sock_sendmsg()
1053 atomic_dec(&iucv->msg_sent); in iucv_sock_sendmsg()
1057 skb_queue_tail(&iucv->send_skb_q, skb); in iucv_sock_sendmsg()
1059 if (((iucv->path->flags & IUCV_IPRMDATA) & iucv->flags) && in iucv_sock_sendmsg()
1061 err = iucv_send_iprm(iucv->path, &txmsg, skb); in iucv_sock_sendmsg()
1066 skb_unlink(skb, &iucv->send_skb_q); in iucv_sock_sendmsg()
1073 pr_iucv->path_sever(iucv->path, NULL); in iucv_sock_sendmsg()
1074 skb_unlink(skb, &iucv->send_skb_q); in iucv_sock_sendmsg()
1092 err = pr_iucv->message_send(iucv->path, &txmsg, in iucv_sock_sendmsg()
1096 err = pr_iucv->message_send(iucv->path, &txmsg, in iucv_sock_sendmsg()
1102 memcpy(user_id, iucv->dst_user_id, 8); in iucv_sock_sendmsg()
1104 memcpy(appl_id, iucv->dst_name, 8); in iucv_sock_sendmsg()
1112 skb_unlink(skb, &iucv->send_skb_q); in iucv_sock_sendmsg()
1223 struct iucv_sock *iucv = iucv_sk(sk); in iucv_process_message_q() local
1227 list_for_each_entry_safe(p, n, &iucv->message_q.list, list) { in iucv_process_message_q()
1234 if (!skb_queue_empty(&iucv->backlog_skb_q)) in iucv_process_message_q()
1244 struct iucv_sock *iucv = iucv_sk(sk); in iucv_sock_recvmsg() local
1251 skb_queue_empty(&iucv->backlog_skb_q) && in iucv_sock_recvmsg()
1253 list_empty(&iucv->message_q.list)) in iucv_sock_recvmsg()
1314 if (iucv->transport == AF_IUCV_TRANS_HIPER) { in iucv_sock_recvmsg()
1315 atomic_inc(&iucv->msg_recv); in iucv_sock_recvmsg()
1316 if (atomic_read(&iucv->msg_recv) > iucv->msglimit) { in iucv_sock_recvmsg()
1324 spin_lock_bh(&iucv->message_q.lock); in iucv_sock_recvmsg()
1325 rskb = skb_dequeue(&iucv->backlog_skb_q); in iucv_sock_recvmsg()
1330 skb_queue_head(&iucv->backlog_skb_q, in iucv_sock_recvmsg()
1334 rskb = skb_dequeue(&iucv->backlog_skb_q); in iucv_sock_recvmsg()
1336 if (skb_queue_empty(&iucv->backlog_skb_q)) { in iucv_sock_recvmsg()
1337 if (!list_empty(&iucv->message_q.list)) in iucv_sock_recvmsg()
1339 if (atomic_read(&iucv->msg_recv) >= in iucv_sock_recvmsg()
1340 iucv->msglimit / 2) { in iucv_sock_recvmsg()
1348 spin_unlock_bh(&iucv->message_q.lock); in iucv_sock_recvmsg()
1416 struct iucv_sock *iucv = iucv_sk(sk); in iucv_sock_shutdown() local
1439 if (iucv->transport == AF_IUCV_TRANS_IUCV) { in iucv_sock_shutdown()
1442 err = pr_iucv->message_send(iucv->path, &txmsg, in iucv_sock_shutdown()
1463 if ((iucv->transport == AF_IUCV_TRANS_IUCV) && in iucv_sock_shutdown()
1464 iucv->path) { in iucv_sock_shutdown()
1465 err = pr_iucv->path_quiesce(iucv->path, NULL); in iucv_sock_shutdown()
1501 struct iucv_sock *iucv = iucv_sk(sk); in iucv_sock_setsockopt() local
1520 iucv->flags |= IUCV_IPRMDATA; in iucv_sock_setsockopt()
1522 iucv->flags &= ~IUCV_IPRMDATA; in iucv_sock_setsockopt()
1531 iucv->msglimit = val; in iucv_sock_setsockopt()
1551 struct iucv_sock *iucv = iucv_sk(sk); in iucv_sock_getsockopt() local
1568 val = (iucv->flags & IUCV_IPRMDATA) ? 1 : 0; in iucv_sock_getsockopt()
1572 val = (iucv->path != NULL) ? iucv->path->msglim /* connected */ in iucv_sock_getsockopt()
1573 : iucv->msglimit; /* default */ in iucv_sock_getsockopt()
1579 val = (iucv->hs_dev) ? iucv->hs_dev->mtu - in iucv_sock_getsockopt()
1604 struct iucv_sock *iucv, *niucv; in iucv_callback_connreq() local
1611 iucv = NULL; in iucv_callback_connreq()
1620 iucv = iucv_sk(sk); in iucv_callback_connreq()
1624 if (!iucv) in iucv_callback_connreq()
1631 low_nmcpy(user_data, iucv->src_name); in iucv_callback_connreq()
1632 high_nmcpy(user_data, iucv->dst_name); in iucv_callback_connreq()
1664 memcpy(niucv->src_name, iucv->src_name, 8); in iucv_callback_connreq()
1665 memcpy(niucv->src_user_id, iucv->src_user_id, 8); in iucv_callback_connreq()
1674 niucv->msglimit = iucv->msglimit; in iucv_callback_connreq()
1675 path->msglim = iucv->msglimit; in iucv_callback_connreq()
1705 struct iucv_sock *iucv = iucv_sk(sk); in iucv_callback_rx() local
1715 spin_lock(&iucv->message_q.lock); in iucv_callback_rx()
1717 if (!list_empty(&iucv->message_q.list) || in iucv_callback_rx()
1718 !skb_queue_empty(&iucv->backlog_skb_q)) in iucv_callback_rx()
1740 list_add_tail(&save_msg->list, &iucv->message_q.list); in iucv_callback_rx()
1743 spin_unlock(&iucv->message_q.lock); in iucv_callback_rx()
1842 struct iucv_sock *iucv, *niucv; in afiucv_hs_callback_syn() local
1845 iucv = iucv_sk(sk); in afiucv_hs_callback_syn()
1846 if (!iucv) { in afiucv_hs_callback_syn()
1871 niucv->msglimit = iucv->msglimit; in afiucv_hs_callback_syn()
1878 memcpy(niucv->src_name, iucv->src_name, 8); in afiucv_hs_callback_syn()
1879 memcpy(niucv->src_user_id, iucv->src_user_id, 8); in afiucv_hs_callback_syn()
1881 niucv->hs_dev = iucv->hs_dev; in afiucv_hs_callback_syn()
1905 struct iucv_sock *iucv = iucv_sk(sk); in afiucv_hs_callback_synack() local
1907 if (!iucv) in afiucv_hs_callback_synack()
1912 iucv->msglimit_peer = iucv_trans_hdr(skb)->window; in afiucv_hs_callback_synack()
1926 struct iucv_sock *iucv = iucv_sk(sk); in afiucv_hs_callback_synfin() local
1928 if (!iucv) in afiucv_hs_callback_synfin()
1946 struct iucv_sock *iucv = iucv_sk(sk); in afiucv_hs_callback_fin() local
1949 if (!iucv) in afiucv_hs_callback_fin()
1967 struct iucv_sock *iucv = iucv_sk(sk); in afiucv_hs_callback_win() local
1969 if (!iucv) in afiucv_hs_callback_win()
1975 atomic_sub(iucv_trans_hdr(skb)->window, &iucv->msg_sent); in afiucv_hs_callback_win()
1985 struct iucv_sock *iucv = iucv_sk(sk); in afiucv_hs_callback_rx() local
1987 if (!iucv) { in afiucv_hs_callback_rx()
2013 spin_lock(&iucv->message_q.lock); in afiucv_hs_callback_rx()
2014 if (skb_queue_empty(&iucv->backlog_skb_q)) { in afiucv_hs_callback_rx()
2017 skb_queue_tail(&iucv->backlog_skb_q, skb); in afiucv_hs_callback_rx()
2020 spin_unlock(&iucv->message_q.lock); in afiucv_hs_callback_rx()
2033 struct iucv_sock *iucv; in afiucv_hs_rcv() local
2049 iucv = NULL; in afiucv_hs_rcv()
2061 iucv = iucv_sk(sk); in afiucv_hs_rcv()
2073 iucv = iucv_sk(sk); in afiucv_hs_rcv()
2079 if (!iucv) in afiucv_hs_rcv()
2139 struct iucv_sock *iucv = NULL; in afiucv_hs_callback_txnotify() local
2148 iucv = iucv_sk(sk); in afiucv_hs_callback_txnotify()
2153 if (!iucv || sock_flag(sk, SOCK_ZAPPED)) in afiucv_hs_callback_txnotify()
2156 list = &iucv->send_skb_q; in afiucv_hs_callback_txnotify()
2167 atomic_inc(&iucv->pendings); in afiucv_hs_callback_txnotify()
2171 atomic_dec(&iucv->pendings); in afiucv_hs_callback_txnotify()
2172 if (atomic_read(&iucv->pendings) <= 0) in afiucv_hs_callback_txnotify()
2211 struct iucv_sock *iucv; in afiucv_netdev_event() local
2217 iucv = iucv_sk(sk); in afiucv_netdev_event()
2218 if ((iucv->hs_dev == event_dev) && in afiucv_netdev_event()