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
2011-01-25 15:38:01 +00:00
# include <linux/sunrpc/svc.h>
2005-04-16 15:20:36 -07:00
# 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 ,
} ;
2011-01-06 02:04:32 +00:00
struct cb_process_state {
__be32 drc_status ;
struct nfs_client * clp ;
2012-02-06 19:38:51 -05:00
u32 slotid ;
2012-01-26 15:11:49 +04:00
struct net * net ;
2011-01-06 02:04:32 +00:00
} ;
2005-04-16 15:20:36 -07:00
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 ;
2011-01-06 02:04:32 +00:00
unsigned int cb_ident ; /* v4.0 callback identifier */
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 ;
} ;
2011-01-06 02:04:32 +00:00
extern __be32 nfs4_callback_sequence ( struct cb_sequenceargs * args ,
struct cb_sequenceres * res ,
struct cb_process_state * cps ) ;
2009-04-01 09:23:25 -04:00
2009-12-05 13:48:55 -05:00
extern int nfs41_validate_delegation_stateid ( struct nfs_delegation * delegation ,
const nfs4_stateid * stateid ) ;
2009-12-05 13:27:02 -05:00
# define RCA4_TYPE_MASK_RDATA_DLG 0
# define RCA4_TYPE_MASK_WDATA_DLG 1
2011-01-06 11:36:31 +00:00
# define RCA4_TYPE_MASK_DIR_DLG 2
# define RCA4_TYPE_MASK_FILE_LAYOUT 3
# define RCA4_TYPE_MASK_BLK_LAYOUT 4
# define RCA4_TYPE_MASK_OBJ_LAYOUT_MIN 8
# define RCA4_TYPE_MASK_OBJ_LAYOUT_MAX 9
# define RCA4_TYPE_MASK_OTHER_LAYOUT_MIN 12
# define RCA4_TYPE_MASK_OTHER_LAYOUT_MAX 15
# define RCA4_TYPE_MASK_ALL 0xf31f
2009-12-05 13:27:02 -05:00
struct cb_recallanyargs {
struct sockaddr * craa_addr ;
uint32_t craa_objs_to_keep ;
uint32_t craa_type_mask ;
} ;
2011-01-06 02:04:32 +00:00
extern __be32 nfs4_callback_recallany ( struct cb_recallanyargs * args ,
void * dummy ,
struct cb_process_state * cps ) ;
2010-01-20 16:06:27 -05:00
struct cb_recallslotargs {
struct sockaddr * crsa_addr ;
uint32_t crsa_target_max_slots ;
} ;
2011-01-06 02:04:32 +00:00
extern __be32 nfs4_callback_recallslot ( struct cb_recallslotargs * args ,
void * dummy ,
struct cb_process_state * cps ) ;
2010-01-20 16:06:27 -05:00
2011-01-06 11:36:29 +00:00
struct cb_layoutrecallargs {
struct sockaddr * cbl_addr ;
uint32_t cbl_recall_type ;
uint32_t cbl_layout_type ;
uint32_t cbl_layoutchanged ;
union {
struct {
struct nfs_fh cbl_fh ;
struct pnfs_layout_range cbl_range ;
nfs4_stateid cbl_stateid ;
} ;
struct nfs_fsid cbl_fsid ;
} ;
} ;
2012-01-12 10:06:05 +03:00
extern __be32 nfs4_callback_layoutrecall (
2011-01-06 11:36:29 +00:00
struct cb_layoutrecallargs * args ,
void * dummy , struct cb_process_state * cps ) ;
2011-01-06 02:04:34 +00:00
extern void nfs4_check_drain_bc_complete ( struct nfs4_session * ses ) ;
2011-05-22 19:47:09 +03:00
struct cb_devicenotifyitem {
uint32_t cbd_notify_type ;
uint32_t cbd_layout_type ;
struct nfs4_deviceid cbd_dev_id ;
uint32_t cbd_immediate ;
} ;
struct cb_devicenotifyargs {
int ndevs ;
struct cb_devicenotifyitem * devs ;
} ;
extern __be32 nfs4_callback_devicenotify (
struct cb_devicenotifyargs * args ,
void * dummy , struct cb_process_state * cps ) ;
2009-04-01 09:23:24 -04:00
# endif /* CONFIG_NFS_V4_1 */
2011-01-25 15:38:01 +00:00
extern int check_gss_callback_principal ( struct nfs_client * , struct svc_rqst * ) ;
2011-01-06 02:04:32 +00:00
extern __be32 nfs4_callback_getattr ( struct cb_getattrargs * args ,
struct cb_getattrres * res ,
struct cb_process_state * cps ) ;
extern __be32 nfs4_callback_recall ( struct cb_recallargs * args , void * dummy ,
struct cb_process_state * cps ) ;
2012-07-30 16:05:25 -04:00
# if IS_ENABLED(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 ) ;
2009-12-05 13:48:55 -05:00
extern int nfs4_validate_delegation_stateid ( struct nfs_delegation * delegation ,
const nfs4_stateid * stateid ) ;
2011-01-06 02:04:31 +00:00
extern int nfs4_set_callback_sessionid ( struct nfs_client * clp ) ;
2009-04-01 09:23:14 -04:00
# endif /* CONFIG_NFS_V4 */
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 */