/*
* Copyright 2000, International Business Machines Corporation and others.
* All Rights Reserved.
- *
+ *
* This software has been released under the terms of the IBM Public
* License. For details, see the LICENSE file in the top-level source
* directory or online at http://www.openafs.org/dl/license10.html
*/
-#ifndef __CM_SERVER_H_ENV__
-#define __CM_SERVER_H_ENV__ 1
+#ifndef OPENAFS_WINNT_AFSD_CM_SERVER_H
+#define OPENAFS_WINNT_AFSD_CM_SERVER_H 1
#include <winsock2.h>
#include <osi.h>
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 */
/* types */
#define CM_SERVER_VLDB 1 /* a VLDB server */
#define CM_SERVER_FILE 2 /* a file server */
-#define CM_SERVER_VOL 3 /* a vol server */
/* flags */
#define CM_SERVERFLAG_DOWN 0x1 /* server is down */
#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 */
+/* the maximum number of network interfaces that this client has */
#define CM_MAXINTERFACE_ADDR 16
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 cm_server_t *cm_allServersp;
-extern void cm_SetServerPrefs(cm_server_t * serverp);
+extern afs_int32 cm_RankServer(cm_server_t * server);
+
+extern void cm_RankUpServers();
+
+extern void cm_SetServerIPRank(cm_server_t * serverp);
extern void cm_InsertServerList(cm_serverRef_t** list,cm_serverRef_t* element);
-extern long cm_ChangeRankServer(cm_serverRef_t** list, cm_server_t* server);
+extern long cm_ChangeRankServer(cm_serverRef_t** list, cm_server_t* server);
-extern void cm_RandomizeServer(cm_serverRef_t** list);
+extern void cm_RandomizeServer(cm_serverRef_t** list);
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;
-#endif /* __CM_SERVER_H_ENV__ */
+
+/* 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 */