Initial IBM OpenAFS 1.0 tree
[openafs.git] / src / WINNT / afsd / cm_server.h
1 /* 
2  * Copyright (C) 1998, 1989 Transarc Corporation - All rights reserved
3  *
4  * (C) COPYRIGHT IBM CORPORATION 1987, 1988
5  * LICENSED MATERIALS - PROPERTY OF IBM
6  *
7  *
8  */
9 #ifndef __CM_SERVER_H_ENV__
10 #define __CM_SERVER_H_ENV__ 1
11
12 #include <winsock2.h>
13 #include <osi.h>
14
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.
17  */
18 typedef struct cm_server {
19         struct cm_server *allNextp;             /* locked by cm_serverLock */
20         struct sockaddr_in addr;                /* by mx */
21         int type;                               /* 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 */
26         osi_mutex_t mx;
27         unsigned short ipRank;                  /* server priority */
28 } cm_server_t;
29
30 enum repstate {not_busy, busy, offline};
31
32 typedef struct cm_serverRef {
33         struct cm_serverRef *next;
34         struct cm_server *server;
35         enum repstate status;
36 } cm_serverRef_t;
37
38 /* types */
39 #define CM_SERVER_VLDB          1       /* a VLDB server */
40 #define CM_SERVER_FILE          2       /* a file server */
41
42 /* flags */
43 #define CM_SERVERFLAG_DOWN      1       /* server is down */
44
45 /* flags for procedures */
46 #define CM_FLAG_CHECKUPSERVERS          1       /* check working servers */
47 #define CM_FLAG_CHECKDOWNSERVERS        2       /* check down servers */
48
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 */
54
55 /* the maximum number of network interfaces that this client has */ 
56
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 */
63
64 extern cm_server_t *cm_NewServer(struct sockaddr_in *addrp, int type,
65         struct cm_cell *cellp);
66
67 extern cm_serverRef_t *cm_NewServerRef(struct cm_server *serverp);
68
69 extern long cm_ChecksumServerList(cm_serverRef_t *serversp);
70
71 extern void cm_PutServer(cm_server_t *);
72
73 extern cm_server_t *cm_FindServer(struct sockaddr_in *addrp, int type);
74
75 extern osi_rwlock_t cm_serverLock;
76
77 extern void cm_InitServer(void);
78
79 extern void cm_CheckServers(long flags, struct cm_cell *cellp);
80
81 extern cm_server_t *cm_allServersp;
82
83 extern void cm_SetServerPrefs(cm_server_t * serverp);
84
85 extern void cm_InsertServerList(cm_serverRef_t** list,cm_serverRef_t* element);
86
87 extern long cm_ChangeRankServer(cm_serverRef_t** list, cm_server_t* server); 
88
89 extern void cm_RandomizeServer(cm_serverRef_t** list); 
90
91 #endif /*  __CM_SERVER_H_ENV__ */