2 * Copyright 2000, International Business Machines Corporation and others.
5 * This software has been released under the terms of the IBM Public
6 * License. For details, see the LICENSE file in the top-level source
7 * directory or online at http://www.openafs.org/dl/license10.html
10 #ifndef __CM_VNODEOPS_H_ENV__
11 #define __CM_VNODEOPS_H_ENV__ 1
13 extern unsigned int cm_mountRootGen;
15 extern int cm_enableServerLocks;
17 /* parms for attribute setting call */
18 typedef struct cm_attr {
27 #define CM_ATTRMASK_CLIENTMODTIME 1 /* set if field is valid */
28 #define CM_ATTRMASK_LENGTH 2 /* field is valid */
29 #define CM_ATTRMASK_UNIXMODEBITS 4 /* field is valid */
30 #define CM_ATTRMASK_OWNER 8 /* field is valid */
31 #define CM_ATTRMASK_GROUP 0x10 /* field is valid */
33 /* type of rock for lookup's searches */
34 typedef struct cm_lookupSearch {
38 int LCfound, UCfound, NCfound, ExactFound;
45 typedef int (*cm_DirFuncp_t)(struct cm_scache *, struct cm_dirEntry *, void *,
46 osi_hyper_t *entryOffsetp);
48 /* Special path syntax for direct references to volumes
50 The syntax: @vol:<cellname>{%,#}<volume> can be used to refer to a
51 specific volume in a specific cell, where:
53 <cellname> : name of the cell
54 <volume> : volume name or ID
56 #define CM_PREFIX_VOL "@vol:"
57 #define CM_PREFIX_VOL_CCH 5
61 extern unsigned char cm_foldUpper[];
65 extern int cm_NoneLower(char *s);
67 extern int cm_NoneUpper(char *s);
69 extern int cm_Is8Dot3(char *namep);
71 extern int cm_stricmp(const char *, const char *);
73 extern void cm_Gen8Dot3Name(struct cm_dirEntry *dep, char *shortName,
74 char **shortNameEndp);
76 #define cm_Gen8Dot3Name(dep,shortName,shortNameEndp) \
77 cm_Gen8Dot3NameInt((dep)->name, &(dep)->fid, shortName, shortNameEndp)
79 extern void cm_Gen8Dot3NameInt(const char * longname, cm_dirFid_t * pfid,
80 char *shortName, char **shortNameEndp);
82 extern long cm_ReadMountPoint(cm_scache_t *scp, cm_user_t *userp,
85 extern long cm_EvaluateVolumeReference(char * namep, long flags, cm_user_t * userp,
86 cm_req_t *reqp, cm_scache_t ** outpScpp);
89 extern long cm_NameIDbg(cm_scache_t *rootSCachep, char *pathp, long flags,
90 cm_user_t *userp, char *tidPathp, cm_req_t *reqp,
91 cm_scache_t **outScpp, char *, long);
93 extern long cm_LookupDbg(cm_scache_t *dscp, char *namep, long flags,
94 cm_user_t *userp, cm_req_t *reqp, cm_scache_t **outpScpp, char *, long);
96 #define cm_Lookup(a,b,c,d,e,f) cm_LookupDbg(a,b,c,d,e,f,__FILE__,__LINE__)
97 #define cm_NameI(a,b,c,d,e,f,g) cm_NameIDbg(a,b,c,d,e,f,g,__FILE__,__LINE__)
99 extern long cm_NameI(cm_scache_t *rootSCachep, char *pathp, long flags,
100 cm_user_t *userp, char *tidPathp, cm_req_t *reqp,
101 cm_scache_t **outScpp);
102 extern long cm_Lookup(cm_scache_t *dscp, char *namep, long flags,
103 cm_user_t *userp, cm_req_t *reqp, cm_scache_t **outpScpp);
106 extern long cm_LookupInternal(cm_scache_t *dscp, char *namep, long flags,
107 cm_user_t *userp, cm_req_t *reqp,
108 cm_scache_t **outpScpp);
110 extern afs_int32 cm_TryBulkStat(cm_scache_t *dscp, osi_hyper_t *offsetp,
111 cm_user_t *userp, cm_req_t *reqp);
113 extern long cm_SetAttr(cm_scache_t *scp, cm_attr_t *attrp, cm_user_t *userp,
116 extern long cm_Create(cm_scache_t *scp, char *namep, long flags,
117 cm_attr_t *attrp, cm_scache_t **scpp, cm_user_t *userp, cm_req_t *reqp);
119 extern long cm_FSync(cm_scache_t *scp, cm_user_t *userp, cm_req_t *reqp);
121 extern void cm_StatusFromAttr(struct AFSStoreStatus *statusp,
122 struct cm_scache *scp, struct cm_attr *attrp);
124 extern long cm_Unlink(cm_scache_t *dscp, char *namep, cm_user_t *userp,
127 extern long cm_ApplyDir(cm_scache_t *scp, cm_DirFuncp_t funcp, void *parmp,
128 osi_hyper_t *startOffsetp, cm_user_t *userp, cm_req_t *reqp,
129 cm_scache_t **retscp);
131 extern long cm_MakeDir(cm_scache_t *dscp, char *lastNamep, long flags,
132 cm_attr_t *attrp, cm_user_t *userp, cm_req_t *reqp);
134 extern long cm_RemoveDir(cm_scache_t *dscp, char *lastNamep, cm_user_t *userp,
137 extern long cm_Rename(cm_scache_t *oldDscp, char *oldLastNamep,
138 cm_scache_t *newDscp, char *newLastNamep, cm_user_t *userp,
141 extern long cm_HandleLink(cm_scache_t *linkScp, struct cm_user *userp,
144 extern long cm_Link(cm_scache_t *dscp, char *namep, cm_scache_t *sscp,
145 long flags, cm_user_t *userp, cm_req_t *reqp);
147 extern long cm_SymLink(cm_scache_t *dscp, char *namep, char *contentsp,
148 long flags, cm_attr_t *attrp, cm_user_t *userp, cm_req_t *reqp);
150 extern long cm_AssembleLink(cm_scache_t *linkScp, char *pathSuffixp,
151 cm_scache_t **newRootScpp, cm_space_t **newSpaceBufferp,
152 cm_user_t *userp, cm_req_t *reqp);
154 extern int cm_ExpandSysName(char *inp, char *outp, long outSize,
155 unsigned int sysNameIndex);
157 extern long cm_Open(cm_scache_t *scp, int type, cm_user_t *userp);
159 extern long cm_CheckOpen(cm_scache_t *scp, int openMode, int trunc,
160 cm_user_t *userp, cm_req_t *reqp);
163 * Combinations of file opening access bits for AFS.
164 * We don't insist on write rights to open the file with FILE_WRITE_ATTRIBUTES,
165 * because we want to enable the owner to set/clear the READONLY flag.
166 * The RPC will fail if you can't modify the attributes, anyway.
168 #define AFS_ACCESS_READ (FILE_GENERIC_READ & ~SYNCHRONIZE)
169 #define AFS_ACCESS_WRITE ((FILE_GENERIC_WRITE & ~(READ_CONTROL | SYNCHRONIZE)) \
170 & ~FILE_WRITE_ATTRIBUTES)
172 typedef struct cm_lock_data {
174 unsigned int sLockType;
175 LARGE_INTEGER LOffset, LLength;
178 extern long cm_CheckNTOpen(cm_scache_t *scp, unsigned int desiredAccess,
179 unsigned int createDisp, cm_user_t *userp, cm_req_t *reqp, cm_lock_data_t ** ldpp);
181 extern long cm_CheckNTOpenDone(cm_scache_t *scp, cm_user_t *userp, cm_req_t *reqp,
182 cm_lock_data_t ** ldpp);
184 extern long cm_CheckNTDelete(cm_scache_t *dscp, cm_scache_t *scp,
185 cm_user_t *userp, cm_req_t *reqp);
187 extern long cm_EvaluateSymLink(cm_scache_t *dscp, cm_scache_t *linkScp,
188 cm_scache_t **outScpp, cm_user_t *userp, cm_req_t *reqp);
190 extern long cm_Lock(cm_scache_t *scp, unsigned char sLockType,
191 LARGE_INTEGER LOffset, LARGE_INTEGER LLength, cm_key_t key,
192 int allowWait, cm_user_t *userp, cm_req_t *reqp,
193 cm_file_lock_t **lockpp);
195 #define CM_UNLOCK_BY_FID 0x0001
197 extern long cm_UnlockByKey(cm_scache_t * scp,
203 extern long cm_Unlock(cm_scache_t *scp, unsigned char sLockType,
204 LARGE_INTEGER LOffset, LARGE_INTEGER LLength, cm_key_t key,
205 cm_user_t *userp, cm_req_t *reqp);
207 extern long cm_LockCheckRead(cm_scache_t *scp,
208 LARGE_INTEGER LOffset,
209 LARGE_INTEGER LLength,
212 extern long cm_LockCheckWrite(cm_scache_t *scp,
213 LARGE_INTEGER LOffset,
214 LARGE_INTEGER LLength,
217 extern void cm_CheckLocks(void);
219 extern void cm_ReleaseAllLocks(void);
221 extern long cm_RetryLock(cm_file_lock_t *oldFileLock, int client_is_dead);
223 #define CM_SESSION_SMB 0xffff
224 #define CM_SESSION_IFS 0xfffe
225 #define CM_SESSION_CMINT 0xfffd
226 #define CM_SESSION_RESERVED 0xfff0
228 extern cm_key_t cm_GenerateKey(unsigned int session, unsigned long process_id, unsigned int file_id);
230 #define MAX_SYMLINK_COUNT 16
231 #endif /* __CM_VNODEOPS_H_ENV__ */