2 * Copyright (C) 1998, 1989 Transarc Corporation - All rights reserved
4 * (C) COPYRIGHT IBM CORPORATION 1987, 1988
5 * LICENSED MATERIALS - PROPERTY OF IBM
9 #ifndef __CM_SERVER_H_ENV__
10 #define __CM_SERVER_H_ENV__ 1
15 /* pointed to by volumes and cells without holds; cm_serverLock is obtained
16 * at the appropriate times to change the pointers to these servers.
18 typedef struct cm_server {
19 struct cm_server *allNextp; /* locked by cm_serverLock */
20 struct sockaddr_in addr; /* by mx */
22 struct cm_conn *connsp; /* locked by cm_connLock */
23 long flags; /* by mx */
24 struct cm_cell *cellp; /* cell containing this server */
25 int refCount; /* locked by cm_serverLock */
27 unsigned short ipRank; /* server priority */
30 enum repstate {not_busy, busy, offline};
32 typedef struct cm_serverRef {
33 struct cm_serverRef *next;
34 struct cm_server *server;
39 #define CM_SERVER_VLDB 1 /* a VLDB server */
40 #define CM_SERVER_FILE 2 /* a file server */
43 #define CM_SERVERFLAG_DOWN 1 /* server is down */
45 /* flags for procedures */
46 #define CM_FLAG_CHECKUPSERVERS 1 /* check working servers */
47 #define CM_FLAG_CHECKDOWNSERVERS 2 /* check down servers */
49 /* values for ipRank */
50 #define CM_IPRANK_TOP 5000 /* on same machine */
51 #define CM_IPRANK_HI 20000 /* on same subnet */
52 #define CM_IPRANK_MED 30000 /* on same network */
53 #define CM_IPRANK_LOW 40000 /* on different networks */
55 /* the maximum number of network interfaces that this client has */
57 #define CM_MAXINTERFACE_ADDR 16
58 extern int cm_noIPAddr; /* number of client network interfaces */
59 extern int cm_IPAddr[CM_MAXINTERFACE_ADDR]; /* client's IP address */
60 extern int cm_SubnetMask[CM_MAXINTERFACE_ADDR];/* client's subnet mask*/
61 extern int cm_NetMtu[CM_MAXINTERFACE_ADDR]; /* client's MTU sizes */
62 extern int cm_NetFlags[CM_MAXINTERFACE_ADDR]; /* network flags */
64 extern cm_server_t *cm_NewServer(struct sockaddr_in *addrp, int type,
65 struct cm_cell *cellp);
67 extern cm_serverRef_t *cm_NewServerRef(struct cm_server *serverp);
69 extern long cm_ChecksumServerList(cm_serverRef_t *serversp);
71 extern void cm_PutServer(cm_server_t *);
73 extern cm_server_t *cm_FindServer(struct sockaddr_in *addrp, int type);
75 extern osi_rwlock_t cm_serverLock;
77 extern void cm_InitServer(void);
79 extern void cm_CheckServers(long flags, struct cm_cell *cellp);
81 extern cm_server_t *cm_allServersp;
83 extern void cm_SetServerPrefs(cm_server_t * serverp);
85 extern void cm_InsertServerList(cm_serverRef_t** list,cm_serverRef_t* element);
87 extern long cm_ChangeRankServer(cm_serverRef_t** list, cm_server_t* server);
89 extern void cm_RandomizeServer(cm_serverRef_t** list);
91 #endif /* __CM_SERVER_H_ENV__ */