linux/net/iucv/af_iucv.c
<<
>>
Prefs
   1/*
   2 *  IUCV protocol stack for Linux on zSeries
   3 *
   4 *  Copyright IBM Corp. 2006, 2009
   5 *
   6 *  Author(s):  Jennifer Hunt <jenhunt@us.ibm.com>
   7 *              Hendrik Brueckner <brueckner@linux.vnet.ibm.com>
   8 *  PM functions:
   9 *              Ursula Braun <ursula.braun@de.ibm.com>
  10 */
  11
  12#define KMSG_COMPONENT "af_iucv"
  13#define pr_fmt(fmt) KMSG_COMPONENT ": " fmt
  14
  15#include <linux/module.h>
  16#include <linux/types.h>
  17#include <linux/list.h>
  18#include <linux/errno.h>
  19#include <linux/kernel.h>
  20#include <linux/sched.h>
  21#include <linux/slab.h>
  22#include <linux/skbuff.h>
  23#include <linux/init.h>
  24#include <linux/poll.h>
  25#include <net/sock.h>
  26#include <asm/ebcdic.h>
  27#include <asm/cpcmd.h>
  28#include <linux/kmod.h>
  29
  30#include <net/iucv/af_iucv.h>
  31
  32#define VERSION "1.2"
  33
  34static char iucv_userid[80];
  35
  36static const struct proto_ops iucv_sock_ops;
  37
  38static struct proto iucv_proto = {
  39        .name           = "AF_IUCV",
  40        .owner          = THIS_MODULE,
  41        .obj_size       = sizeof(struct iucv_sock),
  42};
  43
  44static struct iucv_interface *pr_iucv;
  45
  46/* special AF_IUCV IPRM messages */
  47static const u8 iprm_shutdown[8] =
  48        {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01};
  49
  50#define TRGCLS_SIZE     (sizeof(((struct iucv_message *)0)->class))
  51
  52#define __iucv_sock_wait(sk, condition, timeo, ret)                     \
  53do {                                                                    \
  54        DEFINE_WAIT(__wait);                                            \
  55        long __timeo = timeo;                                           \
  56        ret = 0;                                                        \
  57        prepare_to_wait(sk_sleep(sk), &__wait, TASK_INTERRUPTIBLE);     \
  58        while (!(condition)) {                                          \
  59                if (!__timeo) {                                         \
  60                        ret = -EAGAIN;                                  \
  61                        break;                                          \
  62                }                                                       \
  63                if (signal_pending(current)) {                          \
  64                        ret = sock_intr_errno(__timeo);                 \
  65                        break;                                          \
  66                }                                                       \
  67                release_sock(sk);                                       \
  68                __timeo = schedule_timeout(__timeo);                    \
  69                lock_sock(sk);                                          \
  70                ret = sock_error(sk);                                   \
  71                if (ret)                                                \
  72                        break;                                          \
  73        }                                                               \
  74        finish_wait(sk_sleep(sk), &__wait);                             \
  75} while (0)
  76
  77#define iucv_sock_wait(sk, condition, timeo)                            \
  78({                                                                      \
  79        int __ret = 0;                                                  \
  80        if (!(condition))                                               \
  81                __iucv_sock_wait(sk, condition, timeo, __ret);          \
  82        __ret;                                                          \
  83})
  84
  85static void iucv_sock_kill(struct sock *sk);
  86static void iucv_sock_close(struct sock *sk);
  87static void iucv_sever_path(struct sock *, int);
  88
  89static int afiucv_hs_rcv(struct sk_buff *skb, struct net_device *dev,
  90        struct packet_type *pt, struct net_device *orig_dev);
  91static int afiucv_hs_send(struct iucv_message *imsg, struct sock *sock,
  92                   struct sk_buff *skb, u8 flags);
  93static void afiucv_hs_callback_txnotify(struct sk_buff *, enum iucv_tx_notify);
  94
  95/* Call Back functions */
  96static void iucv_callback_rx(struct iucv_path *, struct iucv_message *);
  97static void iucv_callback_txdone(struct iucv_path *, struct iucv_message *);
  98static void iucv_callback_connack(struct iucv_path *, u8 *);
  99static int iucv_callback_connreq(struct iucv_path *, u8 *, u8 *);
 100static void iucv_callback_connrej(struct iucv_path *, u8 *);
 101static void iucv_callback_shutdown(struct iucv_path *, u8 *);
 102
 103static struct iucv_sock_list iucv_sk_list = {
 104        .lock = __RW_LOCK_UNLOCKED(iucv_sk_list.lock),
 105        .autobind_name = ATOMIC_INIT(0)
 106};
 107
 108static struct iucv_handler af_iucv_handler = {
 109        .path_pending     = iucv_callback_connreq,
 110        .path_complete    = iucv_callback_connack,
 111        .path_severed     = iucv_callback_connrej,
 112        .message_pending  = iucv_callback_rx,
 113        .message_complete = iucv_callback_txdone,
 114        .path_quiesced    = iucv_callback_shutdown,
 115};
 116
 117static inline void high_nmcpy(unsigned char *dst, char *src)
 118{
 119       memcpy(dst, src, 8);
 120}
 121
 122static inline void low_nmcpy(unsigned char *dst, char *src)
 123{
 124       memcpy(&dst[8], src, 8);
 125}
 126
 127static int afiucv_pm_prepare(struct device *dev)
 128{
 129#ifdef CONFIG_PM_DEBUG
 130        printk(KERN_WARNING "afiucv_pm_prepare\n");
 131#endif
 132        return 0;
 133}
 134
 135static void afiucv_pm_complete(struct device *dev)
 136{
 137#ifdef CONFIG_PM_DEBUG
 138        printk(KERN_WARNING "afiucv_pm_complete\n");
 139#endif
 140}
 141
 142/**
 143 * afiucv_pm_freeze() - Freeze PM callback
 144 * @dev:        AFIUCV dummy device
 145 *
 146 * Sever all established IUCV communication pathes
 147 */
 148static int afiucv_pm_freeze(struct device *dev)
 149{
 150        struct iucv_sock *iucv;
 151        struct sock *sk;
 152        int err = 0;
 153
 154#ifdef CONFIG_PM_DEBUG
 155        printk(KERN_WARNING "afiucv_pm_freeze\n");
 156#endif
 157        read_lock(&iucv_sk_list.lock);
 158        sk_for_each(sk, &iucv_sk_list.head) {
 159                iucv = iucv_sk(sk);
 160                switch (sk->sk_state) {
 161                case IUCV_DISCONN:
 162                case IUCV_CLOSING:
 163                case IUCV_CONNECTED:
 164                        iucv_sever_path(sk, 0);
 165                        break;
 166                case IUCV_OPEN:
 167                case IUCV_BOUND:
 168                case IUCV_LISTEN:
 169                case IUCV_CLOSED:
 170                default:
 171                        break;
 172                }
 173                skb_queue_purge(&iucv->send_skb_q);
 174                skb_queue_purge(&iucv->backlog_skb_q);
 175        }
 176        read_unlock(&iucv_sk_list.lock);
 177        return err;
 178}
 179
 180/**
 181 * afiucv_pm_restore_thaw() - Thaw and restore PM callback
 182 * @dev:        AFIUCV dummy device
 183 *
 184 * socket clean up after freeze
 185 */
 186static int afiucv_pm_restore_thaw(struct device *dev)
 187{
 188        struct sock *sk;
 189
 190#ifdef CONFIG_PM_DEBUG
 191        printk(KERN_WARNING "afiucv_pm_restore_thaw\n");
 192#endif
 193        read_lock(&iucv_sk_list.lock);
 194        sk_for_each(sk, &iucv_sk_list.head) {
 195                switch (sk->sk_state) {
 196                case IUCV_CONNECTED:
 197                        sk->sk_err = EPIPE;
 198                        sk->sk_state = IUCV_DISCONN;
 199                        sk->sk_state_change(sk);
 200                        break;
 201                case IUCV_DISCONN:
 202                case IUCV_CLOSING:
 203                case IUCV_LISTEN:
 204                case IUCV_BOUND:
 205                case IUCV_OPEN:
 206                default:
 207                        break;
 208                }
 209        }
 210        read_unlock(&iucv_sk_list.lock);
 211        return 0;
 212}
 213
 214static const struct dev_pm_ops afiucv_pm_ops = {
 215        .prepare = afiucv_pm_prepare,
 216        .complete = afiucv_pm_complete,
 217        .freeze = afiucv_pm_freeze,
 218        .thaw = afiucv_pm_restore_thaw,
 219        .restore = afiucv_pm_restore_thaw,
 220};
 221
 222static struct device_driver af_iucv_driver = {
 223        .owner = THIS_MODULE,
 224        .name = "afiucv",
 225        .bus  = NULL,
 226        .pm   = &afiucv_pm_ops,
 227};
 228
 229/* dummy device used as trigger for PM functions */
 230static struct device *af_iucv_dev;
 231
 232/**
 233 * iucv_msg_length() - Returns the length of an iucv message.
 234 * @msg:        Pointer to struct iucv_message, MUST NOT be NULL
 235 *
 236 * The function returns the length of the specified iucv message @msg of data
 237 * stored in a buffer and of data stored in the parameter list (PRMDATA).
 238 *
 239 * For IUCV_IPRMDATA, AF_IUCV uses the following convention to transport socket
 240 * data:
 241 *      PRMDATA[0..6]   socket data (max 7 bytes);
 242 *      PRMDATA[7]      socket data length value (len is 0xff - PRMDATA[7])
 243 *
 244 * The socket data length is computed by subtracting the socket data length
 245 * value from 0xFF.
 246 * If the socket data len is greater 7, then PRMDATA can be used for special
 247 * notifications (see iucv_sock_shutdown); and further,
 248 * if the socket data len is > 7, the function returns 8.
 249 *
 250 * Use this function to allocate socket buffers to store iucv message data.
 251 */
 252static inline size_t iucv_msg_length(struct iucv_message *msg)
 253{
 254        size_t datalen;
 255
 256        if (msg->flags & IUCV_IPRMDATA) {
 257                datalen = 0xff - msg->rmmsg[7];
 258                return (datalen < 8) ? datalen : 8;
 259        }
 260        return msg->length;
 261}
 262
 263/**
 264 * iucv_sock_in_state() - check for specific states
 265 * @sk:         sock structure
 266 * @state:      first iucv sk state
 267 * @state:      second iucv sk state
 268 *
 269 * Returns true if the socket in either in the first or second state.
 270 */
 271static int iucv_sock_in_state(struct sock *sk, int state, int state2)
 272{
 273        return (sk->sk_state == state || sk->sk_state == state2);
 274}
 275
 276/**
 277 * iucv_below_msglim() - function to check if messages can be sent
 278 * @sk:         sock structure
 279 *
 280 * Returns true if the send queue length is lower than the message limit.
 281 * Always returns true if the socket is not connected (no iucv path for
 282 * checking the message limit).
 283 */
 284static inline int iucv_below_msglim(struct sock *sk)
 285{
 286        struct iucv_sock *iucv = iucv_sk(sk);
 287
 288        if (sk->sk_state != IUCV_CONNECTED)
 289                return 1;
 290        if (iucv->transport == AF_IUCV_TRANS_IUCV)
 291                return (skb_queue_len(&iucv->send_skb_q) < iucv->path->msglim);
 292        else
 293                return ((atomic_read(&iucv->msg_sent) < iucv->msglimit_peer) &&
 294                        (atomic_read(&iucv->pendings) <= 0));
 295}
 296
 297/**
 298 * iucv_sock_wake_msglim() - Wake up thread waiting on msg limit
 299 */
 300static void iucv_sock_wake_msglim(struct sock *sk)
 301{
 302        struct socket_wq *wq;
 303
 304        rcu_read_lock();
 305        wq = rcu_dereference(sk->sk_wq);
 306        if (skwq_has_sleeper(wq))
 307                wake_up_interruptible_all(&wq->wait);
 308        sk_wake_async(sk, SOCK_WAKE_SPACE, POLL_OUT);
 309        rcu_read_unlock();
 310}
 311
 312/**
 313 * afiucv_hs_send() - send a message through HiperSockets transport
 314 */
 315static int afiucv_hs_send(struct iucv_message *imsg, struct sock *sock,
 316                   struct sk_buff *skb, u8 flags)
 317{
 318        struct iucv_sock *iucv = iucv_sk(sock);
 319        struct af_iucv_trans_hdr *phs_hdr;
 320        struct sk_buff *nskb;
 321        int err, confirm_recv = 0;
 322
 323        memset(skb->head, 0, ETH_HLEN);
 324        phs_hdr = (struct af_iucv_trans_hdr *)skb_push(skb,
 325                                        sizeof(struct af_iucv_trans_hdr));
 326        skb_reset_mac_header(skb);
 327        skb_reset_network_header(skb);
 328        skb_push(skb, ETH_HLEN);
 329        skb_reset_mac_header(skb);
 330        memset(phs_hdr, 0, sizeof(struct af_iucv_trans_hdr));
 331
 332        phs_hdr->magic = ETH_P_AF_IUCV;
 333        phs_hdr->version = 1;
 334        phs_hdr->flags = flags;
 335        if (flags == AF_IUCV_FLAG_SYN)
 336                phs_hdr->window = iucv->msglimit;
 337        else if ((flags == AF_IUCV_FLAG_WIN) || !flags) {
 338                confirm_recv = atomic_read(&iucv->msg_recv);
 339                phs_hdr->window = confirm_recv;
 340                if (confirm_recv)
 341                        phs_hdr->flags = phs_hdr->flags | AF_IUCV_FLAG_WIN;
 342        }
 343        memcpy(phs_hdr->destUserID, iucv->dst_user_id, 8);
 344        memcpy(phs_hdr->destAppName, iucv->dst_name, 8);
 345        memcpy(phs_hdr->srcUserID, iucv->src_user_id, 8);
 346        memcpy(phs_hdr->srcAppName, iucv->src_name, 8);
 347        ASCEBC(phs_hdr->destUserID, sizeof(phs_hdr->destUserID));
 348        ASCEBC(phs_hdr->destAppName, sizeof(phs_hdr->destAppName));
 349        ASCEBC(phs_hdr->srcUserID, sizeof(phs_hdr->srcUserID));
 350        ASCEBC(phs_hdr->srcAppName, sizeof(phs_hdr->srcAppName));
 351        if (imsg)
 352                memcpy(&phs_hdr->iucv_hdr, imsg, sizeof(struct iucv_message));
 353
 354        skb->dev = iucv->hs_dev;
 355        if (!skb->dev)
 356                return -ENODEV;
 357        if (!(skb->dev->flags & IFF_UP) || !netif_carrier_ok(skb->dev))
 358                return -ENETDOWN;
 359        if (skb->len > skb->dev->mtu) {
 360                if (sock->sk_type == SOCK_SEQPACKET)
 361                        return -EMSGSIZE;
 362                else
 363                        skb_trim(skb, skb->dev->mtu);
 364        }
 365        skb->protocol = ETH_P_AF_IUCV;
 366        nskb = skb_clone(skb, GFP_ATOMIC);
 367        if (!nskb)
 368                return -ENOMEM;
 369        skb_queue_tail(&iucv->send_skb_q, nskb);
 370        err = dev_queue_xmit(skb);
 371        if (net_xmit_eval(err)) {
 372                skb_unlink(nskb, &iucv->send_skb_q);
 373                kfree_skb(nskb);
 374        } else {
 375                atomic_sub(confirm_recv, &iucv->msg_recv);
 376                WARN_ON(atomic_read(&iucv->msg_recv) < 0);
 377        }
 378        return net_xmit_eval(err);
 379}
 380
 381static struct sock *__iucv_get_sock_by_name(char *nm)
 382{
 383        struct sock *sk;
 384
 385        sk_for_each(sk, &iucv_sk_list.head)
 386                if (!memcmp(&iucv_sk(sk)->src_name, nm, 8))
 387                        return sk;
 388
 389        return NULL;
 390}
 391
 392static void iucv_sock_destruct(struct sock *sk)
 393{
 394        skb_queue_purge(&sk->sk_receive_queue);
 395        skb_queue_purge(&sk->sk_error_queue);
 396
 397        sk_mem_reclaim(sk);
 398
 399        if (!sock_flag(sk, SOCK_DEAD)) {
 400                pr_err("Attempt to release alive iucv socket %p\n", sk);
 401                return;
 402        }
 403
 404        WARN_ON(atomic_read(&sk->sk_rmem_alloc));
 405        WARN_ON(atomic_read(&sk->sk_wmem_alloc));
 406        WARN_ON(sk->sk_wmem_queued);
 407        WARN_ON(sk->sk_forward_alloc);
 408}
 409
 410/* Cleanup Listen */
 411static void iucv_sock_cleanup_listen(struct sock *parent)
 412{
 413        struct sock *sk;
 414
 415        /* Close non-accepted connections */
 416        while ((sk = iucv_accept_dequeue(parent, NULL))) {
 417                iucv_sock_close(sk);
 418                iucv_sock_kill(sk);
 419        }
 420
 421        parent->sk_state = IUCV_CLOSED;
 422}
 423
 424/* Kill socket (only if zapped and orphaned) */
 425static void iucv_sock_kill(struct sock *sk)
 426{
 427        if (!sock_flag(sk, SOCK_ZAPPED) || sk->sk_socket)
 428                return;
 429
 430        iucv_sock_unlink(&iucv_sk_list, sk);
 431        sock_set_flag(sk, SOCK_DEAD);
 432        sock_put(sk);
 433}
 434
 435/* Terminate an IUCV path */
 436static void iucv_sever_path(struct sock *sk, int with_user_data)
 437{
 438        unsigned char user_data[16];
 439        struct iucv_sock *iucv = iucv_sk(sk);
 440        struct iucv_path *path = iucv->path;
 441
 442        if (iucv->path) {
 443                iucv->path = NULL;
 444                if (with_user_data) {
 445                        low_nmcpy(user_data, iucv->src_name);
 446                        high_nmcpy(user_data, iucv->dst_name);
 447                        ASCEBC(user_data, sizeof(user_data));
 448                        pr_iucv->path_sever(path, user_data);
 449                } else
 450                        pr_iucv->path_sever(path, NULL);
 451                iucv_path_free(path);
 452        }
 453}
 454
 455/* Send FIN through an IUCV socket for HIPER transport */
 456static int iucv_send_ctrl(struct sock *sk, u8 flags)
 457{
 458        int err = 0;
 459        int blen;
 460        struct sk_buff *skb;
 461
 462        blen = sizeof(struct af_iucv_trans_hdr) + ETH_HLEN;
 463        skb = sock_alloc_send_skb(sk, blen, 1, &err);
 464        if (skb) {
 465                skb_reserve(skb, blen);
 466                err = afiucv_hs_send(NULL, sk, skb, flags);
 467        }
 468        return err;
 469}
 470
 471/* Close an IUCV socket */
 472static void iucv_sock_close(struct sock *sk)
 473{
 474        struct iucv_sock *iucv = iucv_sk(sk);
 475        unsigned long timeo;
 476        int err = 0;
 477
 478        lock_sock(sk);
 479
 480        switch (sk->sk_state) {
 481        case IUCV_LISTEN:
 482                iucv_sock_cleanup_listen(sk);
 483                break;
 484
 485        case IUCV_CONNECTED:
 486                if (iucv->transport == AF_IUCV_TRANS_HIPER) {
 487                        err = iucv_send_ctrl(sk, AF_IUCV_FLAG_FIN);
 488                        sk->sk_state = IUCV_DISCONN;
 489                        sk->sk_state_change(sk);
 490                }
 491        case IUCV_DISCONN:   /* fall through */
 492                sk->sk_state = IUCV_CLOSING;
 493                sk->sk_state_change(sk);
 494
 495                if (!err && !skb_queue_empty(&iucv->send_skb_q)) {
 496                        if (sock_flag(sk, SOCK_LINGER) && sk->sk_lingertime)
 497                                timeo = sk->sk_lingertime;
 498                        else
 499                                timeo = IUCV_DISCONN_TIMEOUT;
 500                        iucv_sock_wait(sk,
 501                                        iucv_sock_in_state(sk, IUCV_CLOSED, 0),
 502                                        timeo);
 503                }
 504
 505        case IUCV_CLOSING:   /* fall through */
 506                sk->sk_state = IUCV_CLOSED;
 507                sk->sk_state_change(sk);
 508
 509                sk->sk_err = ECONNRESET;
 510                sk->sk_state_change(sk);
 511
 512                skb_queue_purge(&iucv->send_skb_q);
 513                skb_queue_purge(&iucv->backlog_skb_q);
 514
 515        default:   /* fall through */
 516                iucv_sever_path(sk, 1);
 517        }
 518
 519        if (iucv->hs_dev) {
 520                dev_put(iucv->hs_dev);
 521                iucv->hs_dev = NULL;
 522                sk->sk_bound_dev_if = 0;
 523        }
 524
 525        /* mark socket for deletion by iucv_sock_kill() */
 526        sock_set_flag(sk, SOCK_ZAPPED);
 527
 528        release_sock(sk);
 529}
 530
 531static void iucv_sock_init(struct sock *sk, struct sock *parent)
 532{
 533        if (parent)
 534                sk->sk_type = parent->sk_type;
 535}
 536
 537static struct sock *iucv_sock_alloc(struct socket *sock, int proto, gfp_t prio, int kern)
 538{
 539        struct sock *sk;
 540        struct iucv_sock *iucv;
 541
 542        sk = sk_alloc(&init_net, PF_IUCV, prio, &iucv_proto, kern);
 543        if (!sk)
 544                return NULL;
 545        iucv = iucv_sk(sk);
 546
 547        sock_init_data(sock, sk);
 548        INIT_LIST_HEAD(&iucv->accept_q);
 549        spin_lock_init(&iucv->accept_q_lock);
 550        skb_queue_head_init(&iucv->send_skb_q);
 551        INIT_LIST_HEAD(&iucv->message_q.list);
 552        spin_lock_init(&iucv->message_q.lock);
 553        skb_queue_head_init(&iucv->backlog_skb_q);
 554        iucv->send_tag = 0;
 555        atomic_set(&iucv->pendings, 0);
 556        iucv->flags = 0;
 557        iucv->msglimit = 0;
 558        atomic_set(&iucv->msg_sent, 0);
 559        atomic_set(&iucv->msg_recv, 0);
 560        iucv->path = NULL;
 561        iucv->sk_txnotify = afiucv_hs_callback_txnotify;
 562        memset(&iucv->src_user_id , 0, 32);
 563        if (pr_iucv)
 564                iucv->transport = AF_IUCV_TRANS_IUCV;
 565        else
 566                iucv->transport = AF_IUCV_TRANS_HIPER;
 567
 568        sk->sk_destruct = iucv_sock_destruct;
 569        sk->sk_sndtimeo = IUCV_CONN_TIMEOUT;
 570        sk->sk_allocation = GFP_DMA;
 571
 572        sock_reset_flag(sk, SOCK_ZAPPED);
 573
 574        sk->sk_protocol = proto;
 575        sk->sk_state    = IUCV_OPEN;
 576
 577        iucv_sock_link(&iucv_sk_list, sk);
 578        return sk;
 579}
 580
 581/* Create an IUCV socket */
 582static int iucv_sock_create(struct net *net, struct socket *sock, int protocol,
 583                            int kern)
 584{
 585        struct sock *sk;
 586
 587        if (protocol && protocol != PF_IUCV)
 588                return -EPROTONOSUPPORT;
 589
 590        sock->state = SS_UNCONNECTED;
 591
 592        switch (sock->type) {
 593        case SOCK_STREAM:
 594                sock->ops = &iucv_sock_ops;
 595                break;
 596        case SOCK_SEQPACKET:
 597                /* currently, proto ops can handle both sk types */
 598                sock->ops = &iucv_sock_ops;
 599                break;
 600        default:
 601                return -ESOCKTNOSUPPORT;
 602        }
 603
 604        sk = iucv_sock_alloc(sock, protocol, GFP_KERNEL, kern);
 605        if (!sk)
 606                return -ENOMEM;
 607
 608        iucv_sock_init(sk, NULL);
 609
 610        return 0;
 611}
 612
 613void iucv_sock_link(struct iucv_sock_list *l, struct sock *sk)
 614{
 615        write_lock_bh(&l->lock);
 616        sk_add_node(sk, &l->head);
 617        write_unlock_bh(&l->lock);
 618}
 619
 620void iucv_sock_unlink(struct iucv_sock_list *l, struct sock *sk)
 621{
 622        write_lock_bh(&l->lock);
 623        sk_del_node_init(sk);
 624        write_unlock_bh(&l->lock);
 625}
 626
 627void iucv_accept_enqueue(struct sock *parent, struct sock *sk)
 628{
 629        unsigned long flags;
 630        struct iucv_sock *par = iucv_sk(parent);
 631
 632        sock_hold(sk);
 633        spin_lock_irqsave(&par->accept_q_lock, flags);
 634        list_add_tail(&iucv_sk(sk)->accept_q, &par->accept_q);
 635        spin_unlock_irqrestore(&par->accept_q_lock, flags);
 636        iucv_sk(sk)->parent = parent;
 637        sk_acceptq_added(parent);
 638}
 639
 640void iucv_accept_unlink(struct sock *sk)
 641{
 642        unsigned long flags;
 643        struct iucv_sock *par = iucv_sk(iucv_sk(sk)->parent);
 644
 645        spin_lock_irqsave(&par->accept_q_lock, flags);
 646        list_del_init(&iucv_sk(sk)->accept_q);
 647        spin_unlock_irqrestore(&par->accept_q_lock, flags);
 648        sk_acceptq_removed(iucv_sk(sk)->parent);
 649        iucv_sk(sk)->parent = NULL;
 650        sock_put(sk);
 651}
 652
 653struct sock *iucv_accept_dequeue(struct sock *parent, struct socket *newsock)
 654{
 655        struct iucv_sock *isk, *n;
 656        struct sock *sk;
 657
 658        list_for_each_entry_safe(isk, n, &iucv_sk(parent)->accept_q, accept_q) {
 659                sk = (struct sock *) isk;
 660                lock_sock(sk);
 661
 662                if (sk->sk_state == IUCV_CLOSED) {
 663                        iucv_accept_unlink(sk);
 664                        release_sock(sk);
 665                        continue;
 666                }
 667
 668                if (sk->sk_state == IUCV_CONNECTED ||
 669                    sk->sk_state == IUCV_DISCONN ||
 670                    !newsock) {
 671                        iucv_accept_unlink(sk);
 672                        if (newsock)
 673                                sock_graft(sk, newsock);
 674
 675                        release_sock(sk);
 676                        return sk;
 677                }
 678
 679                release_sock(sk);
 680        }
 681        return NULL;
 682}
 683
 684static void __iucv_auto_name(struct iucv_sock *iucv)
 685{
 686        char name[12];
 687
 688        sprintf(name, "%08x", atomic_inc_return(&iucv_sk_list.autobind_name));
 689        while (__iucv_get_sock_by_name(name)) {
 690                sprintf(name, "%08x",
 691                        atomic_inc_return(&iucv_sk_list.autobind_name));
 692        }
 693        memcpy(iucv->src_name, name, 8);
 694}
 695
 696/* Bind an unbound socket */
 697static int iucv_sock_bind(struct socket *sock, struct sockaddr *addr,
 698                          int addr_len)
 699{
 700        struct sockaddr_iucv *sa = (struct sockaddr_iucv *) addr;
 701        struct sock *sk = sock->sk;
 702        struct iucv_sock *iucv;
 703        int err = 0;
 704        struct net_device *dev;
 705        char uid[9];
 706
 707        /* Verify the input sockaddr */
 708        if (!addr || addr->sa_family != AF_IUCV)
 709                return -EINVAL;
 710
 711        if (addr_len < sizeof(struct sockaddr_iucv))
 712                return -EINVAL;
 713
 714        lock_sock(sk);
 715        if (sk->sk_state != IUCV_OPEN) {
 716                err = -EBADFD;
 717                goto done;
 718        }
 719
 720        write_lock_bh(&iucv_sk_list.lock);
 721
 722        iucv = iucv_sk(sk);
 723        if (__iucv_get_sock_by_name(sa->siucv_name)) {
 724                err = -EADDRINUSE;
 725                goto done_unlock;
 726        }
 727        if (iucv->path)
 728                goto done_unlock;
 729
 730        /* Bind the socket */
 731        if (pr_iucv)
 732                if (!memcmp(sa->siucv_user_id, iucv_userid, 8))
 733                        goto vm_bind; /* VM IUCV transport */
 734
 735        /* try hiper transport */
 736        memcpy(uid, sa->siucv_user_id, sizeof(uid));
 737        ASCEBC(uid, 8);
 738        rcu_read_lock();
 739        for_each_netdev_rcu(&init_net, dev) {
 740                if (!memcmp(dev->perm_addr, uid, 8)) {
 741                        memcpy(iucv->src_user_id, sa->siucv_user_id, 8);
 742                        /* Check for unitialized siucv_name */
 743                        if (strncmp(sa->siucv_name, "        ", 8) == 0)
 744                                __iucv_auto_name(iucv);
 745                        else
 746                                memcpy(iucv->src_name, sa->siucv_name, 8);
 747                        sk->sk_bound_dev_if = dev->ifindex;
 748                        iucv->hs_dev = dev;
 749                        dev_hold(dev);
 750                        sk->sk_state = IUCV_BOUND;
 751                        iucv->transport = AF_IUCV_TRANS_HIPER;
 752                        if (!iucv->msglimit)
 753                                iucv->msglimit = IUCV_HIPER_MSGLIM_DEFAULT;
 754                        rcu_read_unlock();
 755                        goto done_unlock;
 756                }
 757        }
 758        rcu_read_unlock();
 759vm_bind:
 760        if (pr_iucv) {
 761                /* use local userid for backward compat */
 762                memcpy(iucv->src_name, sa->siucv_name, 8);
 763                memcpy(iucv->src_user_id, iucv_userid, 8);
 764                sk->sk_state = IUCV_BOUND;
 765                iucv->transport = AF_IUCV_TRANS_IUCV;
 766                if (!iucv->msglimit)
 767                        iucv->msglimit = IUCV_QUEUELEN_DEFAULT;
 768                goto done_unlock;
 769        }
 770        /* found no dev to bind */
 771        err = -ENODEV;
 772done_unlock:
 773        /* Release the socket list lock */
 774        write_unlock_bh(&iucv_sk_list.lock);
 775done:
 776        release_sock(sk);
 777        return err;
 778}
 779
 780/* Automatically bind an unbound socket */
 781static int iucv_sock_autobind(struct sock *sk)
 782{
 783        struct iucv_sock *iucv = iucv_sk(sk);
 784        int err = 0;
 785
 786        if (unlikely(!pr_iucv))
 787                return -EPROTO;
 788
 789        memcpy(iucv->src_user_id, iucv_userid, 8);
 790
 791        write_lock_bh(&iucv_sk_list.lock);
 792        __iucv_auto_name(iucv);
 793        write_unlock_bh(&iucv_sk_list.lock);
 794
 795        if (!iucv->msglimit)
 796                iucv->msglimit = IUCV_QUEUELEN_DEFAULT;
 797
 798        return err;
 799}
 800
 801static int afiucv_path_connect(struct socket *sock, struct sockaddr *addr)
 802{
 803        struct sockaddr_iucv *sa = (struct sockaddr_iucv *) addr;
 804        struct sock *sk = sock->sk;
 805        struct iucv_sock *iucv = iucv_sk(sk);
 806        unsigned char user_data[16];
 807        int err;
 808
 809        high_nmcpy(user_data, sa->siucv_name);
 810        low_nmcpy(user_data, iucv->src_name);
 811        ASCEBC(user_data, sizeof(user_data));
 812
 813        /* Create path. */
 814        iucv->path = iucv_path_alloc(iucv->msglimit,
 815                                     IUCV_IPRMDATA, GFP_KERNEL);
 816        if (!iucv->path) {
 817                err = -ENOMEM;
 818                goto done;
 819        }
 820        err = pr_iucv->path_connect(iucv->path, &af_iucv_handler,
 821                                    sa->siucv_user_id, NULL, user_data,
 822                                    sk);
 823        if (err) {
 824                iucv_path_free(iucv->path);
 825                iucv->path = NULL;
 826                switch (err) {
 827                case 0x0b:      /* Target communicator is not logged on */
 828                        err = -ENETUNREACH;
 829                        break;
 830                case 0x0d:      /* Max connections for this guest exceeded */
 831                case 0x0e:      /* Max connections for target guest exceeded */
 832                        err = -EAGAIN;
 833                        break;
 834                case 0x0f:      /* Missing IUCV authorization */
 835                        err = -EACCES;
 836                        break;
 837                default:
 838                        err = -ECONNREFUSED;
 839                        break;
 840                }
 841        }
 842done:
 843        return err;
 844}
 845
 846/* Connect an unconnected socket */
 847static int iucv_sock_connect(struct socket *sock, struct sockaddr *addr,
 848                             int alen, int flags)
 849{
 850        struct sockaddr_iucv *sa = (struct sockaddr_iucv *) addr;
 851        struct sock *sk = sock->sk;
 852        struct iucv_sock *iucv = iucv_sk(sk);
 853        int err;
 854
 855        if (addr->sa_family != AF_IUCV || alen < sizeof(struct sockaddr_iucv))
 856                return -EINVAL;
 857
 858        if (sk->sk_state != IUCV_OPEN && sk->sk_state != IUCV_BOUND)
 859                return -EBADFD;
 860
 861        if (sk->sk_state == IUCV_OPEN &&
 862            iucv->transport == AF_IUCV_TRANS_HIPER)
 863                return -EBADFD; /* explicit bind required */
 864
 865        if (sk->sk_type != SOCK_STREAM && sk->sk_type != SOCK_SEQPACKET)
 866                return -EINVAL;
 867
 868        if (sk->sk_state == IUCV_OPEN) {
 869                err = iucv_sock_autobind(sk);
 870                if (unlikely(err))
 871                        return err;
 872        }
 873
 874        lock_sock(sk);
 875
 876        /* Set the destination information */
 877        memcpy(iucv->dst_user_id, sa->siucv_user_id, 8);
 878        memcpy(iucv->dst_name, sa->siucv_name, 8);
 879
 880        if (iucv->transport == AF_IUCV_TRANS_HIPER)
 881                err = iucv_send_ctrl(sock->sk, AF_IUCV_FLAG_SYN);
 882        else
 883                err = afiucv_path_connect(sock, addr);
 884        if (err)
 885                goto done;
 886
 887        if (sk->sk_state != IUCV_CONNECTED)
 888                err = iucv_sock_wait(sk, iucv_sock_in_state(sk, IUCV_CONNECTED,
 889                                                            IUCV_DISCONN),
 890                                     sock_sndtimeo(sk, flags & O_NONBLOCK));
 891
 892        if (sk->sk_state == IUCV_DISCONN || sk->sk_state == IUCV_CLOSED)
 893                err = -ECONNREFUSED;
 894
 895        if (err && iucv->transport == AF_IUCV_TRANS_IUCV)
 896                iucv_sever_path(sk, 0);
 897
 898done:
 899        release_sock(sk);
 900        return err;
 901}
 902
 903/* Move a socket into listening state. */
 904static int iucv_sock_listen(struct socket *sock, int backlog)
 905{
 906        struct sock *sk = sock->sk;
 907        int err;
 908
 909        lock_sock(sk);
 910
 911        err = -EINVAL;
 912        if (sk->sk_state != IUCV_BOUND)
 913                goto done;
 914
 915        if (sock->type != SOCK_STREAM && sock->type != SOCK_SEQPACKET)
 916                goto done;
 917
 918        sk->sk_max_ack_backlog = backlog;
 919        sk->sk_ack_backlog = 0;
 920        sk->sk_state = IUCV_LISTEN;
 921        err = 0;
 922
 923done:
 924        release_sock(sk);
 925        return err;
 926}
 927
 928/* Accept a pending connection */
 929static int iucv_sock_accept(struct socket *sock, struct socket *newsock,
 930                            int flags)
 931{
 932        DECLARE_WAITQUEUE(wait, current);
 933        struct sock *sk = sock->sk, *nsk;
 934        long timeo;
 935        int err = 0;
 936
 937        lock_sock_nested(sk, SINGLE_DEPTH_NESTING);
 938
 939        if (sk->sk_state != IUCV_LISTEN) {
 940                err = -EBADFD;
 941                goto done;
 942        }
 943
 944        timeo = sock_rcvtimeo(sk, flags & O_NONBLOCK);
 945
 946        /* Wait for an incoming connection */
 947        add_wait_queue_exclusive(sk_sleep(sk), &wait);
 948        while (!(nsk = iucv_accept_dequeue(sk, newsock))) {
 949                set_current_state(TASK_INTERRUPTIBLE);
 950                if (!timeo) {
 951                        err = -EAGAIN;
 952                        break;
 953                }
 954
 955                release_sock(sk);
 956                timeo = schedule_timeout(timeo);
 957                lock_sock_nested(sk, SINGLE_DEPTH_NESTING);
 958
 959                if (sk->sk_state != IUCV_LISTEN) {
 960                        err = -EBADFD;
 961                        break;
 962                }
 963
 964                if (signal_pending(current)) {
 965                        err = sock_intr_errno(timeo);
 966                        break;
 967                }
 968        }
 969
 970        set_current_state(TASK_RUNNING);
 971        remove_wait_queue(sk_sleep(sk), &wait);
 972
 973        if (err)
 974                goto done;
 975
 976        newsock->state = SS_CONNECTED;
 977
 978done:
 979        release_sock(sk);
 980        return err;
 981}
 982
 983static int iucv_sock_getname(struct socket *sock, struct sockaddr *addr,
 984                             int *len, int peer)
 985{
 986        struct sockaddr_iucv *siucv = (struct sockaddr_iucv *) addr;
 987        struct sock *sk = sock->sk;
 988        struct iucv_sock *iucv = iucv_sk(sk);
 989
 990        addr->sa_family = AF_IUCV;
 991        *len = sizeof(struct sockaddr_iucv);
 992
 993        if (peer) {
 994                memcpy(siucv->siucv_user_id, iucv->dst_user_id, 8);
 995                memcpy(siucv->siucv_name, iucv->dst_name, 8);
 996        } else {
 997                memcpy(siucv->siucv_user_id, iucv->src_user_id, 8);
 998                memcpy(siucv->siucv_name, iucv->src_name, 8);
 999        }
1000        memset(&siucv->siucv_port, 0, sizeof(siucv->siucv_port));
1001        memset(&siucv->siucv_addr, 0, sizeof(siucv->siucv_addr));
1002        memset(&siucv->siucv_nodeid, 0, sizeof(siucv->siucv_nodeid));
1003
1004        return 0;
1005}
1006
1007/**
1008 * iucv_send_iprm() - Send socket data in parameter list of an iucv message.
1009 * @path:       IUCV path
1010 * @msg:        Pointer to a struct iucv_message
1011 * @skb:        The socket data to send, skb->len MUST BE <= 7
1012 *
1013 * Send the socket data in the parameter list in the iucv message
1014 * (IUCV_IPRMDATA). The socket data is stored at index 0 to 6 in the parameter
1015 * list and the socket data len at index 7 (last byte).
1016 * See also iucv_msg_length().
1017 *
1018 * Returns the error code from the iucv_message_send() call.
1019 */
1020static int iucv_send_iprm(struct iucv_path *path, struct iucv_message *msg,
1021                          struct sk_buff *skb)
1022{
1023        u8 prmdata[8];
1024
1025        memcpy(prmdata, (void *) skb->data, skb->len);
1026        prmdata[7] = 0xff - (u8) skb->len;
1027        return pr_iucv->message_send(path, msg, IUCV_IPRMDATA, 0,
1028                                 (void *) prmdata, 8);
1029}
1030
1031static int iucv_sock_sendmsg(struct socket *sock, struct msghdr *msg,
1032                             size_t len)
1033{
1034        struct sock *sk = sock->sk;
1035        struct iucv_sock *iucv = iucv_sk(sk);
1036        struct sk_buff *skb;
1037        struct iucv_message txmsg = {0};
1038        struct cmsghdr *cmsg;
1039        int cmsg_done;
1040        long timeo;
1041        char user_id[9];
1042        char appl_id[9];
1043        int err;
1044        int noblock = msg->msg_flags & MSG_DONTWAIT;
1045
1046        err = sock_error(sk);
1047        if (err)
1048                return err;
1049
1050        if (msg->msg_flags & MSG_OOB)
1051                return -EOPNOTSUPP;
1052
1053        /* SOCK_SEQPACKET: we do not support segmented records */
1054        if (sk->sk_type == SOCK_SEQPACKET && !(msg->msg_flags & MSG_EOR))
1055                return -EOPNOTSUPP;
1056
1057        lock_sock(sk);
1058
1059        if (sk->sk_shutdown & SEND_SHUTDOWN) {
1060                err = -EPIPE;
1061                goto out;
1062        }
1063
1064        /* Return if the socket is not in connected state */
1065        if (sk->sk_state != IUCV_CONNECTED) {
1066                err = -ENOTCONN;
1067                goto out;
1068        }
1069
1070        /* initialize defaults */
1071        cmsg_done   = 0;        /* check for duplicate headers */
1072        txmsg.class = 0;
1073
1074        /* iterate over control messages */
1075        for_each_cmsghdr(cmsg, msg) {
1076                if (!CMSG_OK(msg, cmsg)) {
1077                        err = -EINVAL;
1078                        goto out;
1079                }
1080
1081                if (cmsg->cmsg_level != SOL_IUCV)
1082                        continue;
1083
1084                if (cmsg->cmsg_type & cmsg_done) {
1085                        err = -EINVAL;
1086                        goto out;
1087                }
1088                cmsg_done |= cmsg->cmsg_type;
1089
1090                switch (cmsg->cmsg_type) {
1091                case SCM_IUCV_TRGCLS:
1092                        if (cmsg->cmsg_len != CMSG_LEN(TRGCLS_SIZE)) {
1093                                err = -EINVAL;
1094                                goto out;
1095                        }
1096
1097                        /* set iucv message target class */
1098                        memcpy(&txmsg.class,
1099                                (void *) CMSG_DATA(cmsg), TRGCLS_SIZE);
1100
1101                        break;
1102
1103                default:
1104                        err = -EINVAL;
1105                        goto out;
1106                }
1107        }
1108
1109        /* allocate one skb for each iucv message:
1110         * this is fine for SOCK_SEQPACKET (unless we want to support
1111         * segmented records using the MSG_EOR flag), but
1112         * for SOCK_STREAM we might want to improve it in future */
1113        if (iucv->transport == AF_IUCV_TRANS_HIPER)
1114                skb = sock_alloc_send_skb(sk,
1115                        len + sizeof(struct af_iucv_trans_hdr) + ETH_HLEN,
1116                        noblock, &err);
1117        else
1118                skb = sock_alloc_send_skb(sk, len, noblock, &err);
1119        if (!skb)
1120                goto out;
1121        if (iucv->transport == AF_IUCV_TRANS_HIPER)
1122                skb_reserve(skb, sizeof(struct af_iucv_trans_hdr) + ETH_HLEN);
1123        if (memcpy_from_msg(skb_put(skb, len), msg, len)) {
1124                err = -EFAULT;
1125                goto fail;
1126        }
1127
1128        /* wait if outstanding messages for iucv path has reached */
1129        timeo = sock_sndtimeo(sk, noblock);
1130        err = iucv_sock_wait(sk, iucv_below_msglim(sk), timeo);
1131        if (err)
1132                goto fail;
1133
1134        /* return -ECONNRESET if the socket is no longer connected */
1135        if (sk->sk_state != IUCV_CONNECTED) {
1136                err = -ECONNRESET;
1137                goto fail;
1138        }
1139
1140        /* increment and save iucv message tag for msg_completion cbk */
1141        txmsg.tag = iucv->send_tag++;
1142        IUCV_SKB_CB(skb)->tag = txmsg.tag;
1143
1144        if (iucv->transport == AF_IUCV_TRANS_HIPER) {
1145                atomic_inc(&iucv->msg_sent);
1146                err = afiucv_hs_send(&txmsg, sk, skb, 0);
1147                if (err) {
1148                        atomic_dec(&iucv->msg_sent);
1149                        goto fail;
1150                }
1151                goto release;
1152        }
1153        skb_queue_tail(&iucv->send_skb_q, skb);
1154
1155        if (((iucv->path->flags & IUCV_IPRMDATA) & iucv->flags)
1156              && skb->len <= 7) {
1157                err = iucv_send_iprm(iucv->path, &txmsg, skb);
1158
1159                /* on success: there is no message_complete callback
1160                 * for an IPRMDATA msg; remove skb from send queue */
1161                if (err == 0) {
1162                        skb_unlink(skb, &iucv->send_skb_q);
1163                        kfree_skb(skb);
1164                }
1165
1166                /* this error should never happen since the
1167                 * IUCV_IPRMDATA path flag is set... sever path */
1168                if (err == 0x15) {
1169                        pr_iucv->path_sever(iucv->path, NULL);
1170                        skb_unlink(skb, &iucv->send_skb_q);
1171                        err = -EPIPE;
1172                        goto fail;
1173                }
1174        } else
1175                err = pr_iucv->message_send(iucv->path, &txmsg, 0, 0,
1176                                        (void *) skb->data, skb->len);
1177        if (err) {
1178                if (err == 3) {
1179                        user_id[8] = 0;
1180                        memcpy(user_id, iucv->dst_user_id, 8);
1181                        appl_id[8] = 0;
1182                        memcpy(appl_id, iucv->dst_name, 8);
1183                        pr_err("Application %s on z/VM guest %s"
1184                                " exceeds message limit\n",
1185                                appl_id, user_id);
1186                        err = -EAGAIN;
1187                } else
1188                        err = -EPIPE;
1189                skb_unlink(skb, &iucv->send_skb_q);
1190                goto fail;
1191        }
1192
1193release:
1194        release_sock(sk);
1195        return len;
1196
1197fail:
1198        kfree_skb(skb);
1199out:
1200        release_sock(sk);
1201        return err;
1202}
1203
1204/* iucv_fragment_skb() - Fragment a single IUCV message into multiple skb's
1205 *
1206 * Locking: must be called with message_q.lock held
1207 */
1208static int iucv_fragment_skb(struct sock *sk, struct sk_buff *skb, int len)
1209{
1210        int dataleft, size, copied = 0;
1211        struct sk_buff *nskb;
1212
1213        dataleft = len;
1214        while (dataleft) {
1215                if (dataleft >= sk->sk_rcvbuf / 4)
1216                        size = sk->sk_rcvbuf / 4;
1217                else
1218                        size = dataleft;
1219
1220                nskb = alloc_skb(size, GFP_ATOMIC | GFP_DMA);
1221                if (!nskb)
1222                        return -ENOMEM;
1223
1224                /* copy target class to control buffer of new skb */
1225                IUCV_SKB_CB(nskb)->class = IUCV_SKB_CB(skb)->class;
1226
1227                /* copy data fragment */
1228                memcpy(nskb->data, skb->data + copied, size);
1229                copied += size;
1230                dataleft -= size;
1231
1232                skb_reset_transport_header(nskb);
1233                skb_reset_network_header(nskb);
1234                nskb->len = size;
1235
1236                skb_queue_tail(&iucv_sk(sk)->backlog_skb_q, nskb);
1237        }
1238
1239        return 0;
1240}
1241
1242/* iucv_process_message() - Receive a single outstanding IUCV message
1243 *
1244 * Locking: must be called with message_q.lock held
1245 */
1246static void iucv_process_message(struct sock *sk, struct sk_buff *skb,
1247                                 struct iucv_path *path,
1248                                 struct iucv_message *msg)
1249{
1250        int rc;
1251        unsigned int len;
1252
1253        len = iucv_msg_length(msg);
1254
1255        /* store msg target class in the second 4 bytes of skb ctrl buffer */
1256        /* Note: the first 4 bytes are reserved for msg tag */
1257        IUCV_SKB_CB(skb)->class = msg->class;
1258
1259        /* check for special IPRM messages (e.g. iucv_sock_shutdown) */
1260        if ((msg->flags & IUCV_IPRMDATA) && len > 7) {
1261                if (memcmp(msg->rmmsg, iprm_shutdown, 8) == 0) {
1262                        skb->data = NULL;
1263                        skb->len = 0;
1264                }
1265        } else {
1266                rc = pr_iucv->message_receive(path, msg,
1267                                              msg->flags & IUCV_IPRMDATA,
1268                                              skb->data, len, NULL);
1269                if (rc) {
1270                        kfree_skb(skb);
1271                        return;
1272                }
1273                /* we need to fragment iucv messages for SOCK_STREAM only;
1274                 * for SOCK_SEQPACKET, it is only relevant if we support
1275                 * record segmentation using MSG_EOR (see also recvmsg()) */
1276                if (sk->sk_type == SOCK_STREAM &&
1277                    skb->truesize >= sk->sk_rcvbuf / 4) {
1278                        rc = iucv_fragment_skb(sk, skb, len);
1279                        kfree_skb(skb);
1280                        skb = NULL;
1281                        if (rc) {
1282                                pr_iucv->path_sever(path, NULL);
1283                                return;
1284                        }
1285                        skb = skb_dequeue(&iucv_sk(sk)->backlog_skb_q);
1286                } else {
1287                        skb_reset_transport_header(skb);
1288                        skb_reset_network_header(skb);
1289                        skb->len = len;
1290                }
1291        }
1292
1293        IUCV_SKB_CB(skb)->offset = 0;
1294        if (sock_queue_rcv_skb(sk, skb))
1295                skb_queue_head(&iucv_sk(sk)->backlog_skb_q, skb);
1296}
1297
1298/* iucv_process_message_q() - Process outstanding IUCV messages
1299 *
1300 * Locking: must be called with message_q.lock held
1301 */
1302static void iucv_process_message_q(struct sock *sk)
1303{
1304        struct iucv_sock *iucv = iucv_sk(sk);
1305        struct sk_buff *skb;
1306        struct sock_msg_q *p, *n;
1307
1308        list_for_each_entry_safe(p, n, &iucv->message_q.list, list) {
1309                skb = alloc_skb(iucv_msg_length(&p->msg), GFP_ATOMIC | GFP_DMA);
1310                if (!skb)
1311                        break;
1312                iucv_process_message(sk, skb, p->path, &p->msg);
1313                list_del(&p->list);
1314                kfree(p);
1315                if (!skb_queue_empty(&iucv->backlog_skb_q))
1316                        break;
1317        }
1318}
1319
1320static int iucv_sock_recvmsg(struct socket *sock, struct msghdr *msg,
1321                             size_t len, int flags)
1322{
1323        int noblock = flags & MSG_DONTWAIT;
1324        struct sock *sk = sock->sk;
1325        struct iucv_sock *iucv = iucv_sk(sk);
1326        unsigned int copied, rlen;
1327        struct sk_buff *skb, *rskb, *cskb;
1328        int err = 0;
1329        u32 offset;
1330
1331        if ((sk->sk_state == IUCV_DISCONN) &&
1332            skb_queue_empty(&iucv->backlog_skb_q) &&
1333            skb_queue_empty(&sk->sk_receive_queue) &&
1334            list_empty(&iucv->message_q.list))
1335                return 0;
1336
1337        if (flags & (MSG_OOB))
1338                return -EOPNOTSUPP;
1339
1340        /* receive/dequeue next skb:
1341         * the function understands MSG_PEEK and, thus, does not dequeue skb */
1342        skb = skb_recv_datagram(sk, flags, noblock, &err);
1343        if (!skb) {
1344                if (sk->sk_shutdown & RCV_SHUTDOWN)
1345                        return 0;
1346                return err;
1347        }
1348
1349        offset = IUCV_SKB_CB(skb)->offset;
1350        rlen   = skb->len - offset;             /* real length of skb */
1351        copied = min_t(unsigned int, rlen, len);
1352        if (!rlen)
1353                sk->sk_shutdown = sk->sk_shutdown | RCV_SHUTDOWN;
1354
1355        cskb = skb;
1356        if (skb_copy_datagram_msg(cskb, offset, msg, copied)) {
1357                if (!(flags & MSG_PEEK))
1358                        skb_queue_head(&sk->sk_receive_queue, skb);
1359                return -EFAULT;
1360        }
1361
1362        /* SOCK_SEQPACKET: set MSG_TRUNC if recv buf size is too small */
1363        if (sk->sk_type == SOCK_SEQPACKET) {
1364                if (copied < rlen)
1365                        msg->msg_flags |= MSG_TRUNC;
1366                /* each iucv message contains a complete record */
1367                msg->msg_flags |= MSG_EOR;
1368        }
1369
1370        /* create control message to store iucv msg target class:
1371         * get the trgcls from the control buffer of the skb due to
1372         * fragmentation of original iucv message. */
1373        err = put_cmsg(msg, SOL_IUCV, SCM_IUCV_TRGCLS,
1374                       sizeof(IUCV_SKB_CB(skb)->class),
1375                       (void *)&IUCV_SKB_CB(skb)->class);
1376        if (err) {
1377                if (!(flags & MSG_PEEK))
1378                        skb_queue_head(&sk->sk_receive_queue, skb);
1379                return err;
1380        }
1381
1382        /* Mark read part of skb as used */
1383        if (!(flags & MSG_PEEK)) {
1384
1385                /* SOCK_STREAM: re-queue skb if it contains unreceived data */
1386                if (sk->sk_type == SOCK_STREAM) {
1387                        if (copied < rlen) {
1388                                IUCV_SKB_CB(skb)->offset = offset + copied;
1389                                skb_queue_head(&sk->sk_receive_queue, skb);
1390                                goto done;
1391                        }
1392                }
1393
1394                kfree_skb(skb);
1395                if (iucv->transport == AF_IUCV_TRANS_HIPER) {
1396                        atomic_inc(&iucv->msg_recv);
1397                        if (atomic_read(&iucv->msg_recv) > iucv->msglimit) {
1398                                WARN_ON(1);
1399                                iucv_sock_close(sk);
1400                                return -EFAULT;
1401                        }
1402                }
1403
1404                /* Queue backlog skbs */
1405                spin_lock_bh(&iucv->message_q.lock);
1406                rskb = skb_dequeue(&iucv->backlog_skb_q);
1407                while (rskb) {
1408                        IUCV_SKB_CB(rskb)->offset = 0;
1409                        if (sock_queue_rcv_skb(sk, rskb)) {
1410                                skb_queue_head(&iucv->backlog_skb_q,
1411                                                rskb);
1412                                break;
1413                        } else {
1414                                rskb = skb_dequeue(&iucv->backlog_skb_q);
1415                        }
1416                }
1417                if (skb_queue_empty(&iucv->backlog_skb_q)) {
1418                        if (!list_empty(&iucv->message_q.list))
1419                                iucv_process_message_q(sk);
1420                        if (atomic_read(&iucv->msg_recv) >=
1421                                                        iucv->msglimit / 2) {
1422                                err = iucv_send_ctrl(sk, AF_IUCV_FLAG_WIN);
1423                                if (err) {
1424                                        sk->sk_state = IUCV_DISCONN;
1425                                        sk->sk_state_change(sk);
1426                                }
1427                        }
1428                }
1429                spin_unlock_bh(&iucv->message_q.lock);
1430        }
1431
1432done:
1433        /* SOCK_SEQPACKET: return real length if MSG_TRUNC is set */
1434        if (sk->sk_type == SOCK_SEQPACKET && (flags & MSG_TRUNC))
1435                copied = rlen;
1436
1437        return copied;
1438}
1439
1440static inline unsigned int iucv_accept_poll(struct sock *parent)
1441{
1442        struct iucv_sock *isk, *n;
1443        struct sock *sk;
1444
1445        list_for_each_entry_safe(isk, n, &iucv_sk(parent)->accept_q, accept_q) {
1446                sk = (struct sock *) isk;
1447
1448                if (sk->sk_state == IUCV_CONNECTED)
1449                        return POLLIN | POLLRDNORM;
1450        }
1451
1452        return 0;
1453}
1454
1455unsigned int iucv_sock_poll(struct file *file, struct socket *sock,
1456                            poll_table *wait)
1457{
1458        struct sock *sk = sock->sk;
1459        unsigned int mask = 0;
1460
1461        sock_poll_wait(file, sk_sleep(sk), wait);
1462
1463        if (sk->sk_state == IUCV_LISTEN)
1464                return iucv_accept_poll(sk);
1465
1466        if (sk->sk_err || !skb_queue_empty(&sk->sk_error_queue))
1467                mask |= POLLERR |
1468                        (sock_flag(sk, SOCK_SELECT_ERR_QUEUE) ? POLLPRI : 0);
1469
1470        if (sk->sk_shutdown & RCV_SHUTDOWN)
1471                mask |= POLLRDHUP;
1472
1473        if (sk->sk_shutdown == SHUTDOWN_MASK)
1474                mask |= POLLHUP;
1475
1476        if (!skb_queue_empty(&sk->sk_receive_queue) ||
1477            (sk->sk_shutdown & RCV_SHUTDOWN))
1478                mask |= POLLIN | POLLRDNORM;
1479
1480        if (sk->sk_state == IUCV_CLOSED)
1481                mask |= POLLHUP;
1482
1483        if (sk->sk_state == IUCV_DISCONN)
1484                mask |= POLLIN;
1485
1486        if (sock_writeable(sk) && iucv_below_msglim(sk))
1487                mask |= POLLOUT | POLLWRNORM | POLLWRBAND;
1488        else
1489                sk_set_bit(SOCKWQ_ASYNC_NOSPACE, sk);
1490
1491        return mask;
1492}
1493
1494static int iucv_sock_shutdown(struct socket *sock, int how)
1495{
1496        struct sock *sk = sock->sk;
1497        struct iucv_sock *iucv = iucv_sk(sk);
1498        struct iucv_message txmsg;
1499        int err = 0;
1500
1501        how++;
1502
1503        if ((how & ~SHUTDOWN_MASK) || !how)
1504                return -EINVAL;
1505
1506        lock_sock(sk);
1507        switch (sk->sk_state) {
1508        case IUCV_LISTEN:
1509        case IUCV_DISCONN:
1510        case IUCV_CLOSING:
1511        case IUCV_CLOSED:
1512                err = -ENOTCONN;
1513                goto fail;
1514        default:
1515                break;
1516        }
1517
1518        if (how == SEND_SHUTDOWN || how == SHUTDOWN_MASK) {
1519                if (iucv->transport == AF_IUCV_TRANS_IUCV) {
1520                        txmsg.class = 0;
1521                        txmsg.tag = 0;
1522                        err = pr_iucv->message_send(iucv->path, &txmsg,
1523                                IUCV_IPRMDATA, 0, (void *) iprm_shutdown, 8);
1524                        if (err) {
1525                                switch (err) {
1526                                case 1:
1527                                        err = -ENOTCONN;
1528                                        break;
1529                                case 2:
1530                                        err = -ECONNRESET;
1531                                        break;
1532                                default:
1533                                        err = -ENOTCONN;
1534                                        break;
1535                                }
1536                        }
1537                } else
1538                        iucv_send_ctrl(sk, AF_IUCV_FLAG_SHT);
1539        }
1540
1541        sk->sk_shutdown |= how;
1542        if (how == RCV_SHUTDOWN || how == SHUTDOWN_MASK) {
1543                if ((iucv->transport == AF_IUCV_TRANS_IUCV) &&
1544                    iucv->path) {
1545                        err = pr_iucv->path_quiesce(iucv->path, NULL);
1546                        if (err)
1547                                err = -ENOTCONN;
1548/*                      skb_queue_purge(&sk->sk_receive_queue); */
1549                }
1550                skb_queue_purge(&sk->sk_receive_queue);
1551        }
1552
1553        /* Wake up anyone sleeping in poll */
1554        sk->sk_state_change(sk);
1555
1556fail:
1557        release_sock(sk);
1558        return err;
1559}
1560
1561static int iucv_sock_release(struct socket *sock)
1562{
1563        struct sock *sk = sock->sk;
1564        int err = 0;
1565
1566        if (!sk)
1567                return 0;
1568
1569        iucv_sock_close(sk);
1570
1571        sock_orphan(sk);
1572        iucv_sock_kill(sk);
1573        return err;
1574}
1575
1576/* getsockopt and setsockopt */
1577static int iucv_sock_setsockopt(struct socket *sock, int level, int optname,
1578                                char __user *optval, unsigned int optlen)
1579{
1580        struct sock *sk = sock->sk;
1581        struct iucv_sock *iucv = iucv_sk(sk);
1582        int val;
1583        int rc;
1584
1585        if (level != SOL_IUCV)
1586                return -ENOPROTOOPT;
1587
1588        if (optlen < sizeof(int))
1589                return -EINVAL;
1590
1591        if (get_user(val, (int __user *) optval))
1592                return -EFAULT;
1593
1594        rc = 0;
1595
1596        lock_sock(sk);
1597        switch (optname) {
1598        case SO_IPRMDATA_MSG:
1599                if (val)
1600                        iucv->flags |= IUCV_IPRMDATA;
1601                else
1602                        iucv->flags &= ~IUCV_IPRMDATA;
1603                break;
1604        case SO_MSGLIMIT:
1605                switch (sk->sk_state) {
1606                case IUCV_OPEN:
1607                case IUCV_BOUND:
1608                        if (val < 1 || val > (u16)(~0))
1609                                rc = -EINVAL;
1610                        else
1611                                iucv->msglimit = val;
1612                        break;
1613                default:
1614                        rc = -EINVAL;
1615                        break;
1616                }
1617                break;
1618        default:
1619                rc = -ENOPROTOOPT;
1620                break;
1621        }
1622        release_sock(sk);
1623
1624        return rc;
1625}
1626
1627static int iucv_sock_getsockopt(struct socket *sock, int level, int optname,
1628                                char __user *optval, int __user *optlen)
1629{
1630        struct sock *sk = sock->sk;
1631        struct iucv_sock *iucv = iucv_sk(sk);
1632        unsigned int val;
1633        int len;
1634
1635        if (level != SOL_IUCV)
1636                return -ENOPROTOOPT;
1637
1638        if (get_user(len, optlen))
1639                return -EFAULT;
1640
1641        if (len < 0)
1642                return -EINVAL;
1643
1644        len = min_t(unsigned int, len, sizeof(int));
1645
1646        switch (optname) {
1647        case SO_IPRMDATA_MSG:
1648                val = (iucv->flags & IUCV_IPRMDATA) ? 1 : 0;
1649                break;
1650        case SO_MSGLIMIT:
1651                lock_sock(sk);
1652                val = (iucv->path != NULL) ? iucv->path->msglim /* connected */
1653                                           : iucv->msglimit;    /* default */
1654                release_sock(sk);
1655                break;
1656        case SO_MSGSIZE:
1657                if (sk->sk_state == IUCV_OPEN)
1658                        return -EBADFD;
1659                val = (iucv->hs_dev) ? iucv->hs_dev->mtu -
1660                                sizeof(struct af_iucv_trans_hdr) - ETH_HLEN :
1661                                0x7fffffff;
1662                break;
1663        default:
1664                return -ENOPROTOOPT;
1665        }
1666
1667        if (put_user(len, optlen))
1668                return -EFAULT;
1669        if (copy_to_user(optval, &val, len))
1670                return -EFAULT;
1671
1672        return 0;
1673}
1674
1675
1676/* Callback wrappers - called from iucv base support */
1677static int iucv_callback_connreq(struct iucv_path *path,
1678                                 u8 ipvmid[8], u8 ipuser[16])
1679{
1680        unsigned char user_data[16];
1681        unsigned char nuser_data[16];
1682        unsigned char src_name[8];
1683        struct sock *sk, *nsk;
1684        struct iucv_sock *iucv, *niucv;
1685        int err;
1686
1687        memcpy(src_name, ipuser, 8);
1688        EBCASC(src_name, 8);
1689        /* Find out if this path belongs to af_iucv. */
1690        read_lock(&iucv_sk_list.lock);
1691        iucv = NULL;
1692        sk = NULL;
1693        sk_for_each(sk, &iucv_sk_list.head)
1694                if (sk->sk_state == IUCV_LISTEN &&
1695                    !memcmp(&iucv_sk(sk)->src_name, src_name, 8)) {
1696                        /*
1697                         * Found a listening socket with
1698                         * src_name == ipuser[0-7].
1699                         */
1700                        iucv = iucv_sk(sk);
1701                        break;
1702                }
1703        read_unlock(&iucv_sk_list.lock);
1704        if (!iucv)
1705                /* No socket found, not one of our paths. */
1706                return -EINVAL;
1707
1708        bh_lock_sock(sk);
1709
1710        /* Check if parent socket is listening */
1711        low_nmcpy(user_data, iucv->src_name);
1712        high_nmcpy(user_data, iucv->dst_name);
1713        ASCEBC(user_data, sizeof(user_data));
1714        if (sk->sk_state != IUCV_LISTEN) {
1715                err = pr_iucv->path_sever(path, user_data);
1716                iucv_path_free(path);
1717                goto fail;
1718        }
1719
1720        /* Check for backlog size */
1721        if (sk_acceptq_is_full(sk)) {
1722                err = pr_iucv->path_sever(path, user_data);
1723                iucv_path_free(path);
1724                goto fail;
1725        }
1726
1727        /* Create the new socket */
1728        nsk = iucv_sock_alloc(NULL, sk->sk_type, GFP_ATOMIC, 0);
1729        if (!nsk) {
1730                err = pr_iucv->path_sever(path, user_data);
1731                iucv_path_free(path);
1732                goto fail;
1733        }
1734
1735        niucv = iucv_sk(nsk);
1736        iucv_sock_init(nsk, sk);
1737
1738        /* Set the new iucv_sock */
1739        memcpy(niucv->dst_name, ipuser + 8, 8);
1740        EBCASC(niucv->dst_name, 8);
1741        memcpy(niucv->dst_user_id, ipvmid, 8);
1742        memcpy(niucv->src_name, iucv->src_name, 8);
1743        memcpy(niucv->src_user_id, iucv->src_user_id, 8);
1744        niucv->path = path;
1745
1746        /* Call iucv_accept */
1747        high_nmcpy(nuser_data, ipuser + 8);
1748        memcpy(nuser_data + 8, niucv->src_name, 8);
1749        ASCEBC(nuser_data + 8, 8);
1750
1751        /* set message limit for path based on msglimit of accepting socket */
1752        niucv->msglimit = iucv->msglimit;
1753        path->msglim = iucv->msglimit;
1754        err = pr_iucv->path_accept(path, &af_iucv_handler, nuser_data, nsk);
1755        if (err) {
1756                iucv_sever_path(nsk, 1);
1757                iucv_sock_kill(nsk);
1758                goto fail;
1759        }
1760
1761        iucv_accept_enqueue(sk, nsk);
1762
1763        /* Wake up accept */
1764        nsk->sk_state = IUCV_CONNECTED;
1765        sk->sk_data_ready(sk);
1766        err = 0;
1767fail:
1768        bh_unlock_sock(sk);
1769        return 0;
1770}
1771
1772static void iucv_callback_connack(struct iucv_path *path, u8 ipuser[16])
1773{
1774        struct sock *sk = path->private;
1775
1776        sk->sk_state = IUCV_CONNECTED;
1777        sk->sk_state_change(sk);
1778}
1779
1780static void iucv_callback_rx(struct iucv_path *path, struct iucv_message *msg)
1781{
1782        struct sock *sk = path->private;
1783        struct iucv_sock *iucv = iucv_sk(sk);
1784        struct sk_buff *skb;
1785        struct sock_msg_q *save_msg;
1786        int len;
1787
1788        if (sk->sk_shutdown & RCV_SHUTDOWN) {
1789                pr_iucv->message_reject(path, msg);
1790                return;
1791        }
1792
1793        spin_lock(&iucv->message_q.lock);
1794
1795        if (!list_empty(&iucv->message_q.list) ||
1796            !skb_queue_empty(&iucv->backlog_skb_q))
1797                goto save_message;
1798
1799        len = atomic_read(&sk->sk_rmem_alloc);
1800        len += SKB_TRUESIZE(iucv_msg_length(msg));
1801        if (len > sk->sk_rcvbuf)
1802                goto save_message;
1803
1804        skb = alloc_skb(iucv_msg_length(msg), GFP_ATOMIC | GFP_DMA);
1805        if (!skb)
1806                goto save_message;
1807
1808        iucv_process_message(sk, skb, path, msg);
1809        goto out_unlock;
1810
1811save_message:
1812        save_msg = kzalloc(sizeof(struct sock_msg_q), GFP_ATOMIC | GFP_DMA);
1813        if (!save_msg)
1814                goto out_unlock;
1815        save_msg->path = path;
1816        save_msg->msg = *msg;
1817
1818        list_add_tail(&save_msg->list, &iucv->message_q.list);
1819
1820out_unlock:
1821        spin_unlock(&iucv->message_q.lock);
1822}
1823
1824static void iucv_callback_txdone(struct iucv_path *path,
1825                                 struct iucv_message *msg)
1826{
1827        struct sock *sk = path->private;
1828        struct sk_buff *this = NULL;
1829        struct sk_buff_head *list = &iucv_sk(sk)->send_skb_q;
1830        struct sk_buff *list_skb = list->next;
1831        unsigned long flags;
1832
1833        bh_lock_sock(sk);
1834        if (!skb_queue_empty(list)) {
1835                spin_lock_irqsave(&list->lock, flags);
1836
1837                while (list_skb != (struct sk_buff *)list) {
1838                        if (msg->tag == IUCV_SKB_CB(list_skb)->tag) {
1839                                this = list_skb;
1840                                break;
1841                        }
1842                        list_skb = list_skb->next;
1843                }
1844                if (this)
1845                        __skb_unlink(this, list);
1846
1847                spin_unlock_irqrestore(&list->lock, flags);
1848
1849                if (this) {
1850                        kfree_skb(this);
1851                        /* wake up any process waiting for sending */
1852                        iucv_sock_wake_msglim(sk);
1853                }
1854        }
1855
1856        if (sk->sk_state == IUCV_CLOSING) {
1857                if (skb_queue_empty(&iucv_sk(sk)->send_skb_q)) {
1858                        sk->sk_state = IUCV_CLOSED;
1859                        sk->sk_state_change(sk);
1860                }
1861        }
1862        bh_unlock_sock(sk);
1863
1864}
1865
1866static void iucv_callback_connrej(struct iucv_path *path, u8 ipuser[16])
1867{
1868        struct sock *sk = path->private;
1869
1870        if (sk->sk_state == IUCV_CLOSED)
1871                return;
1872
1873        bh_lock_sock(sk);
1874        iucv_sever_path(sk, 1);
1875        sk->sk_state = IUCV_DISCONN;
1876
1877        sk->sk_state_change(sk);
1878        bh_unlock_sock(sk);
1879}
1880
1881/* called if the other communication side shuts down its RECV direction;
1882 * in turn, the callback sets SEND_SHUTDOWN to disable sending of data.
1883 */
1884static void iucv_callback_shutdown(struct iucv_path *path, u8 ipuser[16])
1885{
1886        struct sock *sk = path->private;
1887
1888        bh_lock_sock(sk);
1889        if (sk->sk_state != IUCV_CLOSED) {
1890                sk->sk_shutdown |= SEND_SHUTDOWN;
1891                sk->sk_state_change(sk);
1892        }
1893        bh_unlock_sock(sk);
1894}
1895
1896/***************** HiperSockets transport callbacks ********************/
1897static void afiucv_swap_src_dest(struct sk_buff *skb)
1898{
1899        struct af_iucv_trans_hdr *trans_hdr =
1900                                (struct af_iucv_trans_hdr *)skb->data;
1901        char tmpID[8];
1902        char tmpName[8];
1903
1904        ASCEBC(trans_hdr->destUserID, sizeof(trans_hdr->destUserID));
1905        ASCEBC(trans_hdr->destAppName, sizeof(trans_hdr->destAppName));
1906        ASCEBC(trans_hdr->srcUserID, sizeof(trans_hdr->srcUserID));
1907        ASCEBC(trans_hdr->srcAppName, sizeof(trans_hdr->srcAppName));
1908        memcpy(tmpID, trans_hdr->srcUserID, 8);
1909        memcpy(tmpName, trans_hdr->srcAppName, 8);
1910        memcpy(trans_hdr->srcUserID, trans_hdr->destUserID, 8);
1911        memcpy(trans_hdr->srcAppName, trans_hdr->destAppName, 8);
1912        memcpy(trans_hdr->destUserID, tmpID, 8);
1913        memcpy(trans_hdr->destAppName, tmpName, 8);
1914        skb_push(skb, ETH_HLEN);
1915        memset(skb->data, 0, ETH_HLEN);
1916}
1917
1918/**
1919 * afiucv_hs_callback_syn - react on received SYN
1920 **/
1921static int afiucv_hs_callback_syn(struct sock *sk, struct sk_buff *skb)
1922{
1923        struct sock *nsk;
1924        struct iucv_sock *iucv, *niucv;
1925        struct af_iucv_trans_hdr *trans_hdr;
1926        int err;
1927
1928        iucv = iucv_sk(sk);
1929        trans_hdr = (struct af_iucv_trans_hdr *)skb->data;
1930        if (!iucv) {
1931                /* no sock - connection refused */
1932                afiucv_swap_src_dest(skb);
1933                trans_hdr->flags = AF_IUCV_FLAG_SYN | AF_IUCV_FLAG_FIN;
1934                err = dev_queue_xmit(skb);
1935                goto out;
1936        }
1937
1938        nsk = iucv_sock_alloc(NULL, sk->sk_type, GFP_ATOMIC, 0);
1939        bh_lock_sock(sk);
1940        if ((sk->sk_state != IUCV_LISTEN) ||
1941            sk_acceptq_is_full(sk) ||
1942            !nsk) {
1943                /* error on server socket - connection refused */
1944                afiucv_swap_src_dest(skb);
1945                trans_hdr->flags = AF_IUCV_FLAG_SYN | AF_IUCV_FLAG_FIN;
1946                err = dev_queue_xmit(skb);
1947                iucv_sock_kill(nsk);
1948                bh_unlock_sock(sk);
1949                goto out;
1950        }
1951
1952        niucv = iucv_sk(nsk);
1953        iucv_sock_init(nsk, sk);
1954        niucv->transport = AF_IUCV_TRANS_HIPER;
1955        niucv->msglimit = iucv->msglimit;
1956        if (!trans_hdr->window)
1957                niucv->msglimit_peer = IUCV_HIPER_MSGLIM_DEFAULT;
1958        else
1959                niucv->msglimit_peer = trans_hdr->window;
1960        memcpy(niucv->dst_name, trans_hdr->srcAppName, 8);
1961        memcpy(niucv->dst_user_id, trans_hdr->srcUserID, 8);
1962        memcpy(niucv->src_name, iucv->src_name, 8);
1963        memcpy(niucv->src_user_id, iucv->src_user_id, 8);
1964        nsk->sk_bound_dev_if = sk->sk_bound_dev_if;
1965        niucv->hs_dev = iucv->hs_dev;
1966        dev_hold(niucv->hs_dev);
1967        afiucv_swap_src_dest(skb);
1968        trans_hdr->flags = AF_IUCV_FLAG_SYN | AF_IUCV_FLAG_ACK;
1969        trans_hdr->window = niucv->msglimit;
1970        /* if receiver acks the xmit connection is established */
1971        err = dev_queue_xmit(skb);
1972        if (!err) {
1973                iucv_accept_enqueue(sk, nsk);
1974                nsk->sk_state = IUCV_CONNECTED;
1975                sk->sk_data_ready(sk);
1976        } else
1977                iucv_sock_kill(nsk);
1978        bh_unlock_sock(sk);
1979
1980out:
1981        return NET_RX_SUCCESS;
1982}
1983
1984/**
1985 * afiucv_hs_callback_synack() - react on received SYN-ACK
1986 **/
1987static int afiucv_hs_callback_synack(struct sock *sk, struct sk_buff *skb)
1988{
1989        struct iucv_sock *iucv = iucv_sk(sk);
1990        struct af_iucv_trans_hdr *trans_hdr =
1991                                        (struct af_iucv_trans_hdr *)skb->data;
1992
1993        if (!iucv)
1994                goto out;
1995        if (sk->sk_state != IUCV_BOUND)
1996                goto out;
1997        bh_lock_sock(sk);
1998        iucv->msglimit_peer = trans_hdr->window;
1999        sk->sk_state = IUCV_CONNECTED;
2000        sk->sk_state_change(sk);
2001        bh_unlock_sock(sk);
2002out:
2003        kfree_skb(skb);
2004        return NET_RX_SUCCESS;
2005}
2006
2007/**
2008 * afiucv_hs_callback_synfin() - react on received SYN_FIN
2009 **/
2010static int afiucv_hs_callback_synfin(struct sock *sk, struct sk_buff *skb)
2011{
2012        struct iucv_sock *iucv = iucv_sk(sk);
2013
2014        if (!iucv)
2015                goto out;
2016        if (sk->sk_state != IUCV_BOUND)
2017                goto out;
2018        bh_lock_sock(sk);
2019        sk->sk_state = IUCV_DISCONN;
2020        sk->sk_state_change(sk);
2021        bh_unlock_sock(sk);
2022out:
2023        kfree_skb(skb);
2024        return NET_RX_SUCCESS;
2025}
2026
2027/**
2028 * afiucv_hs_callback_fin() - react on received FIN
2029 **/
2030static int afiucv_hs_callback_fin(struct sock *sk, struct sk_buff *skb)
2031{
2032        struct iucv_sock *iucv = iucv_sk(sk);
2033
2034        /* other end of connection closed */
2035        if (!iucv)
2036                goto out;
2037        bh_lock_sock(sk);
2038        if (sk->sk_state == IUCV_CONNECTED) {
2039                sk->sk_state = IUCV_DISCONN;
2040                sk->sk_state_change(sk);
2041        }
2042        bh_unlock_sock(sk);
2043out:
2044        kfree_skb(skb);
2045        return NET_RX_SUCCESS;
2046}
2047
2048/**
2049 * afiucv_hs_callback_win() - react on received WIN
2050 **/
2051static int afiucv_hs_callback_win(struct sock *sk, struct sk_buff *skb)
2052{
2053        struct iucv_sock *iucv = iucv_sk(sk);
2054        struct af_iucv_trans_hdr *trans_hdr =
2055                                        (struct af_iucv_trans_hdr *)skb->data;
2056
2057        if (!iucv)
2058                return NET_RX_SUCCESS;
2059
2060        if (sk->sk_state != IUCV_CONNECTED)
2061                return NET_RX_SUCCESS;
2062
2063        atomic_sub(trans_hdr->window, &iucv->msg_sent);
2064        iucv_sock_wake_msglim(sk);
2065        return NET_RX_SUCCESS;
2066}
2067
2068/**
2069 * afiucv_hs_callback_rx() - react on received data
2070 **/
2071static int afiucv_hs_callback_rx(struct sock *sk, struct sk_buff *skb)
2072{
2073        struct iucv_sock *iucv = iucv_sk(sk);
2074
2075        if (!iucv) {
2076                kfree_skb(skb);
2077                return NET_RX_SUCCESS;
2078        }
2079
2080        if (sk->sk_state != IUCV_CONNECTED) {
2081                kfree_skb(skb);
2082                return NET_RX_SUCCESS;
2083        }
2084
2085        if (sk->sk_shutdown & RCV_SHUTDOWN) {
2086                kfree_skb(skb);
2087                return NET_RX_SUCCESS;
2088        }
2089
2090        /* write stuff from iucv_msg to skb cb */
2091        skb_pull(skb, sizeof(struct af_iucv_trans_hdr));
2092        skb_reset_transport_header(skb);
2093        skb_reset_network_header(skb);
2094        IUCV_SKB_CB(skb)->offset = 0;
2095        spin_lock(&iucv->message_q.lock);
2096        if (skb_queue_empty(&iucv->backlog_skb_q)) {
2097                if (sock_queue_rcv_skb(sk, skb)) {
2098                        /* handle rcv queue full */
2099                        skb_queue_tail(&iucv->backlog_skb_q, skb);
2100                }
2101        } else
2102                skb_queue_tail(&iucv_sk(sk)->backlog_skb_q, skb);
2103        spin_unlock(&iucv->message_q.lock);
2104        return NET_RX_SUCCESS;
2105}
2106
2107/**
2108 * afiucv_hs_rcv() - base function for arriving data through HiperSockets
2109 *                   transport
2110 *                   called from netif RX softirq
2111 **/
2112static int afiucv_hs_rcv(struct sk_buff *skb, struct net_device *dev,
2113        struct packet_type *pt, struct net_device *orig_dev)
2114{
2115        struct sock *sk;
2116        struct iucv_sock *iucv;
2117        struct af_iucv_trans_hdr *trans_hdr;
2118        char nullstring[8];
2119        int err = 0;
2120
2121        if (skb->len < (ETH_HLEN + sizeof(struct af_iucv_trans_hdr))) {
2122                WARN_ONCE(1, "AF_IUCV too short skb, len=%d, min=%d",
2123                          (int)skb->len,
2124                          (int)(ETH_HLEN + sizeof(struct af_iucv_trans_hdr)));
2125                kfree_skb(skb);
2126                return NET_RX_SUCCESS;
2127        }
2128        if (skb_headlen(skb) < (ETH_HLEN + sizeof(struct af_iucv_trans_hdr)))
2129                if (skb_linearize(skb)) {
2130                        WARN_ONCE(1, "AF_IUCV skb_linearize failed, len=%d",
2131                                  (int)skb->len);
2132                        kfree_skb(skb);
2133                        return NET_RX_SUCCESS;
2134                }
2135        skb_pull(skb, ETH_HLEN);
2136        trans_hdr = (struct af_iucv_trans_hdr *)skb->data;
2137        EBCASC(trans_hdr->destAppName, sizeof(trans_hdr->destAppName));
2138        EBCASC(trans_hdr->destUserID, sizeof(trans_hdr->destUserID));
2139        EBCASC(trans_hdr->srcAppName, sizeof(trans_hdr->srcAppName));
2140        EBCASC(trans_hdr->srcUserID, sizeof(trans_hdr->srcUserID));
2141        memset(nullstring, 0, sizeof(nullstring));
2142        iucv = NULL;
2143        sk = NULL;
2144        read_lock(&iucv_sk_list.lock);
2145        sk_for_each(sk, &iucv_sk_list.head) {
2146                if (trans_hdr->flags == AF_IUCV_FLAG_SYN) {
2147                        if ((!memcmp(&iucv_sk(sk)->src_name,
2148                                     trans_hdr->destAppName, 8)) &&
2149                            (!memcmp(&iucv_sk(sk)->src_user_id,
2150                                     trans_hdr->destUserID, 8)) &&
2151                            (!memcmp(&iucv_sk(sk)->dst_name, nullstring, 8)) &&
2152                            (!memcmp(&iucv_sk(sk)->dst_user_id,
2153                                     nullstring, 8))) {
2154                                iucv = iucv_sk(sk);
2155                                break;
2156                        }
2157                } else {
2158                        if ((!memcmp(&iucv_sk(sk)->src_name,
2159                                     trans_hdr->destAppName, 8)) &&
2160                            (!memcmp(&iucv_sk(sk)->src_user_id,
2161                                     trans_hdr->destUserID, 8)) &&
2162                            (!memcmp(&iucv_sk(sk)->dst_name,
2163                                     trans_hdr->srcAppName, 8)) &&
2164                            (!memcmp(&iucv_sk(sk)->dst_user_id,
2165                                     trans_hdr->srcUserID, 8))) {
2166                                iucv = iucv_sk(sk);
2167                                break;
2168                        }
2169                }
2170        }
2171        read_unlock(&iucv_sk_list.lock);
2172        if (!iucv)
2173                sk = NULL;
2174
2175        /* no sock
2176        how should we send with no sock
2177        1) send without sock no send rc checking?
2178        2) introduce default sock to handle this cases
2179
2180         SYN -> send SYN|ACK in good case, send SYN|FIN in bad case
2181         data -> send FIN
2182         SYN|ACK, SYN|FIN, FIN -> no action? */
2183
2184        switch (trans_hdr->flags) {
2185        case AF_IUCV_FLAG_SYN:
2186                /* connect request */
2187                err = afiucv_hs_callback_syn(sk, skb);
2188                break;
2189        case (AF_IUCV_FLAG_SYN | AF_IUCV_FLAG_ACK):
2190                /* connect request confirmed */
2191                err = afiucv_hs_callback_synack(sk, skb);
2192                break;
2193        case (AF_IUCV_FLAG_SYN | AF_IUCV_FLAG_FIN):
2194                /* connect request refused */
2195                err = afiucv_hs_callback_synfin(sk, skb);
2196                break;
2197        case (AF_IUCV_FLAG_FIN):
2198                /* close request */
2199                err = afiucv_hs_callback_fin(sk, skb);
2200                break;
2201        case (AF_IUCV_FLAG_WIN):
2202                err = afiucv_hs_callback_win(sk, skb);
2203                if (skb->len == sizeof(struct af_iucv_trans_hdr)) {
2204                        kfree_skb(skb);
2205                        break;
2206                }
2207                /* fall through and receive non-zero length data */
2208        case (AF_IUCV_FLAG_SHT):
2209                /* shutdown request */
2210                /* fall through and receive zero length data */
2211        case 0:
2212                /* plain data frame */
2213                IUCV_SKB_CB(skb)->class = trans_hdr->iucv_hdr.class;
2214                err = afiucv_hs_callback_rx(sk, skb);
2215                break;
2216        default:
2217                ;
2218        }
2219
2220        return err;
2221}
2222
2223/**
2224 * afiucv_hs_callback_txnotify() - handle send notifcations from HiperSockets
2225 *                                 transport
2226 **/
2227static void afiucv_hs_callback_txnotify(struct sk_buff *skb,
2228                                        enum iucv_tx_notify n)
2229{
2230        struct sock *isk = skb->sk;
2231        struct sock *sk = NULL;
2232        struct iucv_sock *iucv = NULL;
2233        struct sk_buff_head *list;
2234        struct sk_buff *list_skb;
2235        struct sk_buff *nskb;
2236        unsigned long flags;
2237
2238        read_lock_irqsave(&iucv_sk_list.lock, flags);
2239        sk_for_each(sk, &iucv_sk_list.head)
2240                if (sk == isk) {
2241                        iucv = iucv_sk(sk);
2242                        break;
2243                }
2244        read_unlock_irqrestore(&iucv_sk_list.lock, flags);
2245
2246        if (!iucv || sock_flag(sk, SOCK_ZAPPED))
2247                return;
2248
2249        list = &iucv->send_skb_q;
2250        spin_lock_irqsave(&list->lock, flags);
2251        if (skb_queue_empty(list))
2252                goto out_unlock;
2253        list_skb = list->next;
2254        nskb = list_skb->next;
2255        while (list_skb != (struct sk_buff *)list) {
2256                if (skb_shinfo(list_skb) == skb_shinfo(skb)) {
2257                        switch (n) {
2258                        case TX_NOTIFY_OK:
2259                                __skb_unlink(list_skb, list);
2260                                kfree_skb(list_skb);
2261                                iucv_sock_wake_msglim(sk);
2262                                break;
2263                        case TX_NOTIFY_PENDING:
2264                                atomic_inc(&iucv->pendings);
2265                                break;
2266                        case TX_NOTIFY_DELAYED_OK:
2267                                __skb_unlink(list_skb, list);
2268                                atomic_dec(&iucv->pendings);
2269                                if (atomic_read(&iucv->pendings) <= 0)
2270                                        iucv_sock_wake_msglim(sk);
2271                                kfree_skb(list_skb);
2272                                break;
2273                        case TX_NOTIFY_UNREACHABLE:
2274                        case TX_NOTIFY_DELAYED_UNREACHABLE:
2275                        case TX_NOTIFY_TPQFULL: /* not yet used */
2276                        case TX_NOTIFY_GENERALERROR:
2277                        case TX_NOTIFY_DELAYED_GENERALERROR:
2278                                __skb_unlink(list_skb, list);
2279                                kfree_skb(list_skb);
2280                                if (sk->sk_state == IUCV_CONNECTED) {
2281                                        sk->sk_state = IUCV_DISCONN;
2282                                        sk->sk_state_change(sk);
2283                                }
2284                                break;
2285                        }
2286                        break;
2287                }
2288                list_skb = nskb;
2289                nskb = nskb->next;
2290        }
2291out_unlock:
2292        spin_unlock_irqrestore(&list->lock, flags);
2293
2294        if (sk->sk_state == IUCV_CLOSING) {
2295                if (skb_queue_empty(&iucv_sk(sk)->send_skb_q)) {
2296                        sk->sk_state = IUCV_CLOSED;
2297                        sk->sk_state_change(sk);
2298                }
2299        }
2300
2301}
2302
2303/*
2304 * afiucv_netdev_event: handle netdev notifier chain events
2305 */
2306static int afiucv_netdev_event(struct notifier_block *this,
2307                               unsigned long event, void *ptr)
2308{
2309        struct net_device *event_dev = netdev_notifier_info_to_dev(ptr);
2310        struct sock *sk;
2311        struct iucv_sock *iucv;
2312
2313        switch (event) {
2314        case NETDEV_REBOOT:
2315        case NETDEV_GOING_DOWN:
2316                sk_for_each(sk, &iucv_sk_list.head) {
2317                        iucv = iucv_sk(sk);
2318                        if ((iucv->hs_dev == event_dev) &&
2319                            (sk->sk_state == IUCV_CONNECTED)) {
2320                                if (event == NETDEV_GOING_DOWN)
2321                                        iucv_send_ctrl(sk, AF_IUCV_FLAG_FIN);
2322                                sk->sk_state = IUCV_DISCONN;
2323                                sk->sk_state_change(sk);
2324                        }
2325                }
2326                break;
2327        case NETDEV_DOWN:
2328        case NETDEV_UNREGISTER:
2329        default:
2330                break;
2331        }
2332        return NOTIFY_DONE;
2333}
2334
2335static struct notifier_block afiucv_netdev_notifier = {
2336        .notifier_call = afiucv_netdev_event,
2337};
2338
2339static const struct proto_ops iucv_sock_ops = {
2340        .family         = PF_IUCV,
2341        .owner          = THIS_MODULE,
2342        .release        = iucv_sock_release,
2343        .bind           = iucv_sock_bind,
2344        .connect        = iucv_sock_connect,
2345        .listen         = iucv_sock_listen,
2346        .accept         = iucv_sock_accept,
2347        .getname        = iucv_sock_getname,
2348        .sendmsg        = iucv_sock_sendmsg,
2349        .recvmsg        = iucv_sock_recvmsg,
2350        .poll           = iucv_sock_poll,
2351        .ioctl          = sock_no_ioctl,
2352        .mmap           = sock_no_mmap,
2353        .socketpair     = sock_no_socketpair,
2354        .shutdown       = iucv_sock_shutdown,
2355        .setsockopt     = iucv_sock_setsockopt,
2356        .getsockopt     = iucv_sock_getsockopt,
2357};
2358
2359static const struct net_proto_family iucv_sock_family_ops = {
2360        .family = AF_IUCV,
2361        .owner  = THIS_MODULE,
2362        .create = iucv_sock_create,
2363};
2364
2365static struct packet_type iucv_packet_type = {
2366        .type = cpu_to_be16(ETH_P_AF_IUCV),
2367        .func = afiucv_hs_rcv,
2368};
2369
2370static int afiucv_iucv_init(void)
2371{
2372        int err;
2373
2374        err = pr_iucv->iucv_register(&af_iucv_handler, 0);
2375        if (err)
2376                goto out;
2377        /* establish dummy device */
2378        af_iucv_driver.bus = pr_iucv->bus;
2379        err = driver_register(&af_iucv_driver);
2380        if (err)
2381                goto out_iucv;
2382        af_iucv_dev = kzalloc(sizeof(struct device), GFP_KERNEL);
2383        if (!af_iucv_dev) {
2384                err = -ENOMEM;
2385                goto out_driver;
2386        }
2387        dev_set_name(af_iucv_dev, "af_iucv");
2388        af_iucv_dev->bus = pr_iucv->bus;
2389        af_iucv_dev->parent = pr_iucv->root;
2390        af_iucv_dev->release = (void (*)(struct device *))kfree;
2391        af_iucv_dev->driver = &af_iucv_driver;
2392        err = device_register(af_iucv_dev);
2393        if (err)
2394                goto out_driver;
2395        return 0;
2396
2397out_driver:
2398        driver_unregister(&af_iucv_driver);
2399out_iucv:
2400        pr_iucv->iucv_unregister(&af_iucv_handler, 0);
2401out:
2402        return err;
2403}
2404
2405static int __init afiucv_init(void)
2406{
2407        int err;
2408
2409        if (MACHINE_IS_VM) {
2410                cpcmd("QUERY USERID", iucv_userid, sizeof(iucv_userid), &err);
2411                if (unlikely(err)) {
2412                        WARN_ON(err);
2413                        err = -EPROTONOSUPPORT;
2414                        goto out;
2415                }
2416
2417                pr_iucv = try_then_request_module(symbol_get(iucv_if), "iucv");
2418                if (!pr_iucv) {
2419                        printk(KERN_WARNING "iucv_if lookup failed\n");
2420                        memset(&iucv_userid, 0, sizeof(iucv_userid));
2421                }
2422        } else {
2423                memset(&iucv_userid, 0, sizeof(iucv_userid));
2424                pr_iucv = NULL;
2425        }
2426
2427        err = proto_register(&iucv_proto, 0);
2428        if (err)
2429                goto out;
2430        err = sock_register(&iucv_sock_family_ops);
2431        if (err)
2432                goto out_proto;
2433
2434        if (pr_iucv) {
2435                err = afiucv_iucv_init();
2436                if (err)
2437                        goto out_sock;
2438        } else
2439                register_netdevice_notifier(&afiucv_netdev_notifier);
2440        dev_add_pack(&iucv_packet_type);
2441        return 0;
2442
2443out_sock:
2444        sock_unregister(PF_IUCV);
2445out_proto:
2446        proto_unregister(&iucv_proto);
2447out:
2448        if (pr_iucv)
2449                symbol_put(iucv_if);
2450        return err;
2451}
2452
2453static void __exit afiucv_exit(void)
2454{
2455        if (pr_iucv) {
2456                device_unregister(af_iucv_dev);
2457                driver_unregister(&af_iucv_driver);
2458                pr_iucv->iucv_unregister(&af_iucv_handler, 0);
2459                symbol_put(iucv_if);
2460        } else
2461                unregister_netdevice_notifier(&afiucv_netdev_notifier);
2462        dev_remove_pack(&iucv_packet_type);
2463        sock_unregister(PF_IUCV);
2464        proto_unregister(&iucv_proto);
2465}
2466
2467module_init(afiucv_init);
2468module_exit(afiucv_exit);
2469
2470MODULE_AUTHOR("Jennifer Hunt <jenhunt@us.ibm.com>");
2471MODULE_DESCRIPTION("IUCV Sockets ver " VERSION);
2472MODULE_VERSION(VERSION);
2473MODULE_LICENSE("GPL");
2474MODULE_ALIAS_NETPROTO(PF_IUCV);
2475
2476