macos: delegate sock_* calls to bkg daemons
[openafs.git] / src / config / afs_args.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 _AFS_ARGS_H_
11 #define _AFS_ARGS_H_
12
13 /*
14  * AFS system call opcodes
15  *
16  * When adding new opcodes, please also update afsd_init_syscall_opcodes()
17  * for syscall tracing.
18  */
19
20 #define AFSOP_START_RXCALLBACK    0     /* no aux parms */
21 #define AFSOP_START_AFS           1     /* no aux parms */
22 #define AFSOP_START_BKG           2     /* no aux parms */
23 #define AFSOP_START_TRUNCDAEMON   3     /* no aux parms */
24 #define AFSOP_START_CS            4     /* no aux parms */
25 #define AFSOP_ADDCELL             5     /* parm 2 = cell str */
26 #define AFSOP_CACHEINIT           6     /* parms 2-4 -> cache sizes */
27 #define AFSOP_CACHEINFO           7     /* the cacheinfo file */
28 #define AFSOP_VOLUMEINFO          8     /* the volumeinfo file */
29 #define AFSOP_CACHEFILE           9     /* a random cache file (V*) */
30 #define AFSOP_CACHEINODE         10     /* random cache file by inode */
31 #define AFSOP_AFSLOG             11     /* output log file */
32 #define AFSOP_ROOTVOLUME         12     /* non-standard root volume name */
33
34 #define AFSOP_STARTLOG           14     /* temporary: Start afs logging */
35 #define AFSOP_ENDLOG             15     /* temporary: End afs logging */
36 #define AFSOP_AFS_VFSMOUNT       16     /* vfsmount cover for hpux */
37 #define AFSOP_ADVISEADDR         17     /* to init rx cid generator */
38 #define AFSOP_CLOSEWAIT          18     /* make all closes synchronous */
39 #define AFSOP_RXEVENT_DAEMON     19     /* rxevent daemon */
40 #define AFSOP_GETMTU             20     /* stand-in for SIOCGIFMTU, for now */
41 #define AFSOP_GETIFADDRS         21     /* get machine's ethernet interfaces */
42
43 #define AFSOP_ADDCELL2           29     /* 2nd add cell protocol interface */
44 #define AFSOP_AFSDB_HANDLER      30     /* userspace AFSDB lookup handler */
45 #define AFSOP_SET_DYNROOT        31     /* enable/disable dynroot support */
46 #define AFSOP_ADDCELLALIAS       32     /* create alias for existing cell */
47 #define AFSOP_SET_FAKESTAT       33     /* enable/disable fakestat support */
48 #define AFSOP_CELLINFO           34     /* set the cellinfo file name */
49 #define AFSOP_SET_THISCELL       35     /* set the primary cell */
50 #define AFSOP_BASIC_INIT         36     /* used to be part of START_AFS */
51 #define AFSOP_SET_BACKUPTREE     37     /* enable backup tree support */
52 #define AFSOP_SET_RXPCK          38     /* set rx_extraPackets*/
53 #define AFSOP_BUCKETPCT          39     /* bucket percentage */
54 #define AFSOP_SET_RXMAXMTU       40     /* set rx_MyMaxSendSize,rx_maxReceiveSizeUser,rx_maxReceiveSize */
55 #define AFSOP_BKG_HANDLER        41     /* userspace-capable Bkg daemon */
56 #define AFSOP_GETMASK            42     /* stand-in for SIOCGIFNETMASK */
57 #define AFSOP_SET_RXMAXFRAGS     43     /* set rxi_nSendFrags, rxi_nRecvFrags */
58 #define AFSOP_SET_RMTSYS_FLAG    44     /* set flag if rmtsys is enabled */
59 #define AFSOP_SEED_ENTROPY       45     /* Give the kernel hcrypto entropy */
60 #define AFSOP_SET_INUMCALC       46     /* set inode number calculation method */
61 #define AFSOP_SET_VOLUME_TTL     47     /* set the vldb cache timeout */
62
63 #define AFSOP_RXLISTENER_DAEMON  48     /* starts kernel RX listener */
64
65 #define AFSOP_CACHEBASEDIR       50     /* cache base dir */
66 #define AFSOP_CACHEDIRS          51     /* number of files per dir */
67 #define AFSOP_CACHEFILES         52     /* number of files */
68
69 #define AFSOP_SETINT             60     /* set key/value pairs for ints */
70
71 #define AFSOP_GO                100     /* whether settime is being done */
72
73 #define AFSOP_CHECKLOCKS        200     /* dump lock state */
74 #define AFSOP_SHUTDOWN          201     /* Totally shutdown afs (deallocate all) */
75
76 #define AFSOP_STOP_RXCALLBACK   210     /* Stop CALLBACK process */
77 #define AFSOP_STOP_AFS          211     /* Stop AFS process */
78 #define AFSOP_STOP_BKG          212     /* Stop BKG process */
79 #define AFSOP_STOP_TRUNCDAEMON  213     /* Stop cache truncate daemon */
80 /* AFSOP_STOP_RXEVENT           214        defined in osi.h */
81 /* AFSOP_STOP_COMPLETE          215        defined in osi.h */
82 #define AFSOP_STOP_CS           216     /* Stop CheckServer daemon */
83 /* AFSOP_STOP_RXK_LISTENER      217        defined in osi.h */
84 #define AFSOP_STOP_AFSDB        218     /* Stop AFSDB handler */
85 #define AFSOP_STOP_NETIF        219     /* Stop Netif poller */
86 #define AFSOP_SOCKPROXY_HANDLER 220     /* Userspace socket handler */
87 #define AFSOP_STOP_SOCKPROXY    221     /* Stop socket proxy daemon */
88
89 #define AFSOP_MAX_OPCODE        AFSOP_STOP_SOCKPROXY /* Largest defined opcode. */
90
91 /*
92  * AFS system call types and flags.
93  */
94
95 /* The range 20-30 is reserved for AFS system offsets in the afs_syscall */
96 #define AFSCALL_PIOCTL          20
97 #define AFSCALL_SETPAG          21
98 #define AFSCALL_IOPEN           22
99 #define AFSCALL_ICREATE         23
100 #define AFSCALL_IREAD           24
101 #define AFSCALL_IWRITE          25
102 #define AFSCALL_IINC            26
103 #define AFSCALL_IDEC            27
104 #define AFSCALL_CALL            28
105
106 #define AFSCALL_ICL             30
107
108 /* 64 bit versions of inode system calls. */
109 #define AFSCALL_IOPEN64         41
110 #define AFSCALL_ICREATE64       42
111 #define AFSCALL_IINC64          43
112 #define AFSCALL_IDEC64          44
113 #define AFSCALL_ILISTINODE64    45      /* Used by ListViceInodes */
114 #define AFSCALL_ICREATENAME64   46      /* pass in platform specific pointer
115                                          * used to create a name in in a
116                                          * directory.
117                                          */
118 #ifdef AFS_SGI_VNODE_GLUE
119 #define AFSCALL_INIT_KERNEL_CONFIG 47   /* set vnode glue ops. */
120 #endif
121
122 /* these are for initialization flags */
123
124 #define AFSCALL_INIT_MEMCACHE 0x1
125
126 /* flags for rxstats pioctl */
127
128 #define AFSCALL_RXSTATS_MASK    0x7     /* Valid flag bits */
129 #define AFSCALL_RXSTATS_ENABLE  0x1     /* Enable RX stats */
130 #define AFSCALL_RXSTATS_DISABLE 0x2     /* Disable RX stats */
131 #define AFSCALL_RXSTATS_CLEAR   0x4     /* Clear RX stats */
132
133 /* arguments passed by afsd */
134 #define IDTYPE_UID 0
135
136 /* We don't necessarily have VenusFid here */
137 struct afs_umv_param {
138     afs_int32 id;
139     afs_int32 idtype;
140     afs_int32 sCell;
141     afs_int32 sVolume;
142     afs_int32 sVnode;
143     afs_int32 sUnique;
144     afs_int32 dCell;
145     afs_int32 dVolume;
146     afs_int32 dVnode;
147     afs_int32 dUnique;
148 };
149
150 struct afs_usp_param {
151     afs_int32 idx;      /* process index */
152     afs_int32 addr;     /* ipv4 addr (net order) to be bound to the socket */
153     afs_int32 port;     /* port (net order) to be bound to the socket */
154     afs_int32 npkts;    /* number of packets */
155 };
156
157 #ifdef AFS_DARWIN_ENV
158 # define AFS_USPC_UMV 1
159 #endif
160 #define AFS_USPC_SHUTDOWN 2
161 #define AFS_USPC_NOOP 3
162
163 #ifdef AFS_SOCKPROXY_ENV
164 # define AFS_USPC_SOCKPROXY_START       4
165 # define AFS_USPC_SOCKPROXY_SEND        5
166 # define AFS_USPC_SOCKPROXY_RECV        6
167 #endif
168
169 struct afs_uspc_param {
170     afs_int32 retval;
171     afs_int32 ts; /* brequest ts - always unique */
172     afs_int32 bufSz;
173     afs_int32 reqtype;
174     union {
175         struct afs_umv_param umv;
176         struct afs_usp_param usp;
177     } req;
178 };
179
180 struct afs_cacheParams {
181     afs_int32 cacheScaches;
182     afs_int32 cacheFiles;
183     afs_int32 cacheBlocks;
184     afs_int32 cacheDcaches;
185     afs_int32 cacheVolumes;
186     afs_int32 chunkSize;
187     afs_int32 setTimeFlag;
188     afs_int32 memCacheFlag;
189     afs_int32 inodes;
190     afs_int32 users;
191     afs_int32 dynamic_vcaches;
192 };
193
194 /* Supported values for AFSOP_SET_INUMCALC. */
195 enum {
196     AFS_INUMCALC_COMPAT = 0,
197     AFS_INUMCALC_MD5 = 1
198 };
199
200 /* Supported volume ttl range. */
201 #define AFS_MIN_VOLUME_TTL 600
202 #define AFS_MAX_VOLUME_TTL MAX_AFS_INT32
203
204 /*
205  * Note that the AFS_*ALLOCSIZ values should be multiples of sizeof(void*) to
206  * accomodate pointer alignment.
207  */
208 /* Used in rx.c as well as afs directory. */
209 #if     defined(AFS_AIX32_ENV) || defined(AFS_HPUX_ENV)
210 /* XXX Because of rxkad_cprivate... XXX */
211 #define AFS_SMALLOCSIZ  (38*sizeof(void *))     /* "Small" allocated size */
212 #else
213 #define AFS_SMALLOCSIZ  (64*sizeof(void *))     /*  "Small" allocated size */
214 #endif
215 #define AFS_LRALLOCSIZ  4096    /* "Large" allocated size */
216
217 /* Cache configuration available through the client callback interface */
218 typedef struct cm_initparams_v1 {
219     afs_uint32 nChunkFiles;
220     afs_uint32 nStatCaches;
221     afs_uint32 nDataCaches;
222     afs_uint32 nVolumeCaches;
223     afs_uint32 firstChunkSize;
224     afs_uint32 otherChunkSize;
225     afs_uint32 cacheSize;
226     afs_uint32 setTime;
227     afs_uint32 memCache;
228 } cm_initparams_v1;
229
230 /*
231  * If you need to change afs_cacheParams, you should probably create a brand
232  * new structure.  Keeping the old structure will allow backwards compatibility
233  * with old clients (even if it is only used to calculate allocation size).
234  * If you do change the size or the format, you'll need to bump
235  * AFS_CLIENT_CONFIG_RETRIEVAL_VERSION.  This allows some primitive form
236  * of versioning a la rxdebug.
237  */
238
239 #define AFS_CLIENT_RETRIEVAL_VERSION            1       /* latest version */
240 #define AFS_CLIENT_RETRIEVAL_FIRST_EDITION      1       /* first version */
241
242 /* Defines and structures for the AFS proc replacement layer for the original syscall (AFS_SYSCALL) strategy */
243
244 #ifdef AFS_LINUX20_ENV
245
246 #define PROC_FSDIRNAME "openafs"
247 #define PROC_SYSCALL_NAME "afs_ioctl"
248 #define PROC_SYSCALL_FNAME "/proc/fs/openafs/afs_ioctl"
249 #define PROC_SYSCALL_ARLA_FNAME "/proc/fs/nnpfs/afs_ioctl"
250 #define PROC_CELLSERVDB_NAME "CellServDB"
251 #define PROC_PEER_NAME "rx_peer"
252 #define PROC_CONN_NAME "rx_conn"
253 #define PROC_CALL_NAME "rx_call"
254 #define PROC_RX_NAME "rx"
255 #define PROC_SERVICES_NAME "rx_services"
256 #define PROC_RXSTATS_NAME "rx_stats"
257 #define VIOC_SYSCALL_TYPE 'C'
258 #define VIOC_SYSCALL _IOW(VIOC_SYSCALL_TYPE,1,void *)
259 #define VIOC_SYSCALL32 _IOW(VIOC_SYSCALL_TYPE,1,int)
260
261 struct afsprocdata {
262   long param4;
263   long param3;
264   long param2;
265   long param1;
266   long syscall;
267 };
268
269 struct afsprocdata32 {
270   unsigned int param4;
271   unsigned int param3;
272   unsigned int param2;
273   unsigned int param1;
274   unsigned int syscall;
275 };
276
277 #endif
278
279 #ifdef AFS_DARWIN80_ENV
280 struct afssysargs {
281     unsigned int syscall;
282     unsigned int param1;
283     unsigned int param2;
284     unsigned int param3;
285     unsigned int param4;
286     unsigned int param5;
287     unsigned int param6;
288     unsigned int retval;
289 };
290
291 /* args reordered to avoid alignment issues */
292 struct afssysargs64 {
293     user_addr_t param1;
294     user_addr_t param2;
295     user_addr_t param3;
296     user_addr_t param4;
297     user_addr_t param5;
298     user_addr_t param6;
299     unsigned int syscall;
300     unsigned int retval;
301 };
302 #define VIOC_SYSCALL_TYPE 'C'
303 #define VIOC_SYSCALL _IOWR(VIOC_SYSCALL_TYPE,1,struct afssysargs)
304 #define VIOC_SYSCALL64 _IOWR(VIOC_SYSCALL_TYPE,2,struct afssysargs64)
305 #define SYSCALL_DEV_FNAME "/dev/openafs_ioctl"
306 #endif
307
308 #ifdef AFS_SUN511_ENV
309 # define VIOC_SYSCALL_TYPE 'C'
310 # define VIOC_SYSCALL _IOW(VIOC_SYSCALL_TYPE, 1, struct afssysargs)
311 # define VIOC_SYSCALL32 _IOW(VIOC_SYSCALL_TYPE, 2, struct afssysargs32)
312 # define SYSCALL_DEV_FNAME "/dev/afs"
313
314 struct afssysargs {
315     afs_uint64 param6;
316     afs_uint64 param5;
317     afs_uint64 param4;
318     afs_uint64 param3;
319     afs_uint64 param2;
320     afs_uint64 param1;
321     afs_uint32 syscall;
322 };
323
324 struct afssysargs32 {
325     afs_uint32 param6;
326     afs_uint32 param5;
327     afs_uint32 param4;
328     afs_uint32 param3;
329     afs_uint32 param2;
330     afs_uint32 param1;
331     afs_uint32 syscall;
332 };
333 #endif /* AFS_SUN511_ENV */
334
335 #ifdef AFS_CACHE_VNODE_PATH
336 #define AFS_CACHE_CELLS_INODE -2
337 #define AFS_CACHE_ITEMS_INODE -3
338 #define AFS_CACHE_VOLUME_INODE -4
339 #endif
340
341 #ifdef AFS_SOCKPROXY_ENV
342 # define AFS_SOCKPROXY_PAYLOAD_MAX      8192    /* max payload supported by libafs */
343 # define AFS_SOCKPROXY_PKT_MAX          1024    /* max number of packets supported by libafs */
344 # define AFS_SOCKPROXY_NPROCS           4       /* number of processes */
345 struct afs_pkt_hdr {
346     afs_uint32 addr;                    /* ipv4 address (net order) */
347     afs_uint32 port;                    /* port (net order) */
348     afs_uint32 size;                    /* size of payload */
349     afs_uint32 pad;                     /* spare field, must be 0 */
350     void *payload;                      /* data to be sent or received */
351 };
352 #endif
353
354 #endif /* _AFS_ARGS_H_ */