190 lines
4.6 KiB
Go
190 lines
4.6 KiB
Go
package nfs
|
|
|
|
// NFSProcedure is the valid RPC calls for the nfs service.
|
|
type NFSProcedure uint32
|
|
|
|
// NfsProcedure Codes
|
|
const (
|
|
NFSProcedureNull NFSProcedure = iota
|
|
NFSProcedureGetAttr
|
|
NFSProcedureSetAttr
|
|
NFSProcedureLookup
|
|
NFSProcedureAccess
|
|
NFSProcedureReadlink
|
|
NFSProcedureRead
|
|
NFSProcedureWrite
|
|
NFSProcedureCreate
|
|
NFSProcedureMkDir
|
|
NFSProcedureSymlink
|
|
NFSProcedureMkNod
|
|
NFSProcedureRemove
|
|
NFSProcedureRmDir
|
|
NFSProcedureRename
|
|
NFSProcedureLink
|
|
NFSProcedureReadDir
|
|
NFSProcedureReadDirPlus
|
|
NFSProcedureFSStat
|
|
NFSProcedureFSInfo
|
|
NFSProcedurePathConf
|
|
NFSProcedureCommit
|
|
)
|
|
|
|
func (n NFSProcedure) String() string {
|
|
switch n {
|
|
case NFSProcedureNull:
|
|
return "Null"
|
|
case NFSProcedureGetAttr:
|
|
return "GetAttr"
|
|
case NFSProcedureSetAttr:
|
|
return "SetAttr"
|
|
case NFSProcedureLookup:
|
|
return "Lookup"
|
|
case NFSProcedureAccess:
|
|
return "Access"
|
|
case NFSProcedureReadlink:
|
|
return "ReadLink"
|
|
case NFSProcedureRead:
|
|
return "Read"
|
|
case NFSProcedureWrite:
|
|
return "Write"
|
|
case NFSProcedureCreate:
|
|
return "Create"
|
|
case NFSProcedureMkDir:
|
|
return "Mkdir"
|
|
case NFSProcedureSymlink:
|
|
return "Symlink"
|
|
case NFSProcedureMkNod:
|
|
return "Mknod"
|
|
case NFSProcedureRemove:
|
|
return "Remove"
|
|
case NFSProcedureRmDir:
|
|
return "Rmdir"
|
|
case NFSProcedureRename:
|
|
return "Rename"
|
|
case NFSProcedureLink:
|
|
return "Link"
|
|
case NFSProcedureReadDir:
|
|
return "ReadDir"
|
|
case NFSProcedureReadDirPlus:
|
|
return "ReadDirPlus"
|
|
case NFSProcedureFSStat:
|
|
return "FSStat"
|
|
case NFSProcedureFSInfo:
|
|
return "FSInfo"
|
|
case NFSProcedurePathConf:
|
|
return "PathConf"
|
|
case NFSProcedureCommit:
|
|
return "Commit"
|
|
default:
|
|
return "Unknown"
|
|
}
|
|
}
|
|
|
|
const timeoutStatus = NFSStatusIO
|
|
|
|
// NFSStatus (nfsstat3) is a result code for nfs rpc calls
|
|
type NFSStatus uint32
|
|
|
|
// NFSStatus codes
|
|
const (
|
|
NFSStatusOk NFSStatus = 0
|
|
NFSStatusPerm NFSStatus = 1
|
|
NFSStatusNoEnt NFSStatus = 2
|
|
NFSStatusIO NFSStatus = 5
|
|
NFSStatusNXIO NFSStatus = 6
|
|
NFSStatusAccess NFSStatus = 13
|
|
NFSStatusExist NFSStatus = 17
|
|
NFSStatusXDev NFSStatus = 18
|
|
NFSStatusNoDev NFSStatus = 19
|
|
NFSStatusNotDir NFSStatus = 20
|
|
NFSStatusIsDir NFSStatus = 21
|
|
NFSStatusInval NFSStatus = 22
|
|
NFSStatusFBig NFSStatus = 27
|
|
NFSStatusNoSPC NFSStatus = 28
|
|
NFSStatusROFS NFSStatus = 30
|
|
NFSStatusMlink NFSStatus = 31
|
|
NFSStatusNameTooLong NFSStatus = 63
|
|
NFSStatusNotEmpty NFSStatus = 66
|
|
NFSStatusDQuot NFSStatus = 69
|
|
NFSStatusStale NFSStatus = 70
|
|
NFSStatusRemote NFSStatus = 71
|
|
NFSStatusBadHandle NFSStatus = 10001
|
|
NFSStatusNotSync NFSStatus = 10002
|
|
NFSStatusBadCookie NFSStatus = 10003
|
|
NFSStatusNotSupp NFSStatus = 10004
|
|
NFSStatusTooSmall NFSStatus = 10005
|
|
NFSStatusServerFault NFSStatus = 10006
|
|
NFSStatusBadType NFSStatus = 10007
|
|
NFSStatusJukebox NFSStatus = 10008
|
|
)
|
|
|
|
func (s NFSStatus) String() string {
|
|
switch s {
|
|
case NFSStatusOk:
|
|
return "Call Completed Successfull"
|
|
case NFSStatusPerm:
|
|
return "Not Owner"
|
|
case NFSStatusNoEnt:
|
|
return "No such file or directory"
|
|
case NFSStatusIO:
|
|
return "I/O error"
|
|
case NFSStatusNXIO:
|
|
return "I/O error: No such device"
|
|
case NFSStatusAccess:
|
|
return "Permission denied"
|
|
case NFSStatusExist:
|
|
return "File exists"
|
|
case NFSStatusXDev:
|
|
return "Attempt to do a cross device hard link"
|
|
case NFSStatusNoDev:
|
|
return "No such device"
|
|
case NFSStatusNotDir:
|
|
return "Not a directory"
|
|
case NFSStatusIsDir:
|
|
return "Is a directory"
|
|
case NFSStatusInval:
|
|
return "Invalid argument"
|
|
case NFSStatusFBig:
|
|
return "File too large"
|
|
case NFSStatusNoSPC:
|
|
return "No space left on device"
|
|
case NFSStatusROFS:
|
|
return "Read only file system"
|
|
case NFSStatusMlink:
|
|
return "Too many hard links"
|
|
case NFSStatusNameTooLong:
|
|
return "Name too long"
|
|
case NFSStatusNotEmpty:
|
|
return "Not empty"
|
|
case NFSStatusDQuot:
|
|
return "Resource quota exceeded"
|
|
case NFSStatusStale:
|
|
return "Invalid file handle"
|
|
case NFSStatusRemote:
|
|
return "Too many levels of remote in path"
|
|
case NFSStatusBadHandle:
|
|
return "Illegal NFS file handle"
|
|
case NFSStatusNotSync:
|
|
return "Synchronization mismatch"
|
|
case NFSStatusBadCookie:
|
|
return "Cookie is Stale"
|
|
case NFSStatusNotSupp:
|
|
return "Operation not supported"
|
|
case NFSStatusTooSmall:
|
|
return "Buffer or request too small"
|
|
case NFSStatusServerFault:
|
|
return "Unmapped error (EIO)"
|
|
case NFSStatusBadType:
|
|
return "Type not supported"
|
|
case NFSStatusJukebox:
|
|
return "Initiated, but too slow. Try again with new txn"
|
|
default:
|
|
return "unknown"
|
|
}
|
|
}
|
|
|
|
// DirOpArg is a common serialization used for referencing an object in a directory
|
|
type DirOpArg struct {
|
|
Handle []byte
|
|
Filename []byte
|
|
}
|