windows-addr-change-mods-20060509
[openafs.git] / src / WINNT / afsd / cm_server.h
index ae72d57..9182a2a 100644 (file)
@@ -1,38 +1,46 @@
-/* 
- * Copyright (C) 1998, 1989 Transarc Corporation - All rights reserved
- *
- * (C) COPYRIGHT IBM CORPORATION 1987, 1988
- * LICENSED MATERIALS - PROPERTY OF IBM
- *
- *
+/*
+ * Copyright 2000, International Business Machines Corporation and others.
+ * All Rights Reserved.
+ * 
+ * This software has been released under the terms of the IBM Public
+ * License.  For details, see the LICENSE file in the top-level source
+ * directory or online at http://www.openafs.org/dl/license10.html
  */
+
 #ifndef __CM_SERVER_H_ENV__
 #define __CM_SERVER_H_ENV__ 1
 
+#ifndef DJGPP
 #include <winsock2.h>
+#else /* DJGPP */
+#include <netinet/in.h>
+#endif /* !DJGPP */
 #include <osi.h>
 
 /* pointed to by volumes and cells without holds; cm_serverLock is obtained
  * at the appropriate times to change the pointers to these servers.
  */
 typedef struct cm_server {
-       struct cm_server *allNextp;             /* locked by cm_serverLock */
-        struct sockaddr_in addr;               /* by mx */
-        int type;                              /* by mx */
-       struct cm_conn *connsp;                 /* locked by cm_connLock */
-        long flags;                            /* by mx */
-        struct cm_cell *cellp;                 /* cell containing this server */
-       int refCount;                           /* locked by cm_serverLock */
-        osi_mutex_t mx;
-       unsigned short ipRank;                  /* server priority */
+    struct cm_server *allNextp;                /* locked by cm_serverLock */
+    struct sockaddr_in addr;           /* by mx */
+    int type;                          /* by mx */
+    struct cm_conn *connsp;            /* locked by cm_connLock */
+    afs_int32 flags;                   /* by mx */
+    afs_int32 waitCount;               /* by mx */
+    afs_int32 capabilities;            /* by mx */
+    struct cm_cell *cellp;             /* cell containing this server */
+    unsigned long refCount;            /* locked by cm_serverLock */
+    osi_mutex_t mx;
+    unsigned short ipRank;             /* server priority */
 } cm_server_t;
 
 enum repstate {not_busy, busy, offline};
 
 typedef struct cm_serverRef {
-       struct cm_serverRef *next;
-       struct cm_server *server;
-       enum repstate status;
+    struct cm_serverRef *next;      /* locked by cm_serverLock */
+    struct cm_server *server;       /* locked by cm_serverLock */
+    enum repstate status;           /* locked by cm_serverLock */
+    unsigned long refCount;         /* locked by cm_serverLock */
 } cm_serverRef_t;
 
 /* types */
@@ -41,6 +49,8 @@ typedef struct cm_serverRef {
 
 /* flags */
 #define CM_SERVERFLAG_DOWN     1       /* server is down */
+#define CM_SERVERFLAG_PREF_SET 2       /* server preference set by user */
+#define CM_SERVERFLAG_PINGING  4       /* a ping against this server in progress */
 
 /* flags for procedures */
 #define CM_FLAG_CHECKUPSERVERS         1       /* check working servers */
@@ -55,21 +65,22 @@ typedef struct cm_serverRef {
 /* the maximum number of network interfaces that this client has */ 
 
 #define CM_MAXINTERFACE_ADDR          16
-extern int cm_noIPAddr;                /* number of client network interfaces */
-extern int cm_IPAddr[CM_MAXINTERFACE_ADDR];    /* client's IP address */
-extern int cm_SubnetMask[CM_MAXINTERFACE_ADDR];/* client's subnet mask*/ 
-extern int cm_NetMtu[CM_MAXINTERFACE_ADDR];    /* client's MTU sizes */
-extern int cm_NetFlags[CM_MAXINTERFACE_ADDR];  /* network flags */
 
 extern cm_server_t *cm_NewServer(struct sockaddr_in *addrp, int type,
        struct cm_cell *cellp);
 
 extern cm_serverRef_t *cm_NewServerRef(struct cm_server *serverp);
 
-extern long cm_ChecksumServerList(cm_serverRef_t *serversp);
+extern LONG_PTR cm_ChecksumServerList(cm_serverRef_t *serversp);
+
+extern void cm_GetServer(cm_server_t *);
+
+extern void cm_GetServerNoLock(cm_server_t *);
 
 extern void cm_PutServer(cm_server_t *);
 
+extern void cm_PutServerNoLock(cm_server_t *);
+
 extern cm_server_t *cm_FindServer(struct sockaddr_in *addrp, int type);
 
 extern osi_rwlock_t cm_serverLock;
@@ -88,4 +99,10 @@ extern long cm_ChangeRankServer(cm_serverRef_t** list, cm_server_t* server);
 
 extern void cm_RandomizeServer(cm_serverRef_t** list); 
 
+extern void cm_FreeServer(cm_server_t* server);
+
+extern void cm_FreeServerList(cm_serverRef_t** list);
+
+extern void cm_ForceNewConnectionsAllServers(void);
+
 #endif /*  __CM_SERVER_H_ENV__ */