Skip to content

Commit

Permalink
nfsv4.1: Add GETDEVICELIST operation
Browse files Browse the repository at this point in the history
Signed-off-by: Ronnie Sahlberg <ronniesahlberg@gmail.com>
  • Loading branch information
sahlberg committed Jun 8, 2020
1 parent 0b4c428 commit af97775
Show file tree
Hide file tree
Showing 3 changed files with 122 additions and 0 deletions.
59 changes: 59 additions & 0 deletions nfs4/libnfs-raw-nfs4.c
Expand Up @@ -2875,6 +2875,57 @@ zdr_GETDEVICEINFO4res (ZDR *zdrs, GETDEVICEINFO4res *objp)
return TRUE;
}

uint32_t
zdr_GETDEVICELIST4args (ZDR *zdrs, GETDEVICELIST4args *objp)
{


if (!zdr_layouttype4 (zdrs, &objp->gdla_layout_type))
return FALSE;
if (!zdr_count4 (zdrs, &objp->gdla_maxdevices))
return FALSE;
if (!zdr_nfs_cookie4 (zdrs, &objp->gdla_cookie))
return FALSE;
if (!zdr_verifier4 (zdrs, objp->gdla_cookieverf))
return FALSE;
return TRUE;
}

uint32_t
zdr_GETDEVICELIST4resok (ZDR *zdrs, GETDEVICELIST4resok *objp)
{


if (!zdr_nfs_cookie4 (zdrs, &objp->gdlr_cookie))
return FALSE;
if (!zdr_verifier4 (zdrs, objp->gdlr_cookieverf))
return FALSE;
if (!zdr_array (zdrs, (char **)&objp->gdlr_deviceid_list.gdlr_deviceid_list_val, (u_int *) &objp->gdlr_deviceid_list.gdlr_deviceid_list_len, ~0,
sizeof (deviceid4), (zdrproc_t) zdr_deviceid4))
return FALSE;
if (!zdr_bool (zdrs, &objp->gdlr_eof))
return FALSE;
return TRUE;
}

uint32_t
zdr_GETDEVICELIST4res (ZDR *zdrs, GETDEVICELIST4res *objp)
{


if (!zdr_nfsstat4 (zdrs, &objp->gdlr_status))
return FALSE;
switch (objp->gdlr_status) {
case NFS4_OK:
if (!zdr_GETDEVICELIST4resok (zdrs, &objp->GETDEVICELIST4res_u.gdlr_resok4))
return FALSE;
break;
default:
break;
}
return TRUE;
}

uint32_t
zdr_ILLEGAL4res (ZDR *zdrs, ILLEGAL4res *objp)
{
Expand Down Expand Up @@ -3053,6 +3104,10 @@ zdr_nfs_argop4 (ZDR *zdrs, nfs_argop4 *objp)
if (!zdr_GETDEVICEINFO4args (zdrs, &objp->nfs_argop4_u.opgetdeviceinfo))
return FALSE;
break;
case OP_GETDEVICELIST:
if (!zdr_GETDEVICELIST4args (zdrs, &objp->nfs_argop4_u.opgetdevicelist))
return FALSE;
break;
case OP_ILLEGAL:
break;
default:
Expand Down Expand Up @@ -3233,6 +3288,10 @@ zdr_nfs_resop4 (ZDR *zdrs, nfs_resop4 *objp)
if (!zdr_GETDEVICEINFO4res (zdrs, &objp->nfs_resop4_u.opgetdeviceinfo))
return FALSE;
break;
case OP_GETDEVICELIST:
if (!zdr_GETDEVICELIST4res (zdrs, &objp->nfs_resop4_u.opgetdevicelist))
return FALSE;
break;
case OP_ILLEGAL:
if (!zdr_ILLEGAL4res (zdrs, &objp->nfs_resop4_u.opillegal))
return FALSE;
Expand Down
36 changes: 36 additions & 0 deletions nfs4/libnfs-raw-nfs4.h
Expand Up @@ -1422,6 +1422,33 @@ struct GETDEVICEINFO4res {
};
typedef struct GETDEVICEINFO4res GETDEVICEINFO4res;

struct GETDEVICELIST4args {
layouttype4 gdla_layout_type;
count4 gdla_maxdevices;
nfs_cookie4 gdla_cookie;
verifier4 gdla_cookieverf;
};
typedef struct GETDEVICELIST4args GETDEVICELIST4args;

struct GETDEVICELIST4resok {
nfs_cookie4 gdlr_cookie;
verifier4 gdlr_cookieverf;
struct {
u_int gdlr_deviceid_list_len;
deviceid4 *gdlr_deviceid_list_val;
} gdlr_deviceid_list;
uint32_t gdlr_eof;
};
typedef struct GETDEVICELIST4resok GETDEVICELIST4resok;

struct GETDEVICELIST4res {
nfsstat4 gdlr_status;
union {
GETDEVICELIST4resok gdlr_resok4;
} GETDEVICELIST4res_u;
};
typedef struct GETDEVICELIST4res GETDEVICELIST4res;

struct ILLEGAL4res {
nfsstat4 status;
};
Expand Down Expand Up @@ -1470,6 +1497,7 @@ enum nfs_opnum4 {
OP_FREE_STATEID = 45,
OP_GET_DIR_DELEGATION = 46,
OP_GETDEVICEINFO = 47,
OP_GETDEVICELIST = 48,
OP_ILLEGAL = 10044,
};
typedef enum nfs_opnum4 nfs_opnum4;
Expand Down Expand Up @@ -1511,6 +1539,7 @@ struct nfs_argop4 {
FREE_STATEID4args opfreestateid;
GET_DIR_DELEGATION4args opgetdirdelegation;
GETDEVICEINFO4args opgetdeviceinfo;
GETDEVICELIST4args opgetdevicelist;
} nfs_argop4_u;
};
typedef struct nfs_argop4 nfs_argop4;
Expand Down Expand Up @@ -1559,6 +1588,7 @@ struct nfs_resop4 {
FREE_STATEID4res opfreestateid;
GET_DIR_DELEGATION4res opgetdirdelegation;
GETDEVICEINFO4res opgetdeviceinfo;
GETDEVICELIST4res opgetdevicelist;
ILLEGAL4res opillegal;
} nfs_resop4_u;
};
Expand Down Expand Up @@ -1942,6 +1972,9 @@ extern uint32_t zdr_GET_DIR_DELEGATION4res (ZDR *, GET_DIR_DELEGATION4res*);
extern uint32_t zdr_GETDEVICEINFO4args (ZDR *, GETDEVICEINFO4args*);
extern uint32_t zdr_GETDEVICEINFO4resok (ZDR *, GETDEVICEINFO4resok*);
extern uint32_t zdr_GETDEVICEINFO4res (ZDR *, GETDEVICEINFO4res*);
extern uint32_t zdr_GETDEVICELIST4args (ZDR *, GETDEVICELIST4args*);
extern uint32_t zdr_GETDEVICELIST4resok (ZDR *, GETDEVICELIST4resok*);
extern uint32_t zdr_GETDEVICELIST4res (ZDR *, GETDEVICELIST4res*);
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*);
Expand Down Expand Up @@ -2189,6 +2222,9 @@ extern uint32_t zdr_GET_DIR_DELEGATION4res ();
extern uint32_t zdr_GETDEVICEINFO4args ();
extern uint32_t zdr_GETDEVICEINFO4resok ();
extern uint32_t zdr_GETDEVICEINFO4res ();
extern uint32_t zdr_GETDEVICELIST4args ();
extern uint32_t zdr_GETDEVICELIST4resok ();
extern uint32_t zdr_GETDEVICELIST4res ();
extern uint32_t zdr_ILLEGAL4res ();
extern uint32_t zdr_nfs_opnum4 ();
extern uint32_t zdr_nfs_argop4 ();
Expand Down
27 changes: 27 additions & 0 deletions nfs4/nfs4.x
Expand Up @@ -1559,6 +1559,30 @@ default:
void;
};

/*
* GETDEVICELIST
*/
struct GETDEVICELIST4args {
layouttype4 gdla_layout_type;
count4 gdla_maxdevices;
nfs_cookie4 gdla_cookie;
verifier4 gdla_cookieverf;
};

struct GETDEVICELIST4resok {
nfs_cookie4 gdlr_cookie;
verifier4 gdlr_cookieverf;
deviceid4 gdlr_deviceid_list<>;
bool gdlr_eof;
};

union GETDEVICELIST4res switch (nfsstat4 gdlr_status) {
case NFS4_OK:
GETDEVICELIST4resok gdlr_resok4;
default:
void;
};

/*
* ILLEGAL: Response for illegal operation numbers
*/
Expand Down Expand Up @@ -1613,6 +1637,7 @@ enum nfs_opnum4 {
OP_FREE_STATEID = 45,
OP_GET_DIR_DELEGATION = 46,
OP_GETDEVICEINFO = 47,
OP_GETDEVICELIST = 48,
OP_ILLEGAL = 10044
};

Expand Down Expand Up @@ -1663,6 +1688,7 @@ union nfs_argop4 switch (nfs_opnum4 argop) {
case OP_FREE_STATEID: FREE_STATEID4args opfreestateid;
case OP_GET_DIR_DELEGATION: GET_DIR_DELEGATION4args opgetdirdelegation;
case OP_GETDEVICEINFO: GETDEVICEINFO4args opgetdeviceinfo;
case OP_GETDEVICELIST: GETDEVICELIST4args opgetdevicelist;
case OP_ILLEGAL: void;
};

Expand Down Expand Up @@ -1713,6 +1739,7 @@ union nfs_resop4 switch (nfs_opnum4 resop){
case OP_FREE_STATEID: FREE_STATEID4res opfreestateid;
case OP_GET_DIR_DELEGATION: GET_DIR_DELEGATION4res opgetdirdelegation;
case OP_GETDEVICEINFO: GETDEVICEINFO4res opgetdeviceinfo;
case OP_GETDEVICELIST: GETDEVICELIST4res opgetdevicelist;
case OP_ILLEGAL: ILLEGAL4res opillegal;
};

Expand Down

0 comments on commit af97775

Please sign in to comment.