Message ID | 1401915726-29092-13-git-send-email-dros@primarydata.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Wed, Jun 04, 2014 at 05:02:00PM -0400, Weston Andros Adamson wrote: > mntv3 and nfsv3 .x files made from IETF specs by Tom Haynes > <thomas.haynes@primarydata.com>. Some folks actually submitted v3 client code at some point and I never managed to get it merged. Maybe I should dig that up again while we're doing this.... But probably it's still out of scope. --b. > > portmap2 .x files made from IETF specs by Weston Andros Adamson > <dros@primarydata.com>. > > Signed-off-by: Weston Andros Adamson <dros@primarydata.com> > --- > nfs4.1/xdrdef/mnt3.x | 68 ++++ > nfs4.1/xdrdef/nfs3.x | 818 ++++++++++++++++++++++++++++++++++++++++++++++++ > nfs4.1/xdrdef/portmap.x | 51 +++ > 3 files changed, 937 insertions(+) > create mode 100644 nfs4.1/xdrdef/mnt3.x > create mode 100644 nfs4.1/xdrdef/nfs3.x > create mode 100644 nfs4.1/xdrdef/portmap.x > > diff --git a/nfs4.1/xdrdef/mnt3.x b/nfs4.1/xdrdef/mnt3.x > new file mode 100644 > index 0000000..b632322 > --- /dev/null > +++ b/nfs4.1/xdrdef/mnt3.x > @@ -0,0 +1,68 @@ > +const MNTPATHLEN = 1024; /* Maximum bytes in a path name */ > +const MNTNAMLEN = 255; /* Maximum bytes in a name */ > +const FHSIZE3 = 64; /* Maximum bytes in a V3 file handle */ > + > +typedef opaque fhandle3 <FHSIZE3>; > +typedef string dirpath <MNTPATHLEN>; > +typedef string name <MNTNAMLEN>; > + > +struct mountres3_ok { > + fhandle3 fhandle; > + int auth_flavors <>; > +}; > + > +union mountres3 switch (mountstat3 fhs_status) { > +case MNT3_OK: > + mountres3_ok mountinfo; > +default: > + void; > +}; > + > +struct mountbody { > + name ml_hostname; > + dirpath ml_directory; > + mountlist ml_next; > +}; > + > +typedef mountbody *mountlist; > + > + > +struct groupnode { > + name gr_name; > + groups gr_next; > +}; > + > +typedef groupnode *groups; > + > + > +struct exportnode { > + dirpath ex_dir; > + groups ex_groups; > + exports ex_next; > +}; > + > +typedef exportnode *exports; > + > +enum mountstat3 { > + MNT3_OK = 0, /* no error */ > + MNT3ERR_PERM = 1, /* Not owner */ > + MNT3ERR_NOENT = 2, /* No such file or directory */ > + MNT3ERR_IO = 5, /* I/O error */ > + MNT3ERR_ACCES = 13, /* Permission denied */ > + MNT3ERR_NOTDIR = 20, /* Not a directory */ > + MNT3ERR_INVAL = 22, /* Invalid argument */ > + MNT3ERR_NAMETOOLONG = 63, /* Filename too long */ > + MNT3ERR_NOTSUPP = 10004, /* Operation not supported */ > + MNT3ERR_SERVERFAULT = 10006 /* A failure on the server */ > +}; > + > +program MOUNT_PROGRAM { > + version MOUNT_V3 { > + void MOUNTPROC3_NULL(void) = 0; > + mountres3 MOUNTPROC3_MNT(dirpath) = 1; > + mountlist MOUNTPROC3_DUMP(void) = 2; > + void MOUNTPROC3_UMNT(dirpath) = 3; > + void MOUNTPROC3_UMNTALL(void) = 4; > + exports MOUNTPROC3_EXPORT(void) = 5; > + } = 3; > +} = 100005; > diff --git a/nfs4.1/xdrdef/nfs3.x b/nfs4.1/xdrdef/nfs3.x > new file mode 100644 > index 0000000..ddd1395 > --- /dev/null > +++ b/nfs4.1/xdrdef/nfs3.x > @@ -0,0 +1,818 @@ > +const NFS3_FHSIZE = 64; /* Maximum bytes in a V3 file handle */ > + > +const FALSE = 0; > +const TRUE = 1; > + > +const NFS3_COOKIEVERFSIZE = 8; > +const NFS3_CREATEVERFSIZE = 8; > +const NFS3_WRITEVERFSIZE = 8; > + > +typedef unsigned hyper uint64; > +typedef hyper int64; > +typedef unsigned int uint32; > +typedef int int32; > +typedef string filename3 <>; > +typedef string nfspath3 <>; > +typedef uint64 fileid3; > +typedef uint64 cookie3; > +typedef opaque cookieverf3[NFS3_COOKIEVERFSIZE]; > +typedef opaque createverf3[NFS3_CREATEVERFSIZE]; > +typedef opaque writeverf3[NFS3_WRITEVERFSIZE]; > +typedef uint32 uid3; > +typedef uint32 gid3; > +typedef uint64 size3; > +typedef uint64 offset3; > +typedef uint32 mode3; > +typedef uint32 count3; > + > +enum nfsstat3 { > + NFS3_OK = 0, > + NFS3ERR_PERM = 1, > + NFS3ERR_NOENT = 2, > + NFS3ERR_IO = 5, > + NFS3ERR_NXIO = 6, > + NFS3ERR_ACCES = 13, > + NFS3ERR_EXIST = 17, > + NFS3ERR_XDEV = 18, > + NFS3ERR_NODEV = 19, > + NFS3ERR_NOTDIR = 20, > + NFS3ERR_ISDIR = 21, > + NFS3ERR_INVAL = 22, > + NFS3ERR_FBIG = 27, > + NFS3ERR_NOSPC = 28, > + NFS3ERR_ROFS = 30, > + NFS3ERR_MLINK = 31, > + NFS3ERR_NAMETOOLONG = 63, > + NFS3ERR_NOTEMPTY = 66, > + NFS3ERR_DQUOT = 69, > + NFS3ERR_STALE = 70, > + NFS3ERR_REMOTE = 71, > + NFS3ERR_BADHANDLE = 10001, > + NFS3ERR_NOT_SYNC = 10002, > + NFS3ERR_BAD_COOKIE = 10003, > + NFS3ERR_NOTSUPP = 10004, > + NFS3ERR_TOOSMALL = 10005, > + NFS3ERR_SERVERFAULT = 10006, > + NFS3ERR_BADTYPE = 10007, > + NFS3ERR_JUKEBOX = 10008 > +}; > + > +enum ftype3 { > + NF3REG = 1, > + NF3DIR = 2, > + NF3BLK = 3, > + NF3CHR = 4, > + NF3LNK = 5, > + NF3SOCK = 6, > + NF3FIFO = 7 > +}; > + > +struct specdata3 { > + uint32 specdata1; > + uint32 specdata2; > +}; > + > +struct nfs_fh3 { > + opaque data <NFS3_FHSIZE>; > +}; > + > +struct nfstime3 { > + uint32 seconds; > + uint32 nseconds; > +}; > + > +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; > +}; > + > +union post_op_attr switch (bool attributes_follow) { > +case TRUE: > + fattr3 attributes; > +case FALSE: > + void; > +}; > + > +struct wcc_attr { > + size3 size; > + nfstime3 mtime; > + nfstime3 ctime; > +}; > + > +union pre_op_attr switch (bool attributes_follow) { > +case TRUE: > + wcc_attr attributes; > +case FALSE: > + void; > +}; > + > +struct wcc_data { > + pre_op_attr before; > + post_op_attr after; > +}; > + > +union post_op_fh3 switch (bool handle_follows) { > +case TRUE: > + nfs_fh3 handle; > +case FALSE: > + void; > +}; > + > +enum time_how { > + DONT_CHANGE = 0, > + SET_TO_SERVER_TIME = 1, > + SET_TO_CLIENT_TIME = 2 > +}; > + > +union set_mode3 switch (bool set_it) { > +case TRUE: > + mode3 mode; > +default: > + void; > +}; > + > +union set_uid3 switch (bool set_it) { > +case TRUE: > + uid3 uid; > +default: > + void; > +}; > + > +union set_gid3 switch (bool set_it) { > +case TRUE: > + gid3 gid; > +default: > + void; > +}; > + > +union set_size3 switch (bool set_it) { > +case TRUE: > + size3 size; > +default: > + void; > +}; > + > +union set_atime switch (time_how set_it) { > +case SET_TO_CLIENT_TIME: > + nfstime3 atime; > +default: > + void; > +}; > + > +union set_mtime switch (time_how set_it) { > +case SET_TO_CLIENT_TIME: > + nfstime3 mtime; > +default: > + void; > +}; > + > +struct sattr3 { > + set_mode3 mode; > + set_uid3 uid; > + set_gid3 gid; > + set_size3 size; > + set_atime atime; > + set_mtime mtime; > +}; > + > +struct diropargs3 { > + nfs_fh3 dir; > + filename3 name; > +}; > + > +struct GETATTR3args { > + nfs_fh3 object; > +}; > + > +struct GETATTR3resok { > + fattr3 obj_attributes; > +}; > + > +union GETATTR3res switch (nfsstat3 status) { > +case NFS3_OK: > + GETATTR3resok resok; > +default: > + void; > +}; > + > +union sattrguard3 switch (bool check) { > +case TRUE: > + nfstime3 obj_ctime; > +case FALSE: > + void; > +}; > + > +struct SETATTR3args { > + nfs_fh3 object; > + sattr3 new_attributes; > + sattrguard3 guard; > +}; > + > +struct SETATTR3resok { > + wcc_data obj_wcc; > +}; > + > +struct SETATTR3resfail { > + wcc_data obj_wcc; > +}; > + > +union SETATTR3res switch (nfsstat3 status) { > +case NFS3_OK: > + SETATTR3resok resok; > +default: > + SETATTR3resfail resfail; > +}; > + > +struct LOOKUP3args { > + diropargs3 what; > +}; > + > +struct LOOKUP3resok { > + nfs_fh3 object; > + post_op_attr obj_attributes; > + post_op_attr dir_attributes; > +}; > + > +struct LOOKUP3resfail { > + post_op_attr dir_attributes; > +}; > + > +union LOOKUP3res switch (nfsstat3 status) { > +case NFS3_OK: > + LOOKUP3resok resok; > +default: > + LOOKUP3resfail resfail; > +}; > + > +const ACCESS3_READ = 0x0001; > +const ACCESS3_LOOKUP = 0x0002; > +const ACCESS3_MODIFY = 0x0004; > +const ACCESS3_EXTEND = 0x0008; > +const ACCESS3_DELETE = 0x0010; > +const ACCESS3_EXECUTE = 0x0020; > + > +struct ACCESS3args { > + nfs_fh3 object; > + uint32 access; > +}; > + > +struct ACCESS3resok { > + post_op_attr obj_attributes; > + uint32 access; > +}; > + > +struct ACCESS3resfail { > + post_op_attr obj_attributes; > +}; > + > +union ACCESS3res switch (nfsstat3 status) { > +case NFS3_OK: > + ACCESS3resok resok; > +default: > + ACCESS3resfail resfail; > +}; > + > +struct READLINK3args { > + nfs_fh3 symlink; > +}; > + > +struct READLINK3resok { > + post_op_attr symlink_attributes; > + nfspath3 data; > +}; > + > +struct READLINK3resfail { > + post_op_attr symlink_attributes; > +}; > + > +union READLINK3res switch (nfsstat3 status) { > +case NFS3_OK: > + READLINK3resok resok; > +default: > + READLINK3resfail resfail; > +}; > + > +struct READ3args { > + nfs_fh3 file; > + offset3 offset; > + count3 count; > +}; > + > +struct READ3resok { > + post_op_attr file_attributes; > + count3 count; > + bool eof; > + opaque data <>; > +}; > + > +struct READ3resfail { > + post_op_attr file_attributes; > +}; > + > +union READ3res switch (nfsstat3 status) { > +case NFS3_OK: > + READ3resok resok; > +default: > + READ3resfail resfail; > +}; > + > +enum stable_how { > + UNSTABLE = 0, > + DATA_SYNC = 1, > + FILE_SYNC = 2 > +}; > + > +struct WRITE3args { > + nfs_fh3 file; > + offset3 offset; > + count3 count; > + stable_how stable; > + opaque data <>; > +}; > + > +struct WRITE3resok { > + wcc_data file_wcc; > + count3 count; > + stable_how committed; > + writeverf3 verf; > +}; > + > +struct WRITE3resfail { > + wcc_data file_wcc; > +}; > + > +union WRITE3res switch (nfsstat3 status) { > +case NFS3_OK: > + WRITE3resok resok; > +default: > + WRITE3resfail resfail; > +}; > + > +enum createmode3 { > + UNCHECKED = 0, > + GUARDED = 1, > + EXCLUSIVE = 2 > +}; > + > +union createhow3 switch (createmode3 mode) { > +case UNCHECKED: > +case GUARDED: > + sattr3 obj_attributes; > +case EXCLUSIVE: > + createverf3 verf; > +}; > + > +struct CREATE3args { > + diropargs3 where; > + createhow3 how; > +}; > + > +struct CREATE3resok { > + post_op_fh3 obj; > + post_op_attr obj_attributes; > + wcc_data dir_wcc; > +}; > + > +struct CREATE3resfail { > + wcc_data dir_wcc; > +}; > + > +union CREATE3res switch (nfsstat3 status) { > +case NFS3_OK: > + CREATE3resok resok; > +default: > + CREATE3resfail resfail; > +}; > + > +struct MKDIR3args { > + diropargs3 where; > + sattr3 attributes; > +}; > + > +struct MKDIR3resok { > + post_op_fh3 obj; > + post_op_attr obj_attributes; > + wcc_data dir_wcc; > +}; > + > +struct MKDIR3resfail { > + wcc_data dir_wcc; > +}; > + > +union MKDIR3res switch (nfsstat3 status) { > +case NFS3_OK: > + MKDIR3resok resok; > +default: > + MKDIR3resfail resfail; > +}; > + > +struct symlinkdata3 { > + sattr3 symlink_attributes; > + nfspath3 symlink_data; > +}; > + > +struct SYMLINK3args { > + diropargs3 where; > + symlinkdata3 symlink; > +}; > + > +struct SYMLINK3resok { > + post_op_fh3 obj; > + post_op_attr obj_attributes; > + wcc_data dir_wcc; > +}; > + > +struct SYMLINK3resfail { > + wcc_data dir_wcc; > +}; > + > +union SYMLINK3res switch (nfsstat3 status) { > +case NFS3_OK: > + SYMLINK3resok resok; > +default: > + SYMLINK3resfail resfail; > +}; > + > +struct devicedata3 { > + sattr3 dev_attributes; > + specdata3 spec; > +}; > + > +union mknoddata3 switch (ftype3 type) { > +case NF3CHR: > +case NF3BLK: > + devicedata3 device; > +case NF3SOCK: > +case NF3FIFO: > + sattr3 pipe_attributes; > +default: > + void; > +}; > + > +struct MKNOD3args { > + diropargs3 where; > + mknoddata3 what; > +}; > + > +struct MKNOD3resok { > + post_op_fh3 obj; > + post_op_attr obj_attributes; > + wcc_data dir_wcc; > +}; > + > +struct MKNOD3resfail { > + wcc_data dir_wcc; > +}; > + > +union MKNOD3res switch (nfsstat3 status) { > +case NFS3_OK: > + MKNOD3resok resok; > +default: > + MKNOD3resfail resfail; > +}; > + > +struct REMOVE3args { > + diropargs3 object; > +}; > + > +struct REMOVE3resok { > + wcc_data dir_wcc; > +}; > + > +struct REMOVE3resfail { > + wcc_data dir_wcc; > +}; > + > +union REMOVE3res switch (nfsstat3 status) { > +case NFS3_OK: > + REMOVE3resok resok; > +default: > + REMOVE3resfail resfail; > +}; > + > +struct RMDIR3args { > + diropargs3 object; > +}; > + > +struct RMDIR3resok { > + wcc_data dir_wcc; > +}; > + > +struct RMDIR3resfail { > + wcc_data dir_wcc; > +}; > + > +union RMDIR3res switch (nfsstat3 status) { > +case NFS3_OK: > + RMDIR3resok resok; > +default: > + RMDIR3resfail resfail; > +}; > + > +struct RENAME3args { > + diropargs3 fromfile; > + diropargs3 tofile; > +}; > + > +struct RENAME3resok { > + wcc_data fromdir_wcc; > + wcc_data todir_wcc; > +}; > + > +struct RENAME3resfail { > + wcc_data fromdir_wcc; > + wcc_data todir_wcc; > +}; > + > +union RENAME3res switch (nfsstat3 status) { > +case NFS3_OK: > + RENAME3resok resok; > +default: > + RENAME3resfail resfail; > +}; > + > +struct LINK3args { > + nfs_fh3 file; > + diropargs3 link; > +}; > + > +struct LINK3resok { > + post_op_attr file_attributes; > + wcc_data linkdir_wcc; > +}; > + > +struct LINK3resfail { > + post_op_attr file_attributes; > + wcc_data linkdir_wcc; > +}; > + > +union LINK3res switch (nfsstat3 status) { > +case NFS3_OK: > + LINK3resok resok; > +default: > + LINK3resfail resfail; > +}; > + > +struct READDIR3args { > + nfs_fh3 dir; > + cookie3 cookie; > + cookieverf3 cookieverf; > + count3 count; > +}; > + > +struct entry3 { > + fileid3 fileid; > + filename3 name; > + cookie3 cookie; > + entry3 *nextentry; > +}; > + > +struct dirlist3 { > + entry3 *entries; > + bool eof; > +}; > + > +struct READDIR3resok { > + post_op_attr dir_attributes; > + cookieverf3 cookieverf; > + dirlist3 reply; > +}; > + > +struct READDIR3resfail { > + post_op_attr dir_attributes; > +}; > + > +union READDIR3res switch (nfsstat3 status) { > +case NFS3_OK: > + READDIR3resok resok; > +default: > + READDIR3resfail resfail; > +}; > + > +struct READDIRPLUS3args { > + nfs_fh3 dir; > + cookie3 cookie; > + cookieverf3 cookieverf; > + count3 dircount; > + count3 maxcount; > +}; > + > +struct entryplus3 { > + fileid3 fileid; > + filename3 name; > + cookie3 cookie; > + post_op_attr name_attributes; > + post_op_fh3 name_handle; > + entryplus3 *nextentry; > +}; > + > +struct dirlistplus3 { > + entryplus3 *entries; > + bool eof; > +}; > + > +struct READDIRPLUS3resok { > + post_op_attr dir_attributes; > + cookieverf3 cookieverf; > + dirlistplus3 reply; > +}; > + > +struct READDIRPLUS3resfail { > + post_op_attr dir_attributes; > +}; > + > +union READDIRPLUS3res switch (nfsstat3 status) { > +case NFS3_OK: > + READDIRPLUS3resok resok; > +default: > + READDIRPLUS3resfail resfail; > +}; > + > +struct FSSTAT3args { > + nfs_fh3 fsroot; > +}; > + > +struct FSSTAT3resok { > + post_op_attr obj_attributes; > + size3 tbytes; > + size3 fbytes; > + size3 abytes; > + size3 tfiles; > + size3 ffiles; > + size3 afiles; > + uint32 invarsec; > +}; > + > +struct FSSTAT3resfail { > + post_op_attr obj_attributes; > +}; > + > +union FSSTAT3res switch (nfsstat3 status) { > +case NFS3_OK: > + FSSTAT3resok resok; > +default: > + FSSTAT3resfail resfail; > +}; > + > +const FSF3_LINK = 0x0001; > +const FSF3_SYMLINK = 0x0002; > +const FSF3_HOMOGENEOUS = 0x0008; > +const FSF3_CANSETTIME = 0x0010; > + > +struct FSINFOargs { > + nfs_fh3 fsroot; > +}; > + > +struct FSINFO3resok { > + post_op_attr obj_attributes; > + uint32 rtmax; > + uint32 rtpref; > + uint32 rtmult; > + uint32 wtmax; > + uint32 wtpref; > + uint32 wtmult; > + uint32 dtpref; > + size3 maxfilesize; > + nfstime3 time_delta; > + uint32 properties; > +}; > + > +struct FSINFO3resfail { > + post_op_attr obj_attributes; > +}; > + > +union FSINFO3res switch (nfsstat3 status) { > +case NFS3_OK: > + FSINFO3resok resok; > +default: > + FSINFO3resfail resfail; > +}; > + > +struct PATHCONF3args { > + nfs_fh3 object; > +}; > + > +struct PATHCONF3resok { > + post_op_attr obj_attributes; > + uint32 linkmax; > + uint32 name_max; > + bool no_trunc; > + bool chown_restricted; > + bool case_insensitive; > + bool case_preserving; > +}; > + > +struct PATHCONF3resfail { > + post_op_attr obj_attributes; > +}; > + > +union PATHCONF3res switch (nfsstat3 status) { > +case NFS3_OK: > + PATHCONF3resok resok; > +default: > + PATHCONF3resfail resfail; > +}; > + > +struct COMMIT3args { > + nfs_fh3 file; > + offset3 offset; > + count3 count; > +}; > + > +struct COMMIT3resok { > + wcc_data file_wcc; > + writeverf3 verf; > +}; > + > +struct COMMIT3resfail { > + wcc_data file_wcc; > +}; > + > +union COMMIT3res switch (nfsstat3 status) { > +case NFS3_OK: > + COMMIT3resok resok; > +default: > + COMMIT3resfail resfail; > +}; > + > +program NFS_PROGRAM { > + version NFS_V3 { > + > + void > + NFSPROC3_NULL(void) = 0; > + > + GETATTR3res > + NFSPROC3_GETATTR(GETATTR3args) = 1; > + > + SETATTR3res > + NFSPROC3_SETATTR(SETATTR3args) = 2; > + > + LOOKUP3res > + NFSPROC3_LOOKUP(LOOKUP3args) = 3; > + > + ACCESS3res > + NFSPROC3_ACCESS(ACCESS3args) = 4; > + > + READLINK3res > + NFSPROC3_READLINK(READLINK3args) = 5; > + > + READ3res > + NFSPROC3_READ(READ3args) = 6; > + > + WRITE3res > + NFSPROC3_WRITE(WRITE3args) = 7; > + > + CREATE3res > + NFSPROC3_CREATE(CREATE3args) = 8; > + > + MKDIR3res > + NFSPROC3_MKDIR(MKDIR3args) = 9; > + > + SYMLINK3res > + NFSPROC3_SYMLINK(SYMLINK3args) = 10; > + > + MKNOD3res > + NFSPROC3_MKNOD(MKNOD3args) = 11; > + > + REMOVE3res > + NFSPROC3_REMOVE(REMOVE3args) = 12; > + > + RMDIR3res > + NFSPROC3_RMDIR(RMDIR3args) = 13; > + > + RENAME3res > + NFSPROC3_RENAME(RENAME3args) = 14; > + > + LINK3res > + NFSPROC3_LINK(LINK3args) = 15; > + > + READDIR3res > + NFSPROC3_READDIR(READDIR3args) = 16; > + > + READDIRPLUS3res > + NFSPROC3_READDIRPLUS(READDIRPLUS3args) = 17; > + > + FSSTAT3res > + NFSPROC3_FSSTAT(FSSTAT3args) = 18; > + > + FSINFO3res > + NFSPROC3_FSINFO(FSINFO3args) = 19; > + > + PATHCONF3res > + NFSPROC3_PATHCONF(PATHCONF3args) = 20; > + > + COMMIT3res > + NFSPROC3_COMMIT(COMMIT3args) = 21; > + } = 3; > +} = 100003; > diff --git a/nfs4.1/xdrdef/portmap.x b/nfs4.1/xdrdef/portmap.x > new file mode 100644 > index 0000000..1158d4e > --- /dev/null > +++ b/nfs4.1/xdrdef/portmap.x > @@ -0,0 +1,51 @@ > +const PMAP_PORT = 111; /* portmapper port number */ > + > +struct mapping { > + unsigned int prog; > + unsigned int vers; > + unsigned int prot; > + unsigned int port; > +}; > + > +const IPPROTO_TCP = 6; /* protocol number for TCP/IP */ > +const IPPROTO_UDP = 17; /* protocol number for UDP/IP */ > + > +struct pmaplist { > + mapping map; > + pmaplist next; > +}; > + > +struct call_args { > + unsigned int prog; > + unsigned int vers; > + unsigned int proc; > + opaque args<>; > +}; > + > +struct call_result { > + unsigned int port; > + opaque res<>; > +}; > + > +program PMAP_PROG { > + version PMAP_VERS { > + void > + PMAPPROC_NULL(void) = 0; > + > + bool > + PMAPPROC_SET(mapping) = 1; > + > + bool > + PMAPPROC_UNSET(mapping) = 2; > + > + unsigned int > + PMAPPROC_GETPORT(mapping) = 3; > + > + pmaplist > + PMAPPROC_DUMP(void) = 4; > + > + call_result > + PMAPPROC_CALLIT(call_args) = 5; > + } = 2; > +} = 100000; > + > -- > 1.8.5.2 (Apple Git-48) > -- To unsubscribe from this list: send the line "unsubscribe linux-nfs" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/nfs4.1/xdrdef/mnt3.x b/nfs4.1/xdrdef/mnt3.x new file mode 100644 index 0000000..b632322 --- /dev/null +++ b/nfs4.1/xdrdef/mnt3.x @@ -0,0 +1,68 @@ +const MNTPATHLEN = 1024; /* Maximum bytes in a path name */ +const MNTNAMLEN = 255; /* Maximum bytes in a name */ +const FHSIZE3 = 64; /* Maximum bytes in a V3 file handle */ + +typedef opaque fhandle3 <FHSIZE3>; +typedef string dirpath <MNTPATHLEN>; +typedef string name <MNTNAMLEN>; + +struct mountres3_ok { + fhandle3 fhandle; + int auth_flavors <>; +}; + +union mountres3 switch (mountstat3 fhs_status) { +case MNT3_OK: + mountres3_ok mountinfo; +default: + void; +}; + +struct mountbody { + name ml_hostname; + dirpath ml_directory; + mountlist ml_next; +}; + +typedef mountbody *mountlist; + + +struct groupnode { + name gr_name; + groups gr_next; +}; + +typedef groupnode *groups; + + +struct exportnode { + dirpath ex_dir; + groups ex_groups; + exports ex_next; +}; + +typedef exportnode *exports; + +enum mountstat3 { + MNT3_OK = 0, /* no error */ + MNT3ERR_PERM = 1, /* Not owner */ + MNT3ERR_NOENT = 2, /* No such file or directory */ + MNT3ERR_IO = 5, /* I/O error */ + MNT3ERR_ACCES = 13, /* Permission denied */ + MNT3ERR_NOTDIR = 20, /* Not a directory */ + MNT3ERR_INVAL = 22, /* Invalid argument */ + MNT3ERR_NAMETOOLONG = 63, /* Filename too long */ + MNT3ERR_NOTSUPP = 10004, /* Operation not supported */ + MNT3ERR_SERVERFAULT = 10006 /* A failure on the server */ +}; + +program MOUNT_PROGRAM { + version MOUNT_V3 { + void MOUNTPROC3_NULL(void) = 0; + mountres3 MOUNTPROC3_MNT(dirpath) = 1; + mountlist MOUNTPROC3_DUMP(void) = 2; + void MOUNTPROC3_UMNT(dirpath) = 3; + void MOUNTPROC3_UMNTALL(void) = 4; + exports MOUNTPROC3_EXPORT(void) = 5; + } = 3; +} = 100005; diff --git a/nfs4.1/xdrdef/nfs3.x b/nfs4.1/xdrdef/nfs3.x new file mode 100644 index 0000000..ddd1395 --- /dev/null +++ b/nfs4.1/xdrdef/nfs3.x @@ -0,0 +1,818 @@ +const NFS3_FHSIZE = 64; /* Maximum bytes in a V3 file handle */ + +const FALSE = 0; +const TRUE = 1; + +const NFS3_COOKIEVERFSIZE = 8; +const NFS3_CREATEVERFSIZE = 8; +const NFS3_WRITEVERFSIZE = 8; + +typedef unsigned hyper uint64; +typedef hyper int64; +typedef unsigned int uint32; +typedef int int32; +typedef string filename3 <>; +typedef string nfspath3 <>; +typedef uint64 fileid3; +typedef uint64 cookie3; +typedef opaque cookieverf3[NFS3_COOKIEVERFSIZE]; +typedef opaque createverf3[NFS3_CREATEVERFSIZE]; +typedef opaque writeverf3[NFS3_WRITEVERFSIZE]; +typedef uint32 uid3; +typedef uint32 gid3; +typedef uint64 size3; +typedef uint64 offset3; +typedef uint32 mode3; +typedef uint32 count3; + +enum nfsstat3 { + NFS3_OK = 0, + NFS3ERR_PERM = 1, + NFS3ERR_NOENT = 2, + NFS3ERR_IO = 5, + NFS3ERR_NXIO = 6, + NFS3ERR_ACCES = 13, + NFS3ERR_EXIST = 17, + NFS3ERR_XDEV = 18, + NFS3ERR_NODEV = 19, + NFS3ERR_NOTDIR = 20, + NFS3ERR_ISDIR = 21, + NFS3ERR_INVAL = 22, + NFS3ERR_FBIG = 27, + NFS3ERR_NOSPC = 28, + NFS3ERR_ROFS = 30, + NFS3ERR_MLINK = 31, + NFS3ERR_NAMETOOLONG = 63, + NFS3ERR_NOTEMPTY = 66, + NFS3ERR_DQUOT = 69, + NFS3ERR_STALE = 70, + NFS3ERR_REMOTE = 71, + NFS3ERR_BADHANDLE = 10001, + NFS3ERR_NOT_SYNC = 10002, + NFS3ERR_BAD_COOKIE = 10003, + NFS3ERR_NOTSUPP = 10004, + NFS3ERR_TOOSMALL = 10005, + NFS3ERR_SERVERFAULT = 10006, + NFS3ERR_BADTYPE = 10007, + NFS3ERR_JUKEBOX = 10008 +}; + +enum ftype3 { + NF3REG = 1, + NF3DIR = 2, + NF3BLK = 3, + NF3CHR = 4, + NF3LNK = 5, + NF3SOCK = 6, + NF3FIFO = 7 +}; + +struct specdata3 { + uint32 specdata1; + uint32 specdata2; +}; + +struct nfs_fh3 { + opaque data <NFS3_FHSIZE>; +}; + +struct nfstime3 { + uint32 seconds; + uint32 nseconds; +}; + +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; +}; + +union post_op_attr switch (bool attributes_follow) { +case TRUE: + fattr3 attributes; +case FALSE: + void; +}; + +struct wcc_attr { + size3 size; + nfstime3 mtime; + nfstime3 ctime; +}; + +union pre_op_attr switch (bool attributes_follow) { +case TRUE: + wcc_attr attributes; +case FALSE: + void; +}; + +struct wcc_data { + pre_op_attr before; + post_op_attr after; +}; + +union post_op_fh3 switch (bool handle_follows) { +case TRUE: + nfs_fh3 handle; +case FALSE: + void; +}; + +enum time_how { + DONT_CHANGE = 0, + SET_TO_SERVER_TIME = 1, + SET_TO_CLIENT_TIME = 2 +}; + +union set_mode3 switch (bool set_it) { +case TRUE: + mode3 mode; +default: + void; +}; + +union set_uid3 switch (bool set_it) { +case TRUE: + uid3 uid; +default: + void; +}; + +union set_gid3 switch (bool set_it) { +case TRUE: + gid3 gid; +default: + void; +}; + +union set_size3 switch (bool set_it) { +case TRUE: + size3 size; +default: + void; +}; + +union set_atime switch (time_how set_it) { +case SET_TO_CLIENT_TIME: + nfstime3 atime; +default: + void; +}; + +union set_mtime switch (time_how set_it) { +case SET_TO_CLIENT_TIME: + nfstime3 mtime; +default: + void; +}; + +struct sattr3 { + set_mode3 mode; + set_uid3 uid; + set_gid3 gid; + set_size3 size; + set_atime atime; + set_mtime mtime; +}; + +struct diropargs3 { + nfs_fh3 dir; + filename3 name; +}; + +struct GETATTR3args { + nfs_fh3 object; +}; + +struct GETATTR3resok { + fattr3 obj_attributes; +}; + +union GETATTR3res switch (nfsstat3 status) { +case NFS3_OK: + GETATTR3resok resok; +default: + void; +}; + +union sattrguard3 switch (bool check) { +case TRUE: + nfstime3 obj_ctime; +case FALSE: + void; +}; + +struct SETATTR3args { + nfs_fh3 object; + sattr3 new_attributes; + sattrguard3 guard; +}; + +struct SETATTR3resok { + wcc_data obj_wcc; +}; + +struct SETATTR3resfail { + wcc_data obj_wcc; +}; + +union SETATTR3res switch (nfsstat3 status) { +case NFS3_OK: + SETATTR3resok resok; +default: + SETATTR3resfail resfail; +}; + +struct LOOKUP3args { + diropargs3 what; +}; + +struct LOOKUP3resok { + nfs_fh3 object; + post_op_attr obj_attributes; + post_op_attr dir_attributes; +}; + +struct LOOKUP3resfail { + post_op_attr dir_attributes; +}; + +union LOOKUP3res switch (nfsstat3 status) { +case NFS3_OK: + LOOKUP3resok resok; +default: + LOOKUP3resfail resfail; +}; + +const ACCESS3_READ = 0x0001; +const ACCESS3_LOOKUP = 0x0002; +const ACCESS3_MODIFY = 0x0004; +const ACCESS3_EXTEND = 0x0008; +const ACCESS3_DELETE = 0x0010; +const ACCESS3_EXECUTE = 0x0020; + +struct ACCESS3args { + nfs_fh3 object; + uint32 access; +}; + +struct ACCESS3resok { + post_op_attr obj_attributes; + uint32 access; +}; + +struct ACCESS3resfail { + post_op_attr obj_attributes; +}; + +union ACCESS3res switch (nfsstat3 status) { +case NFS3_OK: + ACCESS3resok resok; +default: + ACCESS3resfail resfail; +}; + +struct READLINK3args { + nfs_fh3 symlink; +}; + +struct READLINK3resok { + post_op_attr symlink_attributes; + nfspath3 data; +}; + +struct READLINK3resfail { + post_op_attr symlink_attributes; +}; + +union READLINK3res switch (nfsstat3 status) { +case NFS3_OK: + READLINK3resok resok; +default: + READLINK3resfail resfail; +}; + +struct READ3args { + nfs_fh3 file; + offset3 offset; + count3 count; +}; + +struct READ3resok { + post_op_attr file_attributes; + count3 count; + bool eof; + opaque data <>; +}; + +struct READ3resfail { + post_op_attr file_attributes; +}; + +union READ3res switch (nfsstat3 status) { +case NFS3_OK: + READ3resok resok; +default: + READ3resfail resfail; +}; + +enum stable_how { + UNSTABLE = 0, + DATA_SYNC = 1, + FILE_SYNC = 2 +}; + +struct WRITE3args { + nfs_fh3 file; + offset3 offset; + count3 count; + stable_how stable; + opaque data <>; +}; + +struct WRITE3resok { + wcc_data file_wcc; + count3 count; + stable_how committed; + writeverf3 verf; +}; + +struct WRITE3resfail { + wcc_data file_wcc; +}; + +union WRITE3res switch (nfsstat3 status) { +case NFS3_OK: + WRITE3resok resok; +default: + WRITE3resfail resfail; +}; + +enum createmode3 { + UNCHECKED = 0, + GUARDED = 1, + EXCLUSIVE = 2 +}; + +union createhow3 switch (createmode3 mode) { +case UNCHECKED: +case GUARDED: + sattr3 obj_attributes; +case EXCLUSIVE: + createverf3 verf; +}; + +struct CREATE3args { + diropargs3 where; + createhow3 how; +}; + +struct CREATE3resok { + post_op_fh3 obj; + post_op_attr obj_attributes; + wcc_data dir_wcc; +}; + +struct CREATE3resfail { + wcc_data dir_wcc; +}; + +union CREATE3res switch (nfsstat3 status) { +case NFS3_OK: + CREATE3resok resok; +default: + CREATE3resfail resfail; +}; + +struct MKDIR3args { + diropargs3 where; + sattr3 attributes; +}; + +struct MKDIR3resok { + post_op_fh3 obj; + post_op_attr obj_attributes; + wcc_data dir_wcc; +}; + +struct MKDIR3resfail { + wcc_data dir_wcc; +}; + +union MKDIR3res switch (nfsstat3 status) { +case NFS3_OK: + MKDIR3resok resok; +default: + MKDIR3resfail resfail; +}; + +struct symlinkdata3 { + sattr3 symlink_attributes; + nfspath3 symlink_data; +}; + +struct SYMLINK3args { + diropargs3 where; + symlinkdata3 symlink; +}; + +struct SYMLINK3resok { + post_op_fh3 obj; + post_op_attr obj_attributes; + wcc_data dir_wcc; +}; + +struct SYMLINK3resfail { + wcc_data dir_wcc; +}; + +union SYMLINK3res switch (nfsstat3 status) { +case NFS3_OK: + SYMLINK3resok resok; +default: + SYMLINK3resfail resfail; +}; + +struct devicedata3 { + sattr3 dev_attributes; + specdata3 spec; +}; + +union mknoddata3 switch (ftype3 type) { +case NF3CHR: +case NF3BLK: + devicedata3 device; +case NF3SOCK: +case NF3FIFO: + sattr3 pipe_attributes; +default: + void; +}; + +struct MKNOD3args { + diropargs3 where; + mknoddata3 what; +}; + +struct MKNOD3resok { + post_op_fh3 obj; + post_op_attr obj_attributes; + wcc_data dir_wcc; +}; + +struct MKNOD3resfail { + wcc_data dir_wcc; +}; + +union MKNOD3res switch (nfsstat3 status) { +case NFS3_OK: + MKNOD3resok resok; +default: + MKNOD3resfail resfail; +}; + +struct REMOVE3args { + diropargs3 object; +}; + +struct REMOVE3resok { + wcc_data dir_wcc; +}; + +struct REMOVE3resfail { + wcc_data dir_wcc; +}; + +union REMOVE3res switch (nfsstat3 status) { +case NFS3_OK: + REMOVE3resok resok; +default: + REMOVE3resfail resfail; +}; + +struct RMDIR3args { + diropargs3 object; +}; + +struct RMDIR3resok { + wcc_data dir_wcc; +}; + +struct RMDIR3resfail { + wcc_data dir_wcc; +}; + +union RMDIR3res switch (nfsstat3 status) { +case NFS3_OK: + RMDIR3resok resok; +default: + RMDIR3resfail resfail; +}; + +struct RENAME3args { + diropargs3 fromfile; + diropargs3 tofile; +}; + +struct RENAME3resok { + wcc_data fromdir_wcc; + wcc_data todir_wcc; +}; + +struct RENAME3resfail { + wcc_data fromdir_wcc; + wcc_data todir_wcc; +}; + +union RENAME3res switch (nfsstat3 status) { +case NFS3_OK: + RENAME3resok resok; +default: + RENAME3resfail resfail; +}; + +struct LINK3args { + nfs_fh3 file; + diropargs3 link; +}; + +struct LINK3resok { + post_op_attr file_attributes; + wcc_data linkdir_wcc; +}; + +struct LINK3resfail { + post_op_attr file_attributes; + wcc_data linkdir_wcc; +}; + +union LINK3res switch (nfsstat3 status) { +case NFS3_OK: + LINK3resok resok; +default: + LINK3resfail resfail; +}; + +struct READDIR3args { + nfs_fh3 dir; + cookie3 cookie; + cookieverf3 cookieverf; + count3 count; +}; + +struct entry3 { + fileid3 fileid; + filename3 name; + cookie3 cookie; + entry3 *nextentry; +}; + +struct dirlist3 { + entry3 *entries; + bool eof; +}; + +struct READDIR3resok { + post_op_attr dir_attributes; + cookieverf3 cookieverf; + dirlist3 reply; +}; + +struct READDIR3resfail { + post_op_attr dir_attributes; +}; + +union READDIR3res switch (nfsstat3 status) { +case NFS3_OK: + READDIR3resok resok; +default: + READDIR3resfail resfail; +}; + +struct READDIRPLUS3args { + nfs_fh3 dir; + cookie3 cookie; + cookieverf3 cookieverf; + count3 dircount; + count3 maxcount; +}; + +struct entryplus3 { + fileid3 fileid; + filename3 name; + cookie3 cookie; + post_op_attr name_attributes; + post_op_fh3 name_handle; + entryplus3 *nextentry; +}; + +struct dirlistplus3 { + entryplus3 *entries; + bool eof; +}; + +struct READDIRPLUS3resok { + post_op_attr dir_attributes; + cookieverf3 cookieverf; + dirlistplus3 reply; +}; + +struct READDIRPLUS3resfail { + post_op_attr dir_attributes; +}; + +union READDIRPLUS3res switch (nfsstat3 status) { +case NFS3_OK: + READDIRPLUS3resok resok; +default: + READDIRPLUS3resfail resfail; +}; + +struct FSSTAT3args { + nfs_fh3 fsroot; +}; + +struct FSSTAT3resok { + post_op_attr obj_attributes; + size3 tbytes; + size3 fbytes; + size3 abytes; + size3 tfiles; + size3 ffiles; + size3 afiles; + uint32 invarsec; +}; + +struct FSSTAT3resfail { + post_op_attr obj_attributes; +}; + +union FSSTAT3res switch (nfsstat3 status) { +case NFS3_OK: + FSSTAT3resok resok; +default: + FSSTAT3resfail resfail; +}; + +const FSF3_LINK = 0x0001; +const FSF3_SYMLINK = 0x0002; +const FSF3_HOMOGENEOUS = 0x0008; +const FSF3_CANSETTIME = 0x0010; + +struct FSINFOargs { + nfs_fh3 fsroot; +}; + +struct FSINFO3resok { + post_op_attr obj_attributes; + uint32 rtmax; + uint32 rtpref; + uint32 rtmult; + uint32 wtmax; + uint32 wtpref; + uint32 wtmult; + uint32 dtpref; + size3 maxfilesize; + nfstime3 time_delta; + uint32 properties; +}; + +struct FSINFO3resfail { + post_op_attr obj_attributes; +}; + +union FSINFO3res switch (nfsstat3 status) { +case NFS3_OK: + FSINFO3resok resok; +default: + FSINFO3resfail resfail; +}; + +struct PATHCONF3args { + nfs_fh3 object; +}; + +struct PATHCONF3resok { + post_op_attr obj_attributes; + uint32 linkmax; + uint32 name_max; + bool no_trunc; + bool chown_restricted; + bool case_insensitive; + bool case_preserving; +}; + +struct PATHCONF3resfail { + post_op_attr obj_attributes; +}; + +union PATHCONF3res switch (nfsstat3 status) { +case NFS3_OK: + PATHCONF3resok resok; +default: + PATHCONF3resfail resfail; +}; + +struct COMMIT3args { + nfs_fh3 file; + offset3 offset; + count3 count; +}; + +struct COMMIT3resok { + wcc_data file_wcc; + writeverf3 verf; +}; + +struct COMMIT3resfail { + wcc_data file_wcc; +}; + +union COMMIT3res switch (nfsstat3 status) { +case NFS3_OK: + COMMIT3resok resok; +default: + COMMIT3resfail resfail; +}; + +program NFS_PROGRAM { + version NFS_V3 { + + void + NFSPROC3_NULL(void) = 0; + + GETATTR3res + NFSPROC3_GETATTR(GETATTR3args) = 1; + + SETATTR3res + NFSPROC3_SETATTR(SETATTR3args) = 2; + + LOOKUP3res + NFSPROC3_LOOKUP(LOOKUP3args) = 3; + + ACCESS3res + NFSPROC3_ACCESS(ACCESS3args) = 4; + + READLINK3res + NFSPROC3_READLINK(READLINK3args) = 5; + + READ3res + NFSPROC3_READ(READ3args) = 6; + + WRITE3res + NFSPROC3_WRITE(WRITE3args) = 7; + + CREATE3res + NFSPROC3_CREATE(CREATE3args) = 8; + + MKDIR3res + NFSPROC3_MKDIR(MKDIR3args) = 9; + + SYMLINK3res + NFSPROC3_SYMLINK(SYMLINK3args) = 10; + + MKNOD3res + NFSPROC3_MKNOD(MKNOD3args) = 11; + + REMOVE3res + NFSPROC3_REMOVE(REMOVE3args) = 12; + + RMDIR3res + NFSPROC3_RMDIR(RMDIR3args) = 13; + + RENAME3res + NFSPROC3_RENAME(RENAME3args) = 14; + + LINK3res + NFSPROC3_LINK(LINK3args) = 15; + + READDIR3res + NFSPROC3_READDIR(READDIR3args) = 16; + + READDIRPLUS3res + NFSPROC3_READDIRPLUS(READDIRPLUS3args) = 17; + + FSSTAT3res + NFSPROC3_FSSTAT(FSSTAT3args) = 18; + + FSINFO3res + NFSPROC3_FSINFO(FSINFO3args) = 19; + + PATHCONF3res + NFSPROC3_PATHCONF(PATHCONF3args) = 20; + + COMMIT3res + NFSPROC3_COMMIT(COMMIT3args) = 21; + } = 3; +} = 100003; diff --git a/nfs4.1/xdrdef/portmap.x b/nfs4.1/xdrdef/portmap.x new file mode 100644 index 0000000..1158d4e --- /dev/null +++ b/nfs4.1/xdrdef/portmap.x @@ -0,0 +1,51 @@ +const PMAP_PORT = 111; /* portmapper port number */ + +struct mapping { + unsigned int prog; + unsigned int vers; + unsigned int prot; + unsigned int port; +}; + +const IPPROTO_TCP = 6; /* protocol number for TCP/IP */ +const IPPROTO_UDP = 17; /* protocol number for UDP/IP */ + +struct pmaplist { + mapping map; + pmaplist next; +}; + +struct call_args { + unsigned int prog; + unsigned int vers; + unsigned int proc; + opaque args<>; +}; + +struct call_result { + unsigned int port; + opaque res<>; +}; + +program PMAP_PROG { + version PMAP_VERS { + void + PMAPPROC_NULL(void) = 0; + + bool + PMAPPROC_SET(mapping) = 1; + + bool + PMAPPROC_UNSET(mapping) = 2; + + unsigned int + PMAPPROC_GETPORT(mapping) = 3; + + pmaplist + PMAPPROC_DUMP(void) = 4; + + call_result + PMAPPROC_CALLIT(call_args) = 5; + } = 2; +} = 100000; +
mntv3 and nfsv3 .x files made from IETF specs by Tom Haynes <thomas.haynes@primarydata.com>. portmap2 .x files made from IETF specs by Weston Andros Adamson <dros@primarydata.com>. Signed-off-by: Weston Andros Adamson <dros@primarydata.com> --- nfs4.1/xdrdef/mnt3.x | 68 ++++ nfs4.1/xdrdef/nfs3.x | 818 ++++++++++++++++++++++++++++++++++++++++++++++++ nfs4.1/xdrdef/portmap.x | 51 +++ 3 files changed, 937 insertions(+) create mode 100644 nfs4.1/xdrdef/mnt3.x create mode 100644 nfs4.1/xdrdef/nfs3.x create mode 100644 nfs4.1/xdrdef/portmap.x