]> git.saurik.com Git - apple/libinfo.git/blame - netinfo.subproj/ni_prot.x
Libinfo-222.4.12.tar.gz
[apple/libinfo.git] / netinfo.subproj / ni_prot.x
CommitLineData
03fb6eb0
A
1/*
2 * Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
3 *
4 * @APPLE_LICENSE_HEADER_START@
5 *
ad21edcc
A
6 * Portions Copyright (c) 1999 Apple Computer, Inc. All Rights
7 * Reserved. This file contains Original Code and/or Modifications of
8 * Original Code as defined in and that are subject to the Apple Public
9 * Source License Version 1.1 (the "License"). You may not use this file
10 * except in compliance with the License. Please obtain a copy of the
11 * License at http://www.apple.com/publicsource and read it before using
12 * this file.
03fb6eb0
A
13 *
14 * The Original Code and all software distributed under the License are
ad21edcc 15 * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
03fb6eb0
A
16 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
17 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
ad21edcc
A
18 * FITNESS FOR A PARTICULAR PURPOSE OR NON- INFRINGEMENT. Please see the
19 * License for the specific language governing rights and limitations
20 * under the License.
03fb6eb0
A
21 *
22 * @APPLE_LICENSE_HEADER_END@
23 */
24/*
25 * NetInfo protocol specification
26 * Copyright (C) 1989 by NeXT, Inc.
27 */
28
29/* Preamble appearing on all generated output */
30#ifndef NOPREAMBLE
31%/*
32% * Output of the RPC protocol compiler: DO NOT EDIT
33% * Copyright (C) 1989 by NeXT, Inc.
34% */
35#endif
36
37#ifndef RPC_HDR
38%#include <string.h>
39#endif
40
41const NI_NAME_MAXLEN = 65535;
42const NI_NAMELIST_MAXLEN = 65535;
43const NI_PROPLIST_MAXLEN = 65535;
44const NI_IDLIST_MAXLEN = 1048576;
45
46/*
47 * Every object has a unique ID. One part of the ID identifies the object
48 * itself. The other identifies the instance of the object. Every time
49 * an object is written or an object is destroyed and then reallocated,
50 * its instance is incremented.
51 *
52 * All read operations ignore the instance field. All write operations
53 * refuse to operate on the object if there is an instance mismatch.
54 */
55
56/*
57 * Don't go through unnecessary overhead for xdr_ni_index using typedef
58 * rpcgen needs an optimizer so we don't have to do this!
59 */
60#ifdef RPC_HDR
61%typedef unsigned long ni_index;
62#endif
63#define ni_index unsigned long
64
65struct ni_id {
66 ni_index nii_object;
67 ni_index nii_instance;
68};
69
70
71/*
72 * Names are assumed to contain human-readable ASCII characters.
73 */
74typedef string ni_name<NI_NAME_MAXLEN>;
75
76
77typedef ni_name ni_namelist<NI_NAMELIST_MAXLEN>;
78
79/*
80 * A property
81 */
82struct ni_property {
83 ni_name nip_name;
84 ni_namelist nip_val;
85};
86
87/*
88 * A list of properties
89 */
90typedef ni_property ni_proplist<NI_PROPLIST_MAXLEN>;
91
92/*
93 * A list of IDs (yet another variable-length array)
94 */
95typedef ni_index ni_idlist<NI_IDLIST_MAXLEN>;
96
97
98/*
99 * A name object
100 */
101struct ni_object {
102 ni_id nio_id;
103 ni_proplist nio_props;
104 ni_index nio_parent;
105 ni_idlist nio_children;
106};
107
108
109/*
110 * All operations return a status indicating either that the requested
111 * operation succeeded or why it failed.
112 */
113enum ni_status {
114 NI_OK, /* Operation succeeded */
115 NI_BADID, /* ID is invalid */
116 NI_STALE, /* Write attempted on stale version of object */
117 NI_NOSPACE, /* No space available for write operation */
118 NI_PERM, /* Permission denied */
119 NI_NODIR, /* No such directory */
120 NI_NOPROP, /* No such property */
121 NI_NONAME, /* No such name */
122 NI_NOTEMPTY, /* Cannot delete name object with children */
123 NI_UNRELATED, /* Object is not child of parent: cannot destroy */
124 NI_SERIAL, /* Serialization error */
125 NI_NETROOT, /* Hit network root domain */
126 NI_NORESPONSE, /* No response from remote parent */
127 NI_RDONLY, /* No writes allowed: all objects are read-only */
128 NI_SYSTEMERR, /* generic remote error */
129 NI_ALIVE, /* Can't regenerate: already in use */
130 NI_NOTMASTER, /* Operation makes no sense on clone */
131 NI_CANTFINDADDRESS, /* Can't find address of server */
132 NI_DUPTAG, /* Duplicate domain tag: can't serve it */
133 NI_NOTAG, /* No such tag */
134 NI_AUTHERROR, /* Authentication error */
135 NI_NOUSER, /* No such user */
136 NI_MASTERBUSY, /* Master server is busy */
137 NI_INVALIDDOMAIN, /* Invalid Domain */
138 NI_BADOP, /* Invalid operation on master */
139 NI_FAILED = 9999 /* generic local error */
140};
141
142/*
143 * Wrappers needed to handle arguments and results
144 */
145union ni_id_res switch (ni_status status) {
146case NI_OK:
147 ni_id id;
148default:
149 void;
150};
151
152struct ni_parent_stuff {
153 ni_index object_id;
154 ni_id self_id;
155};
156
157union ni_parent_res switch (ni_status status) {
158case NI_OK:
159 struct ni_parent_stuff stuff;
160default:
161 void;
162};
163
164struct ni_children_stuff {
165 ni_idlist children;
166 ni_id self_id;
167};
168
169union ni_children_res switch (ni_status status) {
170case NI_OK:
171 ni_children_stuff stuff;
172default:
173 void;
174};
175
176struct ni_entry {
177 ni_index id;
178 ni_namelist *names;
179};
180
181typedef ni_entry ni_entrylist<NI_IDLIST_MAXLEN>;
182
183struct ni_list_stuff {
184 ni_entrylist entries;
185 ni_id self_id;
186};
187
188union ni_list_res switch (ni_status status) {
189case NI_OK:
190 ni_list_stuff stuff;
191default:
192 void;
193};
194
195struct ni_proplist_stuff {
196 ni_id id;
197 ni_proplist props;
198};
199
200struct ni_create_args {
201 ni_id id;
202 ni_proplist props;
203 ni_index where;
204 ni_id *target_id;
205};
206
207union ni_proplist_res switch (ni_status status) {
208case NI_OK:
209 ni_proplist_stuff stuff;
210default:
211 void;
212};
213
214struct ni_create_stuff {
215 ni_id id;
216 ni_id self_id;
217};
218
219union ni_create_res switch (ni_status status) {
220case NI_OK:
221 ni_create_stuff stuff;
222default:
223 void;
224};
225
226struct ni_destroy_args {
227 ni_id parent_id;
228 ni_id self_id;
229};
230
231struct ni_lookup_args {
232 ni_id id;
233 ni_name key;
234 ni_name value;
235};
236
237struct ni_lookup_stuff {
238 ni_idlist idlist;
239 ni_id self_id;
240};
241
242union ni_lookup_res switch (ni_status status) {
243case NI_OK:
244 ni_lookup_stuff stuff;
245default:
246 void;
247};
248
249
250struct ni_name_args {
251 ni_id id;
252 ni_name name;
253};
254
255struct ni_createprop_args {
256 ni_id id;
257 ni_property prop;
258 ni_index where;
259};
260
261struct ni_writeprop_args {
262 ni_id id;
263 ni_index prop_index;
264 ni_namelist values;
265};
266
267struct ni_prop_args {
268 ni_id id;
269 ni_index prop_index;
270};
271
272struct ni_namelist_stuff {
273 ni_namelist values;
274 ni_id self_id;
275};
276
277union ni_namelist_res switch (ni_status status) {
278case NI_OK:
279 ni_namelist_stuff stuff;
280default:
281 void;
282};
283
284struct ni_propname_args {
285 ni_id id;
286 ni_index prop_index;
287 ni_name name;
288};
289
290struct ni_createname_args {
291 ni_id id;
292 ni_index prop_index;
293 ni_name name;
294 ni_index where;
295};
296
297struct ni_nameindex_args {
298 ni_id id;
299 ni_index prop_index;
300 ni_index name_index;
301};
302
303struct ni_writename_args {
304 ni_id id;
305 ni_index prop_index;
306 ni_index name_index;
307 ni_name name;
308};
309
310struct ni_readname_stuff {
311 ni_id id;
312 ni_name name;
313};
314
315union ni_readname_res switch (ni_status status) {
316case NI_OK:
317 ni_readname_stuff stuff;
318default:
319 void;
320};
321
322struct ni_binding {
323 ni_name tag;
324 unsigned addr;
325};
326
327union ni_rparent_res switch (ni_status status) {
328case NI_OK:
329 ni_binding binding;
330default:
331 void;
332};
333
334typedef struct ni_object_node *ni_object_list;
335struct ni_object_node {
336 ni_object object;
337 ni_object_list next;
338};
339
340struct ni_readall_stuff {
341 unsigned checksum;
342 ni_index highestid;
343 ni_object_list list;
344};
345
346union ni_readall_res switch (ni_status status) {
347case NI_OK:
348 ni_readall_stuff stuff;
349default:
350 void;
351};
352
353typedef ni_proplist ni_proplist_list<NI_IDLIST_MAXLEN>;
354
355struct ni_listall_stuff {
356 ni_id self_id;
357 ni_proplist_list entries;
358};
359
360union ni_listall_res switch (ni_status status) {
361case NI_OK:
362 ni_listall_stuff stuff;
363default:
364 void;
365};
366
367
368program NI_PROG {
369 version NI_VERS {
370 void
371 _NI_PING(void) = 0;
372 /*
373 * Get various server statistics
374 */
375 ni_proplist
376 _NI_STATISTICS(void) = 1;
377
378 /*
379 * Procedures dealing with nodes
380 */
381 ni_id_res
382 _NI_ROOT(void) = 2;
383
384 ni_id_res
385 _NI_SELF(ni_id) = 3;
386
387 ni_parent_res
388 _NI_PARENT(ni_id) = 4;
389
390 ni_create_res
391 _NI_CREATE(ni_create_args) = 5;
392
393 ni_id_res
394 _NI_DESTROY(ni_destroy_args) = 6;
395
396 ni_proplist_res
397 _NI_READ(ni_id) = 7;
398
399 ni_id_res
400 _NI_WRITE(ni_proplist_stuff) = 8;
401
402 ni_children_res
403 _NI_CHILDREN(ni_id) = 9;
404
405 ni_lookup_res
406 _NI_LOOKUP(ni_lookup_args) = 10;
407
408 ni_list_res
409 _NI_LIST(ni_name_args) = 11;
410
411 /*
412 * Procedures dealing with properties
413 */
414 ni_id_res
415 _NI_CREATEPROP(ni_createprop_args) = 12;
416
417 ni_id_res
418 _NI_DESTROYPROP(ni_prop_args) = 13;
419
420 ni_namelist_res
421 _NI_READPROP(ni_prop_args) = 14;
422
423 ni_id_res
424 _NI_WRITEPROP(ni_writeprop_args) = 15;
425
426 ni_id_res
427 _NI_RENAMEPROP(ni_propname_args) = 16;
428
429 ni_namelist_res
430 _NI_LISTPROPS(ni_id) = 17;
431
432 /*
433 * Procedures dealing with names
434 */
435 ni_id_res
436 _NI_CREATENAME(ni_createname_args) = 18;
437
438 ni_id_res
439 _NI_DESTROYNAME(ni_nameindex_args) = 19;
440
441 ni_readname_res
442 _NI_READNAME(ni_nameindex_args) = 20;
443
444 ni_id_res
445 _NI_WRITENAME(ni_writename_args) = 21;
446
447 /*
448 * Returns the address of this domain's remote parent
449 */
450 ni_rparent_res
451 _NI_RPARENT(void) = 22;
452
453 /*
454 * List all properties of each subdirectory, not just
455 * just a single named property.
456 *
457 * WARNING: this routine is dangerous and may be
458 * removed from future implementations of the protocol.
459 * While it is good the the network in that there is
460 * less data on it because a lot is done in a single call,
461 * it is bad for the server because it ties it up and locks
462 * others out.
463 */
464 ni_listall_res
465 _NI_LISTALL(ni_id) = 23;
466
467 /*
468 * Answers only if the given binding is served
469 */
470 void
471 _NI_BIND(ni_binding) = 24;
472
473 /*
474 * Read the entire database if the checksum is different
475 * Implemented by master only.
476 */
477 ni_readall_res
478 _NI_READALL(unsigned) = 25;
479
480 /*
481 * Informs server that master has crashed. Hands out
482 * latest checksum.
483 */
484 void
485 _NI_CRASHED(unsigned) = 26;
486
487 /*
488 * If master, force clones to resync.
489 * If clone, resync with master.
490 */
491 ni_status
492 _NI_RESYNC(void) = 27;
493
494
495 /*
496 * Extra procedure added for performance
497 * Terminates on first hit, returns proplist
498 */
499 ni_proplist_res
500 _NI_LOOKUPREAD(ni_lookup_args) = 28;
501 } = 2;
502} = 200100000;