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
17 /*! \name ubik_trans types */
18 #define UBIK_READTRANS 0
19 #define UBIK_WRITETRANS 1
22 /*! \name ubik_lock types */
28 /*! \name ubik client flags */
29 #define UPUBIKONLY 1 /*!< only check servers presumed functional */
30 #define UBIK_CALL_NEW 2 /*!< use the semantics of ubik_Call_New */
33 /*! \name RX services types */
34 #define VOTE_SERVICE_ID 50
35 #define DISK_SERVICE_ID 51
36 #define USER_SERVICE_ID 52 /*!< Since most applications use same port! */
39 #define UBIK_MAGIC 0x354545
41 /*! \name global ubik parameters */
42 #define MAXSERVERS 20 /*!< max number of servers */
45 /*! version comparison macro */
46 #define vcmp(a,b) ((a).epoch == (b).epoch? ((a).counter - (b).counter) : ((a).epoch - (b).epoch))
48 /*! \name ubik_client state bits */
49 #define CFLastFailed 1 /*!< last call failed to this guy (to detect down hosts) */
52 #ifdef AFS_PTHREAD_ENV
59 * \brief per-client structure for ubik
62 short initializationState
; /*!< ubik client init state */
63 short states
[MAXSERVERS
]; /*!< state bits */
64 struct rx_connection
*conns
[MAXSERVERS
];
66 #ifdef AFS_PTHREAD_ENV
71 #ifdef AFS_PTHREAD_ENV
72 #define LOCK_UBIK_CLIENT(client) opr_mutex_enter(&client->cm)
73 #define UNLOCK_UBIK_CLIENT(client) opr_mutex_exit(&client->cm)
75 #define LOCK_UBIK_CLIENT(client)
76 #define UNLOCK_UBIK_CLIENT(client)
79 #define ubik_GetRPCConn(astr,aindex) ((aindex) >= MAXSERVERS? 0 : (astr)->conns[aindex])
80 #define ubik_GetRPCHost(astr,aindex) ((aindex) >= MAXSERVERS? 0 : (astr)->hosts[aindex])
83 * \brief ubik header file structure
86 afs_int32 magic
; /*!< magic number */
87 short pad1
; /*!< some 0-initd padding */
88 short size
; /*!< header allocation size */
89 struct ubik_version version
; /*!< the version for this file */
93 * \brief representation of a ubik transaction
96 struct ubik_dbase
*dbase
; /*!< corresponding database */
97 struct ubik_trans
*next
; /*!< in the list */
98 afs_int32 locktype
; /*!< transaction lock */
99 struct ubik_trunc
*activeTruncs
; /*!< queued truncates */
100 struct ubik_tid tid
; /*!< transaction id of this trans (if write trans.) */
101 afs_int32 minCommitTime
; /*!< time before which this trans can't commit */
102 afs_int32 seekFile
; /*!< seek ptr: file number */
103 afs_int32 seekPos
; /*!< seek ptr: offset therein */
104 short flags
; /*!< trans flag bits */
105 char type
; /*!< type of trans */
106 iovec_wrt iovec_info
;
107 iovec_buf iovec_data
;
111 * \brief representation of a truncation operation
114 struct ubik_trunc
*next
;
115 afs_int32 file
; /*!< file to truncate */
116 afs_int32 length
; /*!< new size */
124 #include <lock.h> /* just to make sure we've got this */
127 * \brief representation of a ubik database.
129 * Contains info on low-level disk access routines
130 * for use by disk transaction module.
133 char *pathName
; /*!< root name for dbase */
134 struct ubik_trans
*activeTrans
; /*!< active transaction list */
135 struct ubik_version version
; /*!< version number */
136 #ifdef AFS_PTHREAD_ENV
137 pthread_mutex_t versionLock
; /*!< lock on version number */
139 struct Lock versionLock
; /*!< lock on version number */
141 afs_int32 tidCounter
; /*!< last RW or RO trans tid counter */
142 afs_int32 writeTidCounter
; /*!< last write trans tid counter */
143 afs_int32 flags
; /*!< flags */
144 /* physio procedures */
145 int (*read
) (struct ubik_dbase
* adbase
, afs_int32 afile
, void *abuffer
,
146 afs_int32 apos
, afs_int32 alength
);
147 int (*write
) (struct ubik_dbase
* adbase
, afs_int32 afile
, void *abuffer
,
148 afs_int32 apos
, afs_int32 alength
);
149 int (*truncate
) (struct ubik_dbase
* adbase
, afs_int32 afile
,
151 int (*sync
) (struct ubik_dbase
* adbase
, afs_int32 afile
);
152 int (*stat
) (struct ubik_dbase
* adbase
, afs_int32 afid
,
153 struct ubik_stat
* astat
);
154 void (*open
) (struct ubik_dbase
* adbase
, afs_int32 afid
);
155 int (*setlabel
) (struct ubik_dbase
* adbase
, afs_int32 afile
, struct ubik_version
* aversion
); /*!< set the version label */
156 int (*getlabel
) (struct ubik_dbase
* adbase
, afs_int32 afile
, struct ubik_version
* aversion
); /*!< retrieve the version label */
157 int (*getnfiles
) (struct ubik_dbase
* adbase
); /*!< find out number of files */
158 short readers
; /*!< number of current read transactions */
159 struct ubik_version cachedVersion
; /*!< version of caller's cached data */
160 struct Lock cache_lock
; /*!< protects cached application data */
161 #ifdef AFS_PTHREAD_ENV
162 pthread_cond_t version_cond
; /*!< condition variable to manage changes to version */
163 pthread_cond_t flags_cond
; /*!< condition variable to manage changes to flags */
168 * ubik_CheckCache callback function.
170 * @param[in] atrans ubik transaction
171 * @param[in] rock rock passed to ubik_CheckCache
173 * @return operation status
174 * @retval 0 cache was read properly
176 typedef int (*ubik_updatecache_func
) (struct ubik_trans
*atrans
, void *rock
);
178 /*! \name procedures for automatically authenticating ubik connections */
179 extern int (*ubik_CRXSecurityProc
) (void *, struct rx_securityClass
**,
181 extern void *ubik_CRXSecurityRock
;
182 extern int (*ubik_SRXSecurityProc
) (void *, struct rx_securityClass
**,
184 extern void *ubik_SRXSecurityRock
;
185 extern int (*ubik_CheckRXSecurityProc
) (void *, struct rx_call
*);
186 extern void *ubik_CheckRXSecurityRock
;
188 extern void ubik_SetClientSecurityProcs(int (*scproc
)(void *,
189 struct rx_securityClass
**,
191 int (*checkproc
) (void *),
193 extern void ubik_SetServerSecurityProcs
194 (void (*buildproc
) (void *,
195 struct rx_securityClass
***,
197 int (*checkproc
) (void *, struct rx_call
*),
203 * For applications that make use of ubik_BeginTransReadAnyWrite, writing
204 * processes must not update the application-level cache as they write,
205 * or else readers can read the new cache before the data is committed to
206 * the db. So, when a commit occurs, the cache must be updated right then.
207 * If set, this function will be called during commits of write transactions,
208 * to update the application-level cache after a write. This will be called
209 * immediately after the local disk commit succeeds, and it will be called
210 * with a lock held that prevents other threads from reading from the cache
211 * or the db in general.
213 * Note that this function MUST be set in order to make use of
214 * ubik_BeginTransReadAnyWrite.
216 extern int (*ubik_SyncWriterCacheProc
) (void);
218 /****************INTERNALS BELOW ****************/
220 #ifdef UBIK_INTERNALS
221 /*! \name some ubik parameters */
222 #define UBIK_PAGESIZE 1024 /*!< fits in current r packet */
223 #define UBIK_LOGPAGESIZE 10 /*!< base 2 log thereof */
224 #define NBUFFERS 20 /*!< number of 1K buffers */
225 #define HDRSIZE 64 /*!< bytes of header per dbfile */
228 /*! \name ubik_dbase flags */
229 #define DBWRITING 1 /*!< are any write trans. in progress */
232 /*!\name ubik trans flags */
233 #define TRDONE 1 /*!< commit or abort done */
234 #define TRABORT 2 /*!< if #TRDONE, tells if aborted */
235 #define TRREADANY 4 /*!< read any data available in trans */
236 #define TRCACHELOCKED 32 /*!< this trans has locked dbase->cache_lock
237 * (meaning, this trans has called
238 * ubik_CheckCache at some point */
239 #define TRREADWRITE 64 /*!< read even if there's a conflicting ubik-
240 * level write lock */
243 /*! \name ubik_lock flags */
247 /*! \name ubik system database numbers */
251 /*! \name define log opcodes */
252 #define LOGNEW 100 /*!< start transaction */
253 #define LOGEND 101 /*!< commit (good) end transaction */
254 #define LOGABORT 102 /*!< abort (fail) transaction */
255 #define LOGDATA 103 /*!< data */
256 #define LOGTRUNCATE 104 /*!< truncate operation */
260 * \name timer constants
261 * time constant for replication algorithms: the R time period is 20 seconds. Both
262 * #SMALLTIME and #BIGTIME must be larger than #RPCTIMEOUT+max(#RPCTIMEOUT, #POLLTIME),
263 * so that timeouts do not prevent us from getting through to our servers in time.
265 * We use multi-R to time out multiple down hosts concurrently.
266 * The only other restrictions: #BIGTIME > #SMALLTIME and
267 * #BIGTIME-#SMALLTIME > #MAXSKEW (the clock skew).
271 #define RPCTIMEOUT 20
277 * \brief the per-server state, used by the sync site to keep track of its charges
280 struct ubik_server
*next
; /*!< next ptr */
281 afs_uint32 addr
[UBIK_MAX_INTERFACE_ADDR
]; /*!< network order, addr[0] is primary */
282 afs_int32 lastVoteTime
; /*!< last time yes vote received */
283 afs_int32 lastBeaconSent
; /*!< last time beacon attempted */
284 struct ubik_version version
; /*!< version, only used during recovery */
285 struct rx_connection
*vote_rxcid
; /*!< cid to use to contact dude for votes */
286 struct rx_connection
*disk_rxcid
; /*!< cid to use to contact dude for disk reqs */
287 char lastVote
; /*!< true if last vote was yes */
288 char up
; /*!< is it up? */
289 char beaconSinceDown
; /*!< did beacon get through since last crash? */
290 char currentDB
; /*!< is dbase up-to-date */
291 char magic
; /*!< the one whose vote counts twice */
292 char isClone
; /*!< is only a clone, doesn't vote */
295 /*! \name hold and release functions on a database */
296 #ifdef AFS_PTHREAD_ENV
297 # define DBHOLD(a) opr_mutex_enter(&((a)->versionLock))
298 # define DBRELE(a) opr_mutex_exit(&((a)->versionLock))
299 #else /* !AFS_PTHREAD_ENV */
300 # define DBHOLD(a) ObtainWriteLock(&((a)->versionLock))
301 # define DBRELE(a) ReleaseWriteLock(&((a)->versionLock))
302 #endif /* !AFS_PTHREAD_ENV */
307 /*!name list of all servers in the system */
308 extern struct ubik_server
*ubik_servers
;
309 extern char amIClone
;
312 /*! \name network port info */
313 extern short ubik_callPortal
;
316 /*! \name urecovery state bits for sync site */
317 #define UBIK_RECSYNCSITE 1 /* am sync site */
318 #define UBIK_RECFOUNDDB 2 /* found acceptable dbase from quorum */
319 #define UBIK_RECHAVEDB 4 /* fetched best dbase */
320 #define UBIK_RECLABELDB 8 /* relabelled dbase */
321 #define UBIK_RECSENTDB 0x10 /* sent best db to *everyone* */
322 #define UBIK_RECSBETTER UBIK_RECLABELDB /* last state */
325 extern afs_int32 ubik_quorum
; /* min hosts in quorum */
326 extern struct ubik_dbase
*ubik_dbase
; /* the database handled by this server */
327 extern afs_uint32 ubik_host
[UBIK_MAX_INTERFACE_ADDR
]; /* this host addr, in net order */
328 extern int ubik_amSyncSite
; /* sleep on this waiting to be sync site */
329 extern struct ubik_stats
{ /* random stats */
332 extern afs_int32 urecovery_state
; /* sync site recovery process state */
333 extern struct ubik_trans
*ubik_currentTrans
; /* current trans */
334 extern afs_int32 ubik_debugFlag
; /* ubik debug flag */
335 extern int ubikPrimaryAddrOnly
; /* use only primary address */
340 * Any of the locks may be acquired singly; when acquiring multiple locks, they
341 * should be acquired in the listed order:
342 * application cache lock (dbase->cache_lock)
343 * database lock DBHOLD/DBRELE
344 * beacon lock UBIK_BEACON_LOCK/UNLOCK
345 * vote lock UBIK_VOTE_LOCK/UNLOCK
346 * version lock UBIK_VERSION_LOCK/UNLOCK
347 * server address lock UBIK_ADDR_LOCK/UNLOCK
351 * \brief Global beacon data. All values are protected by beacon_lock
352 * This lock also protects some values in the ubik_server structures:
360 #ifdef AFS_PTHREAD_ENV
361 pthread_mutex_t beacon_lock
;
363 int ubik_amSyncSite
; /*!< flag telling if I'm sync site */
364 afs_int32 syncSiteUntil
; /*!< valid only if amSyncSite */
365 int ubik_syncSiteAdvertised
; /*!< flag telling if remotes are aware we have quorum */
368 #define UBIK_BEACON_LOCK opr_mutex_enter(&beacon_globals.beacon_lock)
369 #define UBIK_BEACON_UNLOCK opr_mutex_exit(&beacon_globals.beacon_lock)
372 * \brief Global vote data. All values are protected by vote_lock
375 #ifdef AFS_PTHREAD_ENV
376 pthread_mutex_t vote_lock
;
378 struct ubik_version ubik_dbVersion
; /* sync site's dbase version */
379 struct ubik_tid ubik_dbTid
; /* sync site's tid, or 0 if none */
380 /* Used by all sites in nominating new sync sites */
381 afs_int32 ubik_lastYesTime
; /* time we sent the last yes vote */
382 afs_uint32 lastYesHost
; /* host to which we sent yes vote */
383 /* Next is time sync site began this vote: guarantees sync site until this + SMALLTIME */
384 afs_int32 lastYesClaim
;
385 int lastYesState
; /* did last site we voted for claim to be sync site? */
386 /* Used to guarantee that nomination process doesn't loop */
387 afs_int32 lowestTime
;
388 afs_uint32 lowestHost
;
393 #define UBIK_VOTE_LOCK opr_mutex_enter(&vote_globals.vote_lock)
394 #define UBIK_VOTE_UNLOCK opr_mutex_exit(&vote_globals.vote_lock)
397 * \brief Server address data. All values are protected by addr_lock
399 * This lock also protects:
400 * ubik_server: addr[], vote_rxcid, disk_rxcid
404 #ifdef AFS_PTHREAD_ENV
405 pthread_mutex_t addr_lock
;
407 afs_int32 ubikSecIndex
;
408 struct rx_securityClass
*ubikSecClass
;
411 #define UBIK_ADDR_LOCK opr_mutex_enter(&addr_globals.addr_lock)
412 #define UBIK_ADDR_UNLOCK opr_mutex_exit(&addr_globals.addr_lock)
415 * \brief The version lock protects the structure member, as well as
416 * the database version, flags, tidCounter, writeTidCounter
418 struct version_data
{
419 #ifdef AFS_PTHREAD_ENV
420 pthread_mutex_t version_lock
;
422 afs_int32 ubik_epochTime
; /* time when this site started */
425 #define UBIK_VERSION_LOCK opr_mutex_enter(&version_globals.version_lock)
426 #define UBIK_VERSION_UNLOCK opr_mutex_exit(&version_globals.version_lock)
429 extern int uphys_stat(struct ubik_dbase
*adbase
, afs_int32 afid
,
430 struct ubik_stat
*astat
);
431 extern int uphys_read(struct ubik_dbase
*adbase
, afs_int32 afile
,
432 void *abuffer
, afs_int32 apos
,
434 extern int uphys_write(struct ubik_dbase
*adbase
, afs_int32 afile
,
435 void *abuffer
, afs_int32 apos
,
437 extern int uphys_truncate(struct ubik_dbase
*adbase
, afs_int32 afile
,
439 extern int uphys_getnfiles(struct ubik_dbase
*adbase
);
440 extern int uphys_getlabel(struct ubik_dbase
*adbase
, afs_int32 afile
,
441 struct ubik_version
*aversion
);
442 extern int uphys_setlabel(struct ubik_dbase
*adbase
, afs_int32 afile
,
443 struct ubik_version
*aversion
);
444 extern int uphys_sync(struct ubik_dbase
*adbase
, afs_int32 afile
);
445 extern void uphys_invalidate(struct ubik_dbase
*adbase
,
448 /*! \name recovery.c */
449 extern int urecovery_ResetState(void);
450 extern int urecovery_LostServer(struct ubik_server
*server
);
451 extern int urecovery_AllBetter(struct ubik_dbase
*adbase
,
453 extern int urecovery_AbortAll(struct ubik_dbase
*adbase
);
454 extern int urecovery_CheckTid(struct ubik_tid
*atid
, int abortalways
);
455 extern int urecovery_Initialize(struct ubik_dbase
*adbase
);
456 extern void *urecovery_Interact(void *);
457 extern int DoProbe(struct ubik_server
*server
);
461 extern afs_int32
ContactQuorum_NoArguments(afs_int32 (*proc
)
462 (struct rx_connection
*,
464 struct ubik_trans
*atrans
,
467 extern afs_int32
ContactQuorum_DISK_Lock(struct ubik_trans
*atrans
,
469 afs_int32 file
, afs_int32 position
,
470 afs_int32 length
, afs_int32 type
);
472 extern afs_int32
ContactQuorum_DISK_Write(struct ubik_trans
*atrans
,
474 afs_int32 file
, afs_int32 position
,
477 extern afs_int32
ContactQuorum_DISK_Truncate(struct ubik_trans
*atrans
,
479 afs_int32 file
, afs_int32 length
);
481 extern afs_int32
ContactQuorum_DISK_WriteV(struct ubik_trans
*atrans
,
483 iovec_wrt
* io_vector
,
484 iovec_buf
*io_buffer
);
486 extern afs_int32
ContactQuorum_DISK_SetVersion(struct ubik_trans
*atrans
,
488 ubik_version
*OldVersion
,
489 ubik_version
*NewVersion
);
491 extern void panic(char *format
, ...)
492 AFS_ATTRIBUTE_FORMAT(__printf__
, 1, 2);
494 extern afs_uint32
ubikGetPrimaryInterfaceAddr(afs_uint32 addr
);
496 extern int ubik_CheckAuth(struct rx_call
*);
500 /*! \name beacon.c */
502 extern void ubeacon_InitSecurityClass(void);
503 extern void ubeacon_ReinitServer(struct ubik_server
*ts
);
504 extern void ubeacon_Debug(struct ubik_debug
*aparm
);
505 extern int ubeacon_AmSyncSite(void);
506 extern int ubeacon_SyncSiteAdvertised(void);
507 extern int ubeacon_InitServerListByInfo(afs_uint32 ame
,
508 struct afsconf_cell
*info
,
510 extern int ubeacon_InitServerList(afs_uint32 ame
, afs_uint32 aservers
[]);
511 extern void *ubeacon_Interact(void *);
512 extern int ubeacon_updateUbikNetworkAddress(afs_uint32 ubik_host
[]);
513 extern struct beacon_data beacon_globals
;
514 extern struct addr_data addr_globals
;
519 extern int udisk_Init(int nBUffers
);
520 extern void udisk_Debug(struct ubik_debug
*aparm
);
521 extern int udisk_Invalidate(struct ubik_dbase
*adbase
, afs_int32 afid
);
522 extern int udisk_read(struct ubik_trans
*atrans
, afs_int32 afile
,
523 void *abuffer
, afs_int32 apos
, afs_int32 alen
);
524 extern int udisk_truncate(struct ubik_trans
*atrans
, afs_int32 afile
,
526 extern int udisk_write(struct ubik_trans
*atrans
, afs_int32 afile
,
527 void *abuffer
, afs_int32 apos
, afs_int32 alen
);
528 extern int udisk_begin(struct ubik_dbase
*adbase
, int atype
,
529 struct ubik_trans
**atrans
);
530 extern int udisk_commit(struct ubik_trans
*atrans
);
531 extern int udisk_abort(struct ubik_trans
*atrans
);
532 extern int udisk_end(struct ubik_trans
*atrans
);
536 extern void ulock_Init(void);
537 extern int ulock_getLock(struct ubik_trans
*atrans
, int atype
, int await
);
538 extern void ulock_relLock(struct ubik_trans
*atrans
);
539 extern void ulock_Debug(struct ubik_debug
*aparm
);
543 extern int uvote_ShouldIRun(void);
544 extern afs_int32
uvote_GetSyncSite(void);
545 extern int uvote_Init(void);
546 extern void ubik_vprint(const char *format
, va_list ap
)
547 AFS_ATTRIBUTE_FORMAT(__printf__
, 1, 0);
549 extern void ubik_print(const char *format
, ...)
550 AFS_ATTRIBUTE_FORMAT(__printf__
, 1, 2);
552 extern void ubik_dprint(const char *format
, ...)
553 AFS_ATTRIBUTE_FORMAT(__printf__
, 1, 2);
555 extern void ubik_dprint_25(const char *format
, ...)
556 AFS_ATTRIBUTE_FORMAT(__printf__
, 1, 2);
557 extern struct vote_data vote_globals
;
558 extern void uvote_set_dbVersion(struct ubik_version
);
559 extern int uvote_eq_dbVersion(struct ubik_version
);
560 extern int uvote_HaveSyncAndVersion(struct ubik_version
);
563 #endif /* UBIK_INTERNALS */
565 extern afs_int32 ubik_nBuffers
;
568 * \name Public function prototypes
573 extern int ubik_ServerInitByInfo(afs_uint32 myHost
, short myPort
,
574 struct afsconf_cell
*info
, char clones
[],
575 const char *pathName
,
576 struct ubik_dbase
**dbase
);
577 extern int ubik_ServerInit(afs_uint32 myHost
, short myPort
,
578 afs_uint32 serverList
[],
579 const char *pathName
, struct ubik_dbase
**dbase
);
580 extern int ubik_BeginTrans(struct ubik_dbase
*dbase
,
581 afs_int32 transMode
, struct ubik_trans
**transPtr
);
582 extern int ubik_BeginTransReadAny(struct ubik_dbase
*dbase
,
584 struct ubik_trans
**transPtr
);
585 extern int ubik_BeginTransReadAnyWrite(struct ubik_dbase
*dbase
,
587 struct ubik_trans
**transPtr
);
588 extern int ubik_AbortTrans(struct ubik_trans
*transPtr
);
590 extern int ubik_EndTrans(struct ubik_trans
*transPtr
);
591 extern int ubik_Read(struct ubik_trans
*transPtr
, void *buffer
,
593 extern int ubik_Flush(struct ubik_trans
*transPtr
);
594 extern int ubik_Write(struct ubik_trans
*transPtr
, void *buffer
,
596 extern int ubik_Seek(struct ubik_trans
*transPtr
, afs_int32 fileid
,
598 extern int ubik_Tell(struct ubik_trans
*transPtr
, afs_int32
* fileid
,
599 afs_int32
* position
);
600 extern int ubik_Truncate(struct ubik_trans
*transPtr
,
602 extern int ubik_SetLock(struct ubik_trans
*atrans
, afs_int32 apos
,
603 afs_int32 alen
, int atype
);
604 extern int ubik_WaitVersion(struct ubik_dbase
*adatabase
,
605 struct ubik_version
*aversion
);
606 extern int ubik_GetVersion(struct ubik_trans
*atrans
,
607 struct ubik_version
*avers
);
608 extern int ubik_CheckCache(struct ubik_trans
*atrans
,
609 ubik_updatecache_func check
,
611 extern struct version_data version_globals
;
614 /*! \name ubikclient.c */
616 extern int ubik_ParseClientList(int argc
, char **argv
, afs_uint32
* aothers
);
617 extern unsigned int afs_random(void);
618 extern int ubik_ClientInit(struct rx_connection
**serverconns
,
619 struct ubik_client
**aclient
);
620 extern afs_int32
ubik_ClientDestroy(struct ubik_client
*aclient
);
621 extern struct rx_connection
*ubik_RefreshConn(struct rx_connection
*tc
);
622 #ifdef UBIK_LEGACY_CALLITER
623 extern afs_int32
ubik_CallIter(int (*aproc
) (), struct ubik_client
*aclient
,
624 afs_int32 aflags
, int *apos
, long p1
, long p2
,
625 long p3
, long p4
, long p5
, long p6
, long p7
,
626 long p8
, long p9
, long p10
, long p11
, long p12
,
627 long p13
, long p14
, long p15
, long p16
);
628 extern afs_int32
ubik_Call_New(int (*aproc
) (), struct ubik_client
629 *aclient
, afs_int32 aflags
, long p1
, long p2
,
630 long p3
, long p4
, long p5
, long p6
, long p7
,
631 long p8
, long p9
, long p10
, long p11
, long p12
,
632 long p13
, long p14
, long p15
, long p16
);
636 /* \name ubikcmd.c */
637 extern int ubik_ParseServerList(int argc
, char **argv
, afs_uint32
*ahost
,
638 afs_uint32
*aothers
);
643 struct rx_securityClass
;
645 extern int ugen_ClientInitCell(struct afsconf_dir
*dir
,
646 struct afsconf_cell
*info
,
648 struct ubik_client
**uclientp
,
649 int maxservers
, const char *serviceid
,
651 extern int ugen_ClientInitServer(const char *confDir
, char *cellName
,
652 int secFlags
, struct ubik_client
**uclientp
,
653 int maxservers
, char *serviceid
,
654 int deadtime
, afs_uint32 server
,
656 extern int ugen_ClientInitFlags(const char *confDir
, char *cellName
,
657 int secFlags
, struct ubik_client
**uclientp
,
658 int (*secproc
) (struct rx_securityClass
*,
660 int maxservers
, char *serviceid
,
662 extern afs_int32
ugen_ClientInit(int noAuthFlag
, const char *confDir
,
663 char *cellName
, afs_int32 sauth
,
664 struct ubik_client
**uclientp
,
665 int (*secproc
) (struct rx_securityClass
*sc
,
668 afs_int32 gen_rxkad_level
,
669 afs_int32 maxservers
, char *serviceid
,
670 afs_int32 deadtime
, afs_uint32 server
,
671 afs_uint32 port
, afs_int32 usrvid
);