OpenAFS
OpenAFS distributed network file system
|
00001 #ifndef AFS_SRC_LIBAFSCP_AFSCP_H 00002 #define AFS_SRC_LIBAFSCP_AFSCP_H 00003 00004 /* AUTORIGHTS */ 00005 #include <afs/param.h> 00006 #include <afs/afsint.h> 00007 #include <afs/afs_consts.h> 00008 #include <afs/cellconfig.h> 00009 #include <afs/dir.h> 00010 #include <afs/afsutil.h> 00011 00012 #ifdef AFS_NT40_ENV 00013 /* not included elsewhere for Windows */ 00014 #include <pthread.h> 00015 #endif 00016 00017 struct afscp_server { 00018 afsUUID id; 00019 int index; 00020 int cell; 00021 int naddrs; 00022 afs_uint32 addrs[AFS_MAXHOSTS]; 00023 struct rx_connection *conns[AFS_MAXHOSTS]; 00024 }; 00025 00026 struct afscp_cell { 00027 int id; 00028 char name[MAXCELLCHARS + 1]; 00029 struct rx_securityClass *security; 00030 int scindex; 00031 struct ubik_client *vlservers; 00032 int nservers; 00033 int srvsalloced; 00034 struct afscp_server **fsservers; 00035 void *volsbyname; 00036 void *volsbyid; 00037 char *realm; 00038 }; 00039 00040 struct afscp_volume { 00041 struct afscp_cell *cell; 00042 afs_uint32 id; 00043 int voltype; 00044 int nservers; 00045 int servers[AFS_MAXHOSTS]; 00046 char name[AFSNAMEMAX]; 00047 void *statcache; 00048 void *dircache; 00049 }; 00050 00051 struct afscp_venusfid { 00052 struct afscp_cell *cell; 00053 struct AFSFid fid; 00054 }; 00055 00056 struct afscp_dirent { 00057 afs_uint32 vnode; 00058 afs_uint32 unique; 00059 char name[16 + 32 * (EPP - 2)]; 00060 }; 00061 00062 struct afscp_dirstream { 00063 struct afscp_venusfid fid; 00064 int buflen; 00065 char *dirbuffer; 00066 int hashent; 00067 int entry; 00068 int dv; 00069 struct afscp_dirent ret; 00070 }; 00071 00072 struct afscp_dircache { 00073 struct afscp_venusfid me; 00074 int buflen; 00075 char *dirbuffer; 00076 int dv; 00077 int nwaiters; 00078 pthread_mutex_t mtx; 00079 pthread_cond_t cv; 00080 }; 00081 00082 struct afscp_statent { 00083 struct afscp_venusfid me; 00084 struct AFSFetchStatus status; 00085 int nwaiters; 00086 int cleanup; 00087 pthread_mutex_t mtx; 00088 pthread_cond_t cv; 00089 }; 00090 00091 struct afscp_openfile { 00092 struct afscp_venusfid fid; 00093 off_t offset; 00094 }; 00095 00096 struct afscp_callback { 00097 int valid; 00098 const struct afscp_server *server; 00099 struct AFSFid fid; 00100 struct AFSCallBack cb; 00101 time_t as_of; 00102 }; 00103 00104 extern int afscp_errno; 00105 int afscp_Init(const char *); 00106 void afscp_Finalize(void); 00107 00108 int afscp_Insecure(void); 00109 int afscp_AnonymousAuth(int); 00110 int afscp_LocalAuthAs(const char *aname); 00111 00112 void afscp_SetConfDir(char *confDir); 00113 00114 struct afscp_cell *afscp_DefaultCell(void); 00115 struct afscp_cell *afscp_CellByName(const char *, const char *); 00116 int afscp_SetDefaultRealm(const char *); 00117 int afscp_SetDefaultCell(const char *); 00118 struct afscp_cell *afscp_CellById(int); 00119 int afscp_CellId(struct afscp_cell *); 00120 void afscp_FreeAllCells(void); 00121 void afscp_FreeAllServers(void); 00122 00123 struct afscp_server *afscp_ServerById(struct afscp_cell *, afsUUID *); 00124 struct afscp_server *afscp_ServerByAddr(struct afscp_cell *, afs_uint32); 00125 struct afscp_server *afscp_AnyServerByAddr(afs_uint32); 00126 struct afscp_server *afscp_ServerByIndex(int); 00127 struct rx_connection *afscp_ServerConnection(const struct afscp_server *, 00128 int); 00129 00130 int afscp_CheckCallBack(const struct afscp_venusfid *fid, 00131 const struct afscp_server *server, 00132 afs_uint32 *expiretime); 00133 int afscp_FindCallBack(const struct afscp_venusfid *f, 00134 const struct afscp_server *server, 00135 struct afscp_callback *ret); 00136 int afscp_AddCallBack(const struct afscp_server *, 00137 const struct AFSFid *, 00138 const struct AFSFetchStatus *, 00139 const struct AFSCallBack *, const time_t); 00140 int afscp_RemoveCallBack(const struct afscp_server *, 00141 const struct afscp_venusfid *); 00142 int afscp_ReturnCallBacks(const struct afscp_server *); 00143 int afscp_ReturnAllCallBacks(void); 00144 int afscp_WaitForCallback(const struct afscp_venusfid *fid, int seconds); 00145 00146 /* file metastuff */ 00147 /* frees with free() */ 00148 struct afscp_venusfid *afscp_MakeFid(struct afscp_cell *, afs_uint32, 00149 afs_uint32, afs_uint32); 00150 struct afscp_venusfid *afscp_DupFid(const struct afscp_venusfid *); 00151 void afscp_FreeFid(struct afscp_venusfid *); 00152 00153 struct stat; 00154 int afscp_Stat(const struct afscp_venusfid *, struct stat *); 00155 00156 ssize_t afscp_PRead(const struct afscp_venusfid *, void *, size_t, off_t); 00157 ssize_t afscp_PWrite(const struct afscp_venusfid *, const void *, 00158 size_t, off_t); 00159 /* 00160 * for future implementation: (?) 00161 * struct afscp_openfile *afscp_FidOpen(const struct afscp_venusfid *); 00162 * off_t afscp_FSeek(struct afscp_openfile *, off_t, int); 00163 * ssize_t afscp_FRead(const struct afscp_openfile *, void *, size_t); 00164 */ 00165 00166 /* rpc wrappers */ 00167 int afscp_GetStatus(const struct afscp_venusfid *, struct AFSFetchStatus *); 00168 int afscp_StoreStatus(const struct afscp_venusfid *, struct AFSStoreStatus *); 00169 int afscp_CreateFile(const struct afscp_venusfid *, char *, 00170 struct AFSStoreStatus *, struct afscp_venusfid **); 00171 int afscp_Lock(const struct afscp_venusfid *, int locktype); 00172 int afscp_MakeDir(const struct afscp_venusfid *, char *, 00173 struct AFSStoreStatus *, struct afscp_venusfid **); 00174 int afscp_Symlink(const struct afscp_venusfid *, char *, 00175 char *, struct AFSStoreStatus *); 00176 int afscp_RemoveFile(const struct afscp_venusfid *, char *); 00177 int afscp_RemoveDir(const struct afscp_venusfid *, char *); 00178 int afscp_FetchACL(const struct afscp_venusfid *, struct AFSOpaque *); 00179 int afscp_StoreACL(const struct afscp_venusfid *, struct AFSOpaque *); 00180 00181 /* directory parsing stuff*/ 00182 struct afscp_dirstream *afscp_OpenDir(const struct afscp_venusfid *); 00183 struct afscp_dirent *afscp_ReadDir(struct afscp_dirstream *); 00184 int afscp_RewindDir(struct afscp_dirstream *); 00185 int afscp_CloseDir(struct afscp_dirstream *); 00186 struct afscp_venusfid *afscp_DirLookup(struct afscp_dirstream *, 00187 const char *); 00188 struct afscp_venusfid *afscp_ResolveName(const struct afscp_venusfid *, 00189 const char *); 00190 struct afscp_venusfid *afscp_ResolvePath(const char *); 00191 struct afscp_venusfid *afscp_ResolvePathFromVol(const struct afscp_volume *, 00192 const char *); 00193 00194 /* vldb stuff */ 00195 struct afscp_volume *afscp_VolumeByName(struct afscp_cell *, 00196 const char *, afs_int32); 00197 struct afscp_volume *afscp_VolumeById(struct afscp_cell *, afs_uint32); 00198 00199 #define DIRMODE_CELL 0 00200 #define DIRMODE_DYNROOT 1 00201 int afscp_SetDirMode(int); 00202 00203 #endif /* AFS_SRC_LIBAFSCP_AFSCP_H */