NFS3(3)
β¨ NFS3(3) β¨
okay so bestie, welcome to the nfs3 manual page, version 3.0 β yes, this is NFS3(3), and yes, it's giving big protocol energy. This is the NFSv3 decoding module, and we're gonna walk through every single class together, no skimming, no skipping. Grab a snack. π
πΈ NAME πΈ
packet.nfs.nfs3 β the NFSv3 decoding module. That's the whole name section, short and iconic. π
π CLASSES π
Okay so this is the main character section. Every one of these bad boys inherits from baseobj.BaseObj, and every single one of them has the same adorable little constructor. We're doing them all, in order, no cap. π«Ά
class ACCESS3args(baseobj.BaseObj)
The args side of the ACCESS situation, bestie. Look at her. β¨
struct ACCESS3args {
nfs_fh3 fh;
access3 access;
};
β¨ Methods defined here β¨
__init__(self, unpack)β it's the constructor π
It sets up the object's private data according to whatever arguments you give it. You can hand those over positionally, as named arguments, or a combination of both β all three are valid, pick your fighter.
class ACCESS3res(baseobj.BaseObj)
The result half of ACCESS, and it's a union switch β so it's picking a lane based on status. Very choose-your-own-adventure of it. π¦
union switch ACCESS3res (nfsstat3 status) {
case const.NFS3_OK:
ACCESS3resok resok;
default:
ACCESS3resfail resfail;
};
β¨ Methods defined here β¨
__init__(self, unpack)β constructor, babes πΈ
It initializes the object's private data based on the arguments you pass in, and those arguments can be positional, named, or a mix of both. Easy.
class ACCESS3resfail(baseobj.BaseObj)
The not-okay branch. Sometimes things just don't work out and that's valid. π
struct ACCESS3resfail {
post_op_attr attributes;
};
β¨ Methods defined here β¨
__init__(self, unpack)β yep, the constructor π«
Whatever arguments you give it get used to set up the object's private data. Positional, named, or a combination of the two β it's not picky.
class ACCESS3resok(baseobj.BaseObj)
The okay branch, the one we're all rooting for. π
struct ACCESS3resok {
post_op_attr attributes;
access3 access;
};
β¨ Methods defined here β¨
__init__(self, unpack)β the constructor, obviously π
It sets up the object's private data according to the arguments given, and you're free to give them positionally, by name, or as a combination of both.
class COMMIT3args(baseobj.BaseObj)
COMMIT time! Args edition. She's got an fh, an offset and a count and she knows how to use them. π₯
struct COMMIT3args {
nfs_fh3 fh;
offset3 offset;
count3 count;
};
β¨ Methods defined here β¨
__init__(self, unpack)β constructor β¨
It initializes the object's private data according to the arguments you give it, and those can be positional, named, or any combination of both. Flexible queen.
class COMMIT3res(baseobj.BaseObj)
The result side of COMMIT, and it's a union switch on status because of course it is. π
union switch COMMIT3res (nfsstat3 status) {
case const.NFS3_OK:
COMMIT3resok resok;
default:
COMMIT3resfail resfail;
};
β¨ Methods defined here β¨
__init__(self, unpack)β the constructor, bestie π
It sets up the object's private data based on whatever arguments you hand it. Positional, named, or a combo of both β all good.
class COMMIT3resfail(baseobj.BaseObj)
The sad path. She carries a wcc_data wcc and honestly, same. π
struct COMMIT3resfail {
wcc_data wcc;
};
β¨ Methods defined here β¨
__init__(self, unpack)β constructor vibes π
It initializes the object's private data according to the arguments given, and you can give those arguments positionally, as named arguments, or a combination of both.
class COMMIT3resok(baseobj.BaseObj)
The happy path for COMMIT, complete with a writeverf3 verifier for β¨flavorβ¨.
struct COMMIT3resok {
wcc_data wcc;
writeverf3 verifier;
};
β¨ Methods defined here β¨
__init__(self, unpack)β it's the constructor π«Ά
It sets up the object's private data according to the arguments you give it β positional, named, or a mix of both, whatever suits the moment.
class CREATE3args(baseobj.BaseObj)
The args for CREATE. where plus how β honestly a whole mood, that's just life advice. π¦
struct CREATE3args {
diropargs3 where;
createhow3 how;
};
β¨ Methods defined here β¨
__init__(self, unpack)β the constructor π«
It initializes the object's private data according to the arguments given, and those arguments may be positional, named, or a combination of both.
class CREATE3res(baseobj.BaseObj)
Result side of CREATE, union switch on status, you know the drill by now. β
union switch CREATE3res (nfsstat3 status) {
case const.NFS3_OK:
CREATE3resok resok;
default:
CREATE3resfail resfail;
};
β¨ Methods defined here β¨
__init__(self, unpack)β constructor, no cap π
It sets up the object's private data based on the arguments you pass in, and you can pass them positionally, by name, or as a combination of both.
class CREATE3resfail(baseobj.BaseObj)
Fail branch for CREATE. She's carrying a wcc_data wcc and a dream. π
struct CREATE3resfail {
wcc_data wcc;
};
β¨ Methods defined here β¨
__init__(self, unpack)β yep, constructor πΈ
It initializes the object's private data according to the arguments you give it. Positional, named, or both at once β all valid.
class CREATE3resok(baseobj.BaseObj)
Success branch for CREATE β obj, attributes, wcc, the whole little family. π
struct CREATE3resok {
post_op_fh3 obj;
post_op_attr attributes;
wcc_data wcc;
};
β¨ Methods defined here β¨
__init__(self, unpack)β the constructor π
It sets up the object's private data according to the arguments given, and those arguments can be positional, named, or any combination of both.
class FSINFO3args(baseobj.BaseObj)
The args for FSINFO, and honestly? Minimalist. She's just one fh. Less is more. π
struct FSINFO3args {
nfs_fh3 fh;
};
β¨ Methods defined here β¨
__init__(self, unpack)β constructor energy β¨
It initializes the object's private data based on whatever arguments you give it, and those can be positional, named, or a combination of the two.
class FSINFO3res(baseobj.BaseObj)
FSINFO result, union switch on status, doing the exact same dance as all her sisters. π
union switch FSINFO3res (nfsstat3 status) {
case const.NFS3_OK:
FSINFO3resok resok;
default:
FSINFO3resfail resfail;
};
β¨ Methods defined here β¨
__init__(self, unpack)β the constructor π«Ά
It sets up the object's private data according to the arguments you hand it β positional, named, or a mix of both, dealer's choice.
class FSINFO3resfail(baseobj.BaseObj)
Fail branch for FSINFO. One lonely attributes field. She's fine. It's fine. π
struct FSINFO3resfail {
post_op_attr attributes;
};
β¨ Methods defined here β¨
__init__(self, unpack)β constructor, bestie π«
It initializes the object's private data according to the arguments given, and you can give them positionally, as named arguments, or a combination of both.
class FSINFO3resok(baseobj.BaseObj)
Okay this one is the main event β look at all those uint32s, the size3 maxfilesize, the nfstime3 time_delta, the uint32 properties. She's stacked. π
struct FSINFO3resok {
post_op_attr attributes;
uint32 rtmax;
uint32 rtpref;
uint32 rtmult;
uint32 wtmax;
uint32 wtpref;
uint32 wtmult;
uint32 dtpref;
size3 maxfilesize;
nfstime3 time_delta;
uint32 properties;
};
β¨ Methods defined here β¨
__init__(self, unpack)β the constructor π
It sets up the object's private data according to the arguments you give it, and those arguments may be positional, named, or a combination of both.
class FSSTAT3args(baseobj.BaseObj)
FSSTAT args, and she's also rocking the single-fh look. Iconic, minimal, slay. π
struct FSSTAT3args {
nfs_fh3 fh;
};
β¨ Methods defined here β¨
__init__(self, unpack)β it's the constructor πΈ
It initializes the object's private data according to whatever arguments you give it β positional, named, or both in combination.
class FSSTAT3res(baseobj.BaseObj)
FSSTAT result, union switch on status. At this point it's a family tradition. β
union switch FSSTAT3res (nfsstat3 status) {
case const.NFS3_OK:
FSSTAT3resok resok;
default:
FSSTAT3resfail resfail;
};
β¨ Methods defined here β¨
__init__(self, unpack)β constructor π¦
It sets up the object's private data based on the arguments you pass it, and you're welcome to pass them positionally, by name, or as a combination of both.
class FSSTAT3resfail(baseobj.BaseObj)
Fail branch for FSSTAT. Just an attributes field, living her truth. π
struct FSSTAT3resfail {
post_op_attr attributes;
};
β¨ Methods defined here β¨
__init__(self, unpack)β the constructor π
It initializes the object's private data according to the arguments given, and those arguments can be positional, named, or any combination of both.
class FSSTAT3resok(baseobj.BaseObj)
Success branch for FSSTAT, and she brought seven size3s plus an invarsec to the party. Not me being obsessed with a struct. π₯
struct FSSTAT3resok {
post_op_attr attributes;
size3 tbytes;
size3 fbytes;
size3 abytes;
size3 tfiles;
size3 ffiles;
size3 afiles;
uint32 invarsec;
};
β¨ Methods defined here β¨
__init__(self, unpack)β the constructor β¨
It sets up the object's private data according to the arguments you give it β positional, named, or a combination of both, all fine.
class GETATTR3args(baseobj.BaseObj)
GETATTR args. One fh. That's the whole personality and honestly, respect. π«Ά
struct GETATTR3args {
nfs_fh3 fh;
};
β¨ Methods defined here β¨
__init__(self, unpack)β constructor, babes π
It initializes the object's private data according to the arguments you give it, and you can give those arguments positionally, as named arguments, or a combination of both.
class GETATTR3res(baseobj.BaseObj)
GETATTR result! Union switch on status, but look β the default case is just void. No fail struct. She said "no thoughts, head empty". π
union switch GETATTR3res (nfsstat3 status) {
case const.NFS3_OK:
GETATTR3resok resok;
default:
void;
};
β¨ Methods defined here β¨
__init__(self, unpack)β the constructor π
It sets up the object's private data based on the arguments given, and those may be positional, named, or a combination of both.
class GETATTR3resok(baseobj.BaseObj)
The okay branch, carrying exactly one fattr3 attributes. Simple. Clean. Iconic. π
struct GETATTR3resok {
fattr3 attributes;
};
β¨ Methods defined here β¨
__init__(self, unpack)β yep, the constructor π«
It initializes the object's private data according to the arguments you hand it, and you can hand them over positionally, by name, or a mix of both.
class LINK3args(baseobj.BaseObj)
LINK args! An fh and a diropargs3 link. Two besties, one struct. π¦
struct LINK3args {
nfs_fh3 fh;
diropargs3 link;
};
β¨ Methods defined here β¨
__init__(self, unpack)β the constructor πΈ
It sets up the object's private data according to the arguments given β positional, named, or any combination of both, all welcome here.
class LINK3res(baseobj.BaseObj)
LINK result, union switch on status. Consistency queen. β
union switch LINK3res (nfsstat3 status) {
case const.NFS3_OK:
LINK3resok resok;
default:
LINK3resfail resfail;
};
β¨ Methods defined here β¨
__init__(self, unpack)β constructor, bestie π
It initializes the object's private data according to the arguments you give it, and those arguments can be positional, named, or a combination of both.
class LINK3resfail(baseobj.BaseObj)
Fail branch for LINK, holding an attributes and a wcc. She's doing her best. π
struct LINK3resfail {
post_op_attr attributes;
wcc_data wcc;
};
β¨ Methods defined here β¨
__init__(self, unpack)β the constructor π
It sets up the object's private data based on whatever arguments you give it β positionally, by name, or both at once.
class LINK3resok(baseobj.BaseObj)
And the okay branch for LINK, same duo of attributes and wcc, but make it successful. π
struct LINK3resok {
post_op_attr attributes;
wcc_data wcc;
};
okay so that class we were just talking about? here's its method sitch, and then we're rolling straight into the next batch of classes β they're alphabetical btw, the authors really said "organization β¨".
π Methods defined here π
__init__(self, unpack)β Constructor
Constructor means it's the thing that runs when the object is born π It sets up the object's private data based on whatever arguments you give it. Positional, named, or a lil mix of both β all three are valid, bestie, it's not picky.
π¦ class LOOKUP3args(baseobj.BaseObj)
the whole vibe:
struct LOOKUP3args {
diropargs3 what;
};
β¨ Methods defined here β¨
__init__(self, unpack)β Constructor
it initializes the object's private data from the arguments you pass in, and you can do that positionally, with named args, or a combo of both π«Ά
πΈ class LOOKUP3res(baseobj.BaseObj)
this one's a union switch, so it flips based on status:
union switch LOOKUP3res (nfsstat3 status) {
case const.NFS3_OK:
LOOKUP3resok resok;
default:
LOOKUP3resfail resfail;
};
β¨ Methods defined here β¨
__init__(self, unpack)β Constructor
sets up the object's private data according to the args you hand over β positional, named, or both together, whatever feels right π
π class LOOKUP3resfail(baseobj.BaseObj)
struct LOOKUP3resfail {
post_op_attr dir_attributes;
};
β¨ Methods defined here β¨
__init__(self, unpack)β Constructor
initializes the object's private data based on the arguments given β positional, named, or a mix of the two, no notes π₯
π class LOOKUP3resok(baseobj.BaseObj)
struct LOOKUP3resok {
nfs_fh3 fh;
post_op_attr attributes;
post_op_attr dir_attributes;
};
β¨ Methods defined here β¨
__init__(self, unpack)β Constructor
same deal: private data gets set up from the arguments you give it, and you can pass those positionally, by name, or both at once π
β class MKDIR3args(baseobj.BaseObj)
struct MKDIR3args {
diropargs3 where;
sattr3 attributes;
};
β¨ Methods defined here β¨
__init__(self, unpack)β Constructor
initializes the object's private data per the arguments given β positional, named, or a combination, all good π
π¦ class MKDIR3res(baseobj.BaseObj)
union switch MKDIR3res (nfsstat3 status) {
case const.NFS3_OK:
MKDIR3resok resok;
default:
MKDIR3resfail resfail;
};
β¨ Methods defined here β¨
__init__(self, unpack)β Constructor
object's private data, set up from your arguments, and yes you can mix positional and named ones together π
π class MKDIR3resfail(baseobj.BaseObj)
struct MKDIR3resfail {
wcc_data wcc;
};
β¨ Methods defined here β¨
__init__(self, unpack)β Constructor
initializes the object's private data from the arguments provided β positional, named, or a blend of both, periodt β¨
π class MKDIR3resok(baseobj.BaseObj)
struct MKDIR3resok {
post_op_fh3 obj;
post_op_attr attributes;
wcc_data wcc;
};
β¨ Methods defined here β¨
__init__(self, unpack)β Constructor
private data gets initialized according to the arguments you give β and yeah, positional, named, or both, it's flexible like that π«Ά
π§ class MKNOD3args(baseobj.BaseObj)
struct MKNOD3args {
diropargs3 where;
mknoddata3 what;
};
β¨ Methods defined here β¨
__init__(self, unpack)β Constructor
sets the object's private data from the arguments given β positional, named, or a combo, you already know π
π class MKNOD3res(baseobj.BaseObj)
union switch MKNOD3res (nfsstat3 status) {
case const.NFS3_OK:
MKNOD3resok resok;
default:
MKNOD3resfail resfail;
};
β¨ Methods defined here β¨
__init__(self, unpack)β Constructor
initializes the object's private data per the arguments you pass β positional, named, or a mix of both, no cap π§
π class MKNOD3resfail(baseobj.BaseObj)
struct MKNOD3resfail {
wcc_data wcc;
};
β¨ Methods defined here β¨
__init__(self, unpack)β Constructor
object's private data β initialized from the arguments given β and those can be positional, named, or both πΈ
π class MKNOD3resok(baseobj.BaseObj)
struct MKNOD3resok {
post_op_fh3 obj;
post_op_attr attributes;
wcc_data wcc;
};
β¨ Methods defined here β¨
__init__(self, unpack)β Constructor
initializes the object's private data according to the arguments given β positional, named, or a combination of both, iconic behaviour honestly π
π₯ class NFS3args(packet.utils.RPCload)
okay THIS one is the big one, bestie, it's a union switch on nfs_proc3 procedure and it branches into basically the entire NFSv3 op set:
union switch NFS3args (nfs_proc3 procedure) {
case const.NFSPROC3_NULL:
void;
case const.NFSPROC3_GETATTR:
GETATTR3args opgetattr;
case const.NFSPROC3_SETATTR:
SETATTR3args opsetattr;
case const.NFSPROC3_LOOKUP:
LOOKUP3args oplookup;
case const.NFSPROC3_ACCESS:
ACCESS3args opaccess;
case const.NFSPROC3_READLINK:
READLINK3args opreadlink;
case const.NFSPROC3_READ:
READ3args opread;
case const.NFSPROC3_WRITE:
WRITE3args opwrite;
case const.NFSPROC3_CREATE:
CREATE3args opcreate;
case const.NFSPROC3_MKDIR:
MKDIR3args opmkdir;
case const.NFSPROC3_SYMLINK:
SYMLINK3args opsymlink;
case const.NFSPROC3_MKNOD:
MKNOD3args opmknod;
case const.NFSPROC3_REMOVE:
REMOVE3args opremove;
case const.NFSPROC3_RMDIR:
RMDIR3args oprmdir;
case const.NFSPROC3_RENAME:
RENAME3args oprename;
case const.NFSPROC3_LINK:
LINK3args oplink;
case const.NFSPROC3_READDIR:
READDIR3args opreaddir;
case const.NFSPROC3_READDIRPLUS:
READDIRPLUS3args opreaddirplus;
case const.NFSPROC3_FSSTAT:
FSSTAT3args opfsstat;
case const.NFSPROC3_FSINFO:
FSINFO3args opfsinfo;
case const.NFSPROC3_PATHCONF:
PATHCONF3args oppathconf;
case const.NFSPROC3_COMMIT:
COMMIT3args opcommit;
};
β¨ Methods defined here β¨
__init__(self, unpack, procedure)β Constructor
β οΈ heads up, this constructor takes two things, not one βunpackandprocedureπ
it initializes the object's private data according to the arguments given, and you can pass those positionally, as named arguments, or a combination of both π
π class NFS3res(packet.utils.RPCload)
and here's its matching response side, also switching on nfs_proc3 procedure:
union switch NFS3res (nfs_proc3 procedure) {
case const.NFSPROC3_NULL:
void;
case const.NFSPROC3_GETATTR:
GETATTR3res opgetattr;
case const.NFSPROC3_SETATTR:
SETATTR3res opsetattr;
case const.NFSPROC3_LOOKUP:
LOOKUP3res oplookup;
case const.NFSPROC3_ACCESS:
ACCESS3res opaccess;
case const.NFSPROC3_READLINK:
READLINK3res opreadlink;
case const.NFSPROC3_READ:
READ3res opread;
case const.NFSPROC3_WRITE:
WRITE3res opwrite;
case const.NFSPROC3_CREATE:
CREATE3res opcreate;
case const.NFSPROC3_MKDIR:
MKDIR3res opmkdir;
case const.NFSPROC3_SYMLINK:
SYMLINK3res opsymlink;
case const.NFSPROC3_MKNOD:
MKNOD3res opmknod;
case const.NFSPROC3_REMOVE:
REMOVE3res opremove;
case const.NFSPROC3_RMDIR:
RMDIR3res oprmdir;
case const.NFSPROC3_RENAME:
RENAME3res oprename;
case const.NFSPROC3_LINK:
LINK3res oplink;
case const.NFSPROC3_READDIR:
READDIR3res opreaddir;
case const.NFSPROC3_READDIRPLUS:
READDIRPLUS3res opreaddirplus;
case const.NFSPROC3_FSSTAT:
FSSTAT3res opfsstat;
case const.NFSPROC3_FSINFO:
FSINFO3res opfsinfo;
case const.NFSPROC3_PATHCONF:
PATHCONF3res oppathconf;
case const.NFSPROC3_COMMIT:
COMMIT3res opcommit;
};
β¨ Methods defined here β¨
__init__(self, unpack, procedure)β Constructor
β οΈ again β this one wantsunpackandprocedure, don't forget the second one bestie π
initializes the object's private data from the arguments given β positional, named, or a mix of both, whichever β¨
πΈ class PATHCONF3args(baseobj.BaseObj)
struct PATHCONF3args {
nfs_fh3 fh;
};
β¨ Methods defined here β¨
__init__(self, unpack)β Constructor
sets up the object's private data according to the arguments given β positional, named, or both together, all valid π
π¦ class PATHCONF3res(baseobj.BaseObj)
union switch PATHCONF3res (nfsstat3 status) {
case const.NFS3_OK:
PATHCONF3resok resok;
default:
PATHCONF3resfail resfail;
};
β¨ Methods defined here β¨
__init__(self, unpack)β Constructor
initializes the object's private data per the arguments given β positional, named, or a combination of both π«Ά
π class PATHCONF3resfail(baseobj.BaseObj)
struct PATHCONF3resfail {
post_op_attr attributes;
};
β¨ Methods defined here β¨
__init__(self, unpack)β Constructor
object's private data, initialized from your arguments, and yep β positional, named, or both, it's giving flexible π
β class PATHCONF3resok(baseobj.BaseObj)
this one's got a whole lil pile of fields, look:
struct PATHCONF3resok {
post_op_attr attributes;
uint32 linkmax;
uint32 name_max;
bool no_trunc;
bool chown_restricted;
bool case_insensitive;
bool case_preserving;
};
β¨ Methods defined here β¨
__init__(self, unpack)β Constructor
initializes the object's private data according to the arguments given β positional, named, or a combination of both, no cap π
π class READ3args(baseobj.BaseObj)
struct READ3args {
nfs_fh3 fh;
offset3 offset;
count3 count;
};
β¨ Methods defined here β¨
__init__(self, unpack)β Constructor
sets the object's private data from the arguments you give it β positional, named, or both at once, iconic π₯
class READ3res(baseobj.BaseObj) π
union switch READ3res (nfsstat3 status) {
case const.NFS3_OK:
READ3resok resok;
default:
READ3resfail resfail;
};
okay so this one is a union that switches on nfsstat3 status. If the status is const.NFS3_OK, you get READ3resok resok; otherwise it's READ3resfail resfail. No cap, that's the whole vibe. π¦
Methods defined here:
__init__(self, unpack)β Constructor moment. It initializes the object's private data according to the arguments given. You can pass them positionally, as named arguments, or a mix of both. Slay. β¨
class READ3resfail(baseobj.BaseObj) π
struct READ3resfail {
post_op_attr file_attributes;
};
Methods defined here:
__init__(self, unpack)β Constructor alert. It sets up the object's private data based on the arguments you give it. Positional, named, or a combo β all valid, bestie. π«Ά
class READ3resok(packet.utils.RDMAbase) πΈ
struct READ3resok {
post_op_attr attributes;
count3 count;
bool eof;
opaque data<>;
};
Methods defined here:
__init__(self, unpack)β Constructor vibes. It initializes the object's private data according to the arguments given. You can go positional, named, or mix both. Periodt. π
class READDIR3args(baseobj.BaseObj) π
struct READDIR3args {
nfs_fh3 fh;
cookie3 cookie;
cookieverf3 verifier;
count3 count;
};
Methods defined here:
__init__(self, unpack)β Constructor time. It sets up the object's private data based on whatever arguments you hand it. Positional, named, or a combination β all good. β¨
class READDIR3res(baseobj.BaseObj) π¦
union switch READDIR3res (nfsstat3 status) {
case const.NFS3_OK:
READDIR3resok resok;
default:
READDIR3resfail resfail;
};
Methods defined here:
__init__(self, unpack)β Constructor energy. It initializes the object's private data according to the arguments given. You can pass them positionally, as named arguments, or both. π
class READDIR3resfail(baseobj.BaseObj) π
struct READDIR3resfail {
post_op_attr attributes;
};
Methods defined here:
__init__(self, unpack)β Constructor o'clock. It sets up the object's private data based on the arguments you provide. Positional, named, or a mix β slay. π«Ά
class READDIR3resok(baseobj.BaseObj) π
struct READDIR3resok {
post_op_attr attributes;
cookieverf3 verifier;
dirlist3 reply;
};
Methods defined here:
__init__(self, unpack)β Constructor moment. It initializes the object's private data according to the arguments given. Positional, named, or a combination of both β no cap. β¨
class READDIRPLUS3args(baseobj.BaseObj) β
struct READDIRPLUS3args {
nfs_fh3 fh;
cookie3 cookie;
cookieverf3 verifier;
count3 dircount;
count3 maxcount;
};
Methods defined here:
__init__(self, unpack)β Constructor vibes. It sets up the object's private data based on the arguments you give it. You can go positional, named, or mix both. π
class READDIRPLUS3res(baseobj.BaseObj) π₯
union switch READDIRPLUS3res (nfsstat3 status) {
case const.NFS3_OK:
READDIRPLUS3resok resok;
default:
READDIRPLUS3resfail resfail;
};
Methods defined here:
__init__(self, unpack)β Constructor alert. It initializes the object's private data according to the arguments given. Positional, named, or a mix β all valid, bestie. π
class READDIRPLUS3resfail(baseobj.BaseObj) πΈ
struct READDIRPLUS3resfail {
post_op_attr attributes;
};
Methods defined here:
__init__(self, unpack)β Constructor time. It sets up the object's private data based on the arguments you provide. Positional, named, or both β periodt. π¦
class READDIRPLUS3resok(baseobj.BaseObj) π
struct READDIRPLUS3resok {
post_op_attr attributes;
cookieverf3 verifier;
dirlistplus3 reply;
};
Methods defined here:
__init__(self, unpack)β Constructor energy. It initializes the object's private data according to the arguments given. You can pass them positionally, as named arguments, or a combination. β¨
class READLINK3args(baseobj.BaseObj) π«Ά
struct READLINK3args {
nfs_fh3 fh;
};
Methods defined here:
__init__(self, unpack)β Constructor moment. It sets up the object's private data based on the arguments you give it. Positional, named, or a mix β slay. π
class READLINK3res(baseobj.BaseObj) π
union switch READLINK3res (nfsstat3 status) {
case const.NFS3_OK:
READLINK3resok resok;
default:
READLINK3resfail resfail;
};
Methods defined here:
__init__(self, unpack)β Constructor vibes. It initializes the object's private data according to the arguments given. Positional, named, or a combination of both β no cap. π
class READLINK3resfail(baseobj.BaseObj) π
struct READLINK3resfail {
post_op_attr attributes;
};
Methods defined here:
__init__(self, unpack)β Constructor alert. It sets up the object's private data based on the arguments you provide. You can go positional, named, or mix both. β¨
class READLINK3resok(packet.utils.RDMAbase) β
struct READLINK3resok {
post_op_attr attributes;
nfspath3 link;
};
Methods defined here:
__init__(self, unpack)β Constructor time. It initializes the object's private data according to the arguments given. Positional, named, or both β all valid, bestie. π
class REMOVE3args(baseobj.BaseObj) π₯
struct REMOVE3args {
diropargs3 object;
};
Methods defined here:
__init__(self, unpack)β Constructor energy. It sets up the object's private data based on the arguments you give it. Positional, named, or a mix β slay. π«Ά
class REMOVE3res(baseobj.BaseObj) πΈ
union switch REMOVE3res (nfsstat3 status) {
case const.NFS3_OK:
REMOVE3resok resok;
default:
REMOVE3resfail resfail;
};
Methods defined here:
__init__(self, unpack)β Constructor moment. It initializes the object's private data according to the arguments given. You can pass them positionally, as named arguments, or a combination. π
class REMOVE3resfail(baseobj.BaseObj) π¦
struct REMOVE3resfail {
wcc_data wcc;
};
Methods defined here:
__init__(self, unpack)β Constructor vibes. It sets up the object's private data based on the arguments you provide. Positional, named, or both β periodt. β¨
class REMOVE3resok(baseobj.BaseObj) π
struct REMOVE3resok {
wcc_data wcc;
};
Methods defined here:
__init__(self, unpack)β Constructor alert. It initializes the object's private data according to the arguments given. Positional, named, or a mix β all valid, bestie. π
class RENAME3args(baseobj.BaseObj) π
struct RENAME3args {
diropargs3 nfrom;
diropargs3 nto;
};
Methods defined here:
__init__(self, unpack)β Constructor time. It sets up the object's private data based on the arguments you give it. You can go positional, named, or mix both. π«Ά
class RENAME3res(baseobj.BaseObj) π
union switch RENAME3res (nfsstat3 status) {
case const.NFS3_OK:
RENAME3resok resok;
default:
RENAME3resfail resfail;
};
Methods defined here:
__init__(self, unpack)β Constructor energy. It initializes the object's private data according to the arguments given. Positional, named, or a combination of both β no cap. π
class RENAME3resfail(baseobj.BaseObj) β
struct RENAME3resfail {
wcc_data fromdir_wcc;
wcc_data todir_wcc;
};
Methods defined here:
__init__(self, unpack)β Constructor moment. It sets up the object's private data based on the arguments you provide. Positional, named, or both β slay. β¨
class RENAME3resok(baseobj.BaseObj) π₯
struct RENAME3resok {
wcc_data fromdir_wcc;
wcc_data todir_wcc;
};
Methods defined here:
__init__(self, unpack)β Constructor vibes. It initializes the object's private data according to the arguments given. You can pass them positionally, as named arguments, or a mix. π
class RMDIR3args(baseobj.BaseObj) πΈ
struct RMDIR3args {
diropargs3 object;
};
Methods defined here:
__init__(self, unpack)β Constructor alert. It sets up the object's private data based on the arguments you give it. Positional, named, or a combination β all valid, bestie. π
class RMDIR3res(baseobj.BaseObj) π¦
union switch RMDIR3res (nfsstat3 status) {
case const.NFS3_OK:
RMDIR3resok resok;
default:
RMDIR3resfail resfail;
};
Methods defined here:
__init__(self, unpack)β Constructor time. It initializes the object's private data according to the arguments given. Positional, named, or both β periodt. π«Ά
class RMDIR3resfail(baseobj.BaseObj) π
struct RMDIR3resfail {
wcc_data wcc;
};
Methods defined here:
__init__(self, unpack)β Constructor energy. It sets up the object's private data based on the arguments you provide. You can go positional, named, or mix both. π
class RMDIR3resok(baseobj.BaseObj) π
struct RMDIR3resok {
wcc_data wcc;
};
Methods defined here:
__init__(self, unpack)β Constructor moment. It initializes the object's private data according to the arguments given. Positional, named, or a combination of both β no cap. β¨
okay bestie, part 4 of the class roster β letβs keep it moving π
π
class SETATTR3args(baseobj.BaseObj)
struct SETATTR3args {
nfs_fh3 fh;
sattr3 attributes;
sattrguard3 guard;
};
Methods defined here:
__init__(self, unpack)β Constructor. It sets up the objectβs private data from whatever args you hand it. You can pass them positionally, by name, or mix both β all valid, no cap.
β¨ class SETATTR3res(baseobj.BaseObj)
union switch SETATTR3res (nfsstat3 status) {
case const.NFS3_OK:
SETATTR3resok resok;
default:
SETATTR3resfail resfail;
};
Methods defined here:
__init__(self, unpack)β Constructor. Initializes the objectβs private data according to the arguments given. Positional, named, or a combo of both β it ate.
π class SETATTR3resfail(baseobj.BaseObj)
struct SETATTR3resfail {
wcc_data wcc;
};
Methods defined here:
__init__(self, unpack)β Constructor. Sets up private data from your args. You can go positional, named, or both at once, bestie.
π¦ class SETATTR3resok(baseobj.BaseObj)
struct SETATTR3resok {
wcc_data wcc;
};
Methods defined here:
__init__(self, unpack)β Constructor. Initializes objectβs private data from the arguments you pass. Positional, named, or a mix β literally all fine.
πΈ class SYMLINK3args(baseobj.BaseObj)
struct SYMLINK3args {
diropargs3 where;
symlinkdata3 symlink;
};
Methods defined here:
__init__(self, unpack)β Constructor. It does the private-data setup based on the args you give. Positional, named, or a combination of both β slay.
π class SYMLINK3res(baseobj.BaseObj)
union switch SYMLINK3res (nfsstat3 status) {
case const.NFS3_OK:
SYMLINK3resok resok;
default:
SYMLINK3resfail resfail;
};
Methods defined here:
__init__(self, unpack)β Constructor. Initializes the objectβs private data according to the arguments. Positional, named, or both β the usual iconic behavior.
π class SYMLINK3resfail(baseobj.BaseObj)
struct SYMLINK3resfail {
wcc_data dir_wcc;
};
Methods defined here:
__init__(self, unpack)β Constructor. Sets up private data from whatever you pass in. Positional, named, or a mix β yes bestie, both is allowed.
π§ class SYMLINK3resok(baseobj.BaseObj)
struct SYMLINK3resok {
post_op_fh3 obj;
post_op_attr attributes;
wcc_data wcc;
};
Methods defined here:
__init__(self, unpack)β Constructor. Initializes objectβs private data from the arguments given. You can do positional, named, or both β periodt.
π₯ class WRITE3args(baseobj.BaseObj)
struct WRITE3args {
nfs_fh3 fh;
offset3 offset;
count3 count;
stable_how stable;
opaque data<>;
};
Methods defined here:
__init__(self, unpack)β Constructor. It handles the private-data init from your args. Positional, named, or a combination of both β go off.
β class WRITE3res(baseobj.BaseObj)
union switch WRITE3res (nfsstat3 status) {
case const.NFS3_OK:
WRITE3resok resok;
default:
WRITE3resfail resfail;
};
Methods defined here:
__init__(self, unpack)β Constructor. Initializes objectβs private data according to the arguments. Positional, named, or both β itβs giving flexible.
π class WRITE3resfail(baseobj.BaseObj)
struct WRITE3resfail {
wcc_data wcc;
};
Methods defined here:
__init__(self, unpack)β Constructor. Sets up private data from whatever args you provide. Positional, named, or a mix β all valid, no stress.
π class WRITE3resok(baseobj.BaseObj)
struct WRITE3resok {
wcc_data wcc;
count3 count;
stable_how committed;
writeverf3 verifier;
};
Methods defined here:
__init__(self, unpack)β Constructor. Initializes the objectβs private data based on the arguments. Positional, named, or both β main character energy.
π« class createhow3(baseobj.BaseObj)
union switch createhow3 (createmode3 mode) {
case const.UNCHECKED:
case const.GUARDED:
sattr3 attributes;
case const.EXCLUSIVE:
createverf3 verifier;
};
Methods defined here:
__init__(self, unpack)β Constructor. It sets up private data from the args you give. Positional, named, or a combination of both β yes queen.
π class createmode3(packet.utils.Enum)
enum createmode3
No methods listed β itβs just an enum, bestie. Pure vibes, no constructor drama. β¨
π class devicedata3(baseobj.BaseObj)
struct devicedata3 {
sattr3 attributes;
specdata3 spec;
};
Methods defined here:
__init__(self, unpack)β Constructor. Initializes objectβs private data according to the arguments given. Positional, named, or both β iconic.
π¦ class dirlist3(baseobj.BaseObj)
struct dirlist3 {
entry3 *entries;
bool eof;
};
Methods defined here:
__init__(self, unpack)β Constructor. Sets up private data from whatever you pass. Positional, named, or a mix β itβs giving versatile.
πΈ class dirlistplus3(baseobj.BaseObj)
struct dirlistplus3 {
entryplus3 *entries;
bool eof;
};
Methods defined here:
__init__(self, unpack)β Constructor. Initializes the objectβs private data based on the args. Positional, named, or both β no cap.
π class diropargs3(baseobj.BaseObj)
struct diropargs3 {
nfs_fh3 fh;
filename3 name;
};
Methods defined here:
__init__(self, unpack)β Constructor. It sets up private data from the arguments you provide. Positional, named, or a combination β all good.
π class entry3(baseobj.BaseObj)
struct entry3 {
fileid3 fileid;
filename3 name;
cookie3 cookie;
entry3 *nextentry;
};
Methods defined here:
__init__(self, unpack)β Constructor. Initializes objectβs private data according to the arguments given. Positional, named, or both β periodt.
π§ class entryplus3(baseobj.BaseObj)
struct entryplus3 {
fileid3 fileid;
filename3 name;
cookie3 cookie;
post_op_attr attributes;
post_op_fh3 obj;
entryplus3 *nextentry;
};
Methods defined here:
__init__(self, unpack)β Constructor. Sets up private data from whatever args you hand it. Positional, named, or a mix β yes bestie.
π₯ class fattr3(baseobj.BaseObj)
struct fattr3 {
ftype3 type;
mode3 mode;
uint32 nlink;
uid3 uid;
gid3 gid;
size3 size;
size3 used;
specdata3 rdev;
uint64 fsid;
fileid3 fileid;
nfstime3 atime;
nfstime3 mtime;
nfstime3 ctime;
};
Methods defined here:
__init__(self, unpack)β Constructor. Initializes the objectβs private data based on the arguments. Positional, named, or both β it ate.
β class ftype3(packet.utils.Enum)
enum ftype3
No methods listed β just an enum, bestie. Itβs lowkey iconic. π
π class mknoddata3(baseobj.BaseObj)
union switch mknoddata3 (ftype3 type) {
case const.NF3CHR:
case const.NF3BLK:
devicedata3 device;
case const.NF3SOCK:
case const.NF3FIFO:
sattr3 attributes;
default:
void;
};
Methods defined here:
__init__(self, unpack)β Constructor. Sets up private data from the args you give. Positional, named, or a combination of both β slay.
π class nfs_bool(packet.utils.Enum)
enum nfs_bool
No methods listed β enum only, no constructor chaos. π
π« class nfs_proc3(packet.utils.Enum)
enum nfs_proc3
No methods listed β itβs an enum, periodt. β¨
π class nfsstat3(packet.utils.Enum)
enum nfsstat3
No methods listed β enum vibes only. π¦
π class nfstime3(baseobj.BaseObj)
struct nfstime3 {
uint32 seconds;
uint32 nseconds;
};
Methods defined here:
__init__(self, unpack)β Constructor. Initializes objectβs private data according to the arguments given. Positional, named, or both β all valid.
π class post_op_attr(baseobj.BaseObj)
union switch post_op_attr (bool attributes_follow) {
case const.TRUE:
fattr3 attributes;
case const.FALSE:
void;
};
Methods defined here:
__init__(self, unpack)β Constructor. Sets up private data from whatever args you pass. Positional, named, or a mix β no cap.
π§ class post_op_fh3(baseobj.BaseObj)
union switch post_op_fh3 (bool handle_follows) {
case const.TRUE:
nfs_fh3 fh;
case const.FALSE:
void;
};
Methods defined here:
__init__(self, unpack)β Constructor. Initializes the objectβs private data based on the arguments. Positional, named, or both β iconic.
πΈ class pre_op_attr(baseobj.BaseObj)
union switch pre_op_attr (bool attributes_follow) {
case const.TRUE:
wcc_attr attributes;
case const.FALSE:
void;
};
Methods defined here:
__init__(self, unpack)β Constructor. It sets up private data from the args you give. Positional, named, or a combination of both β yes queen.
class sattr3(baseobj.BaseObj)
okay so this one is THE glow-up kit for file attributes π like mode, owner, group, size, times β all the "who am i / how big am i / when did i change" lore:
struct sattr3 {
set_mode3 mode;
set_uid3 uid;
set_gid3 gid;
set_size3 size;
set_atime atime;
set_mtime mtime;
};
Methods defined here:
__init__(self, unpack)β Constructor
This sets up the object's private data based on whatever arguments you hand it. You can pass them positionally, as named arguments, or a lil mix of both β whatever feels right β¨
class sattrguard3(baseobj.BaseObj)
the β¨conditionalβ¨ vibe, bestie β it only carries a ctime when check says TRUE, otherwise it's just... void, no thoughts, head empty:
union switch sattrguard3 (bool check) {
case const.TRUE:
nfstime3 ctime;
case const.FALSE:
void;
};
Methods defined here:
__init__(self, unpack)β Constructor
Yep, same deal: it initializes the object's private data from the arguments given, and those args can be positional, named, or a combo of both π«Ά
class set_atime(baseobj.BaseObj)
access-time glow-up moment πΈ β if set_it is SET_TO_CLIENT_TIME you get a real nfstime3 atime, and anything else falls into default and hits you with the void:
union switch set_atime (time_how set_it) {
case const.SET_TO_CLIENT_TIME:
nfstime3 atime;
default:
void;
};
Methods defined here:
__init__(self, unpack)β Constructor
Initializes the object's private data according to the arguments you gave. Positional, named, or both β dealer's choice π
class set_gid3(baseobj.BaseObj)
group id but make it a switch π β TRUE means you actually get a gid3 gid, everything else is the void path:
union switch set_gid3 (bool set_it) {
case const.TRUE:
gid3 gid;
default:
void;
};
Methods defined here:
__init__(self, unpack)β Constructor
It initializes the object's private data from the arguments given, and those arguments may be positional, named, or a mix of the two β
class set_mode3(baseobj.BaseObj)
permission bits era π β when set_it is TRUE you're carrying a mode3 mode, otherwise default hands you the void:
union switch set_mode3 (bool set_it) {
case const.TRUE:
mode3 mode;
default:
void;
};
Methods defined here:
__init__(self, unpack)β Constructor
Constructor behavior, as always: it initializes the object's private data according to the arguments given, which can be positional, named, or both at once π
class set_mtime(baseobj.BaseObj)
modification-time sister to set_atime, no cap π¦ β SET_TO_CLIENT_TIME unlocks the nfstime3 mtime, and the default case gives you absolutely nothing:
union switch set_mtime (time_how set_it) {
case const.SET_TO_CLIENT_TIME:
nfstime3 mtime;
default:
void;
};
Methods defined here:
__init__(self, unpack)β Constructor
It initializes the object's private data based on the arguments given β positional, named, or a combination of both π«
class set_size3(baseobj.BaseObj)
size check, but make it a union π β TRUE gets you a size3 size, and default gets you the void, periodt:
union switch set_size3 (bool set_it) {
case const.TRUE:
size3 size;
default:
void;
};
Methods defined here:
__init__(self, unpack)β Constructor
It initializes the object's private data from the arguments given, and honestly you can pass them positional, named, or both π
class set_uid3(baseobj.BaseObj)
user id time π β TRUE means you're holding a uid3 uid, and the default branch is the void, respectfully:
union switch set_uid3 (bool set_it) {
case const.TRUE:
uid3 uid;
default:
void;
};
Methods defined here:
__init__(self, unpack)β Constructor
Constructor things: it initializes the object's private data according to the arguments given, whether those are positional, named, or a combo π
class specdata3(baseobj.BaseObj)
the little two-slot duo for special device numbers, main character energy in a struct that's only two fields long:
struct specdata3 {
uint32 specdata1;
uint32 specdata2;
};
Methods defined here:
__init__(self, unpack)β Constructor
It initializes the object's private data according to the arguments given, and yes bestie, they can be positional, named, or both π
class stable_how(packet.utils.Enum)
enum stable_how
a whole enum, that's it, that's the entry π β no methods listed here, it just is.
class symlinkdata3(baseobj.BaseObj)
symlink reveal β¨ β you get the attributes AND the path it points at, all in one struct:
struct symlinkdata3 {
sattr3 attributes;
nfspath3 linkdata;
};
Methods defined here:
__init__(self, unpack)β Constructor
It initializes the object's private data according to the arguments given, which can be positional, named, or a combination of both π§
class time_how(packet.utils.Enum)
enum time_how
another enum, standing there, being iconic, listing zero methods π
class wcc_attr(baseobj.BaseObj)
weak cache consistency, but for attributes β the trio of size and both timestamps, lowkey the receipts of a file's whole timeline:
struct wcc_attr {
size3 size;
nfstime3 mtime;
nfstime3 ctime;
};
Methods defined here:
__init__(self, unpack)β Constructor
It initializes the object's private data from the arguments given β positional, named, or both, your call π
class wcc_data(baseobj.BaseObj)
the before/after of it all π β pre-op attributes and post-op attributes, side by side like a glow-up reveal:
struct wcc_data {
pre_op_attr before;
post_op_attr after;
};
Methods defined here:
__init__(self, unpack)β Constructor
It initializes the object's private data according to the arguments given, and those arguments can be positional, named, or a mix of both π
β¨ FUNCTIONS β¨
four lil standalone unpacking helpers, all taking unpack and giving you the good stuff:
cookieverf3(unpack)createverf3(unpack)nfs_fh3(unpack)writeverf3(unpack)
πΈ SEE ALSO πΈ
go read these next, bestie, they're all part of the same friend group:
π BUGS π
No known bugs. flawless behavior, we love that for it β¨
π«Ά AUTHOR π«Ά
Jorge Mora (mora@netapp.com) β the icon, the moment, the author π
and that's the whole page, babes π this was NFStest 3.2, dated 21 March 2023, and no cap it ate. k bye, go write some NFS3 code π¦β¨
π¦ where this page comes from
- debian trixie: nfstest 3.2-3
- fedora 43: NFStest 3.2-14.fc43 Β· GPL-2.0-or-later
- fedora 44: NFStest 3.2-16.fc44 Β· GPL-2.0-or-later
- ubuntu noble: nfstest 3.2-2
- ubuntu questing: nfstest 3.2-3
- ubuntu resolute: nfstest 3.2-3build1
- ubuntu stonking: nfstest 3.2-5
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms