OpenAFS
OpenAFS distributed network file system
/cygdrive/c/src/openafs/openafs.git/repo/src/libafscp/afscp.h
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 */
 All Data Structures Files Functions Variables