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