2005-04-16 15:20:36 -07: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 09: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 09:23:22 -04:00
OP_CB_NOTIFY_DEVICEID = 14 ,
2005-04-16 15:20:36 -07:00
OP_CB_ILLEGAL = 10044 ,
} ;
struct cb_compound_hdr_arg {
2007-05-14 17:20:41 -04:00
unsigned int taglen ;
2005-04-16 15:20:36 -07:00
const char * tag ;
2009-04-01 09:23:19 -04:00
unsigned int minorversion ;
2005-04-16 15:20:36 -07:00
unsigned nops ;
} ;
struct cb_compound_hdr_res {
2006-10-19 23:28:51 -07:00
__be32 * status ;
2007-05-14 17:20:41 -04:00
unsigned int taglen ;
2005-04-16 15:20:36 -07:00
const char * tag ;
2006-10-19 23:28:51 -07:00
__be32 * nops ;
2005-04-16 15:20:36 -07:00
} ;
struct cb_getattrargs {
2007-12-10 14:58:22 -05:00
struct sockaddr * addr ;
2005-04-16 15:20:36 -07:00
struct nfs_fh fh ;
uint32_t bitmap [ 2 ] ;
} ;
struct cb_getattrres {
2006-10-19 23:28:50 -07:00
__be32 status ;
2005-04-16 15:20:36 -07:00
uint32_t bitmap [ 2 ] ;
uint64_t size ;
uint64_t change_attr ;
struct timespec ctime ;
struct timespec mtime ;
} ;
struct cb_recallargs {
2007-12-10 14:58:29 -05:00
struct sockaddr * addr ;
2005-04-16 15:20:36 -07:00
struct nfs_fh fh ;
nfs4_stateid stateid ;
uint32_t truncate ;
} ;
2009-04-01 09: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 {
2009-04-01 09:23:30 -04:00
struct sockaddr * csa_addr ;
2009-04-01 09:23:24 -04:00
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 {
2009-04-01 09:23:30 -04:00
__be32 csr_status ;
2009-04-01 09:23:24 -04:00
struct nfs4_sessionid csr_sessionid ;
uint32_t csr_sequenceid ;
uint32_t csr_slotid ;
uint32_t csr_highestslotid ;
uint32_t csr_target_highestslotid ;
} ;
2009-04-01 09:23:25 -04:00
extern unsigned nfs4_callback_sequence ( struct cb_sequenceargs * args ,
struct cb_sequenceres * res ) ;
2009-04-01 09:23:24 -04:00
# endif /* CONFIG_NFS_V4_1 */
2006-10-19 23:28:50 -07: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-16 15:20:36 -07:00
2006-08-22 20:06:08 -04:00
# ifdef CONFIG_NFS_V4
2009-04-01 09:22:56 -04:00
extern int nfs_callback_up ( u32 minorversion , struct rpc_xprt * xprt ) ;
2009-04-01 09:23:14 -04:00
extern void nfs_callback_down ( int minorversion ) ;
# endif /* CONFIG_NFS_V4 */
2005-04-16 15:20:36 -07:00
2009-04-01 09: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
2009-04-01 09:23:25 -04:00
# define NFS41_BC_MAX_CALLBACKS 1
2009-04-01 09:23:08 -04:00
2006-01-03 09:55:41 +01:00
extern unsigned int nfs_callback_set_tcpport ;
2005-04-16 15:20:36 -07:00
extern unsigned short nfs_callback_tcpport ;
2009-03-18 20:48:06 -04:00
extern unsigned short nfs_callback_tcpport6 ;
2005-04-16 15:20:36 -07:00
# endif /* __LINUX_FS_NFS_CALLBACK_H */