1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */ 21da177e4SLinus Torvalds /* 31da177e4SLinus Torvalds * linux/include/linux/lockd/bind.h 41da177e4SLinus Torvalds * 51da177e4SLinus Torvalds * This is the part of lockd visible to nfsd and the nfs client. 61da177e4SLinus Torvalds * 71da177e4SLinus Torvalds * Copyright (C) 1996, Olaf Kirch <[email protected]> 81da177e4SLinus Torvalds */ 91da177e4SLinus Torvalds 101da177e4SLinus Torvalds #ifndef LINUX_LOCKD_BIND_H 111da177e4SLinus Torvalds #define LINUX_LOCKD_BIND_H 121da177e4SLinus Torvalds 131da177e4SLinus Torvalds #include <linux/lockd/nlm.h> 14d343fce1SNeilBrown /* need xdr-encoded error codes too, so... */ 15d343fce1SNeilBrown #include <linux/lockd/xdr.h> 16d343fce1SNeilBrown #ifdef CONFIG_LOCKD_V4 17d343fce1SNeilBrown #include <linux/lockd/xdr4.h> 18d343fce1SNeilBrown #endif 191da177e4SLinus Torvalds 201da177e4SLinus Torvalds /* Dummy declarations */ 211da177e4SLinus Torvalds struct svc_rqst; 22b1ece737SBenjamin Coddington struct rpc_task; 23*d97c0589SBenjamin Coddington struct rpc_clnt; 241da177e4SLinus Torvalds 251da177e4SLinus Torvalds /* 261da177e4SLinus Torvalds * This is the set of functions for lockd->nfsd communication 271da177e4SLinus Torvalds */ 281da177e4SLinus Torvalds struct nlmsvc_binding { 29e8c5c045SAl Viro __be32 (*fopen)(struct svc_rqst *, 301da177e4SLinus Torvalds struct nfs_fh *, 317f024fcdSJ. Bruce Fields struct file **, 327f024fcdSJ. Bruce Fields int mode); 331da177e4SLinus Torvalds void (*fclose)(struct file *); 341da177e4SLinus Torvalds }; 351da177e4SLinus Torvalds 362a297450SJulia Lawall extern const struct nlmsvc_binding *nlmsvc_ops; 371da177e4SLinus Torvalds 381da177e4SLinus Torvalds /* 39883bb163SChuck Lever * Similar to nfs_client_initdata, but without the NFS-specific 40883bb163SChuck Lever * rpc_ops field. 41883bb163SChuck Lever */ 42883bb163SChuck Lever struct nlmclnt_initdata { 43883bb163SChuck Lever const char *hostname; 44883bb163SChuck Lever const struct sockaddr *address; 45883bb163SChuck Lever size_t addrlen; 46883bb163SChuck Lever unsigned short protocol; 47883bb163SChuck Lever u32 nfs_version; 480cb2659bSChuck Lever int noresvport; 4966697bfdSStanislav Kinsbursky struct net *net; 50b1ece737SBenjamin Coddington const struct nlmclnt_operations *nlmclnt_ops; 5140373b12STrond Myklebust const struct cred *cred; 52883bb163SChuck Lever }; 53883bb163SChuck Lever 54883bb163SChuck Lever /* 551da177e4SLinus Torvalds * Functions exported by the lockd module 561da177e4SLinus Torvalds */ 57883bb163SChuck Lever 58883bb163SChuck Lever extern struct nlm_host *nlmclnt_init(const struct nlmclnt_initdata *nlm_init); 5952c4044dSChuck Lever extern void nlmclnt_done(struct nlm_host *host); 60*d97c0589SBenjamin Coddington extern struct rpc_clnt *nlmclnt_rpc_clnt(struct nlm_host *host); 6152c4044dSChuck Lever 62b1ece737SBenjamin Coddington /* 63b1ece737SBenjamin Coddington * NLM client operations provide a means to modify RPC processing of NLM 64b1ece737SBenjamin Coddington * requests. Callbacks receive a pointer to data passed into the call to 65b1ece737SBenjamin Coddington * nlmclnt_proc(). 66b1ece737SBenjamin Coddington */ 67b1ece737SBenjamin Coddington struct nlmclnt_operations { 68b1ece737SBenjamin Coddington /* Called on successful allocation of nlm_rqst, use for allocation or 69b1ece737SBenjamin Coddington * reference counting. */ 70b1ece737SBenjamin Coddington void (*nlmclnt_alloc_call)(void *); 71b1ece737SBenjamin Coddington 72b1ece737SBenjamin Coddington /* Called in rpc_task_prepare for unlock. A return value of true 73b1ece737SBenjamin Coddington * indicates the callback has put the task to sleep on a waitqueue 74b1ece737SBenjamin Coddington * and NLM should not call rpc_call_start(). */ 75b1ece737SBenjamin Coddington bool (*nlmclnt_unlock_prepare)(struct rpc_task*, void *); 76b1ece737SBenjamin Coddington 77b1ece737SBenjamin Coddington /* Called when the nlm_rqst is freed, callbacks should clean up here */ 78b1ece737SBenjamin Coddington void (*nlmclnt_release_call)(void *); 79b1ece737SBenjamin Coddington }; 80b1ece737SBenjamin Coddington 81b1ece737SBenjamin Coddington extern int nlmclnt_proc(struct nlm_host *host, int cmd, struct file_lock *fl, void *data); 8240373b12STrond Myklebust extern int lockd_up(struct net *net, const struct cred *cred); 83e3f70eadSStanislav Kinsbursky extern void lockd_down(struct net *net); 841da177e4SLinus Torvalds 851da177e4SLinus Torvalds #endif /* LINUX_LOCKD_BIND_H */ 86