144928Smckusick /* 244928Smckusick * Copyright (c) 1989 Jan-Simon Pendry 344928Smckusick * Copyright (c) 1989 Imperial College of Science, Technology & Medicine 444928Smckusick * Copyright (c) 1989 The Regents of the University of California. 544928Smckusick * All rights reserved. 644928Smckusick * 744928Smckusick * This code is derived from software contributed to Berkeley by 844928Smckusick * Jan-Simon Pendry at Imperial College, London. 944928Smckusick * 1044928Smckusick * %sccs.include.redist.c% 1144928Smckusick * 12*52457Spendry * @(#)nfs_prot_xdr.c 5.4 (Berkeley) 02/09/92 1349685Spendry * 14*52457Spendry * $Id: nfs_prot_xdr.c,v 5.2.2.1 1992/02/09 15:09:32 jsp beta $ 1549685Spendry * 1644928Smckusick */ 1744928Smckusick 1844928Smckusick #include "am.h" 1944928Smckusick 2044928Smckusick 2144928Smckusick #ifndef xdr_nfsstat 2244928Smckusick bool_t 2344928Smckusick xdr_nfsstat(xdrs, objp) 2444928Smckusick XDR *xdrs; 2544928Smckusick nfsstat *objp; 2644928Smckusick { 2744928Smckusick if (!xdr_enum(xdrs, (enum_t *)objp)) { 2844928Smckusick return (FALSE); 2944928Smckusick } 3044928Smckusick return (TRUE); 3144928Smckusick } 3244928Smckusick #endif /* xdr_nfsstat */ 3344928Smckusick 3444928Smckusick 3544928Smckusick 3644928Smckusick #ifndef xdr_ftype 3744928Smckusick static bool_t 3844928Smckusick xdr_ftype(xdrs, objp) 3944928Smckusick XDR *xdrs; 4044928Smckusick ftype *objp; 4144928Smckusick { 4244928Smckusick if (!xdr_enum(xdrs, (enum_t *)objp)) { 4344928Smckusick return (FALSE); 4444928Smckusick } 4544928Smckusick return (TRUE); 4644928Smckusick } 4744928Smckusick #endif /* xdr_ftype */ 4844928Smckusick 4944928Smckusick 5044928Smckusick 5144928Smckusick bool_t 5244928Smckusick xdr_nfs_fh(xdrs, objp) 5344928Smckusick XDR *xdrs; 5444928Smckusick nfs_fh *objp; 5544928Smckusick { 5644928Smckusick if (!xdr_opaque(xdrs, objp->data, NFS_FHSIZE)) { 5744928Smckusick return (FALSE); 5844928Smckusick } 5944928Smckusick return (TRUE); 6044928Smckusick } 6144928Smckusick 6244928Smckusick 6344928Smckusick 6444928Smckusick 6544928Smckusick static bool_t 6644928Smckusick xdr_nfstime(xdrs, objp) 6744928Smckusick XDR *xdrs; 6844928Smckusick nfstime *objp; 6944928Smckusick { 7044928Smckusick if (!xdr_u_int(xdrs, &objp->seconds)) { 7144928Smckusick return (FALSE); 7244928Smckusick } 7344928Smckusick if (!xdr_u_int(xdrs, &objp->useconds)) { 7444928Smckusick return (FALSE); 7544928Smckusick } 7644928Smckusick return (TRUE); 7744928Smckusick } 7844928Smckusick 7944928Smckusick 8044928Smckusick 8144928Smckusick 8244928Smckusick static bool_t 8344928Smckusick xdr_fattr(xdrs, objp) 8444928Smckusick XDR *xdrs; 8544928Smckusick fattr *objp; 8644928Smckusick { 8744928Smckusick if (!xdr_ftype(xdrs, &objp->type)) { 8844928Smckusick return (FALSE); 8944928Smckusick } 9044928Smckusick if (!xdr_u_int(xdrs, &objp->mode)) { 9144928Smckusick return (FALSE); 9244928Smckusick } 9344928Smckusick if (!xdr_u_int(xdrs, &objp->nlink)) { 9444928Smckusick return (FALSE); 9544928Smckusick } 9644928Smckusick if (!xdr_u_int(xdrs, &objp->uid)) { 9744928Smckusick return (FALSE); 9844928Smckusick } 9944928Smckusick if (!xdr_u_int(xdrs, &objp->gid)) { 10044928Smckusick return (FALSE); 10144928Smckusick } 10244928Smckusick if (!xdr_u_int(xdrs, &objp->size)) { 10344928Smckusick return (FALSE); 10444928Smckusick } 10544928Smckusick if (!xdr_u_int(xdrs, &objp->blocksize)) { 10644928Smckusick return (FALSE); 10744928Smckusick } 10844928Smckusick if (!xdr_u_int(xdrs, &objp->rdev)) { 10944928Smckusick return (FALSE); 11044928Smckusick } 11144928Smckusick if (!xdr_u_int(xdrs, &objp->blocks)) { 11244928Smckusick return (FALSE); 11344928Smckusick } 11444928Smckusick if (!xdr_u_int(xdrs, &objp->fsid)) { 11544928Smckusick return (FALSE); 11644928Smckusick } 11744928Smckusick if (!xdr_u_int(xdrs, &objp->fileid)) { 11844928Smckusick return (FALSE); 11944928Smckusick } 12044928Smckusick if (!xdr_nfstime(xdrs, &objp->atime)) { 12144928Smckusick return (FALSE); 12244928Smckusick } 12344928Smckusick if (!xdr_nfstime(xdrs, &objp->mtime)) { 12444928Smckusick return (FALSE); 12544928Smckusick } 12644928Smckusick if (!xdr_nfstime(xdrs, &objp->ctime)) { 12744928Smckusick return (FALSE); 12844928Smckusick } 12944928Smckusick return (TRUE); 13044928Smckusick } 13144928Smckusick 13244928Smckusick 13344928Smckusick 13444928Smckusick 13544928Smckusick static bool_t 13644928Smckusick xdr_sattr(xdrs, objp) 13744928Smckusick XDR *xdrs; 13844928Smckusick sattr *objp; 13944928Smckusick { 14044928Smckusick if (!xdr_u_int(xdrs, &objp->mode)) { 14144928Smckusick return (FALSE); 14244928Smckusick } 14344928Smckusick if (!xdr_u_int(xdrs, &objp->uid)) { 14444928Smckusick return (FALSE); 14544928Smckusick } 14644928Smckusick if (!xdr_u_int(xdrs, &objp->gid)) { 14744928Smckusick return (FALSE); 14844928Smckusick } 14944928Smckusick if (!xdr_u_int(xdrs, &objp->size)) { 15044928Smckusick return (FALSE); 15144928Smckusick } 15244928Smckusick if (!xdr_nfstime(xdrs, &objp->atime)) { 15344928Smckusick return (FALSE); 15444928Smckusick } 15544928Smckusick if (!xdr_nfstime(xdrs, &objp->mtime)) { 15644928Smckusick return (FALSE); 15744928Smckusick } 15844928Smckusick return (TRUE); 15944928Smckusick } 16044928Smckusick 16144928Smckusick 16244928Smckusick 16344928Smckusick 16444928Smckusick static bool_t 16544928Smckusick xdr_filename(xdrs, objp) 16644928Smckusick XDR *xdrs; 16744928Smckusick filename *objp; 16844928Smckusick { 16944928Smckusick if (!xdr_string(xdrs, objp, NFS_MAXNAMLEN)) { 17044928Smckusick return (FALSE); 17144928Smckusick } 17244928Smckusick return (TRUE); 17344928Smckusick } 17444928Smckusick 17544928Smckusick 17644928Smckusick 17744928Smckusick 17844928Smckusick bool_t 17944928Smckusick xdr_nfspath(xdrs, objp) 18044928Smckusick XDR *xdrs; 18144928Smckusick nfspath *objp; 18244928Smckusick { 18344928Smckusick if (!xdr_string(xdrs, objp, NFS_MAXPATHLEN)) { 18444928Smckusick return (FALSE); 18544928Smckusick } 18644928Smckusick return (TRUE); 18744928Smckusick } 18844928Smckusick 18944928Smckusick 19044928Smckusick 19144928Smckusick 19244928Smckusick bool_t 19344928Smckusick xdr_attrstat(xdrs, objp) 19444928Smckusick XDR *xdrs; 19544928Smckusick attrstat *objp; 19644928Smckusick { 19744928Smckusick if (!xdr_nfsstat(xdrs, &objp->status)) { 19844928Smckusick return (FALSE); 19944928Smckusick } 20044928Smckusick switch (objp->status) { 20144928Smckusick case NFS_OK: 20244928Smckusick if (!xdr_fattr(xdrs, &objp->attrstat_u.attributes)) { 20344928Smckusick return (FALSE); 20444928Smckusick } 20544928Smckusick break; 20644928Smckusick } 20744928Smckusick return (TRUE); 20844928Smckusick } 20944928Smckusick 21044928Smckusick 21144928Smckusick 21244928Smckusick 21344928Smckusick bool_t 21444928Smckusick xdr_sattrargs(xdrs, objp) 21544928Smckusick XDR *xdrs; 21644928Smckusick sattrargs *objp; 21744928Smckusick { 21844928Smckusick if (!xdr_nfs_fh(xdrs, &objp->file)) { 21944928Smckusick return (FALSE); 22044928Smckusick } 22144928Smckusick if (!xdr_sattr(xdrs, &objp->attributes)) { 22244928Smckusick return (FALSE); 22344928Smckusick } 22444928Smckusick return (TRUE); 22544928Smckusick } 22644928Smckusick 22744928Smckusick 22844928Smckusick 22944928Smckusick 23044928Smckusick bool_t 23144928Smckusick xdr_diropargs(xdrs, objp) 23244928Smckusick XDR *xdrs; 23344928Smckusick diropargs *objp; 23444928Smckusick { 23544928Smckusick if (!xdr_nfs_fh(xdrs, &objp->dir)) { 23644928Smckusick return (FALSE); 23744928Smckusick } 23844928Smckusick if (!xdr_filename(xdrs, &objp->name)) { 23944928Smckusick return (FALSE); 24044928Smckusick } 24144928Smckusick return (TRUE); 24244928Smckusick } 24344928Smckusick 24444928Smckusick 24544928Smckusick 24644928Smckusick 24744928Smckusick bool_t 24844928Smckusick xdr_diropokres(xdrs, objp) 24944928Smckusick XDR *xdrs; 25044928Smckusick diropokres *objp; 25144928Smckusick { 25244928Smckusick if (!xdr_nfs_fh(xdrs, &objp->file)) { 25344928Smckusick return (FALSE); 25444928Smckusick } 25544928Smckusick if (!xdr_fattr(xdrs, &objp->attributes)) { 25644928Smckusick return (FALSE); 25744928Smckusick } 25844928Smckusick return (TRUE); 25944928Smckusick } 26044928Smckusick 26144928Smckusick 26244928Smckusick 26344928Smckusick 26444928Smckusick bool_t 26544928Smckusick xdr_diropres(xdrs, objp) 26644928Smckusick XDR *xdrs; 26744928Smckusick diropres *objp; 26844928Smckusick { 26944928Smckusick if (!xdr_nfsstat(xdrs, &objp->status)) { 27044928Smckusick return (FALSE); 27144928Smckusick } 27244928Smckusick switch (objp->status) { 27344928Smckusick case NFS_OK: 27444928Smckusick if (!xdr_diropokres(xdrs, &objp->diropres_u.diropres)) { 27544928Smckusick return (FALSE); 27644928Smckusick } 27744928Smckusick break; 27844928Smckusick } 27944928Smckusick return (TRUE); 28044928Smckusick } 28144928Smckusick 28244928Smckusick 28344928Smckusick 28444928Smckusick 28544928Smckusick bool_t 28644928Smckusick xdr_readlinkres(xdrs, objp) 28744928Smckusick XDR *xdrs; 28844928Smckusick readlinkres *objp; 28944928Smckusick { 29044928Smckusick if (!xdr_nfsstat(xdrs, &objp->status)) { 29144928Smckusick return (FALSE); 29244928Smckusick } 29344928Smckusick switch (objp->status) { 29444928Smckusick case NFS_OK: 29544928Smckusick if (!xdr_nfspath(xdrs, &objp->readlinkres_u.data)) { 29644928Smckusick return (FALSE); 29744928Smckusick } 29844928Smckusick break; 29944928Smckusick } 30044928Smckusick return (TRUE); 30144928Smckusick } 30244928Smckusick 30344928Smckusick 30444928Smckusick 30544928Smckusick 30644928Smckusick bool_t 30744928Smckusick xdr_readargs(xdrs, objp) 30844928Smckusick XDR *xdrs; 30944928Smckusick readargs *objp; 31044928Smckusick { 31144928Smckusick if (!xdr_nfs_fh(xdrs, &objp->file)) { 31244928Smckusick return (FALSE); 31344928Smckusick } 31444928Smckusick if (!xdr_u_int(xdrs, &objp->offset)) { 31544928Smckusick return (FALSE); 31644928Smckusick } 31744928Smckusick if (!xdr_u_int(xdrs, &objp->count)) { 31844928Smckusick return (FALSE); 31944928Smckusick } 32044928Smckusick if (!xdr_u_int(xdrs, &objp->totalcount)) { 32144928Smckusick return (FALSE); 32244928Smckusick } 32344928Smckusick return (TRUE); 32444928Smckusick } 32544928Smckusick 32644928Smckusick 32744928Smckusick 32844928Smckusick 32944928Smckusick bool_t 33044928Smckusick xdr_readokres(xdrs, objp) 33144928Smckusick XDR *xdrs; 33244928Smckusick readokres *objp; 33344928Smckusick { 33444928Smckusick if (!xdr_fattr(xdrs, &objp->attributes)) { 33544928Smckusick return (FALSE); 33644928Smckusick } 33744928Smckusick if (!xdr_bytes(xdrs, (char **)&objp->data.data_val, (u_int *)&objp->data.data_len, NFS_MAXDATA)) { 33844928Smckusick return (FALSE); 33944928Smckusick } 34044928Smckusick return (TRUE); 34144928Smckusick } 34244928Smckusick 34344928Smckusick 34444928Smckusick 34544928Smckusick 34644928Smckusick bool_t 34744928Smckusick xdr_readres(xdrs, objp) 34844928Smckusick XDR *xdrs; 34944928Smckusick readres *objp; 35044928Smckusick { 35144928Smckusick if (!xdr_nfsstat(xdrs, &objp->status)) { 35244928Smckusick return (FALSE); 35344928Smckusick } 35444928Smckusick switch (objp->status) { 35544928Smckusick case NFS_OK: 35644928Smckusick if (!xdr_readokres(xdrs, &objp->readres_u.reply)) { 35744928Smckusick return (FALSE); 35844928Smckusick } 35944928Smckusick break; 36044928Smckusick } 36144928Smckusick return (TRUE); 36244928Smckusick } 36344928Smckusick 36444928Smckusick 36544928Smckusick 36644928Smckusick 36744928Smckusick bool_t 36844928Smckusick xdr_writeargs(xdrs, objp) 36944928Smckusick XDR *xdrs; 37044928Smckusick writeargs *objp; 37144928Smckusick { 37244928Smckusick if (!xdr_nfs_fh(xdrs, &objp->file)) { 37344928Smckusick return (FALSE); 37444928Smckusick } 37544928Smckusick if (!xdr_u_int(xdrs, &objp->beginoffset)) { 37644928Smckusick return (FALSE); 37744928Smckusick } 37844928Smckusick if (!xdr_u_int(xdrs, &objp->offset)) { 37944928Smckusick return (FALSE); 38044928Smckusick } 38144928Smckusick if (!xdr_u_int(xdrs, &objp->totalcount)) { 38244928Smckusick return (FALSE); 38344928Smckusick } 38444928Smckusick if (!xdr_bytes(xdrs, (char **)&objp->data.data_val, (u_int *)&objp->data.data_len, NFS_MAXDATA)) { 38544928Smckusick return (FALSE); 38644928Smckusick } 38744928Smckusick return (TRUE); 38844928Smckusick } 38944928Smckusick 39044928Smckusick 39144928Smckusick 39244928Smckusick 39344928Smckusick bool_t 39444928Smckusick xdr_createargs(xdrs, objp) 39544928Smckusick XDR *xdrs; 39644928Smckusick createargs *objp; 39744928Smckusick { 39844928Smckusick if (!xdr_diropargs(xdrs, &objp->where)) { 39944928Smckusick return (FALSE); 40044928Smckusick } 40144928Smckusick if (!xdr_sattr(xdrs, &objp->attributes)) { 40244928Smckusick return (FALSE); 40344928Smckusick } 40444928Smckusick return (TRUE); 40544928Smckusick } 40644928Smckusick 40744928Smckusick 40844928Smckusick 40944928Smckusick 41044928Smckusick bool_t 41144928Smckusick xdr_renameargs(xdrs, objp) 41244928Smckusick XDR *xdrs; 41344928Smckusick renameargs *objp; 41444928Smckusick { 41544928Smckusick if (!xdr_diropargs(xdrs, &objp->from)) { 41644928Smckusick return (FALSE); 41744928Smckusick } 41844928Smckusick if (!xdr_diropargs(xdrs, &objp->to)) { 41944928Smckusick return (FALSE); 42044928Smckusick } 42144928Smckusick return (TRUE); 42244928Smckusick } 42344928Smckusick 42444928Smckusick 42544928Smckusick 42644928Smckusick 42744928Smckusick bool_t 42844928Smckusick xdr_linkargs(xdrs, objp) 42944928Smckusick XDR *xdrs; 43044928Smckusick linkargs *objp; 43144928Smckusick { 43244928Smckusick if (!xdr_nfs_fh(xdrs, &objp->from)) { 43344928Smckusick return (FALSE); 43444928Smckusick } 43544928Smckusick if (!xdr_diropargs(xdrs, &objp->to)) { 43644928Smckusick return (FALSE); 43744928Smckusick } 43844928Smckusick return (TRUE); 43944928Smckusick } 44044928Smckusick 44144928Smckusick 44244928Smckusick 44344928Smckusick 44444928Smckusick bool_t 44544928Smckusick xdr_symlinkargs(xdrs, objp) 44644928Smckusick XDR *xdrs; 44744928Smckusick symlinkargs *objp; 44844928Smckusick { 44944928Smckusick if (!xdr_diropargs(xdrs, &objp->from)) { 45044928Smckusick return (FALSE); 45144928Smckusick } 45244928Smckusick if (!xdr_nfspath(xdrs, &objp->to)) { 45344928Smckusick return (FALSE); 45444928Smckusick } 45544928Smckusick if (!xdr_sattr(xdrs, &objp->attributes)) { 45644928Smckusick return (FALSE); 45744928Smckusick } 45844928Smckusick return (TRUE); 45944928Smckusick } 46044928Smckusick 46144928Smckusick 46244928Smckusick 46344928Smckusick 46444928Smckusick static bool_t 46544928Smckusick xdr_nfscookie(xdrs, objp) 46644928Smckusick XDR *xdrs; 46744928Smckusick nfscookie objp; 46844928Smckusick { 46944928Smckusick if (!xdr_opaque(xdrs, objp, NFS_COOKIESIZE)) { 47044928Smckusick return (FALSE); 47144928Smckusick } 47244928Smckusick return (TRUE); 47344928Smckusick } 47444928Smckusick 47544928Smckusick 47644928Smckusick 47744928Smckusick 47844928Smckusick bool_t 47944928Smckusick xdr_readdirargs(xdrs, objp) 48044928Smckusick XDR *xdrs; 48144928Smckusick readdirargs *objp; 48244928Smckusick { 48344928Smckusick if (!xdr_nfs_fh(xdrs, &objp->dir)) { 48444928Smckusick return (FALSE); 48544928Smckusick } 48644928Smckusick if (!xdr_nfscookie(xdrs, objp->cookie)) { 48744928Smckusick return (FALSE); 48844928Smckusick } 48944928Smckusick if (!xdr_u_int(xdrs, &objp->count)) { 49044928Smckusick return (FALSE); 49144928Smckusick } 49244928Smckusick return (TRUE); 49344928Smckusick } 49444928Smckusick 49544928Smckusick 49644928Smckusick 49744928Smckusick 49844928Smckusick static bool_t 49944928Smckusick xdr_entry(xdrs, objp) 50044928Smckusick XDR *xdrs; 50144928Smckusick entry *objp; 50244928Smckusick { 50344928Smckusick if (!xdr_u_int(xdrs, &objp->fileid)) { 50444928Smckusick return (FALSE); 50544928Smckusick } 50644928Smckusick if (!xdr_filename(xdrs, &objp->name)) { 50744928Smckusick return (FALSE); 50844928Smckusick } 50944928Smckusick if (!xdr_nfscookie(xdrs, objp->cookie)) { 51044928Smckusick return (FALSE); 51144928Smckusick } 51244928Smckusick if (!xdr_pointer(xdrs, (char **)&objp->nextentry, sizeof(entry), xdr_entry)) { 51344928Smckusick return (FALSE); 51444928Smckusick } 51544928Smckusick return (TRUE); 51644928Smckusick } 51744928Smckusick 51844928Smckusick 51944928Smckusick 52044928Smckusick 52144928Smckusick static bool_t 52244928Smckusick xdr_dirlist(xdrs, objp) 52344928Smckusick XDR *xdrs; 52444928Smckusick dirlist *objp; 52544928Smckusick { 52644928Smckusick if (!xdr_pointer(xdrs, (char **)&objp->entries, sizeof(entry), xdr_entry)) { 52744928Smckusick return (FALSE); 52844928Smckusick } 52944928Smckusick if (!xdr_bool(xdrs, &objp->eof)) { 53044928Smckusick return (FALSE); 53144928Smckusick } 53244928Smckusick return (TRUE); 53344928Smckusick } 53444928Smckusick 53544928Smckusick 53644928Smckusick 53744928Smckusick 53844928Smckusick bool_t 53944928Smckusick xdr_readdirres(xdrs, objp) 54044928Smckusick XDR *xdrs; 54144928Smckusick readdirres *objp; 54244928Smckusick { 54344928Smckusick if (!xdr_nfsstat(xdrs, &objp->status)) { 54444928Smckusick return (FALSE); 54544928Smckusick } 54644928Smckusick switch (objp->status) { 54744928Smckusick case NFS_OK: 54844928Smckusick if (!xdr_dirlist(xdrs, &objp->readdirres_u.reply)) { 54944928Smckusick return (FALSE); 55044928Smckusick } 55144928Smckusick break; 55244928Smckusick } 55344928Smckusick return (TRUE); 55444928Smckusick } 55544928Smckusick 55644928Smckusick 55744928Smckusick 55844928Smckusick 55944928Smckusick bool_t 56044928Smckusick xdr_statfsokres(xdrs, objp) 56144928Smckusick XDR *xdrs; 56244928Smckusick statfsokres *objp; 56344928Smckusick { 56444928Smckusick if (!xdr_u_int(xdrs, &objp->tsize)) { 56544928Smckusick return (FALSE); 56644928Smckusick } 56744928Smckusick if (!xdr_u_int(xdrs, &objp->bsize)) { 56844928Smckusick return (FALSE); 56944928Smckusick } 57044928Smckusick if (!xdr_u_int(xdrs, &objp->blocks)) { 57144928Smckusick return (FALSE); 57244928Smckusick } 57344928Smckusick if (!xdr_u_int(xdrs, &objp->bfree)) { 57444928Smckusick return (FALSE); 57544928Smckusick } 57644928Smckusick if (!xdr_u_int(xdrs, &objp->bavail)) { 57744928Smckusick return (FALSE); 57844928Smckusick } 57944928Smckusick return (TRUE); 58044928Smckusick } 58144928Smckusick 58244928Smckusick 58344928Smckusick 58444928Smckusick 58544928Smckusick bool_t 58644928Smckusick xdr_statfsres(xdrs, objp) 58744928Smckusick XDR *xdrs; 58844928Smckusick statfsres *objp; 58944928Smckusick { 59044928Smckusick if (!xdr_nfsstat(xdrs, &objp->status)) { 59144928Smckusick return (FALSE); 59244928Smckusick } 59344928Smckusick switch (objp->status) { 59444928Smckusick case NFS_OK: 59544928Smckusick if (!xdr_statfsokres(xdrs, &objp->statfsres_u.reply)) { 59644928Smckusick return (FALSE); 59744928Smckusick } 59844928Smckusick break; 59944928Smckusick } 60044928Smckusick return (TRUE); 60144928Smckusick } 602