mirror of
https://github.com/adulau/aha.git
synced 2024-12-31 21:26:18 +00:00
lockd: introduce new function to encode private argument in SM_MON requests
Clean up: refactor the encoding of the opaque 16-byte private argument in xdr_encode_mon(). This will be updated later to support IPv6 addresses. Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
This commit is contained in:
parent
2ca7754d4c
commit
0490a54a00
2 changed files with 25 additions and 6 deletions
|
@ -218,6 +218,24 @@ static __be32 *xdr_encode_mon_id(__be32 *p, struct nsm_args *argp)
|
||||||
return xdr_encode_my_id(p, argp);
|
return xdr_encode_my_id(p, argp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The "priv" argument may contain private information required
|
||||||
|
* by the SM_MON call. This information will be supplied in the
|
||||||
|
* SM_NOTIFY call.
|
||||||
|
*
|
||||||
|
* Linux provides the raw IP address of the monitored host,
|
||||||
|
* left in network byte order.
|
||||||
|
*/
|
||||||
|
static __be32 *xdr_encode_priv(__be32 *p, struct nsm_args *argp)
|
||||||
|
{
|
||||||
|
*p++ = argp->addr;
|
||||||
|
*p++ = 0;
|
||||||
|
*p++ = 0;
|
||||||
|
*p++ = 0;
|
||||||
|
|
||||||
|
return p;
|
||||||
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
xdr_encode_mon(struct rpc_rqst *rqstp, __be32 *p, struct nsm_args *argp)
|
xdr_encode_mon(struct rpc_rqst *rqstp, __be32 *p, struct nsm_args *argp)
|
||||||
{
|
{
|
||||||
|
@ -225,11 +243,10 @@ xdr_encode_mon(struct rpc_rqst *rqstp, __be32 *p, struct nsm_args *argp)
|
||||||
if (IS_ERR(p))
|
if (IS_ERR(p))
|
||||||
return PTR_ERR(p);
|
return PTR_ERR(p);
|
||||||
|
|
||||||
/* Surprise - there may even be room for an IPv6 address now */
|
p = xdr_encode_priv(p, argp);
|
||||||
*p++ = argp->addr;
|
if (IS_ERR(p))
|
||||||
*p++ = 0;
|
return PTR_ERR(p);
|
||||||
*p++ = 0;
|
|
||||||
*p++ = 0;
|
|
||||||
rqstp->rq_slen = xdr_adjust_iovec(rqstp->rq_svec, p);
|
rqstp->rq_slen = xdr_adjust_iovec(rqstp->rq_svec, p);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -265,7 +282,8 @@ xdr_decode_stat(struct rpc_rqst *rqstp, __be32 *p, struct nsm_res *resp)
|
||||||
#define SM_my_id_sz (SM_my_name_sz+3)
|
#define SM_my_id_sz (SM_my_name_sz+3)
|
||||||
#define SM_mon_name_sz (1+XDR_QUADLEN(SM_MAXSTRLEN))
|
#define SM_mon_name_sz (1+XDR_QUADLEN(SM_MAXSTRLEN))
|
||||||
#define SM_mon_id_sz (SM_mon_name_sz+SM_my_id_sz)
|
#define SM_mon_id_sz (SM_mon_name_sz+SM_my_id_sz)
|
||||||
#define SM_mon_sz (SM_mon_id_sz+4)
|
#define SM_priv_sz (XDR_QUADLEN(SM_PRIV_SIZE))
|
||||||
|
#define SM_mon_sz (SM_mon_id_sz+SM_priv_sz)
|
||||||
#define SM_monres_sz 2
|
#define SM_monres_sz 2
|
||||||
#define SM_unmonres_sz 1
|
#define SM_unmonres_sz 1
|
||||||
|
|
||||||
|
|
|
@ -19,6 +19,7 @@
|
||||||
#define SM_NOTIFY 6
|
#define SM_NOTIFY 6
|
||||||
|
|
||||||
#define SM_MAXSTRLEN 1024
|
#define SM_MAXSTRLEN 1024
|
||||||
|
#define SM_PRIV_SIZE 16
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Arguments for all calls to statd
|
* Arguments for all calls to statd
|
||||||
|
|
Loading…
Reference in a new issue