linux/include/net/iucv/af_iucv.h
<<
>>
Prefs
   1/*
   2 * Copyright 2006 IBM Corporation
   3 * IUCV protocol stack for Linux on zSeries
   4 * Version 1.0
   5 * Author(s): Jennifer Hunt <jenhunt@us.ibm.com>
   6 *
   7 */
   8
   9#ifndef __AFIUCV_H
  10#define __AFIUCV_H
  11
  12#include <asm/types.h>
  13#include <asm/byteorder.h>
  14#include <linux/list.h>
  15#include <linux/poll.h>
  16#include <linux/socket.h>
  17
  18#ifndef AF_IUCV
  19#define AF_IUCV         32
  20#define PF_IUCV         AF_IUCV
  21#endif
  22
  23/* Connection and socket states */
  24enum {
  25        IUCV_CONNECTED = 1,
  26        IUCV_OPEN,
  27        IUCV_BOUND,
  28        IUCV_LISTEN,
  29        IUCV_SEVERED,
  30        IUCV_DISCONN,
  31        IUCV_CLOSING,
  32        IUCV_CLOSED
  33};
  34
  35#define IUCV_QUEUELEN_DEFAULT   65535
  36#define IUCV_CONN_TIMEOUT       (HZ * 40)
  37#define IUCV_DISCONN_TIMEOUT    (HZ * 2)
  38#define IUCV_CONN_IDLE_TIMEOUT  (HZ * 60)
  39#define IUCV_BUFSIZE_DEFAULT    32768
  40
  41/* IUCV socket address */
  42struct sockaddr_iucv {
  43        sa_family_t     siucv_family;
  44        unsigned short  siucv_port;             /* Reserved */
  45        unsigned int    siucv_addr;             /* Reserved */
  46        char            siucv_nodeid[8];        /* Reserved */
  47        char            siucv_user_id[8];       /* Guest User Id */
  48        char            siucv_name[8];          /* Application Name */
  49};
  50
  51
  52/* Common socket structures and functions */
  53struct sock_msg_q {
  54        struct iucv_path        *path;
  55        struct iucv_message     msg;
  56        struct list_head        list;
  57        spinlock_t              lock;
  58};
  59
  60#define iucv_sk(__sk) ((struct iucv_sock *) __sk)
  61
  62struct iucv_sock {
  63        struct sock             sk;
  64        char                    src_user_id[8];
  65        char                    src_name[8];
  66        char                    dst_user_id[8];
  67        char                    dst_name[8];
  68        struct list_head        accept_q;
  69        spinlock_t              accept_q_lock;
  70        struct sock             *parent;
  71        struct iucv_path        *path;
  72        struct sk_buff_head     send_skb_q;
  73        struct sk_buff_head     backlog_skb_q;
  74        struct sock_msg_q       message_q;
  75        unsigned int            send_tag;
  76        u8                      flags;
  77        u16                     msglimit;
  78};
  79
  80/* iucv socket options (SOL_IUCV) */
  81#define SO_IPRMDATA_MSG 0x0080          /* send/recv IPRM_DATA msgs */
  82#define SO_MSGLIMIT     0x1000          /* get/set IUCV MSGLIMIT */
  83
  84/* iucv related control messages (scm) */
  85#define SCM_IUCV_TRGCLS 0x0001          /* target class control message */
  86
  87struct iucv_sock_list {
  88        struct hlist_head head;
  89        rwlock_t          lock;
  90        atomic_t          autobind_name;
  91};
  92
  93unsigned int iucv_sock_poll(struct file *file, struct socket *sock,
  94                            poll_table *wait);
  95void iucv_sock_link(struct iucv_sock_list *l, struct sock *s);
  96void iucv_sock_unlink(struct iucv_sock_list *l, struct sock *s);
  97int  iucv_sock_wait_cnt(struct sock *sk, unsigned long timeo);
  98void iucv_accept_enqueue(struct sock *parent, struct sock *sk);
  99void iucv_accept_unlink(struct sock *sk);
 100struct sock *iucv_accept_dequeue(struct sock *parent, struct socket *newsock);
 101
 102#endif /* __IUCV_H */
 103