Coda Distributed File System
comm.h
Go to the documentation of this file.
1/* BLURB gpl
2
3 Coda File System
4 Release 8
5
6 Copyright (c) 1987-2021 Carnegie Mellon University
7 Additional copyrights listed below
8
9This code is distributed "AS IS" without warranty of any kind under
10the terms of the GNU General Public Licence Version 2, as shown in the
11file LICENSE. The technical and financial contributors to Coda are
12listed in the file CREDITS.
13
14 Additional copyrights
15 none currently
16
17#*/
18
19/*
20 *
21 * Specification of the Venus Communications subsystem.
22 *
23 */
24
25#ifndef _VENUS_COMM_H_
26#define _VENUS_COMM_H_ 1
27
28#ifdef __cplusplus
29extern "C" {
30#endif
31
32#include <stdio.h>
33#include <sys/time.h>
34
35#include <rpc2/rpc2.h>
36#include <rpc2/se.h>
37
38#ifdef __cplusplus
39}
40#endif
41
42/* interfaces */
43#include <callback.h>
44#include <vice.h>
45
46/* from util */
47#include <olist.h>
48#include <rec_olist.h>
49#include <ohash.h>
50#include <rec_ohash.h>
51
52/* from vv */
53#include <inconsist.h>
54
55#include "refcounted.h"
56#include "fso.h"
57#include "venusrecov.h"
58#include "venus.private.h"
59#include "vproc.h"
60
61/* Forward declarations. */
62class connent;
63class conn_iterator;
64class srvent;
65class srv_iterator;
66class RepOpCommCtxt;
67class mgrpent;
68class probeslave;
69
70/* forward declarations for venusvol.h */
71class volent;
72class repvol;
73
74/* Bogus forward declarations to placate C++! */
75
76extern void ConnPrint();
77extern void ConnPrint(FILE *);
78extern void ConnPrint(int);
79extern void ServerPrint();
80extern void ServerPrint(FILE *);
81
82/* ***** Constants ***** */
83
84const int DFLT_RT = 5; /* rpc2 retries */
85const int UNSET_RT = 0;
86const int DFLT_TO = 60; /* rpc2 timeout */
87const int UNSET_TO = 0;
88const int DFLT_WS = 32; /* sftp window size */
89const int UNSET_WS = 0;
90const int DFLT_SA = 8; /* sftp send ahead */
91const int UNSET_SA = -1;
92const int DFLT_AP = 8; /* sftp ack point */
93const int UNSET_AP = -1;
94const int DFLT_PS = (1024 /*body*/ + 60 /*header*/); /* sftp packet size */
95const int UNSET_PS = -1;
96const int UNSET_ST = -1; /* do we time rpcs? */
97const int UNSET_MT = -1; /* do we time mrpcs? */
98#ifdef TIMING
99const int DFLT_ST = 1;
100const int DFLT_MT = 1;
101#else
102const int DFLT_ST = 0;
103const int DFLT_MT = 0;
104#endif
105const unsigned int INIT_BW = 10000000;
106const unsigned int UNSET_WCT = 0;
107const unsigned int DFLT_WCT = 50000;
108const int UNSET_WCS = -1;
109const int DFLT_WCS = 1800; /* 30 minutes */
110
111/* ***** Types ***** */
112
113/*
114 * *** Non-Replication Communications Objects ***
115 *
116 * Connections:
117 *
118 * Servers:
119 *
120*/
121class connent {
122 friend void CommInit();
123 friend void Conn_Wait();
124 friend void Conn_Signal();
125 friend void PutConn(connent **);
126 friend void ConnPrint(int);
127 friend class conn_iterator;
128 friend void DoProbes(int, struct in_addr *);
129 friend class srvent;
130 friend class mgrpent;
131 friend class fsobj;
132 friend int GetTime(long *, long *);
133 friend class vdb;
134 friend class volent;
135 friend class repvol;
136 friend class ClientModifyLog;
137 friend class cmlent;
138
139 /* The connection list. */
140 static olist *conntab;
141 static char conntab_sync;
142
143 /* Transient members. */
144 olink tblhandle;
145
146 /* Static state; immutable after construction. */
147 //struct in_addr Host; /* Who to contact. */
148 srvent *srv;
149 uid_t uid; /* UID to validate with respect to. */
150 unsigned authenticated : 1;
151
152 /* Dynamic state; varies with each call. */
153 unsigned dying : 1;
154 unsigned int inuse;
155
156 /* Constructors, destructors, and private utility routines. */
157 connent(srvent *, uid_t, RPC2_Handle, int);
158 connent(connent &) { abort(); } /* not supported! */
159 int operator=(connent &)
160 {
161 abort();
162 return (0);
163 } /* not supported! */
164 ~connent();
165
166public:
167#ifdef VENUSDEBUG
168 static int allocs;
169 static int deallocs;
170#endif /* VENUSDEBUG */
171 RPC2_Handle connid; /* RPC connid. */
172
173 void Suicide(void);
174 int CheckResult(int, VolumeId, int TranslateEINCOMP = 1);
175 void GetRef(void) { inuse++; }
176 void PutRef(void)
177 {
178 CODA_ASSERT(inuse);
179 inuse--;
180 }
181 int RefCount(void) { return inuse; }
182
183 void print() { print(stdout); }
184 void print(FILE *fp)
185 {
186 fflush(fp);
187 print(fileno(fp));
188 }
189 void print(int);
190};
191
192struct ConnKey {
193 struct in_addr host;
194 uid_t uid;
195};
196
198 struct ConnKey *key;
199
200public:
201 conn_iterator(struct ConnKey * = (struct ConnKey *)0);
204};
205
206class srvent : private RefCountedObject {
207 friend void CommInit();
208 friend void Srvr_Wait();
209 friend void Srvr_Signal();
210 friend srvent *FindServer(struct in_addr *host);
212 friend srvent *GetServer(struct in_addr *host, RealmId realmid);
213 friend void PutServer(srvent **);
214 friend void ProbeServers(int);
215 friend void ServerProbe(long *, long *);
216 friend long HandleProbe(int, RPC2_Handle Handles[], long, long, ...);
217 friend void CheckServerBW(long);
218 friend void DownServers(char *, unsigned int *);
219 friend void DownServers(int, struct in_addr *, char *, unsigned int *);
220 friend void ServerPrint(FILE *);
221 friend class srv_iterator;
222 friend class connent;
223 friend class mgrpent;
224 friend long VENUS_CallBack(RPC2_Handle, ViceFid *);
225 friend long VENUS_CallBackFetch(RPC2_Handle, ViceFid *, SE_Descriptor *);
229 friend long VENUS_RevokeWBPermit(RPC2_Handle RPCid, VolumeId Vid);
230 friend int FailDisconnect(int, struct in_addr *);
231 friend int FailReconnect(int, struct in_addr *);
232 friend class userent;
233 friend class vproc;
234 friend class fsobj;
235 friend class repvol;
236
237 friend class Realm;
239 friend class probeslave;
240 friend void MultiBind(int, struct in_addr *, connent **);
241
242 /* The server list. */
243 static olist *srvtab;
244 static char srvtab_sync;
245
246 /* Transient members. */
247 olink tblhandle;
248 char *name;
249 struct in_addr host;
250 RealmId realmid;
251 RPC2_Handle connid; /* The callback connid. */
252 unsigned Xbinding : 1; /* 1 --> BINDING, 0 --> NOT_BINDING */
253 unsigned probeme : 1; /* should ProbeD probe this server? */
254 unsigned unused : 1;
255 unsigned fetchpartial_support : 1;
256 unsigned long bw; /* bandwidth estimate, Bytes/sec */
257 struct timeval lastobs; /* time of most recent estimate */
258
259 /* Constructors, destructors, and private utility routines. */
260 srvent(struct in_addr *host, RealmId realmid);
261 srvent(srvent &) { abort(); } /* not supported! */
262 int operator=(srvent &)
263 {
264 abort();
265 return (0);
266 } /* not supported! */
267 ~srvent();
268 int Connect(RPC2_Handle *, int *, uid_t, int) EXCLUDES_TRANSACTION;
269
270public:
271#ifdef VENUSDEBUG
272 static int allocs;
273 static int deallocs;
274#endif
275
276 int GetConn(connent **c, uid_t uid, int force = 0) EXCLUDES_TRANSACTION;
277
278 int GetStatistics(ViceStatistics *) EXCLUDES_TRANSACTION;
279
280 long GetLiveness(struct timeval *);
281 long GetBandwidth(unsigned long *);
282 void Reset();
283
284 void ServerError(int *);
285 void ServerUp(RPC2_Handle);
286 int ServerIsDown() { return (connid == 0); }
287 int ServerIsUp() { return (connid != 0); }
288 /* quasi-up != up */
289
290 const char *Name(void) { return name; }
291
292 void print() { print(stdout); }
293 void print(FILE *fp);
294};
295
296class srv_iterator : public olist_iterator {
297public:
300};
301
302/* server probes */
304{
309
310class probeslave : public vproc {
311 ProbeSlaveTask task;
312 void *arg; /* optional */
313 void *result; /* optional */
314 char *sync; /* write TRUE here and signal when finished */
315
316protected:
317 virtual void main(void) EXCLUDES_TRANSACTION; /* entry point */
318
319public:
320 probeslave(ProbeSlaveTask, void *, void *, char *);
321};
322
323/* ***** Variables ***** */
324
325extern int COPModes;
326extern char myHostName[];
327extern int rpc2_retries;
328extern int rpc2_timeout;
329extern int sftp_windowsize;
330extern int sftp_sendahead;
331extern int sftp_ackpoint;
332extern int sftp_packetsize;
333extern int rpc2_timeflag;
334extern int mrpc2_timeflag;
335
336/* ***** Functions ***** */
337
338/* (ASYNCCOP1 || PIGGYCOP2) --> ASYNCCOP2 */
339#define ASYNCCOP1 (COPModes & 1)
340#define ASYNCCOP2 (COPModes & 2)
341#define PIGGYCOP2 (COPModes & 4)
342
343/* comm.c */
344void CommInit();
347void PutConn(connent **);
349void Srvr_Signal();
350srvent *FindServer(struct in_addr *host);
352srvent *GetServer(struct in_addr *host, RealmId realmid);
353void PutServer(srvent **);
355void DoProbes(int, struct in_addr *) EXCLUDES_TRANSACTION;
356void MultiBind(int, struct in_addr *, connent **) EXCLUDES_TRANSACTION;
358long HandleProbe(int, RPC2_Handle Handles[], long, long, ...);
359void ServerProbe(long * = 0, long * = 0) EXCLUDES_TRANSACTION;
360void DownServers(char *, unsigned int *);
361void DownServers(int, struct in_addr *, char *, unsigned int *);
362void CheckServerBW(long);
363int FailDisconnect(int, struct in_addr *);
364int FailReconnect(int, struct in_addr *);
365
366/* comm_daemon.c */
367extern void PROD_Init(void);
368extern void ProbeDaemon(void) EXCLUDES_TRANSACTION;
369
370/* comm synchronization */
372 int count[LWP_MAX_PRIORITY + 1];
373 char sync;
374};
375
376extern struct CommQueueStruct CommQueue;
377
378/*
379 * The CommQueue summarizes outstanding RPC traffic for all threads.
380 * Threads servicing requests defer to higher priority threads before
381 * using the network. Note that Venus cannot determine the location of a
382 * network bottleneck. Therefore, it conservatively assumes that all
383 * high priority requests are sources of interference. Synchronization
384 * could be finer, currently all waiters are awakened instead of the
385 * highest priority ones.
386 */
387#define COMM_YIELD 1
388#define START_COMMSYNC() \
389 { \
390 vproc *vp = VprocSelf(); \
391 if (COMM_YIELD) { \
392 int pri = LWP_MAX_PRIORITY; \
393 while (pri > vp->lwpri) { \
394 if (CommQueue.count[pri]) { /* anyone bigger than me? */ \
395 LOG(0, ("WAITING(CommQueue) pri = %d, for %d at pri %d\n", \
396 vp->lwpri, CommQueue.count[pri], pri)); \
397 START_TIMING(); \
398 VprocWait(&CommQueue.sync); \
399 END_TIMING(); \
400 LOG(0, ("WAIT OVER, elapsed = %3.1f\n", elapsed)); \
401 pri = LWP_MAX_PRIORITY; \
402 } else { \
403 pri--; \
404 } \
405 } \
406 } \
407 CommQueue.count[vp->lwpri]++; \
408 LOG(10, ("CommQueue: insert pri %d count = %d\n", vp->lwpri, \
409 CommQueue.count[vp->lwpri])); \
410 }
411
412#define END_COMMSYNC() \
413 { \
414 vproc *vp = VprocSelf(); \
415 CommQueue.count[vp->lwpri]--; \
416 LOG(10, ("CommQueue: remove pri %d count = %d\n", vp->lwpri, \
417 CommQueue.count[vp->lwpri])); \
418 VprocSignal(&CommQueue.sync); \
419 }
420
421/* comm statistics (move to venus.private.h?) */
422#ifdef TIMING
423#define START_COMMSTATS() \
424 RPCPktStatistics startCS, endCS; \
425 GetCSS(&startCS);
426#define END_COMMSTATS() \
427 if (LogLevel >= 1000) { \
428 GetCSS(&endCS); \
429 SubCSSs(&endCS, &startCS); \
430 }
431#define MULTI_START_MESSAGE(viceop) \
432 START_COMMSYNC(); \
433 LOG(10, ("(Multi)%s: start\n", RPCOpStats.RPCOps[viceop].name)); \
434 START_TIMING(); \
435 START_COMMSTATS();
436#define UNI_START_MESSAGE(viceop) \
437 START_COMMSYNC(); \
438 LOG(10, ("%s: start\n", RPCOpStats.RPCOps[viceop].name)); \
439 START_TIMING(); \
440 START_COMMSTATS();
441
442/* The LOG message at the end of this macro causes the sun4 to die. This
443 * is the quick hack.
444 */
445#if defined(sun4) || defined(sparc)
446#define MULTI_END_MESSAGE(viceop) \
447 END_TIMING(); \
448 END_COMMSYNC(); \
449 END_COMMSTATS(); \
450 LOG(10, ("(Multi)%s: code = %d, elapsed = %3.1f\n", \
451 RPCOpStats.RPCOps[viceop].name, code, elapsed)); \
452 LOG(1000, \
453 ("RPC2_SStats: Total = %d\n", endCS.RPC2_SStats_Multi.Multicasts)); \
454 LOG(1000, \
455 ("SFTP_SStats: Starts = %d, Datas = %d, DataRetries = %d, Acks = %d\n", \
456 endCS.SFTP_SStats_Multi.Starts, endCS.SFTP_SStats_Multi.Datas, \
457 endCS.SFTP_SStats_Multi.DataRetries, endCS.SFTP_SStats_Multi.Acks)); \
458 LOG(1000, \
459 ("RPC2_RStats: Replies = %d, Busies = %d, Naks = %d, Bogus = %d\n", \
460 endCS.RPC2_RStats_Multi.Replies, endCS.RPC2_RStats_Multi.Busies, \
461 endCS.RPC2_RStats_Multi.Naks, endCS.RPC2_RStats_Multi.Bogus)); \
462 LOG(1000, ("SFTP_RStats: Datas = %d, Acks = %d, Busies = %d\n", \
463 endCS.SFTP_RStats_Multi.Datas, endCS.SFTP_RStats_Multi.Acks, \
464 endCS.SFTP_RStats_Multi.Busies));
465#else
466#define MULTI_END_MESSAGE(viceop) \
467 END_TIMING(); \
468 END_COMMSYNC(); \
469 END_COMMSTATS(); \
470 LOG(10, ("(Multi)%s: code = %d, elapsed = %3.1f\n", \
471 RPCOpStats.RPCOps[viceop].name, code, elapsed)); \
472 LOG(1000, \
473 ("RPC2_SStats: Total = %d\n", endCS.RPC2_SStats_Multi.Multicasts)); \
474 LOG(1000, \
475 ("SFTP_SStats: Starts = %d, Datas = %d, DataRetries = %d, Acks = %d\n", \
476 endCS.SFTP_SStats_Multi.Starts, endCS.SFTP_SStats_Multi.Datas, \
477 endCS.SFTP_SStats_Multi.DataRetries, endCS.SFTP_SStats_Multi.Acks)); \
478 LOG(1000, \
479 ("RPC2_RStats: Replies = %d, Busies = %d, Naks = %d, Bogus = %d\n", \
480 endCS.RPC2_RStats_Multi.Replies, endCS.RPC2_RStats_Multi.Busies, \
481 endCS.RPC2_RStats_Multi.Naks, endCS.RPC2_RStats_Multi.Bogus)); \
482 LOG(1000, ("SFTP_RStats: Datas = %d, Acks = %d, Busies = %d\n", \
483 endCS.SFTP_RStats_Multi.Datas, endCS.SFTP_RStats_Multi.Acks, \
484 endCS.SFTP_RStats_Multi.Busies)); \
485 if (elapsed > 1000.0) \
486 LOG(0, \
487 ("*** Long Running (Multi)%s: code = %d, elapsed = %3.1f ***\n", \
488 RPCOpStats.RPCOps[viceop].name, code, elapsed));
489#endif
490
491#define UNI_END_MESSAGE(viceop) \
492 END_TIMING(); \
493 END_COMMSYNC(); \
494 END_COMMSTATS(); \
495 LOG(10, ("%s: code = %d, elapsed = %3.1f\n", \
496 RPCOpStats.RPCOps[viceop].name, code, elapsed)); \
497 LOG(1000, ("RPC2_SStats: Total = %d\n", endCS.RPC2_SStats_Uni.Total)); \
498 LOG(1000, \
499 ("SFTP_SStats: Starts = %d, Datas = %d, DataRetries = %d, Acks = %d\n", \
500 endCS.SFTP_SStats_Uni.Starts, endCS.SFTP_SStats_Uni.Datas, \
501 endCS.SFTP_SStats_Uni.DataRetries, endCS.SFTP_SStats_Uni.Acks)); \
502 LOG(1000, \
503 ("RPC2_RStats: Replies = %d, Busies = %d, Naks = %d, Bogus = %d\n", \
504 endCS.RPC2_RStats_Uni.Replies, endCS.RPC2_RStats_Uni.Busies, \
505 endCS.RPC2_RStats_Uni.Naks, endCS.RPC2_RStats_Uni.Bogus)); \
506 LOG(1000, ("SFTP_RStats: Datas = %d, Acks = %d, Busies = %d\n", \
507 endCS.SFTP_RStats_Uni.Datas, endCS.SFTP_RStats_Uni.Acks, \
508 endCS.SFTP_RStats_Uni.Busies)); \
509 if (elapsed > 1000.0) \
510 LOG(0, ("*** Long Running %s: code = %d, elapsed = %3.1f ***\n", \
511 RPCOpStats.RPCOps[viceop].name, code, elapsed));
512#define MULTI_RECORD_STATS(viceop) \
513 if (code < 0) \
514 RPCOpStats.RPCOps[viceop].Mrpc_retries++; \
515 else if (code > 0) \
516 RPCOpStats.RPCOps[viceop].Mbad++; \
517 else { \
518 RPCOpStats.RPCOps[viceop].Mgood++; \
519 RPCOpStats.RPCOps[viceop].Mtime += elapsed; \
520 }
521#define UNI_RECORD_STATS(viceop) \
522 if (code < 0) \
523 RPCOpStats.RPCOps[viceop].rpc_retries++; \
524 else if (code > 0) \
525 RPCOpStats.RPCOps[viceop].bad++; \
526 else { \
527 RPCOpStats.RPCOps[viceop].good++; \
528 RPCOpStats.RPCOps[viceop].time += elapsed; \
529 }
530#else
531#define MULTI_START_MESSAGE(viceop) \
532 START_COMMSYNC(); \
533 LOG(10, ("(Multi)%s: start\n", RPCOpStats.RPCOps[viceop].name));
534#define UNI_START_MESSAGE(viceop) \
535 START_COMMSYNC(); \
536 LOG(10, ("%s: start\n", RPCOpStats.RPCOps[viceop].name));
537#define MULTI_END_MESSAGE(viceop) \
538 END_COMMSYNC(); \
539 LOG(10, ("(Multi)%s: code = %d\n", RPCOpStats.RPCOps[viceop].name, code));
540#define UNI_END_MESSAGE(viceop) \
541 END_COMMSYNC(); \
542 LOG(10, ("%s: code = %d\n", RPCOpStats.RPCOps[viceop].name, code));
543#define MULTI_RECORD_STATS(viceop) \
544 if (code < 0) \
545 RPCOpStats.RPCOps[viceop].Mrpc_retries++; \
546 else if (code > 0) \
547 RPCOpStats.RPCOps[viceop].Mbad++; \
548 else \
549 RPCOpStats.RPCOps[viceop].Mgood++;
550#define UNI_RECORD_STATS(viceop) \
551 if (code < 0) \
552 RPCOpStats.RPCOps[viceop].rpc_retries++; \
553 else if (code > 0) \
554 RPCOpStats.RPCOps[viceop].bad++; \
555 else \
556 RPCOpStats.RPCOps[viceop].good++;
557#endif /* !TIMING */
558
559#define VENUS_MAXBSLEN 1024 /* For use in ARG_MARSHALL_BS */
560
561#endif /* _VENUS_COMM_H_ */
Definition: venusvol.h:145
Definition: realm.h:31
Definition: refcounted.h:38
Definition: mgrp.h:38
Definition: venusvol.h:260
void abort() EXCLUDES_TRANSACTION
Definition: vol_cml.cc:3679
Definition: comm.h:197
connent * operator()()
Definition: comm.cc:423
~conn_iterator()
Definition: comm.cc:415
conn_iterator(struct ConnKey *=(struct ConnKey *) 0)
Definition: comm.cc:409
Definition: comm.h:121
friend void PutConn(connent **)
Definition: comm.cc:232
friend void CommInit()
Definition: comm.cc:109
void PutRef(void)
Definition: comm.h:176
void print()
Definition: comm.h:183
void GetRef(void)
Definition: comm.h:175
friend void Conn_Signal()
friend void ConnPrint(int)
Definition: comm.cc:264
int CheckResult(int, VolumeId, int TranslateEINCOMP=1)
Definition: comm.cc:345
friend int GetTime(long *, long *)
int RefCount(void)
Definition: comm.h:181
friend void Conn_Wait()
friend void DoProbes(int, struct in_addr *)
Definition: comm.cc:638
void print(FILE *fp)
Definition: comm.h:184
void Suicide(void)
Definition: comm.cc:332
RPC2_Handle connid
Definition: comm.h:171
Definition: fso.h:343
Definition: mgrp.h:75
Definition: olist.h:75
Definition: olist.h:47
Definition: comm.h:310
virtual void main(void) EXCLUDES_TRANSACTION
Definition: comm.cc:560
probeslave(ProbeSlaveTask, void *, void *, char *)
Definition: comm.cc:545
Definition: venusvol.h:931
Definition: rescomm.h:113
srvent * operator()()
Definition: rescomm.h:73
int ServerIsUp()
Definition: comm.h:287
void print()
Definition: comm.h:292
friend void CommInit()
Definition: comm.cc:109
int Connect(RPC2_Handle *, int)
Definition: rescomm.cc:432
int GetConn(connent **c, uid_t uid, int force=0) EXCLUDES_TRANSACTION
Definition: comm.cc:177
friend void MultiBind(int, struct in_addr *, connent **)
Definition: comm.cc:674
friend long VENUS_CallBack(RPC2_Handle, ViceFid *)
Definition: venuscb.cc:188
void ServerUp(RPC2_Handle)
Definition: comm.cc:1124
long GetBandwidth(unsigned long *)
Definition: comm.cc:1194
friend srvent * FindServerByCBCid(RPC2_Handle)
Definition: comm.cc:486
friend void ProbeServers(int)
Definition: comm.cc:593
friend void DownServers(char *, unsigned int *)
Definition: comm.cc:801
friend srvent * FindServer(unsigned long)
Definition: rescomm.cc:344
friend void CheckServerBW(long)
Definition: comm.cc:866
friend long HandleProbe(int, RPC2_Handle Handles[], long, long,...)
Definition: comm.cc:765
friend long VENUS_CallBackConnect(RPC2_Handle, RPC2_Integer, RPC2_Integer, RPC2_Integer, RPC2_Integer, RPC2_CountedBS *)
Definition: venuscb.cc:315
void print(FILE *fp)
friend int FailReconnect(int, struct in_addr *)
Definition: comm.cc:1274
friend void GetServer(srvent **, unsigned long)
Definition: rescomm.cc:357
friend long VENUS_CallBackFetch(RPC2_Handle, ViceFid *, SE_Descriptor *)
Definition: venuscb.cc:223
friend void PutServer(srvent **)
Definition: rescomm.cc:373
void Reset()
Definition: rescomm.cc:486
friend int FailDisconnect(int, struct in_addr *)
Definition: comm.cc:1268
int GetStatistics(ViceStatistics *) EXCLUDES_TRANSACTION
Definition: comm.cc:1009
friend void ServerProbe(long *, long *)
Definition: comm_daemon.cc:114
int ServerIsDown()
Definition: rescomm.cc:552
friend long VENUS_RevokeWBPermit(RPC2_Handle RPCid, VolumeId Vid)
const char * Name(void)
Definition: comm.h:290
void ServerError(int *)
Definition: rescomm.cc:510
long GetLiveness(struct timeval *)
Definition: comm.cc:1158
friend void Srvr_Signal()
Definition: comm.cc:468
friend void ServerPrint(int)
Definition: rescomm.cc:390
friend void Srvr_Wait()
Definition: comm.cc:459
Definition: user.h:52
Definition: venusvol.h:479
Definition: venusvol.h:620
Definition: vproc.h:151
char * name
Definition: vproc.h:177
#define CODA_ASSERT(pred)
Definition: coda_assert.h:22
#define EXCLUDES_TRANSACTION
Definition: coda_tsa.h:108
const int DFLT_ST
Definition: comm.h:102
void PutConn(connent **)
Definition: comm.cc:232
void CommInit()
Definition: comm.cc:109
void ProbeServers(int) EXCLUDES_TRANSACTION
Definition: comm.cc:593
void MultiBind(int, struct in_addr *, connent **) EXCLUDES_TRANSACTION
Definition: comm.cc:674
ProbeSlaveTask
Definition: comm.h:304
@ BindToServer
Definition: comm.h:307
@ ProbeUpServers
Definition: comm.h:305
@ ProbeDownServers
Definition: comm.h:306
srvent * FindServer(struct in_addr *host)
Definition: comm.cc:474
void DoProbes(int, struct in_addr *) EXCLUDES_TRANSACTION
Definition: comm.cc:638
srvent * FindServerByCBCid(RPC2_Handle)
Definition: comm.cc:486
srvent * GetServer(struct in_addr *host, RealmId realmid)
Definition: comm.cc:501
const int DFLT_AP
Definition: comm.h:92
const int UNSET_RT
Definition: comm.h:85
void DownServers(char *, unsigned int *)
Definition: comm.cc:801
int rpc2_timeflag
Definition: comm.cc:91
int sftp_packetsize
Definition: comm.cc:90
const int UNSET_ST
Definition: comm.h:96
void CheckServerBW(long)
Definition: comm.cc:866
long HandleProbe(int, RPC2_Handle Handles[], long, long,...)
Definition: comm.cc:765
int FailReconnect(int, struct in_addr *)
Definition: comm.cc:1274
void ServerPrint()
Definition: rescomm.cc:379
const int UNSET_MT
Definition: comm.h:97
void ProbeDaemon(void) EXCLUDES_TRANSACTION
Definition: comm_daemon.cc:65
const int UNSET_AP
Definition: comm.h:93
int mrpc2_timeflag
Definition: comm.cc:92
const int DFLT_MT
Definition: comm.h:103
void ConnPrint()
Definition: comm.cc:253
const int DFLT_WS
Definition: comm.h:88
const unsigned int UNSET_WCT
Definition: comm.h:106
void ServerProbe(long *=0, long *=0) EXCLUDES_TRANSACTION
Definition: comm_daemon.cc:114
const int UNSET_TO
Definition: comm.h:87
const int DFLT_WCS
Definition: comm.h:109
void MultiProbe(int, RPC2_Handle *) EXCLUDES_TRANSACTION
Definition: comm.cc:719
void Conn_Signal()
void PutServer(srvent **)
Definition: rescomm.cc:373
int FailDisconnect(int, struct in_addr *)
Definition: comm.cc:1268
struct CommQueueStruct CommQueue
Definition: comm.cc:95
int sftp_windowsize
Definition: comm.cc:87
void PROD_Init(void)
Definition: comm_daemon.cc:54
const unsigned int INIT_BW
Definition: comm.h:105
const int UNSET_WCS
Definition: comm.h:108
const int DFLT_SA
Definition: comm.h:90
int sftp_ackpoint
Definition: comm.cc:89
int rpc2_timeout
Definition: comm.cc:86
const int UNSET_WS
Definition: comm.h:89
void Conn_Wait()
const int DFLT_TO
Definition: comm.h:86
const int DFLT_RT
Definition: comm.h:84
const unsigned int DFLT_WCT
Definition: comm.h:107
int rpc2_retries
Definition: comm.cc:85
int COPModes
Definition: comm.cc:83
const int UNSET_SA
Definition: comm.h:91
int sftp_sendahead
Definition: comm.cc:88
void Srvr_Signal()
Definition: comm.cc:468
const int UNSET_PS
Definition: comm.h:95
void Srvr_Wait() EXCLUDES_TRANSACTION
Definition: comm.cc:459
char myHostName[]
Definition: comm.cc:84
const int DFLT_PS
Definition: comm.h:94
#define LWP_MAX_PRIORITY
Definition: lwp.h:83
dictionary unused
Definition: find_unused_symbols.py:92
srv
Definition: gensrvstats.py:252
name
Definition: pwdtopdbtool.py:40
uid
Definition: pwdtopdbtool.py:40
stdout
Definition: volusage.py:12
int32_t RPC2_Integer
Definition: rpc2.h:297
RPC2_Integer RPC2_Handle
Definition: rpc2.h:345
Definition: comm.h:371
char sync
Definition: comm.h:373
Definition: comm.h:192
struct in_addr host
Definition: comm.h:193
uid_t uid
Definition: comm.h:194
Definition: rpc2.h:316
Definition: se.h:148
Definition: rpc2.h:588
char c
Definition: tdb.c:54