plan9fox/sys/include/nfs3.h
2011-03-30 19:35:09 +03:00

811 lines
15 KiB
C

/*
* NFS mounter V3; see RFC 1813
*/
#pragma lib "libsunrpc.a"
#pragma src "/sys/src/libsunrpc"
enum {
NfsMount1HandleSize = 32,
NfsMount3MaxPathSize = 1024,
NfsMount3MaxNameSize = 255,
NfsMount3MaxHandleSize = 64,
NfsMount3Program = 100005,
NfsMount3Version = 3,
NfsMount1Program = 100005,
NfsMount1Version = 1
};
typedef struct NfsMount3TNull NfsMount3TNull;
typedef struct NfsMount3RNull NfsMount3RNull;
typedef struct NfsMount3TMnt NfsMount3TMnt;
typedef struct NfsMount3RMnt NfsMount3RMnt;
typedef struct NfsMount3TDump NfsMount3TDump;
typedef struct NfsMount3Entry NfsMount3Entry;
typedef struct NfsMount3RDump NfsMount3RDump;
typedef struct NfsMount3TUmnt NfsMount3TUmnt;
typedef struct NfsMount3RUmnt NfsMount3RUmnt;
typedef struct NfsMount3Export NfsMount3Export;
typedef struct NfsMount3TUmntall NfsMount3TUmntall;
typedef struct NfsMount3RUmntall NfsMount3RUmntall;
typedef struct NfsMount3TExport NfsMount3TExport;
typedef struct NfsMount3RExport NfsMount3RExport;
typedef enum
{
NfsMount3CallTNull,
NfsMount3CallRNull,
NfsMount3CallTMnt,
NfsMount3CallRMnt,
NfsMount3CallTDump,
NfsMount3CallRDump,
NfsMount3CallTUmnt,
NfsMount3CallRUmnt,
NfsMount3CallTUmntall,
NfsMount3CallRUmntall,
NfsMount3CallTExport,
NfsMount3CallRExport
} NfsMount3CallType;
typedef struct NfsMount3Call NfsMount3Call;
struct NfsMount3Call {
SunRpc rpc;
NfsMount3CallType type;
};
struct NfsMount3TNull {
NfsMount3Call call;
};
struct NfsMount3RNull {
NfsMount3Call call;
};
struct NfsMount3TMnt {
NfsMount3Call call;
char *path;
};
struct NfsMount3RMnt {
NfsMount3Call call;
uint status;
uchar *handle;
uint len;
u32int *auth;
u32int nauth;
};
struct NfsMount3TDump {
NfsMount3Call call;
};
struct NfsMount3Entry {
char *host;
char *path;
};
struct NfsMount3RDump {
NfsMount3Call call;
uchar *data;
u32int count;
};
struct NfsMount3TUmnt {
NfsMount3Call call;
char *path;
};
struct NfsMount3RUmnt {
NfsMount3Call call;
};
struct NfsMount3Export {
char *path;
char **g;
u32int ng;
};
struct NfsMount3TUmntall {
NfsMount3Call call;
};
struct NfsMount3RUmntall {
NfsMount3Call call;
};
struct NfsMount3TExport {
NfsMount3Call call;
};
struct NfsMount3RExport {
NfsMount3Call call;
uchar *data;
u32int count;
};
uint nfsMount3ExportGroupSize(uchar*);
uint nfsMount3ExportSize(NfsMount3Export*);
int nfsMount3ExportPack(uchar*, uchar*, uchar**, NfsMount3Export*);
int nfsMount3ExportUnpack(uchar*, uchar*, uchar**, char**, char***, NfsMount3Export*);
int nfsMount3EntryPack(uchar*, uchar*, uchar**, NfsMount3Entry*);
int nfsMount3EntryUnpack(uchar*, uchar*, uchar**, NfsMount3Entry*);
uint nfsMount3EntrySize(NfsMount3Entry*);
extern SunProg nfsMount3Prog;
/*
* NFS V3; see RFC 1813
*/
enum {
Nfs3MaxHandleSize = 64,
Nfs3CookieVerfSize = 8,
Nfs3CreateVerfSize = 8,
Nfs3WriteVerfSize = 8,
Nfs3AccessRead = 1,
Nfs3AccessLookup = 2,
Nfs3AccessModify = 4,
Nfs3AccessExtend = 8,
Nfs3AccessDelete = 16,
Nfs3AccessExecute = 32,
Nfs3FsHasLinks = 1,
Nfs3FsHasSymlinks = 2,
Nfs3FsHomogeneous = 8,
Nfs3FsCanSetTime = 16,
Nfs3Version = 3,
Nfs3Program = 100003,
};
typedef enum
{
Nfs3Ok = 0,
Nfs3ErrNotOwner = 1,
Nfs3ErrNoEnt = 2,
Nfs3ErrIo = 5,
Nfs3ErrNxio = 6,
Nfs3ErrNoMem = 12,
Nfs3ErrAcces = 13,
Nfs3ErrExist = 17,
Nfs3ErrXDev = 18,
Nfs3ErrNoDev = 19,
Nfs3ErrNotDir = 20,
Nfs3ErrIsDir = 21,
Nfs3ErrInval = 22,
Nfs3ErrFbig = 27,
Nfs3ErrNoSpc = 28,
Nfs3ErrRoFs = 30,
Nfs3ErrMLink = 31,
Nfs3ErrNameTooLong = 63,
Nfs3ErrNotEmpty = 66,
Nfs3ErrDQuot = 69,
Nfs3ErrStale = 70,
Nfs3ErrRemote = 71,
Nfs3ErrBadHandle = 10001,
Nfs3ErrNotSync = 10002,
Nfs3ErrBadCookie = 10003,
Nfs3ErrNotSupp = 10004,
Nfs3ErrTooSmall = 10005,
Nfs3ErrServerFault = 10006,
Nfs3ErrBadType = 10007,
Nfs3ErrJukebox = 10008,
Nfs3ErrFprintNotFound = 10009,
Nfs3ErrAborted = 10010,
} Nfs3Status;
void nfs3Errstr(Nfs3Status);
typedef enum
{
Nfs3FileReg = 1,
Nfs3FileDir = 2,
Nfs3FileBlock = 3,
Nfs3FileChar = 4,
Nfs3FileSymlink = 5,
Nfs3FileSocket = 6,
Nfs3FileFifo = 7,
} Nfs3FileType;
enum
{
Nfs3ModeSetUid = 0x800,
Nfs3ModeSetGid = 0x400,
Nfs3ModeSticky = 0x200,
};
typedef enum
{
Nfs3CallTNull,
Nfs3CallRNull,
Nfs3CallTGetattr,
Nfs3CallRGetattr,
Nfs3CallTSetattr,
Nfs3CallRSetattr,
Nfs3CallTLookup,
Nfs3CallRLookup,
Nfs3CallTAccess,
Nfs3CallRAccess,
Nfs3CallTReadlink,
Nfs3CallRReadlink,
Nfs3CallTRead,
Nfs3CallRRead,
Nfs3CallTWrite,
Nfs3CallRWrite,
Nfs3CallTCreate,
Nfs3CallRCreate,
Nfs3CallTMkdir,
Nfs3CallRMkdir,
Nfs3CallTSymlink,
Nfs3CallRSymlink,
Nfs3CallTMknod,
Nfs3CallRMknod,
Nfs3CallTRemove,
Nfs3CallRRemove,
Nfs3CallTRmdir,
Nfs3CallRRmdir,
Nfs3CallTRename,
Nfs3CallRRename,
Nfs3CallTLink,
Nfs3CallRLink,
Nfs3CallTReadDir,
Nfs3CallRReadDir,
Nfs3CallTReadDirPlus,
Nfs3CallRReadDirPlus,
Nfs3CallTFsStat,
Nfs3CallRFsStat,
Nfs3CallTFsInfo,
Nfs3CallRFsInfo,
Nfs3CallTPathconf,
Nfs3CallRPathconf,
Nfs3CallTCommit,
Nfs3CallRCommit,
} Nfs3CallType;
typedef struct Nfs3Call Nfs3Call;
typedef struct Nfs3Handle Nfs3Handle;
typedef struct Nfs3Time Nfs3Time;
typedef struct Nfs3Attr Nfs3Attr;
typedef struct Nfs3WccAttr Nfs3WccAttr;
typedef struct Nfs3Wcc Nfs3Wcc;
typedef enum
{
Nfs3SetTimeDont = 0,
Nfs3SetTimeServer = 1,
Nfs3SetTimeClient = 2,
} Nfs3SetTime;
typedef struct Nfs3SetAttr Nfs3SetAttr;
typedef struct Nfs3TNull Nfs3TNull;
typedef struct Nfs3RNull Nfs3RNull;
typedef struct Nfs3TGetattr Nfs3TGetattr;
typedef struct Nfs3RGetattr Nfs3RGetattr;
typedef struct Nfs3TSetattr Nfs3TSetattr;
typedef struct Nfs3RSetattr Nfs3RSetattr;
typedef struct Nfs3TLookup Nfs3TLookup;
typedef struct Nfs3RLookup Nfs3RLookup;
typedef struct Nfs3TAccess Nfs3TAccess;
typedef struct Nfs3RAccess Nfs3RAccess;
typedef struct Nfs3TReadlink Nfs3TReadlink;
typedef struct Nfs3RReadlink Nfs3RReadlink;
typedef struct Nfs3TRead Nfs3TRead;
typedef struct Nfs3RRead Nfs3RRead;
typedef enum
{
Nfs3SyncNone = 0,
Nfs3SyncData = 1,
Nfs3SyncFile = 2,
} Nfs3Sync;
typedef struct Nfs3TWrite Nfs3TWrite;
typedef struct Nfs3RWrite Nfs3RWrite;
typedef enum
{
Nfs3CreateUnchecked = 0,
Nfs3CreateGuarded = 1,
Nfs3CreateExclusive = 2,
} Nfs3Create;
typedef struct Nfs3TCreate Nfs3TCreate;
typedef struct Nfs3RCreate Nfs3RCreate;
typedef struct Nfs3TMkdir Nfs3TMkdir;
typedef struct Nfs3RMkdir Nfs3RMkdir;
typedef struct Nfs3TSymlink Nfs3TSymlink;
typedef struct Nfs3RSymlink Nfs3RSymlink;
typedef struct Nfs3TMknod Nfs3TMknod;
typedef struct Nfs3RMknod Nfs3RMknod;
typedef struct Nfs3TRemove Nfs3TRemove;
typedef struct Nfs3RRemove Nfs3RRemove;
typedef struct Nfs3TRmdir Nfs3TRmdir;
typedef struct Nfs3RRmdir Nfs3RRmdir;
typedef struct Nfs3TRename Nfs3TRename;
typedef struct Nfs3RRename Nfs3RRename;
typedef struct Nfs3TLink Nfs3TLink;
typedef struct Nfs3RLink Nfs3RLink;
typedef struct Nfs3TReadDir Nfs3TReadDir;
typedef struct Nfs3Entry Nfs3Entry;
typedef struct Nfs3RReadDir Nfs3RReadDir;
typedef struct Nfs3TReadDirPlus Nfs3TReadDirPlus;
typedef struct Nfs3EntryPlus Nfs3EntryPlus;
typedef struct Nfs3RReadDirPlus Nfs3RReadDirPlus;
typedef struct Nfs3TFsStat Nfs3TFsStat;
typedef struct Nfs3RFsStat Nfs3RFsStat;
typedef struct Nfs3TFsInfo Nfs3TFsInfo;
typedef struct Nfs3RFsInfo Nfs3RFsInfo;
typedef struct Nfs3TPathconf Nfs3TPathconf;
typedef struct Nfs3RPathconf Nfs3RPathconf;
typedef struct Nfs3TCommit Nfs3TCommit;
typedef struct Nfs3RCommit Nfs3RCommit;
struct Nfs3Call {
SunRpc rpc;
Nfs3CallType type;
};
struct Nfs3Handle {
uchar h[Nfs3MaxHandleSize];
u32int len;
};
struct Nfs3Time {
u32int sec;
u32int nsec;
};
struct Nfs3Attr {
Nfs3FileType type;
u32int mode;
u32int nlink;
u32int uid;
u32int gid;
u64int size;
u64int used;
u32int major;
u32int minor;
u64int fsid;
u64int fileid;
Nfs3Time atime;
Nfs3Time mtime;
Nfs3Time ctime;
};
struct Nfs3WccAttr {
u64int size;
Nfs3Time mtime;
Nfs3Time ctime;
};
struct Nfs3Wcc {
u1int haveWccAttr;
Nfs3WccAttr wccAttr;
u1int haveAttr;
Nfs3Attr attr;
};
struct Nfs3SetAttr {
u1int setMode;
u32int mode;
u1int setUid;
u32int uid;
u1int setGid;
u32int gid;
u1int setSize;
u64int size;
Nfs3SetTime setAtime;
Nfs3Time atime;
Nfs3SetTime setMtime;
Nfs3Time mtime;
};
struct Nfs3TNull {
Nfs3Call call;
};
struct Nfs3RNull {
Nfs3Call call;
};
struct Nfs3TGetattr {
Nfs3Call call;
Nfs3Handle handle;
};
struct Nfs3RGetattr {
Nfs3Call call;
Nfs3Status status;
Nfs3Attr attr;
};
struct Nfs3TSetattr {
Nfs3Call call;
Nfs3Handle handle;
Nfs3SetAttr attr;
u1int checkCtime;
Nfs3Time ctime;
};
struct Nfs3RSetattr {
Nfs3Call call;
Nfs3Status status;
Nfs3Wcc wcc;
};
struct Nfs3TLookup {
Nfs3Call call;
Nfs3Handle handle;
char *name;
};
struct Nfs3RLookup {
Nfs3Call call;
Nfs3Status status;
Nfs3Handle handle;
u1int haveAttr;
Nfs3Attr attr;
u1int haveDirAttr;
Nfs3Attr dirAttr;
};
struct Nfs3TAccess {
Nfs3Call call;
Nfs3Handle handle;
u32int access;
};
struct Nfs3RAccess {
Nfs3Call call;
Nfs3Status status;
u1int haveAttr;
Nfs3Attr attr;
u32int access;
};
struct Nfs3TReadlink {
Nfs3Call call;
Nfs3Handle handle;
};
struct Nfs3RReadlink {
Nfs3Call call;
Nfs3Status status;
u1int haveAttr;
Nfs3Attr attr;
char *data;
};
struct Nfs3TRead {
Nfs3Call call;
Nfs3Handle handle;
u64int offset;
u32int count;
};
struct Nfs3RRead {
Nfs3Call call;
Nfs3Status status;
u1int haveAttr;
Nfs3Attr attr;
u32int count;
u1int eof;
uchar *data;
u32int ndata;
};
struct Nfs3TWrite {
Nfs3Call call;
Nfs3Handle handle;
u64int offset;
u32int count;
Nfs3Sync stable;
uchar *data;
u32int ndata;
};
struct Nfs3RWrite {
Nfs3Call call;
Nfs3Status status;
Nfs3Wcc wcc;
u32int count;
Nfs3Sync committed;
uchar verf[Nfs3WriteVerfSize];
};
struct Nfs3TCreate {
Nfs3Call call;
Nfs3Handle handle;
char *name;
Nfs3Create mode;
Nfs3SetAttr attr;
uchar verf[Nfs3CreateVerfSize];
};
struct Nfs3RCreate {
Nfs3Call call;
Nfs3Status status;
u1int haveHandle;
Nfs3Handle handle;
u1int haveAttr;
Nfs3Attr attr;
Nfs3Wcc dirWcc;
};
struct Nfs3TMkdir {
Nfs3Call call;
Nfs3Handle handle;
char *name;
Nfs3SetAttr attr;
};
struct Nfs3RMkdir {
Nfs3Call call;
Nfs3Status status;
u1int haveHandle;
Nfs3Handle handle;
u1int haveAttr;
Nfs3Attr attr;
Nfs3Wcc dirWcc;
};
struct Nfs3TSymlink {
Nfs3Call call;
Nfs3Handle handle;
char *name;
Nfs3SetAttr attr;
char *data;
};
struct Nfs3RSymlink {
Nfs3Call call;
Nfs3Status status;
u1int haveHandle;
Nfs3Handle handle;
u1int haveAttr;
Nfs3Attr attr;
Nfs3Wcc dirWcc;
};
struct Nfs3TMknod {
Nfs3Call call;
Nfs3Handle handle;
char *name;
Nfs3FileType type;
Nfs3SetAttr attr;
u32int major;
u32int minor;
};
struct Nfs3RMknod {
Nfs3Call call;
Nfs3Status status;
u1int haveHandle;
Nfs3Handle handle;
u1int haveAttr;
Nfs3Attr attr;
Nfs3Wcc dirWcc;
};
struct Nfs3TRemove {
Nfs3Call call;
Nfs3Handle handle;
char *name;
};
struct Nfs3RRemove {
Nfs3Call call;
Nfs3Status status;
Nfs3Wcc wcc;
};
struct Nfs3TRmdir {
Nfs3Call call;
Nfs3Handle handle;
char *name;
};
struct Nfs3RRmdir {
Nfs3Call call;
Nfs3Status status;
Nfs3Wcc wcc;
};
struct Nfs3TRename {
Nfs3Call call;
struct {
Nfs3Handle handle;
char *name;
} from;
struct {
Nfs3Handle handle;
char *name;
} to;
};
struct Nfs3RRename {
Nfs3Call call;
Nfs3Status status;
Nfs3Wcc fromWcc;
Nfs3Wcc toWcc;
};
struct Nfs3TLink {
Nfs3Call call;
Nfs3Handle handle;
struct {
Nfs3Handle handle;
char *name;
} link;
};
struct Nfs3RLink {
Nfs3Call call;
Nfs3Status status;
u1int haveAttr;
Nfs3Attr attr;
Nfs3Wcc dirWcc;
};
struct Nfs3TReadDir {
Nfs3Call call;
Nfs3Handle handle;
u64int cookie;
uchar verf[Nfs3CookieVerfSize];
u32int count;
};
struct Nfs3RReadDir {
Nfs3Call call;
Nfs3Status status;
u1int haveAttr;
Nfs3Attr attr;
uchar verf[Nfs3CookieVerfSize];
uchar *data;
u32int count;
u1int eof;
};
struct Nfs3TReadDirPlus {
Nfs3Call call;
Nfs3Handle handle;
u64int cookie;
uchar verf[Nfs3CookieVerfSize];
u32int dirCount;
u32int maxCount;
};
struct Nfs3Entry {
u64int fileid;
char *name;
u64int cookie;
u1int haveAttr;
Nfs3Attr attr;
u1int haveHandle;
Nfs3Handle handle;
};
struct Nfs3RReadDirPlus {
Nfs3Call call;
Nfs3Status status;
u1int haveAttr;
Nfs3Attr attr;
uchar verf[Nfs3CookieVerfSize];
uchar *data;
u32int count;
u1int eof;
};
struct Nfs3TFsStat {
Nfs3Call call;
Nfs3Handle handle;
};
struct Nfs3RFsStat {
Nfs3Call call;
Nfs3Status status;
u1int haveAttr;
Nfs3Attr attr;
u64int totalBytes;
u64int freeBytes;
u64int availBytes;
u64int totalFiles;
u64int freeFiles;
u64int availFiles;
u32int invarSec;
};
struct Nfs3TFsInfo {
Nfs3Call call;
Nfs3Handle handle;
};
struct Nfs3RFsInfo {
Nfs3Call call;
Nfs3Status status;
u1int haveAttr;
Nfs3Attr attr;
u32int readMax;
u32int readPref;
u32int readMult;
u32int writeMax;
u32int writePref;
u32int writeMult;
u32int readDirPref;
u64int maxFileSize;
Nfs3Time timePrec;
u32int flags;
};
struct Nfs3TPathconf {
Nfs3Call call;
Nfs3Handle handle;
};
struct Nfs3RPathconf {
Nfs3Call call;
Nfs3Status status;
u1int haveAttr;
Nfs3Attr attr;
u32int maxLink;
u32int maxName;
u1int noTrunc;
u1int chownRestricted;
u1int caseInsensitive;
u1int casePreserving;
};
struct Nfs3TCommit {
Nfs3Call call;
Nfs3Handle handle;
u64int offset;
u32int count;
};
struct Nfs3RCommit {
Nfs3Call call;
Nfs3Status status;
Nfs3Wcc wcc;
uchar verf[Nfs3WriteVerfSize];
};
char *nfs3StatusStr(Nfs3Status);
char *nfs3TypeStr(Nfs3CallType);
char *nfs3SetTimeStr(Nfs3SetTime);
char *nfs3SyncStr(Nfs3Sync);
void nfs3HandlePrint(Fmt*, Nfs3Handle*);
u32int nfs3HandleSize(Nfs3Handle*);
int nfs3HandlePack(uchar*, uchar*, uchar**, Nfs3Handle*);
int nfs3HandleUnpack(uchar*, uchar*, uchar**, Nfs3Handle*);
void nfs3TimePrint(Fmt*, Nfs3Time*);
u32int nfs3TimeSize(Nfs3Time*);
int nfs3TimePack(uchar*, uchar*, uchar**, Nfs3Time*);
int nfs3TimeUnpack(uchar*, uchar*, uchar**, Nfs3Time*);
void nfs3AttrPrint(Fmt*, Nfs3Attr*);
u32int nfs3AttrSize(Nfs3Attr*);
int nfs3AttrPack(uchar*, uchar*, uchar**, Nfs3Attr*);
int nfs3AttrUnpack(uchar*, uchar*, uchar**, Nfs3Attr*);
void nfs3WccAttrPrint(Fmt*, Nfs3WccAttr*);
u32int nfs3WccAttrSize(Nfs3WccAttr*);
int nfs3WccAttrPack(uchar*, uchar*, uchar**, Nfs3WccAttr*);
int nfs3WccAttrUnpack(uchar*, uchar*, uchar**, Nfs3WccAttr*);
void nfs3WccPrint(Fmt*, Nfs3Wcc*);
u32int nfs3WccSize(Nfs3Wcc*);
int nfs3WccPack(uchar*, uchar*, uchar**, Nfs3Wcc*);
int nfs3WccUnpack(uchar*, uchar*, uchar**, Nfs3Wcc*);
void nfs3SetAttrPrint(Fmt*, Nfs3SetAttr*);
u32int nfs3SetAttrSize(Nfs3SetAttr*);
int nfs3SetAttrPack(uchar*, uchar*, uchar**, Nfs3SetAttr*);
int nfs3SetAttrUnpack(uchar*, uchar*, uchar**, Nfs3SetAttr*);
extern SunProg nfs3Prog;
void nfs3EntryPrint(Fmt*, Nfs3Entry*);
u32int nfs3EntrySize(Nfs3Entry*);
int nfs3EntryPack(uchar*, uchar*, uchar**, Nfs3Entry*);
int nfs3EntryUnpack(uchar*, uchar*, uchar**, Nfs3Entry*);
void nfs3EntryPlusPrint(Fmt*, Nfs3Entry*);
u32int nfs3EntryPlusSize(Nfs3Entry*);
int nfs3EntryPlusPack(uchar*, uchar*, uchar**, Nfs3Entry*);
int nfs3EntryPlusUnpack(uchar*, uchar*, uchar**, Nfs3Entry*);