struct cm_cell *cellp; /* cell containing this server */
afs_int32 refCount; /* Interlocked with cm_serverLock */
osi_mutex_t mx;
- unsigned short ipRank; /* server priority */
+ unsigned short ipRank; /* network class rank */
+ unsigned short adminRank; /* set if admin sets a rank
+ * (fs setserverpref or registry or dns)
+ */
+ unsigned short activeRank; /* Computed rank combining ipRank, adminRank,
+ * and performance data.
+ */
cm_server_vols_t * vols; /* by mx */
time_t downTime; /* by mx */
afsUUID uuid; /* by mx */
- unsigned short adminRank; /* only set if admin sets a rank */
} cm_server_t;
enum repstate {srv_not_busy, srv_busy, srv_offline, srv_deleted};
#define CM_IPRANK_HI 20000 /* on same subnet */
#define CM_IPRANK_MED 30000 /* on same network */
#define CM_IPRANK_LOW 40000 /* on different networks */
+#define CM_IPRANK_DOWN 65535 /* unavailable */
/* the maximum number of network interfaces that this client has */
extern cm_serverRef_t *cm_NewServerRef(struct cm_server *serverp, afs_uint32 volID);
+extern void cm_GetServerRef(cm_serverRef_t *tsrp, int locked);
+
+extern afs_int32 cm_PutServerRef(cm_serverRef_t *tsrp, int locked);
+
extern LONG_PTR cm_ChecksumServerList(cm_serverRef_t *serversp);
extern void cm_GetServer(cm_server_t *);
extern void cm_PutServerNoLock(cm_server_t *);
-extern cm_server_t *cm_FindServer(struct sockaddr_in *addrp, int type);
+extern cm_server_t *cm_FindServer(struct sockaddr_in *addrp, int type, int locked);
extern osi_rwlock_t cm_serverLock;
extern void cm_RankUpServers();
-extern void cm_SetServerPrefs(cm_server_t * serverp);
+extern void cm_SetServerIPRank(cm_server_t * serverp);
extern void cm_InsertServerList(cm_serverRef_t** list,cm_serverRef_t* element);
extern void cm_FreeServer(cm_server_t* server);
+extern afs_uint32 cm_ServerListSize(cm_serverRef_t* list);
+
#define CM_FREESERVERLIST_DELETE 1
extern void cm_FreeServerList(cm_serverRef_t** list, afs_uint32 flags);
extern void cm_SetServerNoInlineBulk(cm_server_t * serverp, int no);
-extern cm_server_t * cm_FindServerByIP(afs_uint32 addr, unsigned short port, int type);
+extern cm_server_t * cm_FindServerByIP(afs_uint32 addr, unsigned short port, int type, int locked);
-extern cm_server_t * cm_FindServerByUuid(afsUUID* uuid, int type);
+extern cm_server_t * cm_FindServerByUuid(afsUUID* uuid, int type, int locked);
extern void cm_SetLanAdapterChangeDetected(void);
extern int cm_ServerEqual(cm_server_t *srv1, cm_server_t *srv2);
+extern int cm_IsServerListEmpty(cm_serverRef_t *serversp);
+
+extern void cm_ServerClearRPCStats(void);
+
/* Protected by cm_syscfgLock (rw) */
extern int cm_noIPAddr; /* number of client network interfaces */
extern int cm_IPAddr[CM_MAXINTERFACE_ADDR]; /* client's IP address in host order */
extern int cm_NetMtu[CM_MAXINTERFACE_ADDR]; /* client's MTU sizes */
extern int cm_NetFlags[CM_MAXINTERFACE_ADDR]; /* network flags */
extern int cm_LanAdapterChangeDetected;
+
+/* Protected by cm_serverLock */
+extern cm_server_t *cm_allServersp;
+extern afs_uint32 cm_numFileServers;
+extern afs_uint32 cm_numVldbServers;
#endif /* OPENAFS_WINNT_AFSD_CM_SERVER_H */