/usr/src/openafs-1.6.1/include/afs/icl.h is in openafs-modules-dkms 1.6.1-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 | /*
* 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
*/
/*
* All Rights Reserved
*/
#ifndef _ICL_H__ENV_
#define _ICL_H__ENV_ 1
#ifdef KERNEL
#include "afs/param.h"
#include "afs_osi.h"
#include "lock.h"
#include "afs_trace.h"
#else
#include <lock.h>
typedef struct Lock afs_lock_t;
#endif
#define ICL_LOGSPERSET 8 /* max logs per set */
#define ICL_DEFAULTEVENTS 1024 /* default events per event set */
#define ICL_DEFAULT_LOGSIZE 60*1024 /* number of words in default log size */
#define osi_dlock_t afs_lock_t
extern osi_dlock_t afs_icl_lock; /* lock for log and set refcounts */
extern int afs_icl_inited;
extern struct afs_icl_log *afs_icl_allLogs;
extern struct afs_icl_set *afs_icl_allSets;
/* define an in-core logging package */
struct afs_icl_set {
afs_int32 refCount; /* reference count */
afs_int32 states; /* state flags */
osi_dlock_t lock; /* lock */
struct afs_icl_set *nextp; /* next dude in all known tables */
char *name; /* name of set */
struct afs_icl_log *logs[ICL_LOGSPERSET]; /* logs */
afs_int32 nevents; /* count of events */
char *eventFlags; /* pointer to event flags */
};
/* set flags */
#define ICL_SETF_DELETED 1
#define ICL_SETF_ACTIVE 2
#define ICL_SETF_FREED 4
#define ICL_SETF_PERSISTENT 8
#ifdef ICL_DEFAULT_ENABLED
#define ICL_DEFAULT_SET_STATES 0 /* was ICL_SETF_ACTIVE */
#else /* ICL_DEFAULT_ENABLED */
#ifdef ICL_DEFAULT_DISABLED
#define ICL_DEFAULT_SET_STATES ICL_SETF_FREED
#endif /* ICL_DEFAULT_DISABLED */
#endif /* ICL_DEFAULT_ENABLED */
#ifndef ICL_DEFAULT_SET_STATES
/* if not changed already, default to ACTIVE on created sets */
#define ICL_DEFAULT_SET_STATES 0 /* was ICL_SETF_ACTIVE */
#endif /* ICL_DEFAULT_SET_STATES */
/* bytes required by eventFlags array, for x events */
#define ICL_EVENTBYTES(x) ((((x) - 1) | 7) + 1)
/* functions for finding a particular event */
#define ICL_EVENTBYTE(x) (((x) & 0x3ff) >> 3)
#define ICL_EVENTMASK(x) (1 << ((x) & 0x7))
#define ICL_EVENTOK(setp, x) ((x&0x3ff) >= 0 && (x&0x3ff) < (setp)->nevents)
/* define ICL syscalls by name!! */
#define ICL_OP_COPYOUT 1
#define ICL_OP_ENUMLOGS 2
#define ICL_OP_CLRLOG 3
#define ICL_OP_CLRSET 4
#define ICL_OP_CLRALL 5
#define ICL_OP_ENUMSETS 6
#define ICL_OP_SETSTAT 7
#define ICL_OP_SETSTATALL 8
#define ICL_OP_SETLOGSIZE 9
#define ICL_OP_ENUMLOGSBYSET 10
#define ICL_OP_GETSETINFO 11
#define ICL_OP_GETLOGINFO 12
#define ICL_OP_COPYOUTCLR 13
/* Determine version number and type size info from icl package. */
#define ICL_OP_VERSION 14
/* define setstat commands */
#define ICL_OP_SS_ACTIVATE 1
#define ICL_OP_SS_DEACTIVATE 2
#define ICL_OP_SS_FREE 3
/* define set status flags */
#define ICL_FLAG_ACTIVE 1
#define ICL_FLAG_FREED 2
/* The format of the circular log is:
* 1'st word:
* <8 bits: size of record in longs> <6 bits: p1 type> <6 bits: p2 type>
* <6 bits: p3 type> <6 bits: p4 type>
* <32 bits: opcode>
* <32 bits: pid>
* <32 bits: timestamp in microseconds>
* <p1 rep>
* <p2 rep>
* <p3 rep>
* <p4 rep>
*
* Note that the representation for each parm starts at a new 32 bit
* offset, and only the represented parameters are marshalled.
* You can tell if a particular parameter exists by looking at its
* type; type 0 means the parameter does not exist.
*/
/* descriptor of the circular log. Note that it can never be 100% full
* since we break the ambiguity of head == tail by calling that
* state empty.
*/
struct afs_icl_log {
int refCount; /* reference count */
int setCount; /* number of non-FREED sets pointing to this guy */
osi_dlock_t lock; /* lock */
char *name; /* log name */
struct afs_icl_log *nextp; /* next log in system */
afs_int32 logSize; /* allocated # of elements in log */
afs_int32 logElements; /* # of elements in log right now */
afs_int32 *datap; /* pointer to the data */
afs_int32 firstUsed; /* first element used */
afs_int32 firstFree; /* index of first free dude */
long baseCookie; /* cookie value of first entry */
afs_int32 states; /* state bits */
afs_uint32 lastTS; /* last timestamp written to this log */
};
/* macro used to compute size of parameter when in log, used by
* afs_icl_AppendRecord below.
*
* Note that "tsize" and "rsize" are free variables!
* I use rsize to determine correct alignment (and hence size).
* The #ifdef's start to get unwieldly when the 32 bit kernels for SGI 6.2 are
* factored in. So, I'm going to a single macro with a variable for sizeof long.
* User space programs need to set this based on the size of the kernel long.
* Defined in afs_call.c and venus/fstrace.c
*/
extern int afs_icl_sizeofLong;
#define ICL_SIZEHACK(t1, p1, ts1, rs1) \
MACRO_BEGIN \
if ((t1) == ICL_TYPE_STRING) { \
ts1 = (int)((unsigned)(strlen((char *)(p1)) + 4) >> 2); \
} else if ((t1) == ICL_TYPE_HYPER || (t1) == ICL_TYPE_INT64) \
ts1 = 2; \
else if ((t1) == ICL_TYPE_FID) \
ts1 = 4; \
else if ((t1) == ICL_TYPE_INT32) \
ts1 = 1; \
else \
ts1 = afs_icl_sizeofLong; \
/* now add in the parameter */ \
rs1 += ts1; \
MACRO_END
/* log flags */
#define ICL_LOGF_DELETED 1 /* freed */
#define ICL_LOGF_WAITING 2 /* waiting for output to appear */
#define ICL_LOGF_PERSISTENT 4 /* persistent */
/* macros for calling these things easily */
#define ICL_SETACTIVE(setp) ((setp) && (setp->states & ICL_SETF_ACTIVE))
#define afs_Trace0(set, id) \
(ICL_SETACTIVE(set) ? afs_icl_Event0(set, id, 1<<24) : 0)
#define afs_Trace1(set, id, t1, p1) \
(ICL_SETACTIVE(set) ? afs_icl_Event1(set, id, (1<<24)+((t1)<<18), (long)(p1)) : 0)
#define afs_Trace2(set, id, t1, p1, t2, p2) \
(ICL_SETACTIVE(set) ? afs_icl_Event2(set, id, (1<<24)+((t1)<<18)+((t2)<<12), \
(long)(p1), (long)(p2)) : 0)
#define afs_Trace3(set, id, t1, p1, t2, p2, t3, p3) \
(ICL_SETACTIVE(set) ? afs_icl_Event3(set, id, (1<<24)+((t1)<<18)+((t2)<<12)+((t3)<<6), \
(long)(p1), (long)(p2), (long)(p3)) : 0)
#define afs_Trace4(set, id, t1, p1, t2, p2, t3, p3, t4, p4) \
(ICL_SETACTIVE(set) ? afs_icl_Event4(set, id, (1<<24)+((t1)<<18)+((t2)<<12)+((t3)<<6)+(t4), \
(long)(p1), (long)(p2), (long)(p3), (long)(p4)) : 0)
/* types for icl_trace macros; values must be less than 64. If
* you add a new type here, don't forget to check for ICL_MAXEXPANSION
* changing.
*/
#define ICL_TYPE_NONE 0 /* parameter doesn't exist */
#define ICL_TYPE_LONG 1
#define ICL_TYPE_INT32 7
#define ICL_TYPE_POINTER 2
#define ICL_TYPE_HYPER 3
#define ICL_TYPE_STRING 4
#define ICL_TYPE_FID 5
#define ICL_TYPE_UNIXDATE 6
#define ICL_TYPE_INT64 8
#ifdef AFS_64BIT_CLIENT
#define ICL_TYPE_OFFSET ICL_TYPE_INT64
#define ICL_HANDLE_OFFSET(x) (&x)
#else /* AFS_64BIT_CLIENT */
#define ICL_TYPE_OFFSET ICL_TYPE_INT64
#define ICL_HANDLE_OFFSET(x) (x)
#endif /* AFS_64BIT_CLIENT */
/* max # of words put in the printf buffer per parameter */
#define ICL_MAXEXPANSION 4
/* define flags to be used by afs_icl_CreateSetWithFlags */
#define ICL_CRSET_FLAG_DEFAULT_ON 1
#define ICL_CRSET_FLAG_DEFAULT_OFF 2
#define ICL_CRSET_FLAG_PERSISTENT 4
/* define flags to be used by afs_icl_CreateLogWithFlags */
#define ICL_CRLOG_FLAG_PERSISTENT 1
/* input flags */
#define ICL_COPYOUTF_WAITIO 1 /* block for output */
#define ICL_COPYOUTF_CLRAFTERREAD 2 /* clear log after reading */
/* output flags */
#define ICL_COPYOUTF_MISSEDSOME 1 /* missed some output */
#define lock_ObtainWrite ObtainWriteLock
#define lock_ReleaseWrite ReleaseWriteLock
#ifdef KERNEL
extern struct afs_icl_set *afs_iclSetp; /* standard icl trace */
/* A separate icl set to collect long term debugging info. */
extern struct afs_icl_set *afs_iclLongTermSetp;
#else
#define osi_Alloc malloc
#define osi_Free(a,b) free(a)
#define ICL_RPC_MAX_SETS (64)
#define ICL_RPC_MAX_LOGS (64)
typedef struct afs_icl_setinfo {
u_char setName[32];
afs_uint32 states;
} afs_icl_setinfo_t;
typedef struct afs_icl_loginfo {
u_char logName[32];
afs_uint32 logSize;
afs_uint32 logElements;
afs_uint32 states;
} afs_icl_loginfo_t;
typedef struct afs_icl_bulkSetinfo {
afs_uint32 count;
afs_icl_setinfo_t setinfo[1];
} afs_icl_bulkSetinfo_t;
typedef struct afs_icl_bulkLoginfo {
afs_uint32 count;
afs_icl_loginfo_t loginfo[1];
} afs_icl_bulkLoginfo_t;
#endif
#define ICL_ERROR_NOSET 9001
#define ICL_ERROR_NOLOG 9002
#define ICL_ERROR_CANTOPEN 9003
#define ICL_INFO_TIMESTAMP 9004
#endif /* _ICL_H__ENV_ */
|