home *** CD-ROM | disk | FTP | other *** search
/ OpenStep 4.2J (Developer) / os42jdev.iso / NextDeveloper / Headers / netinfo / ni_prot.x < prev    next >
Text File  |  1995-04-12  |  9KB  |  481 lines

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