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 OPENAFS_WINNT_AFSD_CM_SERVER_H
11 #define OPENAFS_WINNT_AFSD_CM_SERVER_H 1
16 /* this value is set to 1022 in order to */
17 #define NUM_SERVER_VOLS (32 - sizeof(void *) / 4)
18 typedef struct cm_server_vols {
19 afs_uint32 ids[NUM_SERVER_VOLS];
20 struct cm_server_vols *nextp;
23 /* pointed to by volumes and cells without holds; cm_serverLock is obtained
24 * at the appropriate times to change the pointers to these servers.
26 typedef struct cm_server {
27 struct cm_server *allNextp; /* locked by cm_serverLock */
28 struct sockaddr_in addr; /* by mx */
30 struct cm_conn *connsp; /* locked by cm_connLock */
31 afs_int32 flags; /* by mx */
32 afs_int32 waitCount; /* by mx */
33 afs_int32 capabilities; /* by mx */
34 struct cm_cell *cellp; /* cell containing this server */
35 afs_int32 refCount; /* Interlocked with cm_serverLock */
37 unsigned short ipRank; /* server priority */
38 cm_server_vols_t * vols; /* by mx */
39 time_t downTime; /* by mx */
40 afsUUID uuid; /* by mx */
41 unsigned short adminRank; /* only set if admin sets a rank */
44 enum repstate {srv_not_busy, srv_busy, srv_offline, srv_deleted};
46 typedef struct cm_serverRef {
47 struct cm_serverRef *next; /* locked by cm_serverLock */
48 struct cm_server *server; /* locked by cm_serverLock */
49 enum repstate status; /* locked by cm_serverLock */
50 afs_int32 refCount; /* locked by cm_serverLock */
51 afs_uint32 volID; /* locked by cm_serverLock */
55 #define CM_SERVER_VLDB 1 /* a VLDB server */
56 #define CM_SERVER_FILE 2 /* a file server */
59 #define CM_SERVERFLAG_DOWN 0x1 /* server is down */
60 #define CM_SERVERFLAG_PREF_SET 0x2 /* server preference set by user */
61 #define CM_SERVERFLAG_PINGING 0x4 /* a ping against this server in progress */
62 #define CM_SERVERFLAG_NO64BIT 0x8 /* server has no support for
64 #define CM_SERVERFLAG_NOINLINEBULK 0x10 /* server has no support for inline bulk */
65 #define CM_SERVERFLAG_UUID 0x20 /* server uuid is known */
67 /* flags for procedures */
68 #define CM_FLAG_CHECKUPSERVERS 1 /* check working servers */
69 #define CM_FLAG_CHECKDOWNSERVERS 2 /* check down servers */
70 #define CM_FLAG_CHECKVLDBSERVERS 4 /* check only vldb servers */
71 #define CM_FLAG_CHECKFILESERVERS 8 /* check only file servers */
73 /* values for ipRank */
74 #define CM_IPRANK_TOP 5000 /* on same machine */
75 #define CM_IPRANK_HI 20000 /* on same subnet */
76 #define CM_IPRANK_MED 30000 /* on same network */
77 #define CM_IPRANK_LOW 40000 /* on different networks */
79 /* the maximum number of network interfaces that this client has */
81 #define CM_MAXINTERFACE_ADDR 16
83 extern cm_server_t *cm_NewServer(struct sockaddr_in *addrp, int type,
84 struct cm_cell *cellp, afsUUID *uuidp, afs_uint32 flags);
86 extern cm_serverRef_t *cm_NewServerRef(struct cm_server *serverp, afs_uint32 volID);
88 extern LONG_PTR cm_ChecksumServerList(cm_serverRef_t *serversp);
90 extern void cm_GetServer(cm_server_t *);
92 extern void cm_GetServerNoLock(cm_server_t *);
94 extern void cm_PutServer(cm_server_t *);
96 extern void cm_PutServerNoLock(cm_server_t *);
98 extern cm_server_t *cm_FindServer(struct sockaddr_in *addrp, int type);
100 extern osi_rwlock_t cm_serverLock;
102 extern osi_rwlock_t cm_syscfgLock;
104 extern void cm_InitServer(void);
106 extern void cm_CheckServers(afs_uint32 flags, struct cm_cell *cellp);
108 extern cm_server_t *cm_allServersp;
110 extern afs_int32 cm_RankServer(cm_server_t * server);
112 extern void cm_RankUpServers();
114 extern void cm_SetServerPrefs(cm_server_t * serverp);
116 extern void cm_InsertServerList(cm_serverRef_t** list,cm_serverRef_t* element);
118 extern long cm_ChangeRankServer(cm_serverRef_t** list, cm_server_t* server);
120 extern void cm_RandomizeServer(cm_serverRef_t** list);
122 extern void cm_FreeServer(cm_server_t* server);
124 #define CM_FREESERVERLIST_DELETE 1
126 extern void cm_FreeServerList(cm_serverRef_t** list, afs_uint32 flags);
128 extern void cm_ForceNewConnectionsAllServers(void);
130 extern void cm_SetServerNo64Bit(cm_server_t * serverp, int no64bit);
132 extern void cm_SetServerNoInlineBulk(cm_server_t * serverp, int no);
134 extern cm_server_t * cm_FindServerByIP(afs_uint32 addr, unsigned short port, int type);
136 extern cm_server_t * cm_FindServerByUuid(afsUUID* uuid, int type);
138 extern void cm_SetLanAdapterChangeDetected(void);
140 extern void cm_RemoveVolumeFromServer(cm_server_t * serverp, afs_uint32 volID);
142 extern int cm_DumpServers(FILE *outputFile, char *cookie, int lock);
144 extern int cm_ServerEqual(cm_server_t *srv1, cm_server_t *srv2);
146 /* Protected by cm_syscfgLock (rw) */
147 extern int cm_noIPAddr; /* number of client network interfaces */
148 extern int cm_IPAddr[CM_MAXINTERFACE_ADDR]; /* client's IP address in host order */
149 extern int cm_SubnetMask[CM_MAXINTERFACE_ADDR];/* client's subnet mask in host order*/
150 extern int cm_NetMtu[CM_MAXINTERFACE_ADDR]; /* client's MTU sizes */
151 extern int cm_NetFlags[CM_MAXINTERFACE_ADDR]; /* network flags */
152 extern int cm_LanAdapterChangeDetected;
154 /* Protected by cm_serverLock */
155 extern cm_server_t *cm_allServersp;
156 extern afs_uint32 cm_numFileServers;
157 extern afs_uint32 cm_numVldbServers;
158 #endif /* OPENAFS_WINNT_AFSD_CM_SERVER_H */