1 %/*
2 % * CDDL HEADER START
3 % *
4 % * The contents of this file are subject to the terms of the
5 % * Common Development and Distribution License (the "License").
6 % * You may not use this file except in compliance with the License.
7 % *
8 % * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 % * or http://www.opensolaris.org/os/licensing.
10 % * See the License for the specific language governing permissions
11 % * and limitations under the License.
12 % *
13 % * When distributing Covered Code, include this CDDL HEADER in each
14 % * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 % * If applicable, add the following below this CDDL HEADER, with the
16 % * fields enclosed by brackets "[]" replaced with your own identifying
17 % * information: Portions Copyright [yyyy] [name of copyright owner]
18 % *
19 % * CDDL HEADER END
20 % */
21 %
22 %
23 %/*
24 % * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
25 % * Use is subject to license terms.
26 % */
27 %
28 %/*
29 % * Auto generated from rdc_prot.x
30 % */
31 %
32 %/*
33 % * Network Replicator RPC spec
34 % */
35
36 %
37 %/*
38 % * We don't define netbuf in RPCL, since it would contain structure member
39 % * names that would conflict with the definition of struct netbuf in
40 % * <tiuser.h>. Instead we merely declare the XDR routine xdr_netbuf() here,
41 % * and implement it ourselves in rpc/rpcb_prot.c.
42 % */
43 %#ifdef __cplusplus
44 %extern "C" bool_t xdr_netbuf(XDR *, struct netbuf *);
45 %
46 %#elif __STDC__
47 %extern bool_t xdr_netbuf(XDR *, struct netbuf *);
48 %
49 %#else /* K&R C */
50 %bool_t xdr_netbuf();
51 %
52 %#endif /* K&R C */
53 const RDC_PORT = 121;
54 const RDC_MAXDATA = 32768;
55 const RDC_MAXNAMLEN = 64;
56 const RDC_BMAPBLKSIZE = 1024;
57 const RDC_MAXADDR = 32;
58 const RDC_MAXPENDQ = 64;
59
60 %/*
61 % * Use this to limit the size of the net_pendvec_t array
62 % * to ~ 32k
63 % */
64 const RDC_PENDQLIM = 1365;
65 %
66 %/*
67 % * Error status
68 % */
69 enum rdcstat {
70 RDC_OK = 0,
71 RDCERR_PERM = 1,
72 RDCERR_NOENT = 2,
73 RDCERR_NOMEM = 3
74 };
75
76 %
77 %/*
78 %* Set state (V4)
79 %*/
80
81 struct set_state4 {
82 opaque netaddr[RDC_MAXADDR];
83 opaque rnetaddr[RDC_MAXADDR];
84 int netaddrlen;
85 int rnetaddrlen;
86 unsigned flag;
87 opaque pfile[RDC_MAXNAMLEN];
88 opaque sfile[RDC_MAXNAMLEN];
89 };
90
91 const RDC_XDR_MAXNAMLEN = RDC_MAXNAMLEN;
92
93 struct set_state {
94 struct netbuf netaddr;
95 struct netbuf rnetaddr;
96 int netaddrlen;
97 int rnetaddrlen;
98 unsigned flag;
99 string pfile<RDC_XDR_MAXNAMLEN>;
100 string sfile<RDC_XDR_MAXNAMLEN>;
101 };
102
103 %
104 %/*
105 % * Get size of volume
106 % */
107 struct getsize {
108 int cd;
109 };
110
111 %
112 %/*
113 % * Remote read (v5)
114 % */
115 struct rread {
116 int cd;
117 int len;
118 int pos;
119 int idx;
120 int flag;
121 };
122
123 %
124 %/*
125 % * Remote read (v6)
126 % */
127 struct rread6 {
128 int cd;
129 int len;
130 u_longlong_t pos;
131 int idx;
132 int flag;
133 };
134
135 %
136 %/*
137 % * status OK from remote read
138 % */
139 struct readok {
140 opaque data<RDC_MAXDATA>;
141 };
142 union readres switch (rdcstat status) {
143 case RDC_OK:
144 readok reply;
145 default:
146 void;
147 };
148
149 %
150 %/*
151 % * Initiate bit map scoreboard transfer (v5)
152 % */
153 struct bmap {
154 int cd;
155 int dual;
156 int size;
157 };
158
159 %
160 %/*
161 % * Initiate bit map scoreboard transfer (v6)
162 % */
163 struct bmap6 {
164 int cd;
165 int dual;
166 u_longlong_t size;
167 };
168
169 %
170 %/*
171 % * Scoreboard bitmap data (v5)
172 % */
173 struct net_bdata {
174 int cd;
175 int offset;
176 int size;
177 opaque data<RDC_BMAPBLKSIZE>;
178 };
179
180 %
181 %/*
182 % * Scoreboard bitmap data (v6)
183 % */
184 struct net_bdata6 {
185 u_longlong_t offset;
186 int size;
187 int cd;
188 int endoblk;
189 opaque data<RDC_BMAPBLKSIZE>;
190 };
191
192 %
193 %/*
194 % * Data transfer and allocation (v5)
195 % */
196 struct net_data5 {
197 int local_cd;
198 int cd;
199 int pos;
200 int len;
201 int flag;
202 int idx;
203 int seq;
204 int sfba;
205 int endoblk;
206 int nfba;
207 opaque data<RDC_MAXDATA>;
208 };
209
210 %
211 %/*
212 % * Data transfer and allocation (v6)
213 % */
214 struct net_data6 {
215 int local_cd;
216 int cd;
217 u_longlong_t pos;
218 u_longlong_t qpos;
219 u_longlong_t sfba;
220 int nfba;
221 int len;
222 int flag;
223 int idx;
224 unsigned int seq;
225 int endoblk;
226 opaque data<RDC_MAXDATA>;
227 };
228
229
230 struct net_pendvec {
231 u_longlong_t apos;
232 u_longlong_t qpos;
233 int alen;
234 unsigned int seq;
235 int pindex;
236 };
237 typedef net_pendvec net_pendvec_t;
238
239
240
241 %/*
242 % * results returned from a netwrite request. (v6)
243 % * index = index number of request assigned by server when
244 % * requests is broken down into smaller chunks.
245 % * result = 0 request ok.
246 % * result = 1 request is pending.
247 % * result < 0 failure, set with -errno.
248 % * If the vecdata array is not empty, then it contains
249 % * a list of apos and alen
250 % * pairs of previously pending requests that have been written.
251 % */
252 struct netwriteres {
253 int index;
254 int result;
255 unsigned int seq;
256 net_pendvec_t vecdata<RDC_PENDQLIM>;
257 };
258
259
260
261 %
262 %/*
263 % * Ping
264 % */
265 struct rdc_ping6 {
266 opaque p_ifaddr[RDC_MAXADDR];
267 opaque s_ifaddr[RDC_MAXADDR];
268 };
269
270 struct rdc_ping {
271 struct netbuf p_ifaddr;
272 struct netbuf s_ifaddr;
273 };
274
275
276 /*
277 * Remote file service routines
278 */
279
280 program RDC_PROGRAM {
281
282 /*
283 * This is protocol version 5 that shipped with SNDR 3.1
284 * We must support this protocol until (protocol
285 * version 7) is released.
286 * I.e. N-1 protocol support.
287 */
288
289 version RDC_VERSION5 {
290
291 void
292 RDCPROC_NULL(void) = 0;
293
294 int
295 RDCPROC_GETSIZE(int) = 2;
296
297 int
298 RDCPROC_WRITE5(net_data5) = 4;
299
300 readres
301 RDCPROC_READ5(rread) = 5;
302
303 int
304 RDCPROC_STATE(set_state4) = 7;
305
306 int
307 RDCPROC_PING4(rdc_ping6) = 8;
308
309 int
310 RDCPROC_BMAP(net_bmap) = 9;
311
312 int
313 RDCPROC_BDATA(net_bdata) = 10;
314
315 int
316 RDCPROC_GETSTATE4(set_state4) = 12;
317 } = 5;
318
319 /*
320 * This is protocol version 6 that shipped with SNDR 3.2
321 * We must support this protocol until (protocol
322 * version 8) is released.
323 * I.e. N-1 protocol support.
324 *
325 * Changed to support multiple transmitting async threads
326 * (sequence numbers and write reply structure)
327 * and 64bit datapath.
328 */
329
330 version RDC_VERSION6 {
331
332 void
333 RDCPROC_NULL(void) = 0;
334
335 u_longlong_t
336 RDCPROC_GETSIZE6(int) = 2;
337
338 netwriteres
339 RDCPROC_WRITE6(net_data6) = 4;
340
341 readres
342 RDCPROC_READ6(rread6) = 5;
343
344 int
345 RDCPROC_STATE(set_state4) = 7;
346
347 int
348 RDCPROC_PING4(rdc_ping6) = 8;
349
350 int
351 RDCPROC_BMAP6(net_bmap6) = 9;
352
353 int
354 RDCPROC_BDATA6(net_bdata6) = 10;
355
356 int
357 RDCPROC_GETSTATE4(set_state4) = 12;
358 } = 6;
359
360 version RDC_VERSION7 {
361
362 void
363 RDCPROC_NULL(void) = 0;
364
365 u_longlong_t
366 RDCPROC_GETSIZE6(int) = 2;
367
368 netwriteres
369 RDCPROC_WRITE6(net_data6) = 4;
370
371 readres
372 RDCPROC_READ6(rread6) = 5;
373
374 int
375 RDCPROC_STATE(set_state) = 7;
376
377 int
378 RDCPROC_PING4(rdc_ping) = 8;
379
380 int
381 RDCPROC_BMAP6(net_bmap6) = 9;
382
383 int
384 RDCPROC_BDATA6(net_bdata6) = 10;
385
386 int
387 RDCPROC_GETSTATE4(set_state) = 12;
388 } = 7;
389
390 } = 100143;