SUNRPC: create API for getting remote peer address
Provide an API for retrieving the remote peer address without allowing direct access to the rpc_xprt struct. Test-plan: Compile kernel with CONFIG_NFS enabled. Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
This commit is contained in:
committed by
Trond Myklebust
parent
bbf7c1dd2a
commit
ed39440a25
@@ -123,6 +123,7 @@ void rpc_setbufsize(struct rpc_clnt *, unsigned int, unsigned int);
|
|||||||
size_t rpc_max_payload(struct rpc_clnt *);
|
size_t rpc_max_payload(struct rpc_clnt *);
|
||||||
void rpc_force_rebind(struct rpc_clnt *);
|
void rpc_force_rebind(struct rpc_clnt *);
|
||||||
int rpc_ping(struct rpc_clnt *clnt, int flags);
|
int rpc_ping(struct rpc_clnt *clnt, int flags);
|
||||||
|
size_t rpc_peeraddr(struct rpc_clnt *, struct sockaddr *, size_t);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Helper function for NFSroot support
|
* Helper function for NFSroot support
|
||||||
|
@@ -533,6 +533,27 @@ rpc_call_setup(struct rpc_task *task, struct rpc_message *msg, int flags)
|
|||||||
task->tk_action = rpc_exit_task;
|
task->tk_action = rpc_exit_task;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* rpc_peeraddr - extract remote peer address from clnt's xprt
|
||||||
|
* @clnt: RPC client structure
|
||||||
|
* @buf: target buffer
|
||||||
|
* @size: length of target buffer
|
||||||
|
*
|
||||||
|
* Returns the number of bytes that are actually in the stored address.
|
||||||
|
*/
|
||||||
|
size_t rpc_peeraddr(struct rpc_clnt *clnt, struct sockaddr *buf, size_t bufsize)
|
||||||
|
{
|
||||||
|
size_t bytes;
|
||||||
|
struct rpc_xprt *xprt = clnt->cl_xprt;
|
||||||
|
|
||||||
|
bytes = sizeof(xprt->addr);
|
||||||
|
if (bytes > bufsize)
|
||||||
|
bytes = bufsize;
|
||||||
|
memcpy(buf, &clnt->cl_xprt->addr, bytes);
|
||||||
|
return sizeof(xprt->addr);
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(rpc_peeraddr);
|
||||||
|
|
||||||
void
|
void
|
||||||
rpc_setbufsize(struct rpc_clnt *clnt, unsigned int sndsize, unsigned int rcvsize)
|
rpc_setbufsize(struct rpc_clnt *clnt, unsigned int sndsize, unsigned int rcvsize)
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user