719d438d39cc66819e8e8e06afcce6bce459c647
[openafs.git] / src / WINNT / afsd / cm_conn.h
1 /*
2  * Copyright 2000, International Business Machines Corporation and others.
3  * All Rights Reserved.
4  * 
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
8  */
9
10 #ifndef __CM_CONN_H_ENV__
11 #define __CM_CONN_H_ENV__ 1
12
13 #define CM_CONN_DEFAULTRDRTIMEOUT       45
14 #define CM_CONN_CONNDEADTIME            60
15 #define CM_CONN_HARDDEADTIME        120
16
17 extern long ConnDeadtimeout;
18 extern long HardDeadtimeout;
19
20 typedef struct cm_conn {
21         struct cm_conn *nextp;          /* locked by cm_connLock */
22         struct cm_server *serverp;      /* locked by cm_serverLock */
23         struct rx_connection *callp;    /* locked by mx */
24         struct cm_user *userp;          /* locked by mx; a held reference */
25         osi_mutex_t mx;                 /* mutex for some of these fields */
26         int refCount;                   /* locked by cm_connLock */
27         int ucgen;                      /* ucellp's generation number */
28         long flags;                     /* locked by mx */
29         int cryptlevel;                 /* encrytion status */
30 } cm_conn_t;
31
32 /* structure used for tracking RPC progress */
33 typedef struct cm_req {
34         DWORD startTime;                /* Quit before RDR times us out */
35         int rpcError;                   /* RPC error code */
36         int volumeError;                /* volume error code */
37         int accessError;                /* access error code */
38         int flags;
39 } cm_req_t;
40
41 /* flags in cm_req structure */
42 #define CM_REQ_NORETRY          0x1
43
44 /*
45  * Vice2 error codes
46  * 3/20/85
47  * Note:  all of the errors listed here are currently generated by the volume
48  * package.  Other vice error codes, should they be needed, could be included
49  * here also.
50  */
51
52 #define VREADONLY       EROFS   /* Attempt to write a read-only volume */
53
54 /* Special error codes, which may require special handling (other than just
55    passing them through directly to the end user) are listed below */
56
57 #define VICE_SPECIAL_ERRORS     101     /* Lowest special error code */
58
59 #define VSALVAGE        101     /* Volume needs salvage */
60 #define VNOVNODE        102     /* Bad vnode number quoted */
61 #define VNOVOL          103     /* Volume not attached, doesn't exist, 
62                                    not created or not online */
63 #define VVOLEXISTS      104     /* Volume already exists */
64 #define VNOSERVICE      105     /* Volume is not in service (i.e. it's
65                                    is out of funds, is obsolete, or somesuch) */
66 #define VOFFLINE        106     /* Volume is off line, for the reason
67                                    given in the offline message */
68 #define VONLINE         107     /* Volume is already on line */
69 #define VDISKFULL       108     /* ENOSPC - Partition is "full",
70                                    i.e. roughly within n% of full */
71 #define VOVERQUOTA      109     /* EDQUOT - Volume max quota exceeded */
72 #define VBUSY           110     /* Volume temporarily unavailable; try again.
73                                    The volume should be available again shortly;
74                                    if it isn't something is wrong.
75                                    Not normally to be propagated to the
76                                    application level */
77 #define VMOVED          111     /* Volume has moved to another server;
78                                    do a VGetVolumeInfo to THIS server to find
79                                    out where */
80
81 #define VRESTARTING     -100    /* server is restarting, otherwise similar to 
82                                    VBUSY above.  This is negative so that old
83                                    cache managers treat it as "server is down"*/
84
85 #include "cm_server.h"
86
87 extern void cm_InitConn(void);
88
89 extern void cm_InitReq(cm_req_t *reqp);
90
91 extern int cm_Analyze(cm_conn_t *connp, struct cm_user *up, struct cm_req *reqp,
92         struct cm_fid *fidp,
93         struct AFSVolSync *volInfop,
94         struct cm_callbackRequest *cbrp, long code);
95
96 extern long cm_ConnByMServers(struct cm_serverRef *, struct cm_user *,
97         cm_req_t *, cm_conn_t **);
98
99 extern long cm_ConnByServer(struct cm_server *, struct cm_user *, cm_conn_t **);
100
101 extern long cm_Conn(struct cm_fid *, struct cm_user *, struct cm_req *,
102         cm_conn_t **);
103
104 extern void cm_PutConn(cm_conn_t *connp);
105
106 extern void cm_GCConnections(cm_server_t *serverp);
107
108 #endif /*  __CM_CONN_H_ENV__ */