1/* 2 * linux/fs/nfs/callback.h 3 * 4 * Copyright (C) 2004 Trond Myklebust 5 * 6 * NFSv4 callback definitions 7 */ 8#ifndef __LINUX_FS_NFS_CALLBACK_H 9#define __LINUX_FS_NFS_CALLBACK_H 10 11#define NFS4_CALLBACK 0x40000000 12#define NFS4_CALLBACK_XDRSIZE 2048 13#define NFS4_CALLBACK_BUFSIZE (1024 + NFS4_CALLBACK_XDRSIZE) 14 15enum nfs4_callback_procnum { 16 CB_NULL = 0, 17 CB_COMPOUND = 1, 18}; 19 20enum nfs4_callback_opnum { 21 OP_CB_GETATTR = 3, 22 OP_CB_RECALL = 4, 23/* Callback operations new to NFSv4.1 */ 24 OP_CB_LAYOUTRECALL = 5, 25 OP_CB_NOTIFY = 6, 26 OP_CB_PUSH_DELEG = 7, 27 OP_CB_RECALL_ANY = 8, 28 OP_CB_RECALLABLE_OBJ_AVAIL = 9, 29 OP_CB_RECALL_SLOT = 10, 30 OP_CB_SEQUENCE = 11, 31 OP_CB_WANTS_CANCELLED = 12, 32 OP_CB_NOTIFY_LOCK = 13, 33 OP_CB_NOTIFY_DEVICEID = 14, 34 OP_CB_ILLEGAL = 10044, 35}; 36 37struct cb_compound_hdr_arg { 38 unsigned int taglen; 39 const char *tag; 40 unsigned int minorversion; 41 unsigned nops; 42}; 43 44struct cb_compound_hdr_res { 45 __be32 *status; 46 unsigned int taglen; 47 const char *tag; 48 __be32 *nops; 49}; 50 51struct cb_getattrargs { 52 struct sockaddr *addr; 53 struct nfs_fh fh; 54 uint32_t bitmap[2]; 55}; 56 57struct cb_getattrres { 58 __be32 status; 59 uint32_t bitmap[2]; 60 uint64_t size; 61 uint64_t change_attr; 62 struct timespec ctime; 63 struct timespec mtime; 64}; 65 66struct cb_recallargs { 67 struct sockaddr *addr; 68 struct nfs_fh fh; 69 nfs4_stateid stateid; 70 uint32_t truncate; 71}; 72 73#if defined(CONFIG_NFS_V4_1) 74 75struct referring_call { 76 uint32_t rc_sequenceid; 77 uint32_t rc_slotid; 78}; 79 80struct referring_call_list { 81 struct nfs4_sessionid rcl_sessionid; 82 uint32_t rcl_nrefcalls; 83 struct referring_call *rcl_refcalls; 84}; 85 86struct cb_sequenceargs { 87 struct sockaddr *csa_addr; 88 struct nfs4_sessionid csa_sessionid; 89 uint32_t csa_sequenceid; 90 uint32_t csa_slotid; 91 uint32_t csa_highestslotid; 92 uint32_t csa_cachethis; 93 uint32_t csa_nrclists; 94 struct referring_call_list *csa_rclists; 95}; 96 97struct cb_sequenceres { 98 __be32 csr_status; 99 struct nfs4_sessionid csr_sessionid; 100 uint32_t csr_sequenceid; 101 uint32_t csr_slotid; 102 uint32_t csr_highestslotid; 103 uint32_t csr_target_highestslotid; 104}; 105 106extern unsigned nfs4_callback_sequence(struct cb_sequenceargs *args, 107 struct cb_sequenceres *res); 108 109extern int nfs41_validate_delegation_stateid(struct nfs_delegation *delegation, 110 const nfs4_stateid *stateid); 111 112#define RCA4_TYPE_MASK_RDATA_DLG 0 113#define RCA4_TYPE_MASK_WDATA_DLG 1 114 115struct cb_recallanyargs { 116 struct sockaddr *craa_addr; 117 uint32_t craa_objs_to_keep; 118 uint32_t craa_type_mask; 119}; 120 121extern unsigned nfs4_callback_recallany(struct cb_recallanyargs *args, void *dummy); 122 123struct cb_recallslotargs { 124 struct sockaddr *crsa_addr; 125 uint32_t crsa_target_max_slots; 126}; 127extern unsigned nfs4_callback_recallslot(struct cb_recallslotargs *args, 128 void *dummy); 129 130#endif /* CONFIG_NFS_V4_1 */ 131 132extern __be32 nfs4_callback_getattr(struct cb_getattrargs *args, struct cb_getattrres *res); 133extern __be32 nfs4_callback_recall(struct cb_recallargs *args, void *dummy); 134 135#ifdef CONFIG_NFS_V4 136extern int nfs_callback_up(u32 minorversion, struct rpc_xprt *xprt); 137extern void nfs_callback_down(int minorversion); 138extern int nfs4_validate_delegation_stateid(struct nfs_delegation *delegation, 139 const nfs4_stateid *stateid); 140#endif /* CONFIG_NFS_V4 */ 141/* 142 * nfs41: Callbacks are expected to not cause substantial latency, 143 * so we limit their concurrency to 1 by setting up the maximum number 144 * of slots for the backchannel. 145 */ 146#define NFS41_BC_MIN_CALLBACKS 1 147#define NFS41_BC_MAX_CALLBACKS 1 148 149extern unsigned int nfs_callback_set_tcpport; 150extern unsigned short nfs_callback_tcpport; 151extern unsigned short nfs_callback_tcpport6; 152 153#endif /* __LINUX_FS_NFS_CALLBACK_H */ 154