/*
* 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
+#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_IDLEDEADTIME_REP
+#define CM_CONN_IDLEDEADTIME_REP 0
+#endif
+#ifndef CM_CONN_NATPINGINTERVAL
+#define CM_CONN_NATPINGINTERVAL 0
+#endif
+
+#define CM_CONN_IFS_HARDDEADTIME 120
+#define CM_CONN_IFS_CONNDEADTIME 60
+#define CM_CONN_IFS_IDLEDEADTIME 1200
+#define CM_CONN_IFS_IDLEDEADTIME_REP 180 /* must be larger than file server hard dead timeout = 120 */
extern unsigned short ConnDeadtimeout;
extern unsigned short HardDeadtimeout;
-extern DWORD 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
+#define CM_CONN_FLAG_FORCE_NEW 1
+#define CM_CONN_FLAG_REPLICATION 2
-/* 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; /* GetTickCount() when this struct was initialized */
+ 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_NEW_CONN_FORCED 0x2
+#define CM_REQ_NORETRY 0x01
+#define CM_REQ_NEW_CONN_FORCED 0x02
+#define CM_REQ_SOURCE_SMB 0x04
+#define CM_REQ_VOLUME_UPDATED 0x08
+#define CM_REQ_WOW64 0x10
+#define CM_REQ_SOURCE_REDIR 0x20
+#define CM_REQ_OFFLINE_VOL_CHK 0x40
/*
* Vice2 error codes
#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
* 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"*/
extern void cm_InitReq(cm_req_t *reqp);
extern int cm_Analyze(cm_conn_t *connp, struct cm_user *up, struct cm_req *reqp,
- struct cm_fid *fidp,
- struct AFSVolSync *volInfop,
- cm_serverRef_t * serversp,
- struct cm_callbackRequest *cbrp, long code);
+ struct cm_fid *fidp,
+ afs_uint32 storeOp,
+ struct AFSVolSync *volInfop,
+ cm_serverRef_t * serversp,
+ struct cm_callbackRequest *cbrp, long code);
-extern long cm_ConnByMServers(struct cm_serverRef *, struct cm_user *,
+extern long cm_ConnByMServers(struct cm_serverRef *, afs_uint32, struct cm_user *,
cm_req_t *, cm_conn_t **);
-extern long cm_ConnByServer(struct cm_server *, struct cm_user *, cm_conn_t **);
+extern long cm_ConnByServer(struct cm_server *, struct cm_user *, afs_uint32, 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);
extern long cm_ServerAvailable(struct cm_fid *fidp, struct cm_user *userp);
-#endif /* __CM_CONN_H_ENV__ */
+#endif /* OPENAFS_WINNT_AFSD_CM_CONN_H */