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