Documentation
¶
Index ¶
- Constants
- Variables
- func RegisterMessageHandler(protocol uint32, proc uint32, handler HandleFunc) error
- func Serve(l net.Listener, handler Handler) error
- func SetLogger(logger Logger)
- func WritePostOpAttrs(writer io.Writer, post *FileAttribute) error
- func WriteWcc(writer io.Writer, pre *FileCacheAttribute, post *FileAttribute) error
- type AuthError
- type AuthFlavor
- type AuthStat
- type CachingHandler
- type DefaultLogger
- func (l *DefaultLogger) Debug(args ...interface{})
- func (l *DefaultLogger) Debugf(format string, args ...interface{})
- func (l *DefaultLogger) Error(args ...interface{})
- func (l *DefaultLogger) Errorf(format string, args ...interface{})
- func (l *DefaultLogger) Fatal(args ...interface{})
- func (l *DefaultLogger) Fatalf(format string, args ...interface{})
- func (l *DefaultLogger) GetLevel() LogLevel
- func (l *DefaultLogger) Info(args ...interface{})
- func (l *DefaultLogger) Infof(format string, args ...interface{})
- func (l *DefaultLogger) Panic(args ...interface{})
- func (l *DefaultLogger) Panicf(format string, args ...interface{})
- func (l *DefaultLogger) ParseLevel(level string) (LogLevel, error)
- func (l *DefaultLogger) Print(args ...interface{})
- func (l *DefaultLogger) Printf(format string, args ...interface{})
- func (l *DefaultLogger) SetLevel(level LogLevel)
- func (l *DefaultLogger) Trace(args ...interface{})
- func (l *DefaultLogger) Tracef(format string, args ...interface{})
- func (l *DefaultLogger) Warn(args ...interface{})
- func (l *DefaultLogger) Warnf(format string, args ...interface{})
- type DirOpArg
- type FSStat
- type FileAttribute
- type FileCacheAttribute
- type FileHandle
- type FileTime
- type FileType
- type HandleFunc
- type Handler
- type LogLevel
- type Logger
- type MountProcedure
- type MountRequest
- type MountResponse
- type MountStatus
- type NFSProcedure
- type NFSStatus
- type NFSStatusError
- type RPCError
- type RPCMismatchError
- type ResponseCode
- type ResponseCodeProcUnavailableError
- type ResponseCodeSystemError
- type Server
- type SetFileAttributes
- type StatusErrorWithBody
- type UnixChange
Constants ¶
const ( // FSInfoPropertyLink does the FS support hard links? FSInfoPropertyLink = 0x0001 // FSInfoPropertySymlink does the FS support soft links? FSInfoPropertySymlink = 0x0002 // FSInfoPropertyHomogeneous does the FS need PATHCONF calls for each file FSInfoPropertyHomogeneous = 0x0008 // FSInfoPropertyCanSetTime can the FS support setting access/mod times? FSInfoPropertyCanSetTime = 0x0010 )
const ( FTYPE_NF3REG nfs_ftype = 1 FTYPE_NF3DIR nfs_ftype = 2 FTYPE_NF3BLK nfs_ftype = 3 FTYPE_NF3CHR nfs_ftype = 4 FTYPE_NF3LNK nfs_ftype = 5 FTYPE_NF3SOCK nfs_ftype = 6 FTYPE_NF3FIFO nfs_ftype = 7 )
const CheckRead = 1 << 15
CheckRead is a size where - if a request to read is larger than this, the server will stat the file to learn it's actual size before allocating a buffer to read into.
const FHSize = 64
FHSize is the maximum size of a FileHandle
const MNTNameLen = 255
MNTNameLen is the maximum size of a mount name
const MaxRead = 1 << 24
MaxRead is the advertised largest buffer the server is willing to read
const MntPathLen = 1024
MntPathLen is the maximum size of a mount path
const PathNameMax = 255
PathNameMax is the maximum length for a file name
Variables ¶
var ( // ErrInputInvalid is returned when input cannot be parsed ErrInputInvalid = errors.New("invalid input") // ErrAlreadySent is returned when writing a header/status multiple times ErrAlreadySent = errors.New("response already started") )
Functions ¶
func RegisterMessageHandler ¶
func RegisterMessageHandler(protocol uint32, proc uint32, handler HandleFunc) error
RegisterMessageHandler registers a handler for a specific XDR procedure.
func WritePostOpAttrs ¶
func WritePostOpAttrs(writer io.Writer, post *FileAttribute) error
WritePostOpAttrs writes the `post_op_attr` representation of a files attributes
func WriteWcc ¶
func WriteWcc(writer io.Writer, pre *FileCacheAttribute, post *FileAttribute) error
WriteWcc writes the `wcc_data` representation of an object.
Types ¶
type AuthError ¶
type AuthError struct {
AuthStat
}
AuthError is an RPCError
func (*AuthError) Code ¶
func (a *AuthError) Code() ResponseCode
Code for AuthErrors is ResponseCodeAuthError
func (*AuthError) MarshalBinary ¶
MarshalBinary sends the specific auth status
type AuthFlavor ¶
type AuthFlavor uint32
AuthFlavor is a form of authentication, per rfc1057 section 7.2
const ( AuthFlavorNull AuthFlavor = 0 AuthFlavorUnix AuthFlavor = 1 AuthFlavorShort AuthFlavor = 2 AuthFlavorDES AuthFlavor = 3 )
AuthFlavor Codes
type AuthStat ¶
type AuthStat uint32
AuthStat is an enumeration of why authentication ahs failed
const ( AuthStatOK AuthStat = iota AuthStatBadCred AuthStatRejectedCred AuthStatBadVerifier AuthStatRejectedVerfier AuthStatTooWeak AuthStatInvalidResponse AuthStatFailed AuthStatKerbGeneric AuthStatTimeExpire AuthStatTktFile AuthStatDecode AuthStatNetAddr AuthStatRPCGSSCredProblem AuthStatRPCGSSCTXProblem )
AuthStat Codes
type CachingHandler ¶
type CachingHandler interface {
VerifierFor(path string, contents []fs.FileInfo) uint64
// fs.FileInfo needs to be sorted by Name(), nil in case of a cache-miss
DataForVerifier(path string, verifier uint64) []fs.FileInfo
}
CachingHandler represents the optional caching work that a user may wish to over-ride with their own implementations, but which can be otherwise provided through defaults.
type DefaultLogger ¶
type DefaultLogger struct {
Level LogLevel
}
func (*DefaultLogger) Debug ¶
func (l *DefaultLogger) Debug(args ...interface{})
func (*DefaultLogger) Debugf ¶
func (l *DefaultLogger) Debugf(format string, args ...interface{})
func (*DefaultLogger) Error ¶
func (l *DefaultLogger) Error(args ...interface{})
func (*DefaultLogger) Errorf ¶
func (l *DefaultLogger) Errorf(format string, args ...interface{})
func (*DefaultLogger) Fatal ¶
func (l *DefaultLogger) Fatal(args ...interface{})
func (*DefaultLogger) Fatalf ¶
func (l *DefaultLogger) Fatalf(format string, args ...interface{})
func (*DefaultLogger) GetLevel ¶
func (l *DefaultLogger) GetLevel() LogLevel
func (*DefaultLogger) Info ¶
func (l *DefaultLogger) Info(args ...interface{})
func (*DefaultLogger) Infof ¶
func (l *DefaultLogger) Infof(format string, args ...interface{})
func (*DefaultLogger) Panic ¶
func (l *DefaultLogger) Panic(args ...interface{})
func (*DefaultLogger) Panicf ¶
func (l *DefaultLogger) Panicf(format string, args ...interface{})
func (*DefaultLogger) ParseLevel ¶
func (l *DefaultLogger) ParseLevel(level string) (LogLevel, error)
func (*DefaultLogger) Print ¶
func (l *DefaultLogger) Print(args ...interface{})
func (*DefaultLogger) Printf ¶
func (l *DefaultLogger) Printf(format string, args ...interface{})
func (*DefaultLogger) SetLevel ¶
func (l *DefaultLogger) SetLevel(level LogLevel)
func (*DefaultLogger) Trace ¶
func (l *DefaultLogger) Trace(args ...interface{})
func (*DefaultLogger) Tracef ¶
func (l *DefaultLogger) Tracef(format string, args ...interface{})
func (*DefaultLogger) Warn ¶
func (l *DefaultLogger) Warn(args ...interface{})
func (*DefaultLogger) Warnf ¶
func (l *DefaultLogger) Warnf(format string, args ...interface{})
type FSStat ¶
type FSStat struct {
TotalSize uint64
FreeSize uint64
AvailableSize uint64
TotalFiles uint64
FreeFiles uint64
AvailableFiles uint64
// CacheHint is called "invarsec" in the nfs standard
CacheHint time.Duration
}
FSStat returns metadata about a file system
type FileAttribute ¶
type FileAttribute struct {
Type FileType
FileMode uint32
Nlink uint32
UID uint32
GID uint32
Filesize uint64
Used uint64
SpecData [2]uint32
FSID uint64
Fileid uint64
Atime, Mtime, Ctime FileTime
}
FileAttribute holds metadata about a filesystem object
func ToFileAttribute ¶
func ToFileAttribute(info os.FileInfo, filePath string) *FileAttribute
ToFileAttribute creates an NFS fattr3 struct from an OS.FileInfo
func (FileAttribute) AsCache ¶
func (f FileAttribute) AsCache() *FileCacheAttribute
AsCache provides the wcc view of the file attributes
func (*FileAttribute) Mode ¶
func (f *FileAttribute) Mode() os.FileMode
Mode provides the OS interpreted mode of the file attributes
type FileCacheAttribute ¶
FileCacheAttribute is the subset of FileAttribute used by wcc_attr
type FileTime ¶
FileTime is the NFS wire time format This is equivalent to go-nfs-client/nfs.NFS3Time
func (FileTime) EqualTimespec ¶
EqualTimespec returns if this time is equal to a local time spec
type FileType ¶
type FileType uint32
FileType represents a NFS File Type
type HandleFunc ¶
HandleFunc represents a handler for a specific protocol message.
type Handler ¶
type Handler interface {
Mount(context.Context, net.Conn, MountRequest) (MountStatus, billy.Filesystem, []AuthFlavor)
// Change can return 'nil' if filesystem is read-only
// If the returned value can be cast to `UnixChange`, mknod and link RPCs will be available.
Change(billy.Filesystem) billy.Change
// Fill in information about a file system's free space.
FSStat(context.Context, billy.Filesystem, *FSStat) error
// represent file objects as opaque references
// Can be safely implemented via helpers/cachinghandler.
ToHandle(fs billy.Filesystem, path []string) []byte
FromHandle(fh []byte) (billy.Filesystem, []string, error)
InvalidateHandle(billy.Filesystem, []byte) error
// How many handles can be safely maintained by the handler.
HandleLimit() int
}
Handler represents the interface of the file system / vfs being exposed over NFS
type Logger ¶
type Logger interface {
SetLevel(level LogLevel)
GetLevel() LogLevel
ParseLevel(level string) (LogLevel, error)
Panic(args ...interface{})
Fatal(args ...interface{})
Error(args ...interface{})
Warn(args ...interface{})
Info(args ...interface{})
Debug(args ...interface{})
Trace(args ...interface{})
Print(args ...interface{})
Panicf(format string, args ...interface{})
Fatalf(format string, args ...interface{})
Errorf(format string, args ...interface{})
Warnf(format string, args ...interface{})
Infof(format string, args ...interface{})
Debugf(format string, args ...interface{})
Tracef(format string, args ...interface{})
Printf(format string, args ...interface{})
}
var (
Log Logger = &DefaultLogger{}
)
type MountProcedure ¶
type MountProcedure uint32
MountProcedure is the valid RPC calls for the mount service.
const ( MountProcNull MountProcedure = iota MountProcMount MountProcDump MountProcUmnt MountProcUmntAll MountProcExport )
MountProcedure Codes
func (MountProcedure) String ¶
func (m MountProcedure) String() string
type MountRequest ¶
MountRequest contains the format of a client request to open a mount.
type MountResponse ¶
type MountResponse struct {
rpc.Header
FileHandle
AuthFlavors []int
}
MountResponse is the server's response with status `MountStatusOk`
type MountStatus ¶
type MountStatus uint32
MountStatus defines the response to the Mount Procedure
const ( MountStatusOk MountStatus = 0 MountStatusErrPerm MountStatus = 1 MountStatusErrNoEnt MountStatus = 2 MountStatusErrIO MountStatus = 5 MountStatusErrAcces MountStatus = 13 MountStatusErrNotDir MountStatus = 20 MountStatusErrInval MountStatus = 22 MountStatusErrNameTooLong MountStatus = 63 MountStatusErrNotSupp MountStatus = 10004 MountStatusErrServerFault MountStatus = 10006 )
MountStatus Codes
type NFSProcedure ¶
type NFSProcedure uint32
NFSProcedure is the valid RPC calls for the nfs service.
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 )
NfsProcedure Codes
func (NFSProcedure) String ¶
func (n NFSProcedure) String() string
type NFSStatus ¶
type NFSStatus uint32
NFSStatus (nfsstat3) is a result code for nfs rpc calls
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 )
NFSStatus codes
type NFSStatusError ¶
NFSStatusError represents an error at the NFS level.
func (*NFSStatusError) Code ¶
func (s *NFSStatusError) Code() ResponseCode
Code for NFS issues are successful RPC responses
func (*NFSStatusError) MarshalBinary ¶
func (s *NFSStatusError) MarshalBinary() (data []byte, err error)
MarshalBinary - The binary form of the code.
func (*NFSStatusError) Unwrap ¶
func (s *NFSStatusError) Unwrap() error
Unwrap unpacks wrapped errors
type RPCError ¶
type RPCError interface {
// An RPCError is an `error` with this method
Error() string
// Code is the RPC Response code to send
Code() ResponseCode
// BinaryMarshaler is the on-wire representation of this error
encoding.BinaryMarshaler
}
RPCError provides the error interface for errors thrown by procedures to be transmitted over the XDR RPC channel
type RPCMismatchError ¶
RPCMismatchError is an RPCError
func (*RPCMismatchError) Code ¶
func (r *RPCMismatchError) Code() ResponseCode
Code for RPCMismatchError is ResponseCodeRPCMismatch
func (*RPCMismatchError) Error ¶
func (r *RPCMismatchError) Error() string
func (*RPCMismatchError) MarshalBinary ¶
func (r *RPCMismatchError) MarshalBinary() (data []byte, err error)
MarshalBinary sends the specific rpc mismatch range
type ResponseCode ¶
type ResponseCode uint32
ResponseCode is a combination of accept_stat and reject_stat.
const ( ResponseCodeSuccess ResponseCode = iota ResponseCodeGarbageArgs ResponseCodeSystemErr ResponseCodeRPCMismatch ResponseCodeAuthError )
ResponseCode Codes
type ResponseCodeProcUnavailableError ¶
type ResponseCodeProcUnavailableError struct {
}
ResponseCodeProcUnavailableError is an RPCError
func (*ResponseCodeProcUnavailableError) Code ¶
func (r *ResponseCodeProcUnavailableError) Code() ResponseCode
Code for ResponseCodeProcUnavailableError
func (*ResponseCodeProcUnavailableError) Error ¶
func (r *ResponseCodeProcUnavailableError) Error() string
func (*ResponseCodeProcUnavailableError) MarshalBinary ¶
func (r *ResponseCodeProcUnavailableError) MarshalBinary() (data []byte, err error)
MarshalBinary - this error has no associated body
type ResponseCodeSystemError ¶
type ResponseCodeSystemError struct {
}
ResponseCodeSystemError is an RPCError
func (*ResponseCodeSystemError) Code ¶
func (r *ResponseCodeSystemError) Code() ResponseCode
Code for ResponseCodeSystemError
func (*ResponseCodeSystemError) Error ¶
func (r *ResponseCodeSystemError) Error() string
func (*ResponseCodeSystemError) MarshalBinary ¶
func (r *ResponseCodeSystemError) MarshalBinary() (data []byte, err error)
MarshalBinary - this error has no associated body
type SetFileAttributes ¶
type SetFileAttributes struct {
SetMode *uint32
SetUID *uint32
SetGID *uint32
SetSize *uint64
SetAtime *time.Time
SetMtime *time.Time
}
SetFileAttributes represents a command to update some metadata about a file.
func ReadSetFileAttributes ¶
func ReadSetFileAttributes(r io.Reader) (*SetFileAttributes, error)
ReadSetFileAttributes reads an sattr3 xdr stream into a go struct.
func (*SetFileAttributes) Apply ¶
func (s *SetFileAttributes) Apply(changer billy.Change, fs billy.Filesystem, file string) error
Apply uses a `Change` implementation to set defined attributes on a provided file.
type StatusErrorWithBody ¶
type StatusErrorWithBody struct {
NFSStatusError
Body []byte
}
StatusErrorWithBody is an NFS error with a payload.
func (*StatusErrorWithBody) MarshalBinary ¶
func (s *StatusErrorWithBody) MarshalBinary() (data []byte, err error)
MarshalBinary provides the wire format of the error response
type UnixChange ¶
type UnixChange interface {
billy.Change
Mknod(path string, mode uint32, major uint32, minor uint32) error
Mkfifo(path string, mode uint32) error
Socket(path string) error
Link(path string, link string) error
}
UnixChange extends the billy `Change` interface with support for special files.
Source Files
¶
- conn.go
- errors.go
- file.go
- filesystem.go
- handler.go
- log.go
- mount.go
- mountinterface.go
- nfs.go
- nfs_onaccess.go
- nfs_oncommit.go
- nfs_oncreate.go
- nfs_onfsinfo.go
- nfs_onfsstat.go
- nfs_ongetattr.go
- nfs_onlink.go
- nfs_onlookup.go
- nfs_onmkdir.go
- nfs_onmknod.go
- nfs_onpathconf.go
- nfs_onread.go
- nfs_onreaddir.go
- nfs_onreaddirplus.go
- nfs_onreadlink.go
- nfs_onremove.go
- nfs_onrename.go
- nfs_onrmdir.go
- nfs_onsetattr.go
- nfs_onsymlink.go
- nfs_onwrite.go
- nfsinterface.go
- server.go
- time.go