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;