URI:
       tmount3.c - plan9port - [fork] Plan 9 from user space
  HTML git clone git://src.adamsgaard.dk/plan9port
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
       tmount3.c (15208B)
       ---
            1 /*
            2  * SUN NFSv3 Mounter.  See RFC 1813
            3  */
            4 
            5 #include <u.h>
            6 #include <libc.h>
            7 #include <thread.h>
            8 #include <sunrpc.h>
            9 #include <nfs3.h>
           10 
           11 void
           12 nfsmount3tnullprint(Fmt *fmt, NfsMount3TNull *x)
           13 {
           14         USED(x);
           15         fmtprint(fmt, "%s\n", "NfsMount3TNull");
           16 }
           17 uint
           18 nfsmount3tnullsize(NfsMount3TNull *x)
           19 {
           20         uint a;
           21         USED(x);
           22         a = 0;
           23         return a;
           24 }
           25 int
           26 nfsmount3tnullpack(uchar *a, uchar *ea, uchar **pa, NfsMount3TNull *x)
           27 {
           28         USED(ea);
           29         USED(x);
           30         *pa = a;
           31         return 0;
           32 }
           33 int
           34 nfsmount3tnullunpack(uchar *a, uchar *ea, uchar **pa, NfsMount3TNull *x)
           35 {
           36         USED(ea);
           37         USED(x);
           38         *pa = a;
           39         return 0;
           40 }
           41 void
           42 nfsmount3rnullprint(Fmt *fmt, NfsMount3RNull *x)
           43 {
           44         USED(x);
           45         fmtprint(fmt, "%s\n", "NfsMount3RNull");
           46 }
           47 uint
           48 nfsmount3rnullsize(NfsMount3RNull *x)
           49 {
           50         uint a;
           51         USED(x);
           52         a = 0;
           53         return a;
           54 }
           55 int
           56 nfsmount3rnullpack(uchar *a, uchar *ea, uchar **pa, NfsMount3RNull *x)
           57 {
           58         USED(ea);
           59         USED(x);
           60         *pa = a;
           61         return 0;
           62 }
           63 int
           64 nfsmount3rnullunpack(uchar *a, uchar *ea, uchar **pa, NfsMount3RNull *x)
           65 {
           66         USED(ea);
           67         USED(x);
           68         *pa = a;
           69         return 0;
           70 }
           71 void
           72 nfsmount3tmntprint(Fmt *fmt, NfsMount3TMnt *x)
           73 {
           74         fmtprint(fmt, "%s\n", "NfsMount3TMnt");
           75         fmtprint(fmt, "\t%s=", "path");
           76         fmtprint(fmt, "\"%s\"", x->path);
           77         fmtprint(fmt, "\n");
           78 }
           79 uint
           80 nfsmount3tmntsize(NfsMount3TMnt *x)
           81 {
           82         uint a;
           83         USED(x);
           84         a = 0 + sunstringsize(x->path);
           85         return a;
           86 }
           87 int
           88 nfsmount3tmntpack(uchar *a, uchar *ea, uchar **pa, NfsMount3TMnt *x)
           89 {
           90         if(sunstringpack(a, ea, &a, &x->path, 1024) < 0) goto Err;
           91         *pa = a;
           92         return 0;
           93 Err:
           94         *pa = ea;
           95         return -1;
           96 }
           97 int
           98 nfsmount3tmntunpack(uchar *a, uchar *ea, uchar **pa, NfsMount3TMnt *x)
           99 {
          100         if(sunstringunpack(a, ea, &a, &x->path, 1024) < 0) goto Err;
          101         *pa = a;
          102         return 0;
          103 Err:
          104         *pa = ea;
          105         return -1;
          106 }
          107 void
          108 nfsmount3rmntprint(Fmt *fmt, NfsMount3RMnt *x)
          109 {
          110         fmtprint(fmt, "%s\n", "NfsMount3RMnt");
          111         fmtprint(fmt, "\t%s=", "status");
          112         fmtprint(fmt, "%ud", x->status);
          113         fmtprint(fmt, "\n");
          114         switch(x->status){
          115         case 0:
          116                 fmtprint(fmt, "\t%s=", "handle");
          117                 fmtprint(fmt, "%.*H", x->len, x->handle);
          118                 fmtprint(fmt, "\n");
          119                 break;
          120         }
          121 }
          122 uint
          123 nfsmount3rmntsize(NfsMount3RMnt *x)
          124 {
          125         uint a;
          126         USED(x);
          127         a = 0 + 4;
          128         switch(x->status){
          129         case 0:
          130                 a = a + sunvaropaquesize(x->len);
          131                 a = a + 4 + 4 * x->nauth;
          132                 break;
          133         }
          134         return a;
          135 }
          136 uint
          137 nfsmount1rmntsize(NfsMount3RMnt *x)
          138 {
          139         uint a;
          140         USED(x);
          141         a = 0 + 4;
          142         switch(x->status){
          143         case 0:
          144                 a = a + NfsMount1HandleSize;
          145                 break;
          146         }
          147         return a;
          148 }
          149 
          150 int
          151 nfsmount3rmntpack(uchar *a, uchar *ea, uchar **pa, NfsMount3RMnt *x)
          152 {
          153         int i;
          154         if(sunuint32pack(a, ea, &a, &x->status) < 0) goto Err;
          155         switch(x->status){
          156         case 0:
          157                 if(sunvaropaquepack(a, ea, &a, &x->handle, &x->len, NfsMount3MaxHandleSize) < 0) goto Err;
          158                 if(sunuint32pack(a, ea, &a, &x->nauth) < 0) goto Err;
          159                 for(i=0; i<x->nauth; i++)
          160                         if(sunuint32pack(a, ea, &a, &x->auth[i]) < 0) goto Err;
          161                 break;
          162         }
          163         *pa = a;
          164         return 0;
          165 Err:
          166         *pa = ea;
          167         return -1;
          168 }
          169 int
          170 nfsmount1rmntpack(uchar *a, uchar *ea, uchar **pa, NfsMount3RMnt *x)
          171 {
          172         if(sunuint32pack(a, ea, &a, &x->status) < 0) goto Err;
          173         switch(x->status){
          174         case 0:
          175                 if(x->len != NfsMount1HandleSize)
          176                         goto Err;
          177                 if(sunfixedopaquepack(a, ea, &a, x->handle, NfsMount1HandleSize) < 0) goto Err;
          178                 if(x->nauth != 0)
          179                         goto Err;
          180                 break;
          181         }
          182         *pa = a;
          183         return 0;
          184 Err:
          185         *pa = ea;
          186         return -1;
          187 }
          188 int
          189 nfsmount1rmntunpack(uchar *a, uchar *ea, uchar **pa, NfsMount3RMnt *x)
          190 {
          191         if(sunuint32unpack(a, ea, &a, &x->status) < 0) goto Err;
          192         switch(x->status){
          193         case 0:
          194                 x->len = NfsMount1HandleSize;
          195                 x->nauth = 0;
          196                 x->auth = 0;
          197                 if(sunfixedopaqueunpack(a, ea, &a, x->handle, NfsMount1HandleSize) < 0) goto Err;
          198                 if(x->nauth != 0)
          199                         goto Err;
          200                 break;
          201         }
          202         *pa = a;
          203         return 0;
          204 Err:
          205         *pa = ea;
          206         return -1;
          207 }
          208 
          209 int
          210 nfsmount3rmntunpack(uchar *a, uchar *ea, uchar **pa, NfsMount3RMnt *x)
          211 {
          212         int i;
          213 
          214         if(sunuint32unpack(a, ea, &a, &x->status) < 0) goto Err;
          215         switch(x->status){
          216         case 0:
          217                 if(sunvaropaqueunpack(a, ea, &a, &x->handle, &x->len, NfsMount3MaxHandleSize) < 0) goto Err;
          218                 if(sunuint32unpack(a, ea, &a, &x->nauth) < 0) goto Err;
          219                 x->auth = (u32int*)a;
          220                 for(i=0; i<x->nauth; i++)
          221                         if(sunuint32unpack(a, ea, &a, &x->auth[i]) < 0) goto Err;
          222                 break;
          223         }
          224         *pa = a;
          225         return 0;
          226 Err:
          227         *pa = ea;
          228         return -1;
          229 }
          230 void
          231 nfsmount3tdumpprint(Fmt *fmt, NfsMount3TDump *x)
          232 {
          233         USED(x);
          234         fmtprint(fmt, "%s\n", "NfsMount3TDump");
          235 }
          236 uint
          237 nfsmount3tdumpsize(NfsMount3TDump *x)
          238 {
          239         uint a;
          240         USED(x);
          241         a = 0;
          242         return a;
          243 }
          244 int
          245 nfsmount3tdumppack(uchar *a, uchar *ea, uchar **pa, NfsMount3TDump *x)
          246 {
          247         USED(ea);
          248         USED(x);
          249         *pa = a;
          250         return 0;
          251 }
          252 int
          253 nfsmount3tdumpunpack(uchar *a, uchar *ea, uchar **pa, NfsMount3TDump *x)
          254 {
          255         USED(ea);
          256         USED(x);
          257         *pa = a;
          258         return 0;
          259 }
          260 void
          261 nfsmount3entryprint(Fmt *fmt, NfsMount3Entry *x)
          262 {
          263         fmtprint(fmt, "%s\n", "NfsMount3Entry");
          264         fmtprint(fmt, "\t%s=", "host");
          265         fmtprint(fmt, "\"%s\"", x->host);
          266         fmtprint(fmt, "\n");
          267         fmtprint(fmt, "\t%s=", "path");
          268         fmtprint(fmt, "\"%s\"", x->path);
          269         fmtprint(fmt, "\n");
          270 }
          271 uint
          272 nfsmount3entrysize(NfsMount3Entry *x)
          273 {
          274         uint a;
          275         USED(x);
          276         a = 0 + sunstringsize(x->host) + sunstringsize(x->path);
          277         return a;
          278 }
          279 int
          280 nfsmount3entrypack(uchar *a, uchar *ea, uchar **pa, NfsMount3Entry *x)
          281 {
          282         u1int one;
          283 
          284         one = 1;
          285         if(sunuint1pack(a, ea, &a, &one) < 0) goto Err;
          286         if(sunstringpack(a, ea, &a, &x->host, 255) < 0) goto Err;
          287         if(sunstringpack(a, ea, &a, &x->path, 1024) < 0) goto Err;
          288         *pa = a;
          289         return 0;
          290 Err:
          291         *pa = ea;
          292         return -1;
          293 }
          294 int
          295 nfsmount3entryunpack(uchar *a, uchar *ea, uchar **pa, NfsMount3Entry *x)
          296 {
          297         u1int one;
          298 
          299         if(sunuint1unpack(a, ea, &a, &one) < 0 || one != 1) goto Err;
          300         if(sunstringunpack(a, ea, &a, &x->host, NfsMount3MaxNameSize) < 0) goto Err;
          301         if(sunstringunpack(a, ea, &a, &x->path, NfsMount3MaxPathSize) < 0) goto Err;
          302         *pa = a;
          303         return 0;
          304 Err:
          305         *pa = ea;
          306         return -1;
          307 }
          308 void
          309 nfsmount3rdumpprint(Fmt *fmt, NfsMount3RDump *x)
          310 {
          311         USED(x);
          312         fmtprint(fmt, "%s\n", "NfsMount3RDump");
          313 }
          314 uint
          315 nfsmount3rdumpsize(NfsMount3RDump *x)
          316 {
          317         uint a;
          318         USED(x);
          319         a = 0;
          320         a += x->count;
          321         a += 4;
          322         return a;
          323 }
          324 int
          325 nfsmount3rdumppack(uchar *a, uchar *ea, uchar **pa, NfsMount3RDump *x)
          326 {
          327         u1int zero;
          328 
          329         zero = 0;
          330         if(a+x->count > ea) goto Err;
          331         memmove(a, x->data, x->count);
          332         a += x->count;
          333         if(sunuint1pack(a, ea, &a, &zero) < 0)
          334                 goto Err;
          335         *pa = a;
          336         return 0;
          337 Err:
          338         *pa = ea;
          339         return -1;
          340 }
          341 int
          342 nfsmount3rdumpunpack(uchar *a, uchar *ea, uchar **pa, NfsMount3RDump *x)
          343 {
          344         int i;
          345         uchar *oa;
          346         u1int u1;
          347         u32int u32;
          348 
          349         oa = a;
          350         for(i=0;; i++){
          351                 if(sunuint1unpack(a, ea, &a, &u1) < 0)
          352                         goto Err;
          353                 if(u1 == 0)
          354                         break;
          355                 if(sunuint32unpack(a, ea, &a, &u32) < 0
          356                 || u32 > NfsMount3MaxNameSize
          357                 || (a+=u32) >= ea
          358                 || sunuint32unpack(a, ea, &a, &u32) < 0
          359                 || u32 > NfsMount3MaxPathSize
          360                 || (a+=u32) >= ea)
          361                         goto Err;
          362         }
          363         x->count = (a-4) - oa;
          364         x->data = oa;
          365         *pa = a;
          366         return 0;
          367 Err:
          368         *pa = ea;
          369         return -1;
          370 }
          371 void
          372 nfsmount3tumntprint(Fmt *fmt, NfsMount3TUmnt *x)
          373 {
          374         fmtprint(fmt, "%s\n", "NfsMount3TUmnt");
          375         fmtprint(fmt, "\t%s=", "path");
          376         fmtprint(fmt, "\"%s\"", x->path);
          377         fmtprint(fmt, "\n");
          378 }
          379 uint
          380 nfsmount3tumntsize(NfsMount3TUmnt *x)
          381 {
          382         uint a;
          383         USED(x);
          384         a = 0 + sunstringsize(x->path);
          385         return a;
          386 }
          387 int
          388 nfsmount3tumntpack(uchar *a, uchar *ea, uchar **pa, NfsMount3TUmnt *x)
          389 {
          390         if(sunstringpack(a, ea, &a, &x->path, 1024) < 0) goto Err;
          391         *pa = a;
          392         return 0;
          393 Err:
          394         *pa = ea;
          395         return -1;
          396 }
          397 int
          398 nfsmount3tumntunpack(uchar *a, uchar *ea, uchar **pa, NfsMount3TUmnt *x)
          399 {
          400         if(sunstringunpack(a, ea, &a, &x->path, 1024) < 0) goto Err;
          401         *pa = a;
          402         return 0;
          403 Err:
          404         *pa = ea;
          405         return -1;
          406 }
          407 void
          408 nfsmount3rumntprint(Fmt *fmt, NfsMount3RUmnt *x)
          409 {
          410         USED(x);
          411         fmtprint(fmt, "%s\n", "NfsMount3RUmnt");
          412 }
          413 uint
          414 nfsmount3rumntsize(NfsMount3RUmnt *x)
          415 {
          416         uint a;
          417         USED(x);
          418         a = 0;
          419         return a;
          420 }
          421 int
          422 nfsmount3rumntpack(uchar *a, uchar *ea, uchar **pa, NfsMount3RUmnt *x)
          423 {
          424         USED(ea);
          425         USED(x);
          426         *pa = a;
          427         return 0;
          428 }
          429 int
          430 nfsmount3rumntunpack(uchar *a, uchar *ea, uchar **pa, NfsMount3RUmnt *x)
          431 {
          432         USED(ea);
          433         USED(x);
          434         *pa = a;
          435         return 0;
          436 }
          437 void
          438 nfsmount3tumntallprint(Fmt *fmt, NfsMount3TUmntall *x)
          439 {
          440         USED(x);
          441         fmtprint(fmt, "%s\n", "NfsMount3TUmntall");
          442 }
          443 uint
          444 nfsmount3tumntallsize(NfsMount3TUmntall *x)
          445 {
          446         uint a;
          447         USED(x);
          448         a = 0;
          449         return a;
          450 }
          451 int
          452 nfsmount3tumntallpack(uchar *a, uchar *ea, uchar **pa, NfsMount3TUmntall *x)
          453 {
          454         USED(ea);
          455         USED(x);
          456         *pa = a;
          457         return 0;
          458 }
          459 int
          460 nfsmount3tumntallunpack(uchar *a, uchar *ea, uchar **pa, NfsMount3TUmntall *x)
          461 {
          462         USED(ea);
          463         USED(x);
          464         *pa = a;
          465         return 0;
          466 }
          467 void
          468 nfsmount3rumntallprint(Fmt *fmt, NfsMount3RUmntall *x)
          469 {
          470         USED(x);
          471         fmtprint(fmt, "%s\n", "NfsMount3RUmntall");
          472 }
          473 uint
          474 nfsmount3rumntallsize(NfsMount3RUmntall *x)
          475 {
          476         uint a;
          477         USED(x);
          478         a = 0;
          479         return a;
          480 }
          481 int
          482 nfsmount3rumntallpack(uchar *a, uchar *ea, uchar **pa, NfsMount3RUmntall *x)
          483 {
          484         USED(ea);
          485         USED(x);
          486         *pa = a;
          487         return 0;
          488 }
          489 int
          490 nfsmount3rumntallunpack(uchar *a, uchar *ea, uchar **pa, NfsMount3RUmntall *x)
          491 {
          492         USED(ea);
          493         USED(x);
          494         *pa = a;
          495         return 0;
          496 }
          497 void
          498 nfsmount3texportprint(Fmt *fmt, NfsMount3TExport *x)
          499 {
          500         USED(x);
          501         fmtprint(fmt, "%s\n", "NfsMount3TExport");
          502 }
          503 uint
          504 nfsmount3texportsize(NfsMount3TExport *x)
          505 {
          506         uint a;
          507         USED(x);
          508         a = 0;
          509         return a;
          510 }
          511 int
          512 nfsmount3texportpack(uchar *a, uchar *ea, uchar **pa, NfsMount3TExport *x)
          513 {
          514         USED(ea);
          515         USED(x);
          516         *pa = a;
          517         return 0;
          518 }
          519 int
          520 nfsmount3texportunpack(uchar *a, uchar *ea, uchar **pa, NfsMount3TExport *x)
          521 {
          522         USED(ea);
          523         USED(x);
          524         *pa = a;
          525         return 0;
          526 }
          527 void
          528 nfsmount3rexportprint(Fmt *fmt, NfsMount3RExport *x)
          529 {
          530         USED(x);
          531         fmtprint(fmt, "%s\n", "NfsMount3RExport");
          532         fmtprint(fmt, "\n");
          533 }
          534 uint
          535 nfsmount3rexportsize(NfsMount3RExport *x)
          536 {
          537         uint a;
          538         USED(x);
          539         a = 0;
          540         a += x->count;
          541         a += 4;        /* end of export list */
          542         return a;
          543 }
          544 int
          545 nfsmount3rexportpack(uchar *a, uchar *ea, uchar **pa, NfsMount3RExport *x)
          546 {
          547         u1int zero;
          548 
          549         zero = 0;
          550         if(a+x->count > ea) goto Err;
          551         memmove(a, x->data, x->count);
          552         a += x->count;
          553         if(sunuint1pack(a, ea, &a, &zero) < 0)
          554                 goto Err;
          555         *pa = a;
          556         return 0;
          557 Err:
          558         *pa = ea;
          559         return -1;
          560 }
          561 int
          562 nfsmount3rexportunpack(uchar *a, uchar *ea, uchar **pa, NfsMount3RExport *x)
          563 {
          564         int ng, ne;
          565         uchar *oa;
          566         u1int u1;
          567         u32int u32;
          568 
          569         oa = a;
          570         ng = 0;
          571         for(ne=0;; ne++){
          572                 if(sunuint1unpack(a, ea, &a, &u1) < 0)
          573                         goto Err;
          574                 if(u1 == 0)
          575                         break;
          576                 if(sunuint32unpack(a, ea, &a, &u32) < 0
          577                 || (a += (u32+3)&~3) >= ea)
          578                         goto Err;
          579                 for(;; ng++){
          580                         if(sunuint1unpack(a, ea, &a, &u1) < 0)
          581                                 goto Err;
          582                         if(u1 == 0)
          583                                 break;
          584                         if(sunuint32unpack(a, ea, &a, &u32) < 0
          585                         || (a += (u32+3)&~3) >= ea)
          586                                 goto Err;
          587                 }
          588         }
          589         x->data = oa;
          590         x->count = (a-4) - oa;
          591         *pa = a;
          592         return 0;
          593 Err:
          594         *pa = ea;
          595         return -1;
          596 }
          597 uint
          598 nfsmount3exportgroupsize(uchar *a)
          599 {
          600         int ng;
          601         u1int have;
          602         u32int n;
          603 
          604         a += 4;
          605         sunuint32unpack(a, a+4, &a, &n);
          606         a += (n+3)&~3;
          607         ng = 0;
          608         for(;;){
          609                 sunuint1unpack(a, a+4, &a, &have);
          610                 if(have == 0)
          611                         break;
          612                 ng++;
          613                 sunuint32unpack(a, a+4, &a, &n);
          614                 a += (n+3)&~3;
          615         }
          616         return ng;
          617 }
          618 int
          619 nfsmount3exportunpack(uchar *a, uchar *ea, uchar **pa, char **gp, char ***pgp, NfsMount3Export *x)
          620 {
          621         int ng;
          622         u1int u1;
          623 
          624         if(sunuint1unpack(a, ea, &a, &u1) < 0 || u1 != 1) goto Err;
          625         if(sunstringunpack(a, ea, &a, &x->path, NfsMount3MaxPathSize) < 0) goto Err;
          626         x->g = gp;
          627         ng = 0;
          628         for(;;){
          629                 if(sunuint1unpack(a, ea, &a, &u1) < 0) goto Err;
          630                 if(u1 == 0)
          631                         break;
          632                 if(sunstringunpack(a, ea, &a, &gp[ng++], NfsMount3MaxNameSize) < 0) goto Err;
          633         }
          634         x->ng = ng;
          635         *pgp = gp+ng;
          636         *pa = a;
          637         return 0;
          638 
          639 Err:
          640         *pa = ea;
          641         return -1;
          642 }
          643 uint
          644 nfsmount3exportsize(NfsMount3Export *x)
          645 {
          646         int i;
          647         uint a;
          648 
          649         a = 4 + sunstringsize(x->path);
          650         for(i=0; i<x->ng; i++)
          651                 a += 4 + sunstringsize(x->g[i]);
          652         a += 4;
          653         return a;
          654 }
          655 int
          656 nfsmount3exportpack(uchar *a, uchar *ea, uchar **pa, NfsMount3Export *x)
          657 {
          658         int i;
          659         u1int u1;
          660 
          661         u1 = 1;
          662         if(sunuint1pack(a, ea, &a, &u1) < 0) goto Err;
          663         if(sunstringpack(a, ea, &a, &x->path, NfsMount3MaxPathSize) < 0) goto Err;
          664         for(i=0; i<x->ng; i++){
          665                 if(sunuint1pack(a, ea, &a, &u1) < 0) goto Err;
          666                 if(sunstringpack(a, ea, &a, &x->g[i], NfsMount3MaxNameSize) < 0) goto Err;
          667         }
          668         u1 = 0;
          669         if(sunuint1pack(a, ea, &a, &u1) < 0) goto Err;
          670         *pa = a;
          671         return 0;
          672 
          673 Err:
          674         *pa = ea;
          675         return -1;
          676 }
          677 
          678 typedef int (*P)(uchar*, uchar*, uchar**, SunCall*);
          679 typedef void (*F)(Fmt*, SunCall*);
          680 typedef uint (*S)(SunCall*);
          681 
          682 static SunProc proc3[] = {
          683         (P)nfsmount3tnullpack, (P)nfsmount3tnullunpack, (S)nfsmount3tnullsize, (F)nfsmount3tnullprint, sizeof(NfsMount3TNull),
          684         (P)nfsmount3rnullpack, (P)nfsmount3rnullunpack, (S)nfsmount3rnullsize, (F)nfsmount3rnullprint, sizeof(NfsMount3RNull),
          685         (P)nfsmount3tmntpack, (P)nfsmount3tmntunpack, (S)nfsmount3tmntsize, (F)nfsmount3tmntprint, sizeof(NfsMount3TMnt),
          686         (P)nfsmount3rmntpack, (P)nfsmount3rmntunpack, (S)nfsmount3rmntsize, (F)nfsmount3rmntprint, sizeof(NfsMount3RMnt),
          687         (P)nfsmount3tdumppack, (P)nfsmount3tdumpunpack, (S)nfsmount3tdumpsize, (F)nfsmount3tdumpprint, sizeof(NfsMount3TDump),
          688         (P)nfsmount3rdumppack, (P)nfsmount3rdumpunpack, (S)nfsmount3rdumpsize, (F)nfsmount3rdumpprint, sizeof(NfsMount3RDump),
          689         (P)nfsmount3tumntpack, (P)nfsmount3tumntunpack, (S)nfsmount3tumntsize, (F)nfsmount3tumntprint, sizeof(NfsMount3TUmnt),
          690         (P)nfsmount3rumntpack, (P)nfsmount3rumntunpack, (S)nfsmount3rumntsize, (F)nfsmount3rumntprint, sizeof(NfsMount3RUmnt),
          691         (P)nfsmount3tumntallpack, (P)nfsmount3tumntallunpack, (S)nfsmount3tumntallsize, (F)nfsmount3tumntallprint, sizeof(NfsMount3TUmntall),
          692         (P)nfsmount3rumntallpack, (P)nfsmount3rumntallunpack, (S)nfsmount3rumntallsize, (F)nfsmount3rumntallprint, sizeof(NfsMount3RUmntall),
          693         (P)nfsmount3texportpack, (P)nfsmount3texportunpack, (S)nfsmount3texportsize, (F)nfsmount3texportprint, sizeof(NfsMount3TExport),
          694         (P)nfsmount3rexportpack, (P)nfsmount3rexportunpack, (S)nfsmount3rexportsize, (F)nfsmount3rexportprint, sizeof(NfsMount3RExport),
          695 };
          696 
          697 static SunProc proc1[] = {
          698         (P)nfsmount3tnullpack, (P)nfsmount3tnullunpack, (S)nfsmount3tnullsize, (F)nfsmount3tnullprint, sizeof(NfsMount3TNull),
          699         (P)nfsmount3rnullpack, (P)nfsmount3rnullunpack, (S)nfsmount3rnullsize, (F)nfsmount3rnullprint, sizeof(NfsMount3RNull),
          700         (P)nfsmount3tmntpack, (P)nfsmount3tmntunpack, (S)nfsmount3tmntsize, (F)nfsmount3tmntprint, sizeof(NfsMount3TMnt),
          701         (P)nfsmount1rmntpack, (P)nfsmount1rmntunpack, (S)nfsmount1rmntsize, (F)nfsmount3rmntprint, sizeof(NfsMount3RMnt),
          702         (P)nfsmount3tdumppack, (P)nfsmount3tdumpunpack, (S)nfsmount3tdumpsize, (F)nfsmount3tdumpprint, sizeof(NfsMount3TDump),
          703         (P)nfsmount3rdumppack, (P)nfsmount3rdumpunpack, (S)nfsmount3rdumpsize, (F)nfsmount3rdumpprint, sizeof(NfsMount3RDump),
          704         (P)nfsmount3tumntpack, (P)nfsmount3tumntunpack, (S)nfsmount3tumntsize, (F)nfsmount3tumntprint, sizeof(NfsMount3TUmnt),
          705         (P)nfsmount3rumntpack, (P)nfsmount3rumntunpack, (S)nfsmount3rumntsize, (F)nfsmount3rumntprint, sizeof(NfsMount3RUmnt),
          706         (P)nfsmount3tumntallpack, (P)nfsmount3tumntallunpack, (S)nfsmount3tumntallsize, (F)nfsmount3tumntallprint, sizeof(NfsMount3TUmntall),
          707         (P)nfsmount3rumntallpack, (P)nfsmount3rumntallunpack, (S)nfsmount3rumntallsize, (F)nfsmount3rumntallprint, sizeof(NfsMount3RUmntall),
          708         (P)nfsmount3texportpack, (P)nfsmount3texportunpack, (S)nfsmount3texportsize, (F)nfsmount3texportprint, sizeof(NfsMount3TExport),
          709         (P)nfsmount3rexportpack, (P)nfsmount3rexportunpack, (S)nfsmount3rexportsize, (F)nfsmount3rexportprint, sizeof(NfsMount3RExport),
          710 };
          711 
          712 SunProg nfsmount3prog =
          713 {
          714         NfsMount3Program,
          715         NfsMount3Version,
          716         proc3,
          717         nelem(proc3),
          718 };
          719 
          720 SunProg nfsmount1prog =
          721 {
          722         NfsMount1Program,
          723         NfsMount1Version,
          724         proc1,
          725         nelem(proc1),
          726 };