Windows: add connection defaults for RDR mode
[openafs.git] / src / WINNT / afsd / cm_conn.h
index fb45484..6587b66 100644 (file)
@@ -1,48 +1,77 @@
 /*
  * 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_CONN_H_ENV__
-#define __CM_CONN_H_ENV__ 1
+#ifndef OPENAFS_WINNT_AFSD_CM_CONN_H
+#define OPENAFS_WINNT_AFSD_CM_CONN_H 1
 
 #define        CM_CONN_DEFAULTRDRTIMEOUT       45
-#define CM_CONN_CONNDEADTIME           60
-#define CM_CONN_HARDDEADTIME        120
+#ifndef CM_CONN_CONNDEADTIME
+#define CM_CONN_CONNDEADTIME            0
+#endif
+#ifndef CM_CONN_HARDDEADTIME
+#define CM_CONN_HARDDEADTIME             0
+#endif
+#ifndef CM_CONN_IDLEDEADTIME
+#define CM_CONN_IDLEDEADTIME             0
+#endif
+#ifndef CM_CONN_NATPINGINTERVAL
+#define CM_CONN_NATPINGINTERVAL          0
+#endif
+
+#define CM_CONN_IFS_HARDDEADTIME       120
+#define CM_CONN_IFS_CONNDEADTIME        50
+#define CM_CONN_IFS_IDLEDEADTIME        50
 
 extern unsigned short ConnDeadtimeout;
 extern unsigned short HardDeadtimeout;
-extern long           RDRtimeout; 
+extern DWORD          RDRtimeout;
+extern afs_uint32     rx_pmtu_discovery;
 
 typedef struct cm_conn {
        struct cm_conn *nextp;          /* locked by cm_connLock */
        struct cm_server *serverp;      /* locked by cm_serverLock */
-        struct rx_connection *callp;   /* locked by mx */
+        struct rx_connection *rxconnp; /* locked by mx */
         struct cm_user *userp;         /* locked by mx; a held reference */
         osi_mutex_t mx;                        /* mutex for some of these fields */
-        unsigned long refCount;                        /* locked by cm_connLock */
+        afs_int32 refCount;            /* Interlocked */
        int ucgen;                      /* ucellp's generation number */
-        long flags;                    /* locked by mx */
+        afs_uint32 flags;              /* locked by mx */
        int cryptlevel;                 /* encrytion status */
 } cm_conn_t;
 
 #define CM_CONN_FLAG_FORCE_NEW 1
 
-/* structure used for tracking RPC progress */
+/*
+ * structure used for tracking RPC progress
+ * and for passing path info from the smb layer
+ * to the cache manager functions.
+ */
 typedef struct cm_req {
-       DWORD startTime;                /* Quit before RDR times us out */
-       int rpcError;                   /* RPC error code */
-       int volumeError;                /* volume error code */
-       int accessError;                /* access error code */
-       int flags;
+    DWORD startTime;           /* Quit before RDR times us out */
+    int rpcError;                      /* RPC error code */
+    int volumeError;           /* volume error code */
+    int accessError;           /* access error code */
+    struct cm_server * tokenIdleErrorServp;  /* server that reported a token/idle error other than expired */
+    int tokenError;
+    int idleError;
+    afs_uint32 flags;
+    clientchar_t * tidPathp;
+    clientchar_t * relPathp;
 } cm_req_t;
 
 /* flags in cm_req structure */
-#define        CM_REQ_NORETRY          0x1
+#define        CM_REQ_NORETRY          0x01
+#define CM_REQ_NEW_CONN_FORCED  0x02
+#define CM_REQ_SOURCE_SMB       0x04
+#define CM_REQ_VOLUME_UPDATED   0x08
+/* 0x10 and 0x20 are reserved for the afs redirector */
+#define CM_REQ_OFFLINE_VOL_CHK  0x40
 
 /*
  * Vice2 error codes
@@ -61,7 +90,7 @@ typedef struct cm_req {
 
 #define VSALVAGE       101     /* Volume needs salvage */
 #define VNOVNODE       102     /* Bad vnode number quoted */
-#define VNOVOL         103     /* Volume not attached, doesn't exist, 
+#define VNOVOL         103     /* Volume not attached, doesn't exist,
                                   not created or not online */
 #define VVOLEXISTS     104     /* Volume already exists */
 #define VNOSERVICE     105     /* Volume is not in service (i.e. it's
@@ -87,7 +116,7 @@ typedef struct cm_req {
                                  * vos examine to find out the current
                                  * restrictions. */
 
-#define VRESTARTING    -100    /* server is restarting, otherwise similar to 
+#define VRESTARTING    -100    /* server is restarting, otherwise similar to
                                   VBUSY above.  This is negative so that old
                                   cache managers treat it as "server is down"*/
 
@@ -112,9 +141,13 @@ extern long cm_ConnByMServers(struct cm_serverRef *, struct cm_user *,
 
 extern long cm_ConnByServer(struct cm_server *, struct cm_user *, cm_conn_t **);
 
-extern long cm_Conn(struct cm_fid *, struct cm_user *, struct cm_req *,
+extern long cm_ConnFromFID(struct cm_fid *, struct cm_user *, struct cm_req *,
        cm_conn_t **);
 
+extern long cm_ConnFromVolume(struct cm_volume *volp, unsigned long volid,
+                              struct cm_user *userp, cm_req_t *reqp,
+                              cm_conn_t **connpp);
+
 extern void cm_PutConn(cm_conn_t *connp);
 
 extern void cm_GCConnections(cm_server_t *serverp);
@@ -123,4 +156,6 @@ extern struct rx_connection * cm_GetRxConn(cm_conn_t *connp);
 
 extern void cm_ForceNewConnections(cm_server_t *serverp);
 
-#endif /*  __CM_CONN_H_ENV__ */
+extern long cm_ServerAvailable(struct cm_fid *fidp, struct cm_user *userp);
+
+#endif /*  OPENAFS_WINNT_AFSD_CM_CONN_H */