nfsv4.1 Add LAYOUTRETURN operation

Signed-off-by: Ronnie Sahlberg <ronniesahlberg@gmail.com>
master
Ronnie Sahlberg 2020-06-08 14:07:14 +10:00
parent 61d235ae44
commit a45799ca50
3 changed files with 225 additions and 0 deletions

View File

@ -3147,6 +3147,104 @@ zdr_LAYOUTGET4res (ZDR *zdrs, LAYOUTGET4res *objp)
return TRUE;
}
uint32_t
zdr_layoutreturn_type4 (ZDR *zdrs, layoutreturn_type4 *objp)
{
if (!zdr_enum (zdrs, (enum_t *) objp))
return FALSE;
return TRUE;
}
uint32_t
zdr_layoutreturn_file4 (ZDR *zdrs, layoutreturn_file4 *objp)
{
if (!zdr_offset4 (zdrs, &objp->lrf_offset))
return FALSE;
if (!zdr_length4 (zdrs, &objp->lrf_length))
return FALSE;
if (!zdr_stateid4 (zdrs, &objp->lrf_stateid))
return FALSE;
if (!zdr_bytes (zdrs, (char **)&objp->lrf_body.lrf_body_val, (u_int *) &objp->lrf_body.lrf_body_len, ~0))
return FALSE;
return TRUE;
}
uint32_t
zdr_layoutreturn4 (ZDR *zdrs, layoutreturn4 *objp)
{
if (!zdr_layoutreturn_type4 (zdrs, &objp->lr_returntype))
return FALSE;
switch (objp->lr_returntype) {
case LAYOUTRETURN4_FILE:
if (!zdr_layoutreturn_file4 (zdrs, &objp->layoutreturn4_u.lr_layout))
return FALSE;
break;
default:
break;
}
return TRUE;
}
uint32_t
zdr_LAYOUTRETURN4args (ZDR *zdrs, LAYOUTRETURN4args *objp)
{
if (!zdr_bool (zdrs, &objp->lora_reclaim))
return FALSE;
if (!zdr_layouttype4 (zdrs, &objp->lora_layout_type))
return FALSE;
if (!zdr_layoutiomode4 (zdrs, &objp->lora_iomode))
return FALSE;
if (!zdr_layoutreturn4 (zdrs, &objp->lora_layoutreturn))
return FALSE;
return TRUE;
}
uint32_t
zdr_layoutreturn_stateid (ZDR *zdrs, layoutreturn_stateid *objp)
{
if (!zdr_bool (zdrs, &objp->lrs_present))
return FALSE;
switch (objp->lrs_present) {
case TRUE:
if (!zdr_stateid4 (zdrs, &objp->layoutreturn_stateid_u.lrs_stateid))
return FALSE;
break;
case FALSE:
break;
default:
return FALSE;
}
return TRUE;
}
uint32_t
zdr_LAYOUTRETURN4res (ZDR *zdrs, LAYOUTRETURN4res *objp)
{
if (!zdr_nfsstat4 (zdrs, &objp->lorr_status))
return FALSE;
switch (objp->lorr_status) {
case NFS4_OK:
if (!zdr_layoutreturn_stateid (zdrs, &objp->LAYOUTRETURN4res_u.lorr_stateid))
return FALSE;
break;
default:
break;
}
return TRUE;
}
uint32_t
zdr_ILLEGAL4res (ZDR *zdrs, ILLEGAL4res *objp)
{
@ -3337,6 +3435,10 @@ zdr_nfs_argop4 (ZDR *zdrs, nfs_argop4 *objp)
if (!zdr_LAYOUTGET4args (zdrs, &objp->nfs_argop4_u.oplayoutget))
return FALSE;
break;
case OP_LAYOUTRETURN:
if (!zdr_LAYOUTRETURN4args (zdrs, &objp->nfs_argop4_u.oplayoutreturn))
return FALSE;
break;
case OP_ILLEGAL:
break;
default:
@ -3529,6 +3631,10 @@ zdr_nfs_resop4 (ZDR *zdrs, nfs_resop4 *objp)
if (!zdr_LAYOUTGET4res (zdrs, &objp->nfs_resop4_u.oplayoutget))
return FALSE;
break;
case OP_LAYOUTRETURN:
if (!zdr_LAYOUTRETURN4res (zdrs, &objp->nfs_resop4_u.oplayoutreturn))
return FALSE;
break;
case OP_ILLEGAL:
if (!zdr_ILLEGAL4res (zdrs, &objp->nfs_resop4_u.opillegal))
return FALSE;

View File

@ -1573,6 +1573,59 @@ struct LAYOUTGET4res {
} LAYOUTGET4res_u;
};
typedef struct LAYOUTGET4res LAYOUTGET4res;
#define LAYOUT4_RET_REC_FILE 1
#define LAYOUT4_RET_REC_FSID 2
#define LAYOUT4_RET_REC_ALL 3
enum layoutreturn_type4 {
LAYOUTRETURN4_FILE = LAYOUT4_RET_REC_FILE,
LAYOUTRETURN4_FSID = LAYOUT4_RET_REC_FSID,
LAYOUTRETURN4_ALL = LAYOUT4_RET_REC_ALL,
};
typedef enum layoutreturn_type4 layoutreturn_type4;
struct layoutreturn_file4 {
offset4 lrf_offset;
length4 lrf_length;
stateid4 lrf_stateid;
struct {
u_int lrf_body_len;
char *lrf_body_val;
} lrf_body;
};
typedef struct layoutreturn_file4 layoutreturn_file4;
struct layoutreturn4 {
layoutreturn_type4 lr_returntype;
union {
layoutreturn_file4 lr_layout;
} layoutreturn4_u;
};
typedef struct layoutreturn4 layoutreturn4;
struct LAYOUTRETURN4args {
uint32_t lora_reclaim;
layouttype4 lora_layout_type;
layoutiomode4 lora_iomode;
layoutreturn4 lora_layoutreturn;
};
typedef struct LAYOUTRETURN4args LAYOUTRETURN4args;
struct layoutreturn_stateid {
uint32_t lrs_present;
union {
stateid4 lrs_stateid;
} layoutreturn_stateid_u;
};
typedef struct layoutreturn_stateid layoutreturn_stateid;
struct LAYOUTRETURN4res {
nfsstat4 lorr_status;
union {
layoutreturn_stateid lorr_stateid;
} LAYOUTRETURN4res_u;
};
typedef struct LAYOUTRETURN4res LAYOUTRETURN4res;
struct ILLEGAL4res {
nfsstat4 status;
@ -1625,6 +1678,7 @@ enum nfs_opnum4 {
OP_GETDEVICELIST = 48,
OP_LAYOUTCOMMIT = 49,
OP_LAYOUTGET = 50,
OP_LAYOUTRETURN = 51,
OP_ILLEGAL = 10044,
};
typedef enum nfs_opnum4 nfs_opnum4;
@ -1669,6 +1723,7 @@ struct nfs_argop4 {
GETDEVICELIST4args opgetdevicelist;
LAYOUTCOMMIT4args oplayoutcommit;
LAYOUTGET4args oplayoutget;
LAYOUTRETURN4args oplayoutreturn;
} nfs_argop4_u;
};
typedef struct nfs_argop4 nfs_argop4;
@ -1720,6 +1775,7 @@ struct nfs_resop4 {
GETDEVICELIST4res opgetdevicelist;
LAYOUTCOMMIT4res oplayoutcommit;
LAYOUTGET4res oplayoutget;
LAYOUTRETURN4res oplayoutreturn;
ILLEGAL4res opillegal;
} nfs_resop4_u;
};
@ -2119,6 +2175,12 @@ extern uint32_t zdr_LAYOUTCOMMIT4res (ZDR *, LAYOUTCOMMIT4res*);
extern uint32_t zdr_LAYOUTGET4args (ZDR *, LAYOUTGET4args*);
extern uint32_t zdr_LAYOUTGET4resok (ZDR *, LAYOUTGET4resok*);
extern uint32_t zdr_LAYOUTGET4res (ZDR *, LAYOUTGET4res*);
extern uint32_t zdr_layoutreturn_type4 (ZDR *, layoutreturn_type4*);
extern uint32_t zdr_layoutreturn_file4 (ZDR *, layoutreturn_file4*);
extern uint32_t zdr_layoutreturn4 (ZDR *, layoutreturn4*);
extern uint32_t zdr_LAYOUTRETURN4args (ZDR *, LAYOUTRETURN4args*);
extern uint32_t zdr_layoutreturn_stateid (ZDR *, layoutreturn_stateid*);
extern uint32_t zdr_LAYOUTRETURN4res (ZDR *, LAYOUTRETURN4res*);
extern uint32_t zdr_ILLEGAL4res (ZDR *, ILLEGAL4res*);
extern uint32_t zdr_nfs_opnum4 (ZDR *, nfs_opnum4*);
extern uint32_t zdr_nfs_argop4 (ZDR *, nfs_argop4*);
@ -2382,6 +2444,12 @@ extern uint32_t zdr_LAYOUTCOMMIT4res ();
extern uint32_t zdr_LAYOUTGET4args ();
extern uint32_t zdr_LAYOUTGET4resok ();
extern uint32_t zdr_LAYOUTGET4res ();
extern uint32_t zdr_layoutreturn_type4 ();
extern uint32_t zdr_layoutreturn_file4 ();
extern uint32_t zdr_layoutreturn4 ();
extern uint32_t zdr_LAYOUTRETURN4args ();
extern uint32_t zdr_layoutreturn_stateid ();
extern uint32_t zdr_LAYOUTRETURN4res ();
extern uint32_t zdr_ILLEGAL4res ();
extern uint32_t zdr_nfs_opnum4 ();
extern uint32_t zdr_nfs_argop4 ();

View File

@ -1694,6 +1694,54 @@ default:
void;
};
/*
* LAYOUTRETURN
*/
const LAYOUT4_RET_REC_FILE = 1;
const LAYOUT4_RET_REC_FSID = 2;
const LAYOUT4_RET_REC_ALL = 3;
enum layoutreturn_type4 {
LAYOUTRETURN4_FILE = LAYOUT4_RET_REC_FILE,
LAYOUTRETURN4_FSID = LAYOUT4_RET_REC_FSID,
LAYOUTRETURN4_ALL = LAYOUT4_RET_REC_ALL
};
struct layoutreturn_file4 {
offset4 lrf_offset;
length4 lrf_length;
stateid4 lrf_stateid;
opaque lrf_body<>;
};
union layoutreturn4 switch(layoutreturn_type4 lr_returntype) {
case LAYOUTRETURN4_FILE:
layoutreturn_file4 lr_layout;
default:
void;
};
struct LAYOUTRETURN4args {
bool lora_reclaim;
layouttype4 lora_layout_type;
layoutiomode4 lora_iomode;
layoutreturn4 lora_layoutreturn;
};
union layoutreturn_stateid switch (bool lrs_present) {
case TRUE:
stateid4 lrs_stateid;
case FALSE:
void;
};
union LAYOUTRETURN4res switch (nfsstat4 lorr_status) {
case NFS4_OK:
layoutreturn_stateid lorr_stateid;
default:
void;
};
/*
* ILLEGAL: Response for illegal operation numbers
*/
@ -1751,6 +1799,7 @@ enum nfs_opnum4 {
OP_GETDEVICELIST = 48,
OP_LAYOUTCOMMIT = 49,
OP_LAYOUTGET = 50,
OP_LAYOUTRETURN = 51,
OP_ILLEGAL = 10044
};
@ -1804,6 +1853,7 @@ union nfs_argop4 switch (nfs_opnum4 argop) {
case OP_GETDEVICELIST: GETDEVICELIST4args opgetdevicelist;
case OP_LAYOUTCOMMIT: LAYOUTCOMMIT4args oplayoutcommit;
case OP_LAYOUTGET: LAYOUTGET4args oplayoutget;
case OP_LAYOUTRETURN: LAYOUTRETURN4args oplayoutreturn;
case OP_ILLEGAL: void;
};
@ -1857,6 +1907,7 @@ union nfs_resop4 switch (nfs_opnum4 resop){
case OP_GETDEVICELIST: GETDEVICELIST4res opgetdevicelist;
case OP_LAYOUTCOMMIT: LAYOUTCOMMIT4res oplayoutcommit;
case OP_LAYOUTGET: LAYOUTGET4res oplayoutget;
case OP_LAYOUTRETURN: LAYOUTRETURN4res oplayoutreturn;
case OP_ILLEGAL: ILLEGAL4res opillegal;
};