2 * Copyright 2000, International Business Machines Corporation and others.
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
10 #ifndef __CM_CONN_H_ENV__
11 #define __CM_CONN_H_ENV__ 1
13 #define CM_CONN_DEFAULTRDRTIMEOUT 45
14 #define CM_CONN_CONNDEADTIME 60
15 #define CM_CONN_HARDDEADTIME 120
17 extern long ConnDeadtimeout;
18 extern long HardDeadtimeout;
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 */
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 */
41 /* flags in cm_req structure */
42 #define CM_REQ_NORETRY 0x1
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
52 #define VREADONLY EROFS /* Attempt to write a read-only volume */
54 /* Special error codes, which may require special handling (other than just
55 passing them through directly to the end user) are listed below */
57 #define VICE_SPECIAL_ERRORS 101 /* Lowest special error code */
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
77 #define VMOVED 111 /* Volume has moved to another server;
78 do a VGetVolumeInfo to THIS server to find
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"*/
85 #include "cm_server.h"
87 extern void cm_InitConn(void);
89 extern void cm_InitReq(cm_req_t *reqp);
91 extern int cm_Analyze(cm_conn_t *connp, struct cm_user *up, struct cm_req *reqp,
93 struct AFSVolSync *volInfop,
94 struct cm_serverRef_t * serversp,
95 struct cm_callbackRequest *cbrp, long code);
97 extern long cm_ConnByMServers(struct cm_serverRef *, struct cm_user *,
98 cm_req_t *, cm_conn_t **);
100 extern long cm_ConnByServer(struct cm_server *, struct cm_user *, cm_conn_t **);
102 extern long cm_Conn(struct cm_fid *, struct cm_user *, struct cm_req *,
105 extern void cm_PutConn(cm_conn_t *connp);
107 extern void cm_GCConnections(cm_server_t *serverp);
109 #endif /* __CM_CONN_H_ENV__ */