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
#include <netinet/in.h>
20
/* pointed to by volumes and cells without holds; cm_serverLock is obtained
21
* at the appropriate times to change the pointers to these servers.
23
typedef struct cm_server {
24
struct cm_server *allNextp; /* locked by cm_serverLock */
25
struct sockaddr_in addr; /* by mx */
27
struct cm_conn *connsp; /* locked by cm_connLock */
28
long flags; /* by mx */
29
struct cm_cell *cellp; /* cell containing this server */
30
int refCount; /* locked by cm_serverLock */
32
unsigned short ipRank; /* server priority */
35
enum repstate {not_busy, busy, offline};
37
typedef struct cm_serverRef {
38
struct cm_serverRef *next;
39
struct cm_server *server;
44
#define CM_SERVER_VLDB 1 /* a VLDB server */
45
#define CM_SERVER_FILE 2 /* a file server */
48
#define CM_SERVERFLAG_DOWN 1 /* server is down */
50
/* flags for procedures */
51
#define CM_FLAG_CHECKUPSERVERS 1 /* check working servers */
52
#define CM_FLAG_CHECKDOWNSERVERS 2 /* check down servers */
54
/* values for ipRank */
55
#define CM_IPRANK_TOP 5000 /* on same machine */
56
#define CM_IPRANK_HI 20000 /* on same subnet */
57
#define CM_IPRANK_MED 30000 /* on same network */
58
#define CM_IPRANK_LOW 40000 /* on different networks */
60
/* the maximum number of network interfaces that this client has */
62
#define CM_MAXINTERFACE_ADDR 16
63
extern int cm_noIPAddr; /* number of client network interfaces */
64
extern int cm_IPAddr[CM_MAXINTERFACE_ADDR]; /* client's IP address */
65
extern int cm_SubnetMask[CM_MAXINTERFACE_ADDR];/* client's subnet mask*/
66
extern int cm_NetMtu[CM_MAXINTERFACE_ADDR]; /* client's MTU sizes */
67
extern int cm_NetFlags[CM_MAXINTERFACE_ADDR]; /* network flags */
69
extern cm_server_t *cm_NewServer(struct sockaddr_in *addrp, int type,
70
struct cm_cell *cellp);
72
extern cm_serverRef_t *cm_NewServerRef(struct cm_server *serverp);
74
extern long cm_ChecksumServerList(cm_serverRef_t *serversp);
76
extern void cm_PutServer(cm_server_t *);
78
extern cm_server_t *cm_FindServer(struct sockaddr_in *addrp, int type);
80
extern osi_rwlock_t cm_serverLock;
82
extern void cm_InitServer(void);
84
extern void cm_CheckServers(long flags, struct cm_cell *cellp);
86
extern cm_server_t *cm_allServersp;
88
extern void cm_SetServerPrefs(cm_server_t * serverp);
90
extern void cm_InsertServerList(cm_serverRef_t** list,cm_serverRef_t* element);
92
extern long cm_ChangeRankServer(cm_serverRef_t** list, cm_server_t* server);
94
extern void cm_RandomizeServer(cm_serverRef_t** list);
96
#endif /* __CM_SERVER_H_ENV__ */