plan9port

fork of plan9port with libvec, libstr and libsdb
Log | Files | Refs | README | LICENSE

mount3.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 };