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
11 #define __CELL_H_ENV_ 1
13 #define CELL_MAXNAMELEN 256
15 #define CM_CELL_MAGIC ('C' | 'E' <<8 | 'L'<<16 | 'L'<<24)
17 /* a cell structure */
18 typedef struct cm_cell {
20 afs_int32 cellID; /* cell ID */
21 struct cm_cell *allNextp; /* locked by cm_cellLock */
22 struct cm_cell *nameNextp; /* locked by cm_cellLock */
23 struct cm_cell *idNextp; /* locked by cm_cellLock */
24 struct cm_cell *freeNextp;
25 char name[CELL_MAXNAMELEN]; /* cell name; never changes */
26 cm_serverRef_t *vlServersp; /* locked by cm_serverLock */
27 osi_mutex_t mx; /* mutex locking fields (flags) */
28 long flags; /* locked by mx */
29 time_t timeout; /* if dns, time at which the server addrs expire (mx) */
32 /* These are bit flag values */
33 #define CM_CELLFLAG_SUID 1 /* setuid flag; not yet used */
34 #define CM_CELLFLAG_DNS 2 /* cell servers are from DNS */
35 #define CM_CELLFLAG_VLSERVER_INVALID 4 /* cell servers are invalid */
36 #define CM_CELLFLAG_FREELANCE 8 /* local freelance fake cell */
37 #define CM_CELLFLAG_IN_NAMEHASH 0x10
38 #define CM_CELLFLAG_IN_IDHASH 0x20
40 typedef struct cm_cell_rock {
46 #define CM_CELL_NAME_HASH(name) (SDBMHash(name) % cm_data.cellHashTableSize)
48 #define CM_CELL_ID_HASH(id) ((unsigned long) id % cm_data.cellHashTableSize)
50 extern void cm_InitCell(int newFile, long maxCells);
52 extern long cm_ShutdownCell(void);
54 extern long cm_ValidateCell(void);
56 extern cm_cell_t *cm_GetCell(char *namep, afs_uint32 flags);
58 extern cm_cell_t *cm_GetCell_Gen(char *namep, char *newnamep, afs_uint32 flags);
60 extern cm_cell_t *cm_FindCellByID(afs_int32 cellID, afs_uint32 flags);
62 extern void cm_ChangeRankCellVLServer(cm_server_t *tsp);
64 extern osi_rwlock_t cm_cellLock;
66 extern cm_cell_t *cm_allCellsp;
68 extern int cm_DumpCells(FILE *, char *, int);
70 extern void cm_AddCellToNameHashTable(cm_cell_t * cellp);
72 extern void cm_AddCellToIDHashTable(cm_cell_t * cellp);
74 extern long cm_AddCellProc(void *rockp, struct sockaddr_in *addrp, char *namep);
76 extern cm_cell_t *cm_UpdateCell(cm_cell_t * cp, afs_uint32 flags);
78 #endif /* __CELL_H_ENV_ */