2005-04-17 02:20:36 +04:00
/*
* linux / fs / nfs / callback . h
*
* Copyright ( C ) 2004 Trond Myklebust
*
* NFSv4 callback definitions
*/
# ifndef __LINUX_FS_NFS_CALLBACK_H
# define __LINUX_FS_NFS_CALLBACK_H
# define NFS4_CALLBACK 0x40000000
# define NFS4_CALLBACK_XDRSIZE 2048
# define NFS4_CALLBACK_BUFSIZE (1024 + NFS4_CALLBACK_XDRSIZE)
enum nfs4_callback_procnum {
CB_NULL = 0 ,
CB_COMPOUND = 1 ,
} ;
enum nfs4_callback_opnum {
OP_CB_GETATTR = 3 ,
OP_CB_RECALL = 4 ,
2009-04-01 17:23:21 +04:00
/* Callback operations new to NFSv4.1 */
OP_CB_LAYOUTRECALL = 5 ,
OP_CB_NOTIFY = 6 ,
OP_CB_PUSH_DELEG = 7 ,
OP_CB_RECALL_ANY = 8 ,
OP_CB_RECALLABLE_OBJ_AVAIL = 9 ,
OP_CB_RECALL_SLOT = 10 ,
OP_CB_SEQUENCE = 11 ,
OP_CB_WANTS_CANCELLED = 12 ,
OP_CB_NOTIFY_LOCK = 13 ,
2009-04-01 17:23:22 +04:00
OP_CB_NOTIFY_DEVICEID = 14 ,
2005-04-17 02:20:36 +04:00
OP_CB_ILLEGAL = 10044 ,
} ;
struct cb_compound_hdr_arg {
2007-05-15 01:20:41 +04:00
unsigned int taglen ;
2005-04-17 02:20:36 +04:00
const char * tag ;
2009-04-01 17:23:19 +04:00
unsigned int minorversion ;
2005-04-17 02:20:36 +04:00
unsigned nops ;
} ;
struct cb_compound_hdr_res {
2006-10-20 10:28:51 +04:00
__be32 * status ;
2007-05-15 01:20:41 +04:00
unsigned int taglen ;
2005-04-17 02:20:36 +04:00
const char * tag ;
2006-10-20 10:28:51 +04:00
__be32 * nops ;
2005-04-17 02:20:36 +04:00
} ;
struct cb_getattrargs {
2007-12-10 22:58:22 +03:00
struct sockaddr * addr ;
2005-04-17 02:20:36 +04:00
struct nfs_fh fh ;
uint32_t bitmap [ 2 ] ;
} ;
struct cb_getattrres {
2006-10-20 10:28:50 +04:00
__be32 status ;
2005-04-17 02:20:36 +04:00
uint32_t bitmap [ 2 ] ;
uint64_t size ;
uint64_t change_attr ;
struct timespec ctime ;
struct timespec mtime ;
} ;
struct cb_recallargs {
2007-12-10 22:58:29 +03:00
struct sockaddr * addr ;
2005-04-17 02:20:36 +04:00
struct nfs_fh fh ;
nfs4_stateid stateid ;
uint32_t truncate ;
} ;
2009-04-01 17:23:24 +04:00
# if defined(CONFIG_NFS_V4_1)
struct referring_call {
uint32_t rc_sequenceid ;
uint32_t rc_slotid ;
} ;
struct referring_call_list {
struct nfs4_sessionid rcl_sessionid ;
uint32_t rcl_nrefcalls ;
struct referring_call * rcl_refcalls ;
} ;
struct cb_sequenceargs {
struct sockaddr_in * csa_addr ;
struct nfs4_sessionid csa_sessionid ;
uint32_t csa_sequenceid ;
uint32_t csa_slotid ;
uint32_t csa_highestslotid ;
uint32_t csa_cachethis ;
uint32_t csa_nrclists ;
struct referring_call_list * csa_rclists ;
} ;
struct cb_sequenceres {
uint32_t csr_status ;
struct nfs4_sessionid csr_sessionid ;
uint32_t csr_sequenceid ;
uint32_t csr_slotid ;
uint32_t csr_highestslotid ;
uint32_t csr_target_highestslotid ;
} ;
# endif /* CONFIG_NFS_V4_1 */
2006-10-20 10:28:50 +04:00
extern __be32 nfs4_callback_getattr ( struct cb_getattrargs * args , struct cb_getattrres * res ) ;
extern __be32 nfs4_callback_recall ( struct cb_recallargs * args , void * dummy ) ;
2005-04-17 02:20:36 +04:00
2006-08-23 04:06:08 +04:00
# ifdef CONFIG_NFS_V4
2009-04-01 17:22:56 +04:00
extern int nfs_callback_up ( u32 minorversion , struct rpc_xprt * xprt ) ;
2009-04-01 17:23:14 +04:00
extern void nfs_callback_down ( int minorversion ) ;
# endif /* CONFIG_NFS_V4 */
2005-04-17 02:20:36 +04:00
2009-04-01 17:23:08 +04:00
/*
* nfs41 : Callbacks are expected to not cause substantial latency ,
* so we limit their concurrency to 1 by setting up the maximum number
* of slots for the backchannel .
*/
# define NFS41_BC_MIN_CALLBACKS 1
2006-01-03 11:55:41 +03:00
extern unsigned int nfs_callback_set_tcpport ;
2005-04-17 02:20:36 +04:00
extern unsigned short nfs_callback_tcpport ;
2009-03-19 03:48:06 +03:00
extern unsigned short nfs_callback_tcpport6 ;
2005-04-17 02:20:36 +04:00
# endif /* __LINUX_FS_NFS_CALLBACK_H */