diff mbox

[pynfs,v2,11/16] add mntv3, portmapv2 and nfsv3 .x files

Message ID 1401976544-36374-12-git-send-email-dros@primarydata.com (mailing list archive)
State New, archived
Headers show

Commit Message

Weston Andros Adamson June 5, 2014, 1:55 p.m. UTC
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
diff mbox

Patch

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;
+