Documentation
¶
Index ¶
- Constants
- type AccessIn
- type Attr
- type BMapIn
- type BMapOut
- type BatchForgetIn
- type Callbacks
- type CreateIn
- type CreateOut
- type DirEnt
- type DirEntPlus
- type EntryOut
- type FAllocateIn
- type FSyncDirIn
- type FSyncIn
- type FileLock
- type FlushIn
- type ForgetIn
- type ForgetOne
- type GetAttrIn
- type GetAttrOut
- type GetLKIn
- type GetLKOut
- type GetXAttrIn
- type GetXAttrOut
- type InHeader
- type InitIn
- type InitInFrom736On
- type InitInMin
- type InitInUpThru735
- type InitOut
- type InitOut717
- type InitOut718Thru720
- type InitOut721Thru722
- type InitOut723Thru727
- type InitOut728Thru731a
- type InitOut731bThru735
- type InitOut736Thru739
- type InitOut740Thru742
- type InitOut743AndBeyond
- type InterruptIn
- type IoCtlIn
- type IoCtlOut
- type IoctlIovec
- type KStatFS
- type LSeekIn
- type LSeekOut
- type LinkIn
- type LinkOut
- type ListXAttrIn
- type ListXAttrOut
- type LookupIn
- type LookupOut
- type MkDirIn
- type MkDirOut
- type MkNodIn
- type MkNodOut
- type OpenDirIn
- type OpenDirOut
- type OpenIn
- type OpenOut
- type OutHeader
- type PollIn
- type PollOut
- type ReadDirIn
- type ReadDirOut
- type ReadDirPlusIn
- type ReadDirPlusOut
- type ReadIn
- type ReadLinkOut
- type ReadOut
- type ReleaseDirIn
- type ReleaseIn
- type RemoveXAttrIn
- type Rename2In
- type RenameIn
- type RmDirIn
- type SXTime
- type SetAttrIn
- type SetAttrOut
- type SetLKIn
- type SetLKWIn
- type SetXAttrIn
- type StatFSOut
- type StatX
- type StatXIn
- type StatXOut
- type SymLinkIn
- type SymLinkOut
- type UnlinkIn
- type Volume
- type WriteIn
- type WriteOut
Constants ¶
const ( StatXMaskType = uint32(0x00000001) StatXMaskMode = uint32(0x00000002) StatXMaskNLink = uint32(0x00000004) StatXMaskUID = uint32(0x00000008) StatXMaskGID = uint32(0x00000010) StatXMaskATime = uint32(0x00000020) StatXMaskMTime = uint32(0x00000040) StatXMaskCTime = uint32(0x00000080) StatXMaskIno = uint32(0x00000100) StatXMaskSize = uint32(0x00000200) StatXMaskBlocks = uint32(0x00000400) StatXMaskBasicStats = uint32(0x000007FF) StatXMaskBTime = uint32(0x00000800) )
const ( SetAttrInValidMode = uint32(1) << 0 SetAttrInValidUID = uint32(1) << 1 SetAttrInValidGID = uint32(1) << 2 SetAttrInValidSize = uint32(1) << 3 SetAttrInValidATime = uint32(1) << 4 SetAttrInValidMTime = uint32(1) << 5 SetAttrInValidFH = uint32(1) << 6 SetAttrInValidATimeNow = uint32(1) << 7 SetAttrInValidMTimeNow = uint32(1) << 8 SetAttrInValidLockOwner = uint32(1) << 9 SetAttrInValidCTime = uint32(1) << 10 // not supported SetAttrInValidKillSuidGID = uint32(1) << 11 // not supported )
const ( SetXAttrInCreate = uint32(1) SetXAttrInReplace = uint32(2) )
const ( FOpenRequestRDONLY = uint32(syscall.O_RDONLY) FOpenRequestWRONLY = uint32(syscall.O_WRONLY) FOpenRequestRDWR = uint32(syscall.O_RDWR) FOpenRequestAPPEND = uint32(syscall.O_APPEND) FOpenRequestCREAT = uint32(syscall.O_CREAT) FOpenRequestEXCL = uint32(syscall.O_EXCL) FOpenRequestSYNC = uint32(syscall.O_SYNC) FOpenRequestTRUNC = uint32(syscall.O_TRUNC) )
const ( FOpenResponseDirectIO = uint32(1) << 0 FOpenResponseKeepCache = uint32(1) << 1 FOpenResponseNonSeekable = uint32(1) << 2 FOpenResponseCacheDir = uint32(1) << 3 FOpenResponseStream = uint32(1) << 4 )
const ( InitFlagsAsyncRead = uint32(1) << 0 InitFlagsPosixLocks = uint32(1) << 1 InitFlagsFileOps = uint32(1) << 2 InitFlagsAtomicOTrunc = uint32(1) << 3 InitFlagsExportSupport = uint32(1) << 4 InitFlagsBigWrites = uint32(1) << 5 InitFlagsDontMask = uint32(1) << 6 InitFlagsSpliceWrite = uint32(1) << 7 InitFlagsSpliceMove = uint32(1) << 8 InitFlagsSpliceRead = uint32(1) << 9 InitFlagsFLockLocks = uint32(1) << 10 InitFlagsHasIoctlDir = uint32(1) << 11 InitFlagsAutoInvalData = uint32(1) << 12 InitFlagsDoReadDirPlus = uint32(1) << 13 InitFlagsReaddirplusAuto = uint32(1) << 14 InitFlagsAsyncDio = uint32(1) << 15 InitFlagsWritebackCache = uint32(1) << 16 InitFlagsNoOpenSupport = uint32(1) << 17 InitFlagsParallelDirops = uint32(1) << 18 InitFlagsHandleKillpriv = uint32(1) << 19 InitFlagsPosixACL = uint32(1) << 20 InitFlagsAbortError = uint32(1) << 21 InitFlagsMaxPages = uint32(1) << 22 InitFlagsCacheSymlinks = uint32(1) << 23 InitFlagsNoOpendirSupport = uint32(1) << 24 InitFlagsExplicitInvalData = uint32(1) << 25 InitFlagsMapAlignment = uint32(1) << 26 InitFlagsSubMounts = uint32(1) << 27 InitFlagsHandleKillprivV2 = uint32(1) << 28 InitFlagsSetXattrExt = uint32(1) << 29 InitFalgsInitExt = uint32(1) << 30 InitFlagsInitReserved = uint32(1) << 31 InitFlags2SecurityCtx = uint32(1) << 0 InitFlags2HasInodeDAX = uint32(1) << 1 InitFlags2CreateSuppGroup = uint32(1) << 2 InitFlags2HasExpireOnly = uint32(1) << 3 InitFlags2DirectIoAllowMmap = uint32(1) << 4 InitFlags2Passthrough = uint32(1) << 5 InitFlags2NoExportSupport = uint32(1) << 6 InitFlags2HasResend = uint32(1) << 7 InitFlags2AllowIdmap = uint32(1) << 8 InitFlags2OverIoUring = uint32(1) << 9 InitFlags2RequestTimeout = uint32(1) << 10 )
const ( ReleaseFlush = uint32(1) << iota ReleaseFLockUnlock )
const ( WriteCache = uint32(1) << iota WriteLockOwner WriteKillPriv )
const ( IoctlCompat = uint32(1) << iota IoctlUnrestricted IoctlRetry Ioctl32Bit IoctlDir IoctlCompatX32 )
const ( NofifyPoll = iota + 1 NotifyInvalInode NotifyInvalEntry NotifyStore NotifyRetrieve NotifyDelete NotifyResent NotifyIncEpoch NotifyCodeMax )
const ( OpCodeLookup = uint32(1) OpCodeForget = uint32(2) // no reply OpCodeGetAttr = uint32(3) OpCodeSetAttr = uint32(4) OpCodeReadLink = uint32(5) OpCodeSymLink = uint32(6) OpCodeMkNod = uint32(8) OpCodeMkDir = uint32(9) OpCodeUnlink = uint32(10) OpCodeRmDir = uint32(11) OpCodeRename = uint32(12) OpCodeLink = uint32(13) OpCodeOpen = uint32(14) OpCodeRead = uint32(15) OpCodeWrite = uint32(16) OpCodeStatFS = uint32(17) OpCodeRelease = uint32(18) OpCodeFSync = uint32(20) OpCodeSetXAttr = uint32(21) OpCodeGetXAttr = uint32(22) OpCodeListXAttr = uint32(23) OpCodeRemoveXAttr = uint32(24) OpCodeFlush = uint32(25) OpCodeInit = uint32(26) OpCodeOpenDir = uint32(27) OpCodeReadDir = uint32(28) OpCodeReleaseDir = uint32(29) OpCodeFSyncDir = uint32(30) OpCodeGetLK = uint32(31) OpCodeSetLK = uint32(32) OpCodeSetLKW = uint32(33) OpCodeAccess = uint32(34) OpCodeCreate = uint32(35) OpCodeInterrupt = uint32(36) // no reply OpCodeBMap = uint32(37) OpCodeDestroy = uint32(38) OpCodeIoCtl = uint32(39) // unsupported OpCodePoll = uint32(40) OpCodeNotifyReply = uint32(41) // unsupported OpCodeBatchForget = uint32(42) // no reply OpCodeFAllocate = uint32(43) OpCodeReadDirPlus = uint32(44) OpCodeRename2 = uint32(45) OpCodeLSeek = uint32(46) OpCodeCopyFileRange = uint32(47) // unsupported OpCodeSetupMapping = uint32(48) // unsupported OpCodeRemoveMapping = uint32(49) // unsupported OpCodeSyncFS = uint32(50) // unsupported OpCodeTmpFile = uint32(51) // unsupported OpCodeStatX = uint32(52) OpCodeCuseInit = uint32(4096) // unsupported )
const AccessInSize = 8
const AttrSize = 88
const BMapInSize = 16
const BMapOutSize = 8
const BatchForgetInFixedPortionSize = 8 // + (Count * ForgetOneSize)
const CreateInFixedPortionSize = 16 // + len(Name)
const CreateOutSize = EntryOutSize + 16
const DirEntAlignment = 8 // applies to both DirEnt and DirEntPlus
const DirEntFixedPortionSize = 24 // + len(Name) and rounded up to DirEntAlignment boundary
const DirEntPlusFixedPortionSize = EntryOutSize + DirEntFixedPortionSize // + len(DirEnt.Name) and rounded up to DirEntAlignment boundary
const EntryOutSize = 40 + AttrSize
const FAllocateInSize = 32
const FSyncDirInSize = 16
const (
FSyncFDataSync = uint32(1) << iota
)
const FSyncInSize = 16
const FileLockSize = 24
const FlushInSize = 24
const ForgetInSize = 8
const ForgetOneSize = 16
const (
GetAttrFH uint32 = uint32(1) << iota
)
const GetAttrInSize = 16
const GetAttrOutSize = 16 + AttrSize
const GetLKInSize = 16 + FileLockSize + 8
const GetLKOutSize = FileLockSize
const GetXAttrInFixedPortionSize = 8 // + len(Name)
const GetXAttrOutSizeOnlySize = 8
const InHeaderSize = 40
const InitInFrom736OnSize = 64
const InitInMinSize = 8
const InitInSize = 64
const InitInUpThru735Size = 16
const InitOut717Size = 24
const InitOut718Thru720Size = 72
const InitOut721Thru722Size = 24
const InitOut723Thru727Size = 64
const InitOut728Thru731aSize = 64
const InitOut731bThru735Size = 64
const InitOut736Thru739Size = 64
const InitOut740Thru742Size = 64
const InitOut743AndBeyondSize = 64
const InitOutSize = 64
const InterruptInSize = 8
const IoCtlInFixedPortionSize = 32 // + len(InBuf) a.k.a. InSize
const IoCtlOutFixedPortionSize = 16 // + (InIovs * IoctlIovecSize) + (OutIovs * IoctlIovecSize)
const IoctlIovecSize = 16
const IoctlMaxIOV = 256
const KStatFSSize = 80
const (
LKFLock uint32 = uint32(1) << iota
)
const LSeekInSize = 24
const LSeekOutSize = 8
const LinkInFixedPortionSize = 8 // + len(Name)
const LinkOutSize = EntryOutSize
const ListXAttrInSize = 8
const ListXAttrOutSizeOnlySize = 8
const LookupOutSize = EntryOutSize
const MkDirInFixedPortionSize = 8 // + len(Name)
const MkDirOutSize = EntryOutSize
const MkNodInFixedPortionSize = 16 // + len(Name)
const MkNodOutSize = EntryOutSize
const OpenDirInSize = 8
const OpenDirOutSize = 16
const OpenInSize = 8
const OpenOutSize = 16
const OutHeaderSize = 16
const PollInSize = 24
const PollOutSize = 8
const (
PollScheduleNotify = uint32(1) << iota
)
const ReadDirInSize = 40
const ReadDirPlusInSize = 40
const ReadInSize = 40
const (
ReadLockOwner = uint32(1) << (iota + 1)
)
const ReleaseDirInSize = 24
const ReleaseInSize = 24
const Rename2InFixedPortionSize = 16 // + len(OldName) + 1 + len(NewName)
const RenameInFixedPortionSize = 8 // + len(OldName) + 1 + len(NewName)
const SXTimeSize = 16
const SetAttrInSize = 88
const SetAttrOutSize = 16 + AttrSize
const SetLKInSize = 16 + FileLockSize + 8
const SetLKWInSize = 16 + FileLockSize + 8
const SetXAttrInFixedPortionSize = 16 // + len(Name) + 1 + len(Data)
const StatFSOutSize = KStatFSSize
const StatXInSize = 24
const StatXOutSize = 16 + (2 * 8) + StatXSize
const StatXSize = 30 + (1 * 2) + 32 + (4 * SXTimeSize) + 16 + (14 * 8)
const SymLinkOutSize = EntryOutSize
const WriteInFixedPortionSize = 40 // + len(Data) a.k.a. Size
const WriteOutSize = 8
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type BatchForgetIn ¶
type Callbacks ¶
type Callbacks interface { DoLookup(inHeader *InHeader, lookupIn *LookupIn) (lookupOut *LookupOut, errno syscall.Errno) DoForget(inHeader *InHeader, forgetIn *ForgetIn) DoGetAttr(inHeader *InHeader, getAttrIn *GetAttrIn) (getAttrOut *GetAttrOut, errno syscall.Errno) DoSetAttr(inHeader *InHeader, setAttrIn *SetAttrIn) (setAttrOut *SetAttrOut, errno syscall.Errno) DoReadLink(inHeader *InHeader) (readLinkOut *ReadLinkOut, errno syscall.Errno) DoSymLink(inHeader *InHeader, symLinkIn *SymLinkIn) (symLinkOut *SymLinkOut, errno syscall.Errno) DoMkNod(inHeader *InHeader, mkNodIn *MkNodIn) (mkNodOut *MkNodOut, errno syscall.Errno) DoMkDir(inHeader *InHeader, mkDirIn *MkDirIn) (mkDirOut *MkDirOut, errno syscall.Errno) DoUnlink(inHeader *InHeader, unlinkIn *UnlinkIn) (errno syscall.Errno) DoRmDir(inHeader *InHeader, rmDirIn *RmDirIn) (errno syscall.Errno) DoRename(inHeader *InHeader, renameIn *RenameIn) (errno syscall.Errno) DoLink(inHeader *InHeader, linkIn *LinkIn) (linkOut *LinkOut, errno syscall.Errno) DoOpen(inHeader *InHeader, openIn *OpenIn) (openOut *OpenOut, errno syscall.Errno) DoRead(inHeader *InHeader, readIn *ReadIn) (readOut *ReadOut, errno syscall.Errno) DoWrite(inHeader *InHeader, writeIn *WriteIn) (writeOut *WriteOut, errno syscall.Errno) DoStatFS(inHeader *InHeader) (statFSOut *StatFSOut, errno syscall.Errno) DoRelease(inHeader *InHeader, releaseIn *ReleaseIn) (errno syscall.Errno) DoFSync(inHeader *InHeader, fSyncIn *FSyncIn) (errno syscall.Errno) DoSetXAttr(inHeader *InHeader, setXAttrIn *SetXAttrIn) (errno syscall.Errno) DoGetXAttr(inHeader *InHeader, getXAttrIn *GetXAttrIn) (getXAttrOut *GetXAttrOut, errno syscall.Errno) DoListXAttr(inHeader *InHeader, listXAttrIn *ListXAttrIn) (listXAttrOut *ListXAttrOut, errno syscall.Errno) DoRemoveXAttr(inHeader *InHeader, removeXAttrIn *RemoveXAttrIn) (errno syscall.Errno) DoFlush(inHeader *InHeader, flushIn *FlushIn) (errno syscall.Errno) DoInit(inHeader *InHeader, initIn *InitIn) (initOut *InitOut, errno syscall.Errno) DoOpenDir(inHeader *InHeader, openDirIn *OpenDirIn) (openDirOut *OpenDirOut, errno syscall.Errno) DoReadDir(inHeader *InHeader, readDirIn *ReadDirIn) (readDirOut *ReadDirOut, errno syscall.Errno) DoReleaseDir(inHeader *InHeader, releaseDirIn *ReleaseDirIn) (errno syscall.Errno) DoFSyncDir(inHeader *InHeader, fSyncDirIn *FSyncDirIn) (errno syscall.Errno) DoGetLK(inHeader *InHeader, getLKIn *GetLKIn) (getLKOut *GetLKOut, errno syscall.Errno) DoSetLK(inHeader *InHeader, setLKIn *SetLKIn) (errno syscall.Errno) DoSetLKW(inHeader *InHeader, setLKWIn *SetLKWIn) (errno syscall.Errno) DoAccess(inHeader *InHeader, accessIn *AccessIn) (errno syscall.Errno) DoCreate(inHeader *InHeader, createIn *CreateIn) (createOut *CreateOut, errno syscall.Errno) DoInterrupt(inHeader *InHeader, interruptIn *InterruptIn) DoBMap(inHeader *InHeader, bMapIn *BMapIn) (bMapOut *BMapOut, errno syscall.Errno) DoDestroy(inHeader *InHeader) (errno syscall.Errno) DoPoll(inHeader *InHeader, pollIn *PollIn) (pollOut *PollOut, errno syscall.Errno) DoBatchForget(inHeader *InHeader, batchForgetIn *BatchForgetIn) DoFAllocate(inHeader *InHeader, fAllocateIn *FAllocateIn) (errno syscall.Errno) DoReadDirPlus(inHeader *InHeader, readDirPlusIn *ReadDirPlusIn) (readDirPlusOut *ReadDirPlusOut, errno syscall.Errno) DoRename2(inHeader *InHeader, rename2In *Rename2In) (errno syscall.Errno) DoLSeek(inHeader *InHeader, lSeekIn *LSeekIn) (lSeekOut *LSeekOut, errno syscall.Errno) DoStatX(inHeader *InHeader, statXIn *StatXIn) (statXOut *StatXOut, errno syscall.Errno) }
Callbacks is the interface declaring the various callbacks that will be issued in response to a Volume instance while it is mounted. Note that some callbacks are expected to return both an error as well as a struct pointer. In the case of an error, the struct pointer should be <nil> as it will not be written to /dev/fuse. Finally, one callback is special: DoInit(). Provisioning a Volume instance involved providing the InitOut.MaxWrite to allow configuring the buffer pool used by the /dev/fuse read loop (including, of course, the reception of the InitIn up-call). The implementation of DoInit, therefore, should not expect returning an InitOut with a different MaxWrite to be honored.
type DirEntPlus ¶
type FAllocateIn ¶
type FSyncDirIn ¶
type GetAttrOut ¶
type GetXAttrIn ¶
type GetXAttrOut ¶
type InitInFrom736On ¶
type InitInUpThru735 ¶
type InitOut ¶
type InitOut struct { Major uint32 Minor uint32 MaxReadAhead uint32 Flags uint32 // mask of const InitFlags* bits MaxBackground uint16 CongestionThreshhold uint16 MaxWrite uint32 TimeGran uint32 MaxPages uint16 MapAlignment uint16 Flags2 uint32 MaxStackDepth uint32 RequestTimeout uint16 Unused [11]uint16 }
type InitOut717 ¶
type InitOut718Thru720 ¶
type InitOut721Thru722 ¶
type InitOut723Thru727 ¶
type InitOut728Thru731a ¶
type InitOut731bThru735 ¶
type InitOut736Thru739 ¶
type InitOut740Thru742 ¶
type InitOut743AndBeyond ¶
type InitOut743AndBeyond struct { Major uint32 Minor uint32 MaxReadAhead uint32 Flags uint32 // mask of const InitFlags* bits MaxBackground uint16 CongestionThreshhold uint16 MaxWrite uint32 TimeGran uint32 MaxPages uint16 MapAlignment uint16 Flags2 uint32 MaxStackDepth uint32 RequestTimeout uint16 Unused [11]uint16 }
type InterruptIn ¶
type InterruptIn struct {
Unique uint64
}
type IoCtlOut ¶
type IoCtlOut struct { Result uint32 Flags uint32 InIovs uint32 OutIovs uint32 InIov []IoctlIovec // len(IoIov) == InIovs OutIov []IoctlIovec // len(OutIov) == OutIovs }
type IoctlIovec ¶
type ListXAttrIn ¶
type ListXAttrOut ¶
type OpenDirOut ¶
type ReadDirOut ¶
type ReadDirOut struct {
DirEnt []DirEnt // aligned on DirEntAlignment boundaries
}
type ReadDirPlusIn ¶
type ReadDirPlusOut ¶
type ReadDirPlusOut struct {
DirEntPlus []DirEntPlus // aligned on DirEntAlignment boundaries
}
type ReadLinkOut ¶
type ReadLinkOut struct {
Data []byte
}
type ReleaseDirIn ¶
type RemoveXAttrIn ¶
type RemoveXAttrIn struct {
Name []byte
}
type SetAttrOut ¶
type SetXAttrIn ¶
type StatX ¶
type StatX struct { Mask uint32 // mask of StatXMask* bits BlkSize uint32 Attributes uint64 NLink uint32 UID uint32 GID uint32 Mode uint16 Spare0 [1]uint16 Ino uint64 Size uint64 Blocks uint64 AttributesMask uint64 ATime SXTime BTime SXTime CTime SXTime MTime SXTime RDevMajor uint32 RDevMinor uint32 DevMajor uint32 DevMinor uint32 Spare2 [14]uint64 }
type SymLinkOut ¶
type SymLinkOut struct {
EntryOut
}
type Volume ¶
type Volume interface { // DoMount is invoked on a Volume interface to perform the FUSE mount and // begin receiving the various callbacks listed in the Callbacks interface. // DoMount() (err error) // DoUnmount is invoked on a Volume interface to perform the FUSE unmount. // Upon return, no callbacks will be made and the Volume instance may be // safely discarded. // DoUnmount() (err error) }
Volume represents a file system instance. A Volume is provisioned by calling NewVolume(). After recording the returned interface from NewVolume(), a single call to DoMount() kicks off the mounting process and the caller should expect to see the various callbacks listed in the Callbacks interface. This will continue a single call to DoUnmount() is made after which the Volume instance may be safely discarded.
func NewVolume ¶
func NewVolume(volumeName, mountpointDirPath, fuseSubtype string, maxRead, maxWrite uint32, defaultPermissions, allowOther bool, callbacks Callbacks, logger *log.Logger, errChan chan error) (volume Volume)
NewVolume is called to create a Volume instance. Various callbacks listed in the Callbacks interface will be made while the Volume is mounted. The type of the file system, once mounted, will be "fuse" and, if non-empty, followed by a "." and the fuseSubtype (if supported... as it is on Linux). Non-root users may want to specify allowOther as TRUE to enable other non-root users access to the mount point. A chan error is also supplied to enable the Volume to indicate that it is no longer servicing FUSE upcalls (e.g. as a result of an intentional DoUnmount() call or some unexpected error reading from /dev/fuse).