Merge master.kernel.org:/home/rmk/linux-2.6-arm
[linux-2.6] / include / net / iucv / af_iucv.h
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 */
24 enum {
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 */
42 struct 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 */
53 struct 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
62 struct 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 };
77
78 struct iucv_sock_list {
79         struct hlist_head head;
80         rwlock_t          lock;
81         atomic_t          autobind_name;
82 };
83
84 unsigned int iucv_sock_poll(struct file *file, struct socket *sock,
85                             poll_table *wait);
86 void iucv_sock_link(struct iucv_sock_list *l, struct sock *s);
87 void iucv_sock_unlink(struct iucv_sock_list *l, struct sock *s);
88 int  iucv_sock_wait_state(struct sock *sk, int state, int state2,
89                           unsigned long timeo);
90 int  iucv_sock_wait_cnt(struct sock *sk, unsigned long timeo);
91 void iucv_accept_enqueue(struct sock *parent, struct sock *sk);
92 void iucv_accept_unlink(struct sock *sk);
93 struct sock *iucv_accept_dequeue(struct sock *parent, struct socket *newsock);
94
95 #endif /* __IUCV_H */