#include "cm_server.h"
+#define CELL_MAXNAMELEN 256
+
+#define CM_CELL_MAGIC ('C' | 'E' <<8 | 'L'<<16 | 'L'<<24)
+
/* a cell structure */
-typedef struct cm_cell {
- long cellID; /* cell ID */
- struct cm_cell *nextp; /* locked by cm_cellLock */
- char *namep; /* cell name; never changes */
- struct cm_serverRef *vlServersp; /* locked by cm_serverLock */
- osi_mutex_t mx; /* mutex locking fields (flags) */
- long flags; /* locked by mx */
+typedef struct cm_cell {
+ afs_uint32 magic;
+ afs_int32 cellID; /* cell ID */
+ struct cm_cell *nextp; /* locked by cm_cellLock */
+ char name[CELL_MAXNAMELEN]; /* cell name; never changes */
+ cm_serverRef_t *vlServersp; /* locked by cm_serverLock */
+ osi_mutex_t mx; /* mutex locking fields (flags) */
+ long flags; /* locked by mx */
+ time_t timeout; /* if dns, time at which the server addrs expire */
} cm_cell_t;
-#define CM_CELLFLAG_SUID 1 /* setuid flag; not yet used */
+/* These are bit flag values */
+#define CM_CELLFLAG_SUID 1 /* setuid flag; not yet used */
+#define CM_CELLFLAG_DNS 2 /* cell servers are from DNS */
+#define CM_CELLFLAG_VLSERVER_INVALID 4 /* cell servers are invalid */
+#define CM_CELLFLAG_FREELANCE 8 /* local freelance fake cell */
+
+extern void cm_InitCell(int newFile, long maxCells);
-extern void cm_InitCell(void);
+extern long cm_ShutdownCell(void);
+
+extern long cm_ValidateCell(void);
extern cm_cell_t *cm_GetCell(char *namep, long flags);
-extern cm_cell_t *cm_FindCellByID(long cellID);
+extern cm_cell_t *cm_GetCell_Gen(char *namep, char *newnamep, long flags);
+
+extern cm_cell_t *cm_FindCellByID(afs_int32 cellID);
extern void cm_ChangeRankCellVLServer(cm_server_t *tsp);
extern cm_cell_t *cm_allCellsp;
+extern int cm_DumpCells(FILE *, char *, int);
+
#endif /* __CELL_H_ENV_ */