111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/****************************************************************************
211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ****************************************************************************
311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ***
411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ***   This header was automatically generated from a Linux kernel header
511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ***   of the same name, to make information necessary for userspace to
611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ***   call into the kernel available to libc.  It contains only constants,
711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ***   structures, and macros generated from the original header, and thus,
811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ***   contains no copyrightable information.
911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ***
1011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ****************************************************************************
1111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ****************************************************************************/
1211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#ifndef _LINUX_SUNRPC_XPRT_H
1311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define _LINUX_SUNRPC_XPRT_H
1411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
1511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <linux/uio.h>
1611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <linux/socket.h>
1711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <linux/in.h>
1811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <linux/sunrpc/sched.h>
1911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <linux/sunrpc/xdr.h>
2011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
2111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define RPC_MIN_SLOT_TABLE (2U)
2211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define RPC_DEF_SLOT_TABLE (16U)
2311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define RPC_MAX_SLOT_TABLE (128U)
2411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
2511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define RPC_CALLHDRSIZE 6
2611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define RPC_REPHDRSIZE 4
2711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
2811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define RPC_MIN_RESVPORT (1U)
2911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define RPC_MAX_RESVPORT (65535U)
3011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define RPC_DEF_MIN_RESVPORT (665U)
3111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define RPC_DEF_MAX_RESVPORT (1023U)
3211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
3311cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct rpc_timeout {
3411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned long to_initval,
3511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert to_maxval,
3611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert to_increment;
3711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned int to_retries;
3811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned char to_exponential;
3911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert};
4011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
4111cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct rpc_task;
4211cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct rpc_xprt;
4311cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct seq_file;
4411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
4511cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct rpc_rqst {
4611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
4711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct rpc_xprt * rq_xprt;
4811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct xdr_buf rq_snd_buf;
4911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct xdr_buf rq_rcv_buf;
5011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
5111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct rpc_task * rq_task;
5211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __u32 rq_xid;
5311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int rq_cong;
5411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int rq_received;
5511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert u32 rq_seqno;
5611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int rq_enc_pages_num;
5711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct page **rq_enc_pages;
5811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void (*rq_release_snd_buf)(struct rpc_rqst *);
5911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct list_head rq_list;
6011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
6111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __u32 * rq_buffer;
6211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert size_t rq_bufsize;
6311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
6411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct xdr_buf rq_private_buf;
6511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned long rq_majortimeo;
6611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned long rq_timeout;
6711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned int rq_retries;
6811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
6911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert u32 rq_bytes_sent;
7011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
7111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned long rq_xtime;
7211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int rq_ntrans;
7311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert};
7411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define rq_svec rq_snd_buf.head
7511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define rq_slen rq_snd_buf.len
7611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
7711cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct rpc_xprt_ops {
7811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void (*set_buffer_size)(struct rpc_xprt *xprt, size_t sndsize, size_t rcvsize);
7911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int (*reserve_xprt)(struct rpc_task *task);
8011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void (*release_xprt)(struct rpc_xprt *xprt, struct rpc_task *task);
8111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void (*set_port)(struct rpc_xprt *xprt, unsigned short port);
8211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void (*connect)(struct rpc_task *task);
8311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void * (*buf_alloc)(struct rpc_task *task, size_t size);
8411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void (*buf_free)(struct rpc_task *task);
8511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int (*send_request)(struct rpc_task *task);
8611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void (*set_retrans_timeout)(struct rpc_task *task);
8711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void (*timer)(struct rpc_task *task);
8811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void (*release_request)(struct rpc_task *task);
8911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void (*close)(struct rpc_xprt *xprt);
9011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void (*destroy)(struct rpc_xprt *xprt);
9111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void (*print_stats)(struct rpc_xprt *xprt, struct seq_file *seq);
9211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert};
9311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
9411cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct rpc_xprt {
9511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct rpc_xprt_ops * ops;
9611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct socket * sock;
9711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct sock * inet;
9811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
9911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct rpc_timeout timeout;
10011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct sockaddr_in addr;
10111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int prot;
10211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
10311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned long cong;
10411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned long cwnd;
10511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
10611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert size_t rcvsize,
10711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert sndsize;
10811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
10911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert size_t max_payload;
11011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned int tsh_size;
11111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
11211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct rpc_wait_queue sending;
11311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct rpc_wait_queue resend;
11411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct rpc_wait_queue pending;
11511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct rpc_wait_queue backlog;
11611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct list_head free;
11711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct rpc_rqst * slot;
11811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned int max_reqs;
11911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned long state;
12011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned char shutdown : 1,
12111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert resvport : 1;
12211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
12311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __u32 xid;
12411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
12511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert u32 tcp_recm,
12611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert tcp_xid,
12711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert tcp_reclen,
12811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert tcp_offset;
12911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned long tcp_copied,
13011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert tcp_flags;
13111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
13211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned long connect_timeout,
13311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert bind_timeout,
13411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert reestablish_timeout;
13511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct work_struct connect_worker;
13611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned short port;
13711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
13811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct work_struct task_cleanup;
13911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct timer_list timer;
14011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned long last_used,
14111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert idle_timeout;
14211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
14311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert spinlock_t transport_lock;
14411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert spinlock_t reserve_lock;
14511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct rpc_task * snd_task;
14611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
14711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct list_head recv;
14811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
14911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct {
15011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned long bind_count,
15111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert connect_count,
15211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert connect_start,
15311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert connect_time,
15411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert sends,
15511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert recvs,
15611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert bad_xids;
15711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
15811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned long long req_u,
15911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert bklog_u;
16011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } stat;
16111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
16211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void (*old_data_ready)(struct sock *, int);
16311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void (*old_state_change)(struct sock *);
16411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void (*old_write_space)(struct sock *);
16511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert};
16611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
16711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define XPRT_LAST_FRAG (1 << 0)
16811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define XPRT_COPY_RECM (1 << 1)
16911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define XPRT_COPY_XID (1 << 2)
17011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define XPRT_COPY_DATA (1 << 3)
17111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
17211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif
173