1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */ 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * linux/include/linux/lockd/xdr.h 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * XDR types for the NLM protocol 6*4882a593Smuzhiyun * 7*4882a593Smuzhiyun * Copyright (C) 1996 Olaf Kirch <okir@monad.swb.de> 8*4882a593Smuzhiyun */ 9*4882a593Smuzhiyun 10*4882a593Smuzhiyun #ifndef LOCKD_XDR_H 11*4882a593Smuzhiyun #define LOCKD_XDR_H 12*4882a593Smuzhiyun 13*4882a593Smuzhiyun #include <linux/fs.h> 14*4882a593Smuzhiyun #include <linux/nfs.h> 15*4882a593Smuzhiyun #include <linux/sunrpc/xdr.h> 16*4882a593Smuzhiyun 17*4882a593Smuzhiyun #define SM_MAXSTRLEN 1024 18*4882a593Smuzhiyun #define SM_PRIV_SIZE 16 19*4882a593Smuzhiyun 20*4882a593Smuzhiyun struct nsm_private { 21*4882a593Smuzhiyun unsigned char data[SM_PRIV_SIZE]; 22*4882a593Smuzhiyun }; 23*4882a593Smuzhiyun 24*4882a593Smuzhiyun struct svc_rqst; 25*4882a593Smuzhiyun 26*4882a593Smuzhiyun #define NLM_MAXCOOKIELEN 32 27*4882a593Smuzhiyun #define NLM_MAXSTRLEN 1024 28*4882a593Smuzhiyun 29*4882a593Smuzhiyun #define nlm_granted cpu_to_be32(NLM_LCK_GRANTED) 30*4882a593Smuzhiyun #define nlm_lck_denied cpu_to_be32(NLM_LCK_DENIED) 31*4882a593Smuzhiyun #define nlm_lck_denied_nolocks cpu_to_be32(NLM_LCK_DENIED_NOLOCKS) 32*4882a593Smuzhiyun #define nlm_lck_blocked cpu_to_be32(NLM_LCK_BLOCKED) 33*4882a593Smuzhiyun #define nlm_lck_denied_grace_period cpu_to_be32(NLM_LCK_DENIED_GRACE_PERIOD) 34*4882a593Smuzhiyun 35*4882a593Smuzhiyun #define nlm_drop_reply cpu_to_be32(30000) 36*4882a593Smuzhiyun 37*4882a593Smuzhiyun /* Lock info passed via NLM */ 38*4882a593Smuzhiyun struct nlm_lock { 39*4882a593Smuzhiyun char * caller; 40*4882a593Smuzhiyun unsigned int len; /* length of "caller" */ 41*4882a593Smuzhiyun struct nfs_fh fh; 42*4882a593Smuzhiyun struct xdr_netobj oh; 43*4882a593Smuzhiyun u32 svid; 44*4882a593Smuzhiyun struct file_lock fl; 45*4882a593Smuzhiyun }; 46*4882a593Smuzhiyun 47*4882a593Smuzhiyun /* 48*4882a593Smuzhiyun * NLM cookies. Technically they can be 1K, but Linux only uses 8 bytes. 49*4882a593Smuzhiyun * FreeBSD uses 16, Apple Mac OS X 10.3 uses 20. Therefore we set it to 50*4882a593Smuzhiyun * 32 bytes. 51*4882a593Smuzhiyun */ 52*4882a593Smuzhiyun 53*4882a593Smuzhiyun struct nlm_cookie 54*4882a593Smuzhiyun { 55*4882a593Smuzhiyun unsigned char data[NLM_MAXCOOKIELEN]; 56*4882a593Smuzhiyun unsigned int len; 57*4882a593Smuzhiyun }; 58*4882a593Smuzhiyun 59*4882a593Smuzhiyun /* 60*4882a593Smuzhiyun * Generic lockd arguments for all but sm_notify 61*4882a593Smuzhiyun */ 62*4882a593Smuzhiyun struct nlm_args { 63*4882a593Smuzhiyun struct nlm_cookie cookie; 64*4882a593Smuzhiyun struct nlm_lock lock; 65*4882a593Smuzhiyun u32 block; 66*4882a593Smuzhiyun u32 reclaim; 67*4882a593Smuzhiyun u32 state; 68*4882a593Smuzhiyun u32 monitor; 69*4882a593Smuzhiyun u32 fsm_access; 70*4882a593Smuzhiyun u32 fsm_mode; 71*4882a593Smuzhiyun }; 72*4882a593Smuzhiyun 73*4882a593Smuzhiyun typedef struct nlm_args nlm_args; 74*4882a593Smuzhiyun 75*4882a593Smuzhiyun /* 76*4882a593Smuzhiyun * Generic lockd result 77*4882a593Smuzhiyun */ 78*4882a593Smuzhiyun struct nlm_res { 79*4882a593Smuzhiyun struct nlm_cookie cookie; 80*4882a593Smuzhiyun __be32 status; 81*4882a593Smuzhiyun struct nlm_lock lock; 82*4882a593Smuzhiyun }; 83*4882a593Smuzhiyun 84*4882a593Smuzhiyun /* 85*4882a593Smuzhiyun * statd callback when client has rebooted 86*4882a593Smuzhiyun */ 87*4882a593Smuzhiyun struct nlm_reboot { 88*4882a593Smuzhiyun char *mon; 89*4882a593Smuzhiyun unsigned int len; 90*4882a593Smuzhiyun u32 state; 91*4882a593Smuzhiyun struct nsm_private priv; 92*4882a593Smuzhiyun }; 93*4882a593Smuzhiyun 94*4882a593Smuzhiyun /* 95*4882a593Smuzhiyun * Contents of statd callback when monitored host rebooted 96*4882a593Smuzhiyun */ 97*4882a593Smuzhiyun #define NLMSVC_XDRSIZE sizeof(struct nlm_args) 98*4882a593Smuzhiyun 99*4882a593Smuzhiyun int nlmsvc_decode_testargs(struct svc_rqst *, __be32 *); 100*4882a593Smuzhiyun int nlmsvc_encode_testres(struct svc_rqst *, __be32 *); 101*4882a593Smuzhiyun int nlmsvc_decode_lockargs(struct svc_rqst *, __be32 *); 102*4882a593Smuzhiyun int nlmsvc_decode_cancargs(struct svc_rqst *, __be32 *); 103*4882a593Smuzhiyun int nlmsvc_decode_unlockargs(struct svc_rqst *, __be32 *); 104*4882a593Smuzhiyun int nlmsvc_encode_res(struct svc_rqst *, __be32 *); 105*4882a593Smuzhiyun int nlmsvc_decode_res(struct svc_rqst *, __be32 *); 106*4882a593Smuzhiyun int nlmsvc_encode_void(struct svc_rqst *, __be32 *); 107*4882a593Smuzhiyun int nlmsvc_decode_void(struct svc_rqst *, __be32 *); 108*4882a593Smuzhiyun int nlmsvc_decode_shareargs(struct svc_rqst *, __be32 *); 109*4882a593Smuzhiyun int nlmsvc_encode_shareres(struct svc_rqst *, __be32 *); 110*4882a593Smuzhiyun int nlmsvc_decode_notify(struct svc_rqst *, __be32 *); 111*4882a593Smuzhiyun int nlmsvc_decode_reboot(struct svc_rqst *, __be32 *); 112*4882a593Smuzhiyun /* 113*4882a593Smuzhiyun int nlmclt_encode_testargs(struct rpc_rqst *, u32 *, struct nlm_args *); 114*4882a593Smuzhiyun int nlmclt_encode_lockargs(struct rpc_rqst *, u32 *, struct nlm_args *); 115*4882a593Smuzhiyun int nlmclt_encode_cancargs(struct rpc_rqst *, u32 *, struct nlm_args *); 116*4882a593Smuzhiyun int nlmclt_encode_unlockargs(struct rpc_rqst *, u32 *, struct nlm_args *); 117*4882a593Smuzhiyun */ 118*4882a593Smuzhiyun 119*4882a593Smuzhiyun #endif /* LOCKD_XDR_H */ 120