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
10 #ifndef __CM_SERVER_H_ENV__
11 #define __CM_SERVER_H_ENV__ 1
16 /* pointed to by volumes and cells without holds; cm_serverLock is obtained
17 * at the appropriate times to change the pointers to these servers.
19 typedef struct cm_server {
20 struct cm_server *allNextp; /* locked by cm_serverLock */
21 struct sockaddr_in addr; /* by mx */
23 struct cm_conn *connsp; /* locked by cm_connLock */
24 afs_int32 flags; /* by mx */
25 afs_int32 waitCount; /* by mx */
26 afs_int32 capabilities; /* by mx */
27 struct cm_cell *cellp; /* cell containing this server */
28 unsigned long refCount; /* locked by cm_serverLock */
30 unsigned short ipRank; /* server priority */
33 enum repstate {not_busy, busy, offline};
35 typedef struct cm_serverRef {
36 struct cm_serverRef *next; /* locked by cm_serverLock */
37 struct cm_server *server; /* locked by cm_serverLock */
38 enum repstate status; /* locked by cm_serverLock */
39 unsigned long refCount; /* locked by cm_serverLock */
43 #define CM_SERVER_VLDB 1 /* a VLDB server */
44 #define CM_SERVER_FILE 2 /* a file server */
47 #define CM_SERVERFLAG_DOWN 0x1 /* server is down */
48 #define CM_SERVERFLAG_PREF_SET 0x2 /* server preference set by user */
49 #define CM_SERVERFLAG_PINGING 0x4 /* a ping against this server in progress */
50 #define CM_SERVERFLAG_NO64BIT 0x8 /* server has no support for
52 #define CM_SERVERFLAG_NOINLINEBULK 0x10 /* server has no support for inline bulk */
54 /* flags for procedures */
55 #define CM_FLAG_CHECKUPSERVERS 1 /* check working servers */
56 #define CM_FLAG_CHECKDOWNSERVERS 2 /* check down servers */
58 /* values for ipRank */
59 #define CM_IPRANK_TOP 5000 /* on same machine */
60 #define CM_IPRANK_HI 20000 /* on same subnet */
61 #define CM_IPRANK_MED 30000 /* on same network */
62 #define CM_IPRANK_LOW 40000 /* on different networks */
64 /* the maximum number of network interfaces that this client has */
66 #define CM_MAXINTERFACE_ADDR 16
68 extern cm_server_t *cm_NewServer(struct sockaddr_in *addrp, int type,
69 struct cm_cell *cellp);
71 extern cm_serverRef_t *cm_NewServerRef(struct cm_server *serverp);
73 extern LONG_PTR cm_ChecksumServerList(cm_serverRef_t *serversp);
75 extern void cm_GetServer(cm_server_t *);
77 extern void cm_GetServerNoLock(cm_server_t *);
79 extern void cm_PutServer(cm_server_t *);
81 extern void cm_PutServerNoLock(cm_server_t *);
83 extern cm_server_t *cm_FindServer(struct sockaddr_in *addrp, int type);
85 extern osi_rwlock_t cm_serverLock;
87 extern void cm_InitServer(void);
89 extern void cm_CheckServers(long flags, struct cm_cell *cellp);
91 extern cm_server_t *cm_allServersp;
93 extern void cm_SetServerPrefs(cm_server_t * serverp);
95 extern void cm_InsertServerList(cm_serverRef_t** list,cm_serverRef_t* element);
97 extern long cm_ChangeRankServer(cm_serverRef_t** list, cm_server_t* server);
99 extern void cm_RandomizeServer(cm_serverRef_t** list);
101 extern void cm_FreeServer(cm_server_t* server);
103 extern void cm_FreeServerList(cm_serverRef_t** list);
105 extern void cm_ForceNewConnectionsAllServers(void);
107 extern void cm_SetServerNo64Bit(cm_server_t * serverp, int no64bit);
109 extern void cm_SetServerNoInlineBulk(cm_server_t * serverp, int no);
111 #endif /* __CM_SERVER_H_ENV__ */