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