1 #ifndef __SFS_INTERFACE_H__
2 #define __SFS_INTERFACE_H__
34 #include <sys/types.h>
39 #include "XrdOuc/XrdOucSFVec.hh"
45 #define SFS_O_RDONLY 0 // open read/only
46 #define SFS_O_WRONLY 1 // open write/only
47 #define SFS_O_RDWR 2 // open read/write
48 #define SFS_O_CREAT 0x100 // used for file creation
49 #define SFS_O_TRUNC 0x200 // used for file truncation
50 #define SFS_O_POSC 0x0100000 // persist on successful close
51 #define SFS_O_FORCE 0x0200000 // used for locate only
52 #define SFS_O_HNAME 0x0400000 // used for locate only
53 #define SFS_O_LOCAL 0x0800000 // used for locate only (local cmd)
54 #define SFS_O_NOWAIT 0x01000000 // do not impose operational delays
55 #define SFS_O_RAWIO 0x02000000 // allow client-side decompression
56 #define SFS_O_RESET 0x04000000 // Reset any cached information
57 #define SFS_O_REPLICA 0x08000000 // Open for replication
62 #define SFS_O_MKPTH 0x00004000 // Make directory path if missing
67 #define SFS_O_LOCATE 0x10000000 // This request generated by locate()
68 #define SFS_O_STAT 0x20000000 // This request generated by stat()
69 #define SFS_O_META 0x40000000 // This request generated by metaop
77 #define SFS_FCTL_GETFD 1 // Return file descriptor if possible
78 #define SFS_FCTL_STATV 2 // Return visa information
79 #define SFS_FCTL_SPEC1 3 // Return implementation defined information
81 #define SFS_SFIO_FDVAL 0x80000000 // Use SendData() method GETFD response value
85 #define SFS_FSCTL_CMD 255
87 #define SFS_FSCTL_LOCATE 1 // Locate a file
88 #define SFS_FSCTL_STATFS 2 // Return FS data
89 #define SFS_FSCTL_STATLS 3 // Return LS data
90 #define SFS_FSCTL_STATXA 4 // Return XA data
91 #define SFS_FSCTL_STATCC 5 // Return Cluster Config status
92 #define SFS_FSCTL_PLUGIN 8 // Return Implementation Dependent Data
93 #define SFS_FSCTL_PLUGIO 16 // Return Implementation Dependent Data
97 #define SFS_STALL 1 // Return value -> Seconds to stall client
98 #define SFS_OK 0 // ErrInfo code -> All is well
99 #define SFS_ERROR -1 // ErrInfo code -> Error occurred
100 #define SFS_REDIRECT -256 // ErrInfo code -> Port number to redirect to
101 #define SFS_STARTED -512 // ErrInfo code -> Estimated seconds to completion
102 #define SFS_DATA -1024 // ErrInfo code -> Length of data
106 #define SFS_LCLPRFX "/=/"
107 #define SFS_LCLPLEN 3
108 #define SFS_LCLPATH(x) !strncmp(x, SFS_LCLPRFX, SFS_LCLPLEN)
109 #define SFS_LCLPRFY "/="
110 #define SFS_LCLROOT(x) !strncmp(x, SFS_LCLPRFX, SFS_LCLPLEN-1) \
111 && (*(x+SFS_LCLPLEN-1) == '/' || *(x+SFS_LCLPLEN-1) == 0)
137 #define Prep_SENDAOK 4
138 #define Prep_SENDERR 8
139 #define Prep_SENDACK 12
140 #define Prep_WMODE 16
141 #define Prep_STAGE 32
142 #define Prep_COLOC 64
143 #define Prep_FRESH 128
169 class XrdSfsDirectory;
204 class XrdSfsFileSystem
220 virtual XrdSfsDirectory *newDir(
char *user=0,
int MonID=0) = 0;
234 virtual XrdSfsFile *newFile(
char *user=0,
int MonID=0) = 0;
257 enum csFunc {csCalc = 0, csGet, csSize};
259 virtual int chksum( csFunc Func,
264 const char *opaque = 0)
266 (void)Func; (void)csName; (void)path; (void)eInfo; (void)client;
284 virtual int chmod(
const char *path,
288 const char *opaque = 0) = 0;
343 virtual int FSctl(
const int cmd,
348 (void)cmd; (void)args; (void)eInfo; (void)client;
370 virtual int fsctl(
const int cmd,
387 virtual int getStats(
char *buff,
int blen) = 0;
395 virtual const char *getVersion() = 0;
415 virtual int exists(
const char *path,
419 const char *opaque = 0) = 0;
433 virtual int mkdir(
const char *path,
437 const char *opaque = 0) = 0;
464 virtual int rem(
const char *path,
467 const char *opaque = 0) = 0;
480 virtual int remdir(
const char *path,
483 const char *opaque = 0) = 0;
498 virtual int rename(
const char *oPath,
502 const char *opaqueO = 0,
503 const char *opaqueN = 0) = 0;
518 virtual int stat(
const char *Name,
522 const char *opaque = 0) = 0;
538 virtual int stat(
const char *path,
542 const char *opaque = 0) = 0;
556 virtual int truncate(
const char *path,
560 const char *opaque = 0) = 0;
566 XrdSfsFileSystem() {}
567 virtual ~XrdSfsFileSystem() {}
608 typedef XrdSfsFileSystem *(*XrdSfsFileSystem_t) (XrdSfsFileSystem *nativeFS,
610 const char *configFn);
612 typedef XrdSfsFileSystem *(*XrdSfsFileSystem2_t)(XrdSfsFileSystem *nativeFS,
614 const char *configFn,
680 virtual int open(
const char *fileName,
684 const char *opaque = 0) = 0;
692 virtual int close() = 0;
713 virtual int fctl(
const int cmd,
732 virtual int fctl(
const int cmd,
737 (void)cmd; (void)alen; (void)args; (void)client;
747 virtual const char *FName() = 0;
759 virtual int getMmap(
void **Addr, off_t &Size) = 0;
815 for (
int i = 0; i < rdvCnt; i++)
816 {rdsz = read(readV[i].offset,
817 readV[i].data, readV[i].size);
818 if (rdsz != readV[i].size)
819 {
if (rdsz < 0)
return rdsz;
820 error.setErrInfo(ESPIPE,
"read past eof");
840 virtual int SendData(XrdSfsDio *sfDio,
844 (void)sfDio; (void)offset; (void)size;
872 virtual int write(
XrdSfsAio *aioparm) = 0;
889 for (
int i = 0; i < wdvCnt; i++)
890 {wrsz = write(writeV[i].offset,
891 writeV[i].data, writeV[i].size);
892 if (wrsz != writeV[i].size)
893 {
if (wrsz < 0)
return wrsz;
894 error.setErrInfo(ESPIPE,
"write past eof");
911 virtual int stat(
struct stat *buf) = 0;
919 virtual int sync() = 0;
950 virtual int getCXinfo(
char cxtype[4],
int &cxrsz) = 0;
958 virtual void setXio(XrdSfsXio *xioP) { (void)xioP; }
969 XrdSfsFile(
const char *user=0,
int MonID=0)
970 : error(user, MonID) {}
976 virtual ~XrdSfsFile() {}
989 class XrdSfsDirectory
1010 virtual int open(
const char *path,
1012 const char *opaque = 0) = 0;
1024 virtual const char *nextEntry() = 0;
1032 virtual int close() = 0;
1040 virtual const char *FName() = 0;
1050 virtual int autoStat(
struct stat *buf)
1065 XrdSfsDirectory(
const char *user=0,
int MonID=0)
1066 : error(user, MonID) {}
1072 virtual ~XrdSfsDirectory() {}
int opts
Prep_xxx.
Definition: XrdSfsInterface.hh:159
XrdOucTList * oinfo
1-to-1 correspondence of opaque info
Definition: XrdSfsInterface.hh:161
#define SFS_OK
Definition: XrdSfsInterface.hh:98
const char * Arg1
PLUGIO & PLUGIN.
Definition: XrdSfsInterface.hh:149
int XrdSfsXferSize
Definition: XrdSfsInterface.hh:120
char * notify
Notification path or 0.
Definition: XrdSfsInterface.hh:158
XrdSfsFileExistence
Definition: XrdSfsInterface.hh:122
long long XrdSfsFileOffset
Definition: XrdSfsInterface.hh:117
int Arg1Len
Length.
Definition: XrdSfsInterface.hh:150
Definition: XrdSfsInterface.hh:124
< SFS_FSCTL_PLUGIN/PLUGIO parameters
Definition: XrdSfsInterface.hh:147
Definition: XrdOucErrInfo.hh:97
Definition: XrdSfsInterface.hh:125
Definition: XrdSfsInterface.hh:127
#define SFS_ERROR
Definition: XrdSfsInterface.hh:99
Definition: XrdOucEnv.hh:41
Definition: XrdOucIOVec.hh:40
const char * Arg2
PLUGIN opaque string.
Definition: XrdSfsInterface.hh:152
Definition: XrdOucTList.hh:37
XrdOucTList * paths
List of paths.
Definition: XrdSfsInterface.hh:160
Definition: XrdSysLogger.hh:50
char * reqid
Request ID.
Definition: XrdSfsInterface.hh:157
int XrdSfsMode
Definition: XrdSfsInterface.hh:119
int Arg2Len
Length.
Definition: XrdSfsInterface.hh:151
Definition: XrdSecEntity.hh:51
Definition: XrdSfsInterface.hh:128
Definition: XrdSfsAio.hh:57
< Prepare parameters
Definition: XrdSfsInterface.hh:155
int XrdSfsFileOpenMode
Definition: XrdSfsInterface.hh:118
int setErrInfo(int code, const char *emsg)
Definition: XrdOucErrInfo.hh:144
Definition: XrdSfsInterface.hh:126