windows-libafsconf-20090525
[openafs.git] / src / WINNT / afsd / cm_cell.h
1 /*
2  * Copyright 2000, International Business Machines Corporation and others.
3  * All Rights Reserved.
4  * 
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
8  */
9
10 #ifndef __CELL_H_ENV_
11 #define __CELL_H_ENV_ 1
12
13 #define CELL_MAXNAMELEN                 256
14
15 #define CM_CELL_MAGIC    ('C' | 'E' <<8 | 'L'<<16 | 'L'<<24)
16
17 /* a cell structure */
18 typedef struct cm_cell {        
19     afs_uint32  magic;
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) */
30     char linkedName[CELL_MAXNAMELEN];   /* linked cell name; cm_cellLock */
31 } cm_cell_t;
32
33 /* These are bit flag values */
34 #define CM_CELLFLAG_SUID               1  /* setuid flag; not yet used */
35 #define CM_CELLFLAG_DNS                2  /* cell servers are from DNS */
36 #define CM_CELLFLAG_VLSERVER_INVALID   4  /* cell servers are invalid */
37 #define CM_CELLFLAG_FREELANCE          8  /* local freelance fake cell */
38 #define CM_CELLFLAG_IN_NAMEHASH        0x10
39 #define CM_CELLFLAG_IN_IDHASH          0x20
40
41 typedef struct cm_cell_rock {
42     cm_cell_t * cellp;
43     afs_uint32  flags;
44 } cm_cell_rock_t;
45
46
47 #define CM_CELL_NAME_HASH(name)  (SDBMHash(name) % cm_data.cellHashTableSize)
48
49 #define CM_CELL_ID_HASH(id)   ((unsigned long) id % cm_data.cellHashTableSize)
50
51 extern void cm_InitCell(int newFile, long maxCells);
52
53 extern long cm_ShutdownCell(void);
54
55 extern long cm_ValidateCell(void);
56
57 extern cm_cell_t *cm_GetCell(char *namep, afs_uint32 flags);
58
59 extern cm_cell_t *cm_GetCell_Gen(char *namep, char *newnamep, afs_uint32 flags);
60
61 extern cm_cell_t *cm_FindCellByID(afs_int32 cellID, afs_uint32 flags);
62
63 extern void cm_ChangeRankCellVLServer(cm_server_t *tsp);
64
65 extern osi_rwlock_t cm_cellLock;
66
67 extern cm_cell_t *cm_allCellsp;
68
69 extern int cm_DumpCells(FILE *, char *, int);
70
71 extern void cm_AddCellToNameHashTable(cm_cell_t * cellp);
72
73 extern void cm_AddCellToIDHashTable(cm_cell_t * cellp);
74
75 extern long cm_AddCellProc(void *rockp, struct sockaddr_in *addrp, char *namep);
76
77 extern cm_cell_t *cm_UpdateCell(cm_cell_t * cp, afs_uint32 flags);
78
79 #endif /* __CELL_H_ENV_ */