nfs3.c 92 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620362136223623362436253626362736283629363036313632363336343635363636373638363936403641364236433644364536463647364836493650365136523653365436553656365736583659366036613662366336643665366636673668366936703671367236733674367536763677367836793680368136823683368436853686368736883689369036913692369336943695369636973698369937003701370237033704370537063707370837093710371137123713371437153716371737183719372037213722372337243725372637273728372937303731373237333734373537363737373837393740374137423743374437453746374737483749375037513752375337543755375637573758375937603761376237633764376537663767376837693770377137723773377437753776377737783779378037813782378337843785378637873788378937903791379237933794379537963797379837993800380138023803380438053806380738083809381038113812381338143815381638173818381938203821382238233824382538263827382838293830383138323833383438353836383738383839384038413842384338443845384638473848384938503851385238533854385538563857385838593860386138623863386438653866386738683869387038713872387338743875387638773878387938803881388238833884388538863887388838893890389138923893389438953896389738983899390039013902390339043905390639073908390939103911391239133914391539163917391839193920392139223923392439253926392739283929393039313932393339343935393639373938393939403941394239433944394539463947394839493950395139523953395439553956395739583959396039613962396339643965396639673968396939703971397239733974397539763977397839793980398139823983398439853986398739883989399039913992399339943995399639973998399940004001400240034004400540064007400840094010401140124013401440154016401740184019402040214022402340244025402640274028402940304031403240334034403540364037403840394040404140424043404440454046404740484049405040514052405340544055405640574058
  1. /*
  2. * This file is part of the UCB release of Plan 9. It is subject to the license
  3. * terms in the LICENSE file found in the top-level directory of this
  4. * distribution and at http://akaros.cs.berkeley.edu/files/Plan9License. No
  5. * part of the UCB release of Plan 9, including this file, may be copied,
  6. * modified, propagated, or distributed except according to the terms contained
  7. * in the LICENSE file.
  8. */
  9. #include <u.h>
  10. #include <libc.h>
  11. #include <thread.h>
  12. #include <sunrpc.h>
  13. #include <nfs3.h>
  14. char*
  15. nfs3StatusStr(Nfs3Status x)
  16. {
  17. switch(x){
  18. case Nfs3Ok:
  19. return "Nfs3Ok";
  20. case Nfs3ErrNotOwner:
  21. return "Nfs3ErrNotOwner";
  22. case Nfs3ErrNoEnt:
  23. return "Nfs3ErrNoEnt";
  24. case Nfs3ErrNoMem:
  25. return "Nfs3ErrNoMem";
  26. case Nfs3ErrIo:
  27. return "Nfs3ErrIo";
  28. case Nfs3ErrNxio:
  29. return "Nfs3ErrNxio";
  30. case Nfs3ErrAcces:
  31. return "Nfs3ErrAcces";
  32. case Nfs3ErrExist:
  33. return "Nfs3ErrExist";
  34. case Nfs3ErrXDev:
  35. return "Nfs3ErrXDev";
  36. case Nfs3ErrNoDev:
  37. return "Nfs3ErrNoDev";
  38. case Nfs3ErrNotDir:
  39. return "Nfs3ErrNotDir";
  40. case Nfs3ErrIsDir:
  41. return "Nfs3ErrIsDir";
  42. case Nfs3ErrInval:
  43. return "Nfs3ErrInval";
  44. case Nfs3ErrFbig:
  45. return "Nfs3ErrFbig";
  46. case Nfs3ErrNoSpc:
  47. return "Nfs3ErrNoSpc";
  48. case Nfs3ErrRoFs:
  49. return "Nfs3ErrRoFs";
  50. case Nfs3ErrMLink:
  51. return "Nfs3ErrMLink";
  52. case Nfs3ErrNameTooLong:
  53. return "Nfs3ErrNameTooLong";
  54. case Nfs3ErrNotEmpty:
  55. return "Nfs3ErrNotEmpty";
  56. case Nfs3ErrDQuot:
  57. return "Nfs3ErrDQuot";
  58. case Nfs3ErrStale:
  59. return "Nfs3ErrStale";
  60. case Nfs3ErrRemote:
  61. return "Nfs3ErrRemote";
  62. case Nfs3ErrBadHandle:
  63. return "Nfs3ErrBadHandle";
  64. case Nfs3ErrNotSync:
  65. return "Nfs3ErrNotSync";
  66. case Nfs3ErrBadCookie:
  67. return "Nfs3ErrBadCookie";
  68. case Nfs3ErrNotSupp:
  69. return "Nfs3ErrNotSupp";
  70. case Nfs3ErrTooSmall:
  71. return "Nfs3ErrTooSmall";
  72. case Nfs3ErrServerFault:
  73. return "Nfs3ErrServerFault";
  74. case Nfs3ErrBadType:
  75. return "Nfs3ErrBadType";
  76. case Nfs3ErrJukebox:
  77. return "Nfs3ErrJukebox";
  78. case Nfs3ErrFprintNotFound:
  79. return "Nfs3ErrFprintNotFound";
  80. case Nfs3ErrAborted:
  81. return "Nfs3ErrAborted";
  82. default:
  83. return "unknown";
  84. }
  85. }
  86. static struct {
  87. SunStatus status;
  88. char *msg;
  89. } etab[] = {
  90. Nfs3ErrNotOwner, "not owner",
  91. Nfs3ErrNoEnt, "directory entry not found",
  92. Nfs3ErrIo, "i/o error",
  93. Nfs3ErrNxio, "no such device",
  94. Nfs3ErrNoMem, "out of memory",
  95. Nfs3ErrAcces, "access denied",
  96. Nfs3ErrExist, "file or directory exists",
  97. Nfs3ErrXDev, "cross-device operation",
  98. Nfs3ErrNoDev, "no such device",
  99. Nfs3ErrNotDir, "not a directory",
  100. Nfs3ErrIsDir, "is a directory",
  101. Nfs3ErrInval, "invalid arguments",
  102. Nfs3ErrFbig, "file too big",
  103. Nfs3ErrNoSpc, "no space left on device",
  104. Nfs3ErrRoFs, "read-only file system",
  105. Nfs3ErrMLink, "too many links",
  106. Nfs3ErrNameTooLong, "name too long",
  107. Nfs3ErrNotEmpty, "directory not empty",
  108. Nfs3ErrDQuot, "dquot",
  109. Nfs3ErrStale, "stale handle",
  110. Nfs3ErrRemote, "remote error",
  111. Nfs3ErrBadHandle, "bad handle",
  112. Nfs3ErrNotSync, "out of sync with server",
  113. Nfs3ErrBadCookie, "bad cookie",
  114. Nfs3ErrNotSupp, "not supported",
  115. Nfs3ErrTooSmall, "too small",
  116. Nfs3ErrServerFault, "server fault",
  117. Nfs3ErrBadType, "bad type",
  118. Nfs3ErrJukebox, "jukebox -- try again later",
  119. Nfs3ErrFprintNotFound, "fprint not found",
  120. Nfs3ErrAborted, "aborted",
  121. };
  122. void
  123. nfs3Errstr(Nfs3Status status)
  124. {
  125. int i;
  126. for(i=0; i<nelem(etab); i++){
  127. if(etab[i].status == status){
  128. werrstr(etab[i].msg);
  129. return;
  130. }
  131. }
  132. werrstr("unknown nfs3 error %d", (int)status);
  133. }
  134. char*
  135. nfs3FileTypeStr(Nfs3FileType x)
  136. {
  137. switch(x){
  138. case Nfs3FileReg:
  139. return "Nfs3FileReg";
  140. case Nfs3FileDir:
  141. return "Nfs3FileDir";
  142. case Nfs3FileBlock:
  143. return "Nfs3FileBlock";
  144. case Nfs3FileChar:
  145. return "Nfs3FileChar";
  146. case Nfs3FileSymlink:
  147. return "Nfs3FileSymlink";
  148. case Nfs3FileSocket:
  149. return "Nfs3FileSocket";
  150. case Nfs3FileFifo:
  151. return "Nfs3FileFifo";
  152. default:
  153. return "unknown";
  154. }
  155. }
  156. void
  157. nfs3HandlePrint(Fmt *fmt, Nfs3Handle *x)
  158. {
  159. fmtprint(fmt, "%s\n", "Nfs3Handle");
  160. fmtprint(fmt, "\t%s=", "handle");
  161. if(x->len > 64)
  162. fmtprint(fmt, "%.*H... (%d)", 64, x->h, x->len);
  163. else
  164. fmtprint(fmt, "%.*H", x->len, x->h);
  165. fmtprint(fmt, "\n");
  166. }
  167. uint
  168. nfs3HandleSize(Nfs3Handle *x)
  169. {
  170. uint a;
  171. USED(x);
  172. a = 0 + sunVarOpaqueSize(x->len);
  173. return a;
  174. }
  175. int
  176. nfs3HandlePack(uint8_t *a, uint8_t *ea, uint8_t **pa, Nfs3Handle *x)
  177. {
  178. if(x->len > Nfs3MaxHandleSize || sunUint32Pack(a, ea, &a, &x->len) < 0
  179. || sunFixedOpaquePack(a, ea, &a, x->h, x->len) < 0)
  180. goto Err;
  181. *pa = a;
  182. return 0;
  183. Err:
  184. *pa = ea;
  185. return -1;
  186. }
  187. int
  188. nfs3HandleUnpack(uint8_t *a, uint8_t *ea, uint8_t **pa, Nfs3Handle *x)
  189. {
  190. uint8_t *ha;
  191. uint32_t n;
  192. if(sunUint32Unpack(a, ea, &a, &n) < 0 || n > Nfs3MaxHandleSize)
  193. goto Err;
  194. ha = a;
  195. a += (n+3)&~3;
  196. if(a > ea)
  197. goto Err;
  198. memmove(x->h, ha, n);
  199. x->len = n;
  200. *pa = a;
  201. return 0;
  202. Err:
  203. *pa = ea;
  204. return -1;
  205. }
  206. void
  207. nfs3TimePrint(Fmt *fmt, Nfs3Time *x)
  208. {
  209. fmtprint(fmt, "%s\n", "Nfs3Time");
  210. fmtprint(fmt, "\t%s=", "sec");
  211. fmtprint(fmt, "%ud", x->sec);
  212. fmtprint(fmt, "\n");
  213. fmtprint(fmt, "\t%s=", "nsec");
  214. fmtprint(fmt, "%ud", x->nsec);
  215. fmtprint(fmt, "\n");
  216. }
  217. uint
  218. nfs3TimeSize(Nfs3Time *x)
  219. {
  220. uint a;
  221. USED(x);
  222. a = 0 + 4 + 4;
  223. return a;
  224. }
  225. int
  226. nfs3TimePack(uint8_t *a, uint8_t *ea, uint8_t **pa, Nfs3Time *x)
  227. {
  228. if(sunUint32Pack(a, ea, &a, &x->sec) < 0) goto Err;
  229. if(sunUint32Pack(a, ea, &a, &x->nsec) < 0) goto Err;
  230. *pa = a;
  231. return 0;
  232. Err:
  233. *pa = ea;
  234. return -1;
  235. }
  236. int
  237. nfs3TimeUnpack(uint8_t *a, uint8_t *ea, uint8_t **pa, Nfs3Time *x)
  238. {
  239. if(sunUint32Unpack(a, ea, &a, &x->sec) < 0) goto Err;
  240. if(sunUint32Unpack(a, ea, &a, &x->nsec) < 0) goto Err;
  241. *pa = a;
  242. return 0;
  243. Err:
  244. *pa = ea;
  245. return -1;
  246. }
  247. void
  248. nfs3AttrPrint(Fmt *fmt, Nfs3Attr *x)
  249. {
  250. fmtprint(fmt, "%s\n", "Nfs3Attr");
  251. fmtprint(fmt, "\t%s=", "type");
  252. fmtprint(fmt, "%s", nfs3FileTypeStr(x->type));
  253. fmtprint(fmt, "\n");
  254. fmtprint(fmt, "\t%s=", "mode");
  255. fmtprint(fmt, "%ud", x->mode);
  256. fmtprint(fmt, "\n");
  257. fmtprint(fmt, "\t%s=", "nlink");
  258. fmtprint(fmt, "%ud", x->nlink);
  259. fmtprint(fmt, "\n");
  260. fmtprint(fmt, "\t%s=", "uid");
  261. fmtprint(fmt, "%ud", x->uid);
  262. fmtprint(fmt, "\n");
  263. fmtprint(fmt, "\t%s=", "gid");
  264. fmtprint(fmt, "%ud", x->gid);
  265. fmtprint(fmt, "\n");
  266. fmtprint(fmt, "\t%s=", "size");
  267. fmtprint(fmt, "%llud", x->size);
  268. fmtprint(fmt, "\n");
  269. fmtprint(fmt, "\t%s=", "used");
  270. fmtprint(fmt, "%llud", x->used);
  271. fmtprint(fmt, "\n");
  272. fmtprint(fmt, "\t%s=", "major");
  273. fmtprint(fmt, "%ud", x->major);
  274. fmtprint(fmt, "\n");
  275. fmtprint(fmt, "\t%s=", "minor");
  276. fmtprint(fmt, "%ud", x->minor);
  277. fmtprint(fmt, "\n");
  278. fmtprint(fmt, "\t%s=", "fsid");
  279. fmtprint(fmt, "%llud", x->fsid);
  280. fmtprint(fmt, "\n");
  281. fmtprint(fmt, "\t%s=", "fileid");
  282. fmtprint(fmt, "%llud", x->fileid);
  283. fmtprint(fmt, "\n");
  284. fmtprint(fmt, "\t%s=", "atime");
  285. nfs3TimePrint(fmt, &x->atime);
  286. fmtprint(fmt, "\n");
  287. fmtprint(fmt, "\t%s=", "mtime");
  288. nfs3TimePrint(fmt, &x->mtime);
  289. fmtprint(fmt, "\n");
  290. fmtprint(fmt, "\t%s=", "ctime");
  291. nfs3TimePrint(fmt, &x->ctime);
  292. fmtprint(fmt, "\n");
  293. }
  294. uint
  295. nfs3AttrSize(Nfs3Attr *x)
  296. {
  297. uint a;
  298. USED(x);
  299. a = 0 + 4 + 4 + 4 + 4 + 4 + 8 + 8 + 4 + 4 + 8 + 8 + nfs3TimeSize(&x->atime) + nfs3TimeSize(&x->mtime) + nfs3TimeSize(&x->ctime);
  300. return a;
  301. }
  302. int
  303. nfs3AttrPack(uint8_t *a, uint8_t *ea, uint8_t **pa, Nfs3Attr *x)
  304. {
  305. int i;
  306. if(i=x->type, sunEnumPack(a, ea, &a, &i) < 0) goto Err;
  307. if(sunUint32Pack(a, ea, &a, &x->mode) < 0) goto Err;
  308. if(sunUint32Pack(a, ea, &a, &x->nlink) < 0) goto Err;
  309. if(sunUint32Pack(a, ea, &a, &x->uid) < 0) goto Err;
  310. if(sunUint32Pack(a, ea, &a, &x->gid) < 0) goto Err;
  311. if(sunUint64Pack(a, ea, &a, &x->size) < 0) goto Err;
  312. if(sunUint64Pack(a, ea, &a, &x->used) < 0) goto Err;
  313. if(sunUint32Pack(a, ea, &a, &x->major) < 0) goto Err;
  314. if(sunUint32Pack(a, ea, &a, &x->minor) < 0) goto Err;
  315. if(sunUint64Pack(a, ea, &a, &x->fsid) < 0) goto Err;
  316. if(sunUint64Pack(a, ea, &a, &x->fileid) < 0) goto Err;
  317. if(nfs3TimePack(a, ea, &a, &x->atime) < 0) goto Err;
  318. if(nfs3TimePack(a, ea, &a, &x->mtime) < 0) goto Err;
  319. if(nfs3TimePack(a, ea, &a, &x->ctime) < 0) goto Err;
  320. *pa = a;
  321. return 0;
  322. Err:
  323. *pa = ea;
  324. return -1;
  325. }
  326. int
  327. nfs3AttrUnpack(uint8_t *a, uint8_t *ea, uint8_t **pa, Nfs3Attr *x)
  328. {
  329. int i;
  330. if(sunEnumUnpack(a, ea, &a, &i) < 0) goto Err; x->type = i;
  331. if(sunUint32Unpack(a, ea, &a, &x->mode) < 0) goto Err;
  332. if(sunUint32Unpack(a, ea, &a, &x->nlink) < 0) goto Err;
  333. if(sunUint32Unpack(a, ea, &a, &x->uid) < 0) goto Err;
  334. if(sunUint32Unpack(a, ea, &a, &x->gid) < 0) goto Err;
  335. if(sunUint64Unpack(a, ea, &a, &x->size) < 0) goto Err;
  336. if(sunUint64Unpack(a, ea, &a, &x->used) < 0) goto Err;
  337. if(sunUint32Unpack(a, ea, &a, &x->major) < 0) goto Err;
  338. if(sunUint32Unpack(a, ea, &a, &x->minor) < 0) goto Err;
  339. if(sunUint64Unpack(a, ea, &a, &x->fsid) < 0) goto Err;
  340. if(sunUint64Unpack(a, ea, &a, &x->fileid) < 0) goto Err;
  341. if(nfs3TimeUnpack(a, ea, &a, &x->atime) < 0) goto Err;
  342. if(nfs3TimeUnpack(a, ea, &a, &x->mtime) < 0) goto Err;
  343. if(nfs3TimeUnpack(a, ea, &a, &x->ctime) < 0) goto Err;
  344. *pa = a;
  345. return 0;
  346. Err:
  347. *pa = ea;
  348. return -1;
  349. }
  350. void
  351. nfs3WccAttrPrint(Fmt *fmt, Nfs3WccAttr *x)
  352. {
  353. fmtprint(fmt, "%s\n", "Nfs3WccAttr");
  354. fmtprint(fmt, "\t%s=", "size");
  355. fmtprint(fmt, "%llud", x->size);
  356. fmtprint(fmt, "\n");
  357. fmtprint(fmt, "\t%s=", "mtime");
  358. nfs3TimePrint(fmt, &x->mtime);
  359. fmtprint(fmt, "\n");
  360. fmtprint(fmt, "\t%s=", "ctime");
  361. nfs3TimePrint(fmt, &x->ctime);
  362. fmtprint(fmt, "\n");
  363. }
  364. uint
  365. nfs3WccAttrSize(Nfs3WccAttr *x)
  366. {
  367. uint a;
  368. USED(x);
  369. a = 0 + 8 + nfs3TimeSize(&x->mtime) + nfs3TimeSize(&x->ctime);
  370. return a;
  371. }
  372. int
  373. nfs3WccAttrPack(uint8_t *a, uint8_t *ea, uint8_t **pa, Nfs3WccAttr *x)
  374. {
  375. if(sunUint64Pack(a, ea, &a, &x->size) < 0) goto Err;
  376. if(nfs3TimePack(a, ea, &a, &x->mtime) < 0) goto Err;
  377. if(nfs3TimePack(a, ea, &a, &x->ctime) < 0) goto Err;
  378. *pa = a;
  379. return 0;
  380. Err:
  381. *pa = ea;
  382. return -1;
  383. }
  384. int
  385. nfs3WccAttrUnpack(uint8_t *a, uint8_t *ea, uint8_t **pa, Nfs3WccAttr *x)
  386. {
  387. if(sunUint64Unpack(a, ea, &a, &x->size) < 0) goto Err;
  388. if(nfs3TimeUnpack(a, ea, &a, &x->mtime) < 0) goto Err;
  389. if(nfs3TimeUnpack(a, ea, &a, &x->ctime) < 0) goto Err;
  390. *pa = a;
  391. return 0;
  392. Err:
  393. *pa = ea;
  394. return -1;
  395. }
  396. void
  397. nfs3WccPrint(Fmt *fmt, Nfs3Wcc *x)
  398. {
  399. fmtprint(fmt, "%s\n", "Nfs3Wcc");
  400. fmtprint(fmt, "\t%s=", "haveWccAttr");
  401. fmtprint(fmt, "%d", x->haveWccAttr);
  402. fmtprint(fmt, "\n");
  403. switch(x->haveWccAttr){
  404. case 1:
  405. fmtprint(fmt, "\t%s=", "wccAttr");
  406. nfs3WccAttrPrint(fmt, &x->wccAttr);
  407. fmtprint(fmt, "\n");
  408. break;
  409. }
  410. fmtprint(fmt, "\t%s=", "haveAttr");
  411. fmtprint(fmt, "%d", x->haveAttr);
  412. fmtprint(fmt, "\n");
  413. switch(x->haveAttr){
  414. case 1:
  415. fmtprint(fmt, "\t%s=", "attr");
  416. nfs3AttrPrint(fmt, &x->attr);
  417. fmtprint(fmt, "\n");
  418. break;
  419. }
  420. }
  421. uint
  422. nfs3WccSize(Nfs3Wcc *x)
  423. {
  424. uint a;
  425. USED(x);
  426. a = 0 + 4;
  427. switch(x->haveWccAttr){
  428. case 1:
  429. a = a + nfs3WccAttrSize(&x->wccAttr);
  430. break;
  431. }
  432. a = a + 4;
  433. switch(x->haveAttr){
  434. case 1:
  435. a = a + nfs3AttrSize(&x->attr);
  436. break;
  437. }
  438. return a;
  439. }
  440. int
  441. nfs3WccPack(uint8_t *a, uint8_t *ea, uint8_t **pa, Nfs3Wcc *x)
  442. {
  443. if(sunUint1Pack(a, ea, &a, &x->haveWccAttr) < 0) goto Err;
  444. switch(x->haveWccAttr){
  445. case 1:
  446. if(nfs3WccAttrPack(a, ea, &a, &x->wccAttr) < 0) goto Err;
  447. break;
  448. }
  449. if(sunUint1Pack(a, ea, &a, &x->haveAttr) < 0) goto Err;
  450. switch(x->haveAttr){
  451. case 1:
  452. if(nfs3AttrPack(a, ea, &a, &x->attr) < 0) goto Err;
  453. break;
  454. }
  455. *pa = a;
  456. return 0;
  457. Err:
  458. *pa = ea;
  459. return -1;
  460. }
  461. int
  462. nfs3WccUnpack(uint8_t *a, uint8_t *ea, uint8_t **pa, Nfs3Wcc *x)
  463. {
  464. if(sunUint1Unpack(a, ea, &a, &x->haveWccAttr) < 0) goto Err;
  465. switch(x->haveWccAttr){
  466. case 1:
  467. if(nfs3WccAttrUnpack(a, ea, &a, &x->wccAttr) < 0) goto Err;
  468. break;
  469. }
  470. if(sunUint1Unpack(a, ea, &a, &x->haveAttr) < 0) goto Err;
  471. switch(x->haveAttr){
  472. case 1:
  473. if(nfs3AttrUnpack(a, ea, &a, &x->attr) < 0) goto Err;
  474. break;
  475. }
  476. *pa = a;
  477. return 0;
  478. Err:
  479. *pa = ea;
  480. return -1;
  481. }
  482. char*
  483. nfs3SetTimeStr(Nfs3SetTime x)
  484. {
  485. switch(x){
  486. case Nfs3SetTimeDont:
  487. return "Nfs3SetTimeDont";
  488. case Nfs3SetTimeServer:
  489. return "Nfs3SetTimeServer";
  490. case Nfs3SetTimeClient:
  491. return "Nfs3SetTimeClient";
  492. default:
  493. return "unknown";
  494. }
  495. }
  496. void
  497. nfs3SetAttrPrint(Fmt *fmt, Nfs3SetAttr *x)
  498. {
  499. fmtprint(fmt, "%s\n", "Nfs3SetAttr");
  500. fmtprint(fmt, "\t%s=", "setMode");
  501. fmtprint(fmt, "%d", x->setMode);
  502. fmtprint(fmt, "\n");
  503. switch(x->setMode){
  504. case 1:
  505. fmtprint(fmt, "\t%s=", "mode");
  506. fmtprint(fmt, "%ud", x->mode);
  507. fmtprint(fmt, "\n");
  508. break;
  509. }
  510. fmtprint(fmt, "\t%s=", "setUid");
  511. fmtprint(fmt, "%d", x->setUid);
  512. fmtprint(fmt, "\n");
  513. switch(x->setUid){
  514. case 1:
  515. fmtprint(fmt, "\t%s=", "uid");
  516. fmtprint(fmt, "%ud", x->uid);
  517. fmtprint(fmt, "\n");
  518. break;
  519. }
  520. fmtprint(fmt, "\t%s=", "setGid");
  521. fmtprint(fmt, "%d", x->setGid);
  522. fmtprint(fmt, "\n");
  523. switch(x->setGid){
  524. case 1:
  525. fmtprint(fmt, "\t%s=", "gid");
  526. fmtprint(fmt, "%ud", x->gid);
  527. fmtprint(fmt, "\n");
  528. break;
  529. }
  530. fmtprint(fmt, "\t%s=", "setSize");
  531. fmtprint(fmt, "%d", x->setSize);
  532. fmtprint(fmt, "\n");
  533. switch(x->setSize){
  534. case 1:
  535. fmtprint(fmt, "\t%s=", "size");
  536. fmtprint(fmt, "%llud", x->size);
  537. fmtprint(fmt, "\n");
  538. break;
  539. }
  540. fmtprint(fmt, "\t%s=", "setAtime");
  541. fmtprint(fmt, "%s", nfs3SetTimeStr(x->setAtime));
  542. fmtprint(fmt, "\n");
  543. switch(x->setAtime){
  544. case Nfs3SetTimeClient:
  545. fmtprint(fmt, "\t%s=", "atime");
  546. nfs3TimePrint(fmt, &x->atime);
  547. fmtprint(fmt, "\n");
  548. break;
  549. }
  550. fmtprint(fmt, "\t%s=", "setMtime");
  551. fmtprint(fmt, "%s", nfs3SetTimeStr(x->setMtime));
  552. fmtprint(fmt, "\n");
  553. switch(x->setMtime){
  554. case Nfs3SetTimeClient:
  555. fmtprint(fmt, "\t%s=", "mtime");
  556. nfs3TimePrint(fmt, &x->mtime);
  557. fmtprint(fmt, "\n");
  558. break;
  559. }
  560. }
  561. uint
  562. nfs3SetAttrSize(Nfs3SetAttr *x)
  563. {
  564. uint a;
  565. USED(x);
  566. a = 0 + 4;
  567. switch(x->setMode){
  568. case 1:
  569. a = a + 4;
  570. break;
  571. }
  572. a = a + 4;
  573. switch(x->setUid){
  574. case 1:
  575. a = a + 4;
  576. break;
  577. }
  578. a = a + 4;
  579. switch(x->setGid){
  580. case 1:
  581. a = a + 4;
  582. break;
  583. }
  584. a = a + 4;
  585. switch(x->setSize){
  586. case 1:
  587. a = a + 8;
  588. break;
  589. }
  590. a = a + 4;
  591. switch(x->setAtime){
  592. case Nfs3SetTimeClient:
  593. a = a + nfs3TimeSize(&x->atime);
  594. break;
  595. }
  596. a = a + 4;
  597. switch(x->setMtime){
  598. case Nfs3SetTimeClient:
  599. a = a + nfs3TimeSize(&x->mtime);
  600. break;
  601. }
  602. return a;
  603. }
  604. int
  605. nfs3SetAttrPack(uint8_t *a, uint8_t *ea, uint8_t **pa, Nfs3SetAttr *x)
  606. {
  607. int i;
  608. if(sunUint1Pack(a, ea, &a, &x->setMode) < 0) goto Err;
  609. switch(x->setMode){
  610. case 1:
  611. if(sunUint32Pack(a, ea, &a, &x->mode) < 0) goto Err;
  612. break;
  613. }
  614. if(sunUint1Pack(a, ea, &a, &x->setUid) < 0) goto Err;
  615. switch(x->setUid){
  616. case 1:
  617. if(sunUint32Pack(a, ea, &a, &x->uid) < 0) goto Err;
  618. break;
  619. }
  620. if(sunUint1Pack(a, ea, &a, &x->setGid) < 0) goto Err;
  621. switch(x->setGid){
  622. case 1:
  623. if(sunUint32Pack(a, ea, &a, &x->gid) < 0) goto Err;
  624. break;
  625. }
  626. if(sunUint1Pack(a, ea, &a, &x->setSize) < 0) goto Err;
  627. switch(x->setSize){
  628. case 1:
  629. if(sunUint64Pack(a, ea, &a, &x->size) < 0) goto Err;
  630. break;
  631. }
  632. if(i=x->setAtime, sunEnumPack(a, ea, &a, &i) < 0) goto Err;
  633. switch(x->setAtime){
  634. case Nfs3SetTimeClient:
  635. if(nfs3TimePack(a, ea, &a, &x->atime) < 0) goto Err;
  636. break;
  637. }
  638. if(i=x->setMtime, sunEnumPack(a, ea, &a, &i) < 0) goto Err;
  639. switch(x->setMtime){
  640. case Nfs3SetTimeClient:
  641. if(nfs3TimePack(a, ea, &a, &x->mtime) < 0) goto Err;
  642. break;
  643. }
  644. *pa = a;
  645. return 0;
  646. Err:
  647. *pa = ea;
  648. return -1;
  649. }
  650. int
  651. nfs3SetAttrUnpack(uint8_t *a, uint8_t *ea, uint8_t **pa, Nfs3SetAttr *x)
  652. {
  653. int i;
  654. if(sunUint1Unpack(a, ea, &a, &x->setMode) < 0) goto Err;
  655. switch(x->setMode){
  656. case 1:
  657. if(sunUint32Unpack(a, ea, &a, &x->mode) < 0) goto Err;
  658. break;
  659. }
  660. if(sunUint1Unpack(a, ea, &a, &x->setUid) < 0) goto Err;
  661. switch(x->setUid){
  662. case 1:
  663. if(sunUint32Unpack(a, ea, &a, &x->uid) < 0) goto Err;
  664. break;
  665. }
  666. if(sunUint1Unpack(a, ea, &a, &x->setGid) < 0) goto Err;
  667. switch(x->setGid){
  668. case 1:
  669. if(sunUint32Unpack(a, ea, &a, &x->gid) < 0) goto Err;
  670. break;
  671. }
  672. if(sunUint1Unpack(a, ea, &a, &x->setSize) < 0) goto Err;
  673. switch(x->setSize){
  674. case 1:
  675. if(sunUint64Unpack(a, ea, &a, &x->size) < 0) goto Err;
  676. break;
  677. }
  678. if(sunEnumUnpack(a, ea, &a, &i) < 0) goto Err; x->setAtime = i;
  679. switch(x->setAtime){
  680. case Nfs3SetTimeClient:
  681. if(nfs3TimeUnpack(a, ea, &a, &x->atime) < 0) goto Err;
  682. break;
  683. }
  684. if(sunEnumUnpack(a, ea, &a, &i) < 0) goto Err; x->setMtime = i;
  685. switch(x->setMtime){
  686. case Nfs3SetTimeClient:
  687. if(nfs3TimeUnpack(a, ea, &a, &x->mtime) < 0) goto Err;
  688. break;
  689. }
  690. *pa = a;
  691. return 0;
  692. Err:
  693. *pa = ea;
  694. return -1;
  695. }
  696. void
  697. nfs3TNullPrint(Fmt *fmt, Nfs3TNull *x)
  698. {
  699. USED(x);
  700. fmtprint(fmt, "%s\n", "Nfs3TNull");
  701. }
  702. uint
  703. nfs3TNullSize(Nfs3TNull *x)
  704. {
  705. uint a;
  706. USED(x);
  707. a = 0;
  708. return a;
  709. }
  710. int
  711. nfs3TNullPack(uint8_t *a, uint8_t *ea, uint8_t **pa, Nfs3TNull *x)
  712. {
  713. USED(x);
  714. USED(ea);
  715. *pa = a;
  716. return 0;
  717. }
  718. int
  719. nfs3TNullUnpack(uint8_t *a, uint8_t *ea, uint8_t **pa, Nfs3TNull *x)
  720. {
  721. USED(x);
  722. USED(ea);
  723. *pa = a;
  724. return 0;
  725. }
  726. void
  727. nfs3RNullPrint(Fmt *fmt, Nfs3RNull *x)
  728. {
  729. USED(x);
  730. fmtprint(fmt, "%s\n", "Nfs3RNull");
  731. }
  732. uint
  733. nfs3RNullSize(Nfs3RNull *x)
  734. {
  735. uint a;
  736. USED(x);
  737. a = 0;
  738. return a;
  739. }
  740. int
  741. nfs3RNullPack(uint8_t *a, uint8_t *ea, uint8_t **pa, Nfs3RNull *x)
  742. {
  743. USED(ea);
  744. USED(x);
  745. *pa = a;
  746. return 0;
  747. }
  748. int
  749. nfs3RNullUnpack(uint8_t *a, uint8_t *ea, uint8_t **pa, Nfs3RNull *x)
  750. {
  751. USED(ea);
  752. USED(x);
  753. *pa = a;
  754. return 0;
  755. }
  756. void
  757. nfs3TGetattrPrint(Fmt *fmt, Nfs3TGetattr *x)
  758. {
  759. fmtprint(fmt, "%s\n", "Nfs3TGetattr");
  760. fmtprint(fmt, "\t%s=", "handle");
  761. nfs3HandlePrint(fmt, &x->handle);
  762. fmtprint(fmt, "\n");
  763. }
  764. uint
  765. nfs3TGetattrSize(Nfs3TGetattr *x)
  766. {
  767. uint a;
  768. USED(x);
  769. a = 0 + nfs3HandleSize(&x->handle);
  770. return a;
  771. }
  772. int
  773. nfs3TGetattrPack(uint8_t *a, uint8_t *ea, uint8_t **pa, Nfs3TGetattr *x)
  774. {
  775. if(nfs3HandlePack(a, ea, &a, &x->handle) < 0) goto Err;
  776. *pa = a;
  777. return 0;
  778. Err:
  779. *pa = ea;
  780. return -1;
  781. }
  782. int
  783. nfs3TGetattrUnpack(uint8_t *a, uint8_t *ea, uint8_t **pa, Nfs3TGetattr *x)
  784. {
  785. if(nfs3HandleUnpack(a, ea, &a, &x->handle) < 0) goto Err;
  786. *pa = a;
  787. return 0;
  788. Err:
  789. *pa = ea;
  790. return -1;
  791. }
  792. void
  793. nfs3RGetattrPrint(Fmt *fmt, Nfs3RGetattr *x)
  794. {
  795. fmtprint(fmt, "%s\n", "Nfs3RGetattr");
  796. fmtprint(fmt, "\t%s=", "status");
  797. fmtprint(fmt, "%s", nfs3StatusStr(x->status));
  798. fmtprint(fmt, "\n");
  799. switch(x->status){
  800. case Nfs3Ok:
  801. fmtprint(fmt, "\t%s=", "attr");
  802. nfs3AttrPrint(fmt, &x->attr);
  803. fmtprint(fmt, "\n");
  804. break;
  805. }
  806. }
  807. uint
  808. nfs3RGetattrSize(Nfs3RGetattr *x)
  809. {
  810. uint a;
  811. USED(x);
  812. a = 0 + 4;
  813. switch(x->status){
  814. case Nfs3Ok:
  815. a = a + nfs3AttrSize(&x->attr);
  816. break;
  817. }
  818. return a;
  819. }
  820. int
  821. nfs3RGetattrPack(uint8_t *a, uint8_t *ea, uint8_t **pa, Nfs3RGetattr *x)
  822. {
  823. int i;
  824. if(i=x->status, sunEnumPack(a, ea, &a, &i) < 0) goto Err;
  825. switch(x->status){
  826. case Nfs3Ok:
  827. if(nfs3AttrPack(a, ea, &a, &x->attr) < 0) goto Err;
  828. break;
  829. }
  830. *pa = a;
  831. return 0;
  832. Err:
  833. *pa = ea;
  834. return -1;
  835. }
  836. int
  837. nfs3RGetattrUnpack(uint8_t *a, uint8_t *ea, uint8_t **pa, Nfs3RGetattr *x)
  838. {
  839. int i;
  840. if(sunEnumUnpack(a, ea, &a, &i) < 0) goto Err; x->status = i;
  841. switch(x->status){
  842. case Nfs3Ok:
  843. if(nfs3AttrUnpack(a, ea, &a, &x->attr) < 0) goto Err;
  844. break;
  845. }
  846. *pa = a;
  847. return 0;
  848. Err:
  849. *pa = ea;
  850. return -1;
  851. }
  852. void
  853. nfs3TSetattrPrint(Fmt *fmt, Nfs3TSetattr *x)
  854. {
  855. fmtprint(fmt, "%s\n", "Nfs3TSetattr");
  856. fmtprint(fmt, "\t%s=", "handle");
  857. nfs3HandlePrint(fmt, &x->handle);
  858. fmtprint(fmt, "\n");
  859. fmtprint(fmt, "\t%s=", "attr");
  860. nfs3SetAttrPrint(fmt, &x->attr);
  861. fmtprint(fmt, "\n");
  862. fmtprint(fmt, "\t%s=", "checkCtime");
  863. fmtprint(fmt, "%d", x->checkCtime);
  864. fmtprint(fmt, "\n");
  865. switch(x->checkCtime){
  866. case 1:
  867. fmtprint(fmt, "\t%s=", "ctime");
  868. nfs3TimePrint(fmt, &x->ctime);
  869. fmtprint(fmt, "\n");
  870. break;
  871. }
  872. }
  873. uint
  874. nfs3TSetattrSize(Nfs3TSetattr *x)
  875. {
  876. uint a;
  877. USED(x);
  878. a = 0 + nfs3HandleSize(&x->handle) + nfs3SetAttrSize(&x->attr) + 4;
  879. switch(x->checkCtime){
  880. case 1:
  881. a = a + nfs3TimeSize(&x->ctime);
  882. break;
  883. }
  884. return a;
  885. }
  886. int
  887. nfs3TSetattrPack(uint8_t *a, uint8_t *ea, uint8_t **pa, Nfs3TSetattr *x)
  888. {
  889. if(nfs3HandlePack(a, ea, &a, &x->handle) < 0) goto Err;
  890. if(nfs3SetAttrPack(a, ea, &a, &x->attr) < 0) goto Err;
  891. if(sunUint1Pack(a, ea, &a, &x->checkCtime) < 0) goto Err;
  892. switch(x->checkCtime){
  893. case 1:
  894. if(nfs3TimePack(a, ea, &a, &x->ctime) < 0) goto Err;
  895. break;
  896. }
  897. *pa = a;
  898. return 0;
  899. Err:
  900. *pa = ea;
  901. return -1;
  902. }
  903. int
  904. nfs3TSetattrUnpack(uint8_t *a, uint8_t *ea, uint8_t **pa, Nfs3TSetattr *x)
  905. {
  906. if(nfs3HandleUnpack(a, ea, &a, &x->handle) < 0) goto Err;
  907. if(nfs3SetAttrUnpack(a, ea, &a, &x->attr) < 0) goto Err;
  908. if(sunUint1Unpack(a, ea, &a, &x->checkCtime) < 0) goto Err;
  909. switch(x->checkCtime){
  910. case 1:
  911. if(nfs3TimeUnpack(a, ea, &a, &x->ctime) < 0) goto Err;
  912. break;
  913. }
  914. *pa = a;
  915. return 0;
  916. Err:
  917. *pa = ea;
  918. return -1;
  919. }
  920. void
  921. nfs3RSetattrPrint(Fmt *fmt, Nfs3RSetattr *x)
  922. {
  923. fmtprint(fmt, "%s\n", "Nfs3RSetattr");
  924. fmtprint(fmt, "\t%s=", "status");
  925. fmtprint(fmt, "%s", nfs3StatusStr(x->status));
  926. fmtprint(fmt, "\n");
  927. fmtprint(fmt, "\t%s=", "wcc");
  928. nfs3WccPrint(fmt, &x->wcc);
  929. fmtprint(fmt, "\n");
  930. }
  931. uint
  932. nfs3RSetattrSize(Nfs3RSetattr *x)
  933. {
  934. uint a;
  935. USED(x);
  936. a = 0 + 4 + nfs3WccSize(&x->wcc);
  937. return a;
  938. }
  939. int
  940. nfs3RSetattrPack(uint8_t *a, uint8_t *ea, uint8_t **pa, Nfs3RSetattr *x)
  941. {
  942. int i;
  943. if(i=x->status, sunEnumPack(a, ea, &a, &i) < 0) goto Err;
  944. if(nfs3WccPack(a, ea, &a, &x->wcc) < 0) goto Err;
  945. *pa = a;
  946. return 0;
  947. Err:
  948. *pa = ea;
  949. return -1;
  950. }
  951. int
  952. nfs3RSetattrUnpack(uint8_t *a, uint8_t *ea, uint8_t **pa, Nfs3RSetattr *x)
  953. {
  954. int i;
  955. if(sunEnumUnpack(a, ea, &a, &i) < 0) goto Err; x->status = i;
  956. if(nfs3WccUnpack(a, ea, &a, &x->wcc) < 0) goto Err;
  957. *pa = a;
  958. return 0;
  959. Err:
  960. *pa = ea;
  961. return -1;
  962. }
  963. void
  964. nfs3TLookupPrint(Fmt *fmt, Nfs3TLookup *x)
  965. {
  966. fmtprint(fmt, "%s\n", "Nfs3TLookup");
  967. fmtprint(fmt, "\t%s=", "handle");
  968. nfs3HandlePrint(fmt, &x->handle);
  969. fmtprint(fmt, "\n");
  970. fmtprint(fmt, "\t%s=", "name");
  971. fmtprint(fmt, "\"%s\"", x->name);
  972. fmtprint(fmt, "\n");
  973. }
  974. uint
  975. nfs3TLookupSize(Nfs3TLookup *x)
  976. {
  977. uint a;
  978. USED(x);
  979. a = 0 + nfs3HandleSize(&x->handle) + sunStringSize(x->name);
  980. return a;
  981. }
  982. int
  983. nfs3TLookupPack(uint8_t *a, uint8_t *ea, uint8_t **pa, Nfs3TLookup *x)
  984. {
  985. if(nfs3HandlePack(a, ea, &a, &x->handle) < 0) goto Err;
  986. if(sunStringPack(a, ea, &a, &x->name, -1) < 0) goto Err;
  987. *pa = a;
  988. return 0;
  989. Err:
  990. *pa = ea;
  991. return -1;
  992. }
  993. int
  994. nfs3TLookupUnpack(uint8_t *a, uint8_t *ea, uint8_t **pa, Nfs3TLookup *x)
  995. {
  996. if(nfs3HandleUnpack(a, ea, &a, &x->handle) < 0) goto Err;
  997. if(sunStringUnpack(a, ea, &a, &x->name, -1) < 0) goto Err;
  998. *pa = a;
  999. return 0;
  1000. Err:
  1001. *pa = ea;
  1002. return -1;
  1003. }
  1004. void
  1005. nfs3RLookupPrint(Fmt *fmt, Nfs3RLookup *x)
  1006. {
  1007. fmtprint(fmt, "%s\n", "Nfs3RLookup");
  1008. fmtprint(fmt, "\t%s=", "status");
  1009. fmtprint(fmt, "%s", nfs3StatusStr(x->status));
  1010. fmtprint(fmt, "\n");
  1011. switch(x->status){
  1012. case Nfs3Ok:
  1013. fmtprint(fmt, "\t%s=", "handle");
  1014. nfs3HandlePrint(fmt, &x->handle);
  1015. fmtprint(fmt, "\n");
  1016. fmtprint(fmt, "\t%s=", "haveAttr");
  1017. fmtprint(fmt, "%d", x->haveAttr);
  1018. fmtprint(fmt, "\n");
  1019. switch(x->haveAttr){
  1020. case 1:
  1021. fmtprint(fmt, "\t%s=", "attr");
  1022. nfs3AttrPrint(fmt, &x->attr);
  1023. fmtprint(fmt, "\n");
  1024. break;
  1025. }
  1026. break;
  1027. }
  1028. fmtprint(fmt, "\t%s=", "haveDirAttr");
  1029. fmtprint(fmt, "%d", x->haveDirAttr);
  1030. fmtprint(fmt, "\n");
  1031. switch(x->haveDirAttr){
  1032. case 1:
  1033. fmtprint(fmt, "\t%s=", "dirAttr");
  1034. nfs3AttrPrint(fmt, &x->dirAttr);
  1035. fmtprint(fmt, "\n");
  1036. break;
  1037. }
  1038. }
  1039. uint
  1040. nfs3RLookupSize(Nfs3RLookup *x)
  1041. {
  1042. uint a;
  1043. USED(x);
  1044. a = 0 + 4;
  1045. switch(x->status){
  1046. case Nfs3Ok:
  1047. a = a + nfs3HandleSize(&x->handle) + 4;
  1048. switch(x->haveAttr){
  1049. case 1:
  1050. a = a + nfs3AttrSize(&x->attr);
  1051. break;
  1052. }
  1053. break;
  1054. }
  1055. a = a + 4;
  1056. switch(x->haveDirAttr){
  1057. case 1:
  1058. a = a + nfs3AttrSize(&x->dirAttr);
  1059. break;
  1060. }
  1061. return a;
  1062. }
  1063. int
  1064. nfs3RLookupPack(uint8_t *a, uint8_t *ea, uint8_t **pa, Nfs3RLookup *x)
  1065. {
  1066. int i;
  1067. if(i=x->status, sunEnumPack(a, ea, &a, &i) < 0) goto Err;
  1068. switch(x->status){
  1069. case Nfs3Ok:
  1070. if(nfs3HandlePack(a, ea, &a, &x->handle) < 0) goto Err;
  1071. if(sunUint1Pack(a, ea, &a, &x->haveAttr) < 0) goto Err;
  1072. switch(x->haveAttr){
  1073. case 1:
  1074. if(nfs3AttrPack(a, ea, &a, &x->attr) < 0) goto Err;
  1075. break;
  1076. }
  1077. break;
  1078. }
  1079. if(sunUint1Pack(a, ea, &a, &x->haveDirAttr) < 0) goto Err;
  1080. switch(x->haveDirAttr){
  1081. case 1:
  1082. if(nfs3AttrPack(a, ea, &a, &x->dirAttr) < 0) goto Err;
  1083. break;
  1084. }
  1085. *pa = a;
  1086. return 0;
  1087. Err:
  1088. *pa = ea;
  1089. return -1;
  1090. }
  1091. int
  1092. nfs3RLookupUnpack(uint8_t *a, uint8_t *ea, uint8_t **pa, Nfs3RLookup *x)
  1093. {
  1094. int i;
  1095. if(sunEnumUnpack(a, ea, &a, &i) < 0) goto Err; x->status = i;
  1096. switch(x->status){
  1097. case Nfs3Ok:
  1098. if(nfs3HandleUnpack(a, ea, &a, &x->handle) < 0) goto Err;
  1099. if(sunUint1Unpack(a, ea, &a, &x->haveAttr) < 0) goto Err;
  1100. switch(x->haveAttr){
  1101. case 1:
  1102. if(nfs3AttrUnpack(a, ea, &a, &x->attr) < 0) goto Err;
  1103. break;
  1104. }
  1105. break;
  1106. }
  1107. if(sunUint1Unpack(a, ea, &a, &x->haveDirAttr) < 0) goto Err;
  1108. switch(x->haveDirAttr){
  1109. case 1:
  1110. if(nfs3AttrUnpack(a, ea, &a, &x->dirAttr) < 0) goto Err;
  1111. break;
  1112. }
  1113. *pa = a;
  1114. return 0;
  1115. Err:
  1116. *pa = ea;
  1117. return -1;
  1118. }
  1119. void
  1120. nfs3TAccessPrint(Fmt *fmt, Nfs3TAccess *x)
  1121. {
  1122. fmtprint(fmt, "%s\n", "Nfs3TAccess");
  1123. fmtprint(fmt, "\t%s=", "handle");
  1124. nfs3HandlePrint(fmt, &x->handle);
  1125. fmtprint(fmt, "\n");
  1126. fmtprint(fmt, "\t%s=", "access");
  1127. fmtprint(fmt, "%ud", x->access);
  1128. fmtprint(fmt, "\n");
  1129. }
  1130. uint
  1131. nfs3TAccessSize(Nfs3TAccess *x)
  1132. {
  1133. uint a;
  1134. USED(x);
  1135. a = 0 + nfs3HandleSize(&x->handle) + 4;
  1136. return a;
  1137. }
  1138. int
  1139. nfs3TAccessPack(uint8_t *a, uint8_t *ea, uint8_t **pa, Nfs3TAccess *x)
  1140. {
  1141. if(nfs3HandlePack(a, ea, &a, &x->handle) < 0) goto Err;
  1142. if(sunUint32Pack(a, ea, &a, &x->access) < 0) goto Err;
  1143. *pa = a;
  1144. return 0;
  1145. Err:
  1146. *pa = ea;
  1147. return -1;
  1148. }
  1149. int
  1150. nfs3TAccessUnpack(uint8_t *a, uint8_t *ea, uint8_t **pa, Nfs3TAccess *x)
  1151. {
  1152. if(nfs3HandleUnpack(a, ea, &a, &x->handle) < 0) goto Err;
  1153. if(sunUint32Unpack(a, ea, &a, &x->access) < 0) goto Err;
  1154. *pa = a;
  1155. return 0;
  1156. Err:
  1157. *pa = ea;
  1158. return -1;
  1159. }
  1160. void
  1161. nfs3RAccessPrint(Fmt *fmt, Nfs3RAccess *x)
  1162. {
  1163. fmtprint(fmt, "%s\n", "Nfs3RAccess");
  1164. fmtprint(fmt, "\t%s=", "status");
  1165. fmtprint(fmt, "%s", nfs3StatusStr(x->status));
  1166. fmtprint(fmt, "\n");
  1167. fmtprint(fmt, "\t%s=", "haveAttr");
  1168. fmtprint(fmt, "%d", x->haveAttr);
  1169. fmtprint(fmt, "\n");
  1170. switch(x->haveAttr){
  1171. case 1:
  1172. fmtprint(fmt, "\t%s=", "attr");
  1173. nfs3AttrPrint(fmt, &x->attr);
  1174. fmtprint(fmt, "\n");
  1175. break;
  1176. }
  1177. switch(x->status){
  1178. case Nfs3Ok:
  1179. fmtprint(fmt, "\t%s=", "access");
  1180. fmtprint(fmt, "%ud", x->access);
  1181. fmtprint(fmt, "\n");
  1182. break;
  1183. }
  1184. }
  1185. uint
  1186. nfs3RAccessSize(Nfs3RAccess *x)
  1187. {
  1188. uint a;
  1189. USED(x);
  1190. a = 0 + 4 + 4;
  1191. switch(x->haveAttr){
  1192. case 1:
  1193. a = a + nfs3AttrSize(&x->attr);
  1194. break;
  1195. }
  1196. switch(x->status){
  1197. case Nfs3Ok:
  1198. a = a + 4;
  1199. break;
  1200. }
  1201. return a;
  1202. }
  1203. int
  1204. nfs3RAccessPack(uint8_t *a, uint8_t *ea, uint8_t **pa, Nfs3RAccess *x)
  1205. {
  1206. int i;
  1207. if(i=x->status, sunEnumPack(a, ea, &a, &i) < 0) goto Err;
  1208. if(sunUint1Pack(a, ea, &a, &x->haveAttr) < 0) goto Err;
  1209. switch(x->haveAttr){
  1210. case 1:
  1211. if(nfs3AttrPack(a, ea, &a, &x->attr) < 0) goto Err;
  1212. break;
  1213. }
  1214. switch(x->status){
  1215. case Nfs3Ok:
  1216. if(sunUint32Pack(a, ea, &a, &x->access) < 0) goto Err;
  1217. break;
  1218. }
  1219. *pa = a;
  1220. return 0;
  1221. Err:
  1222. *pa = ea;
  1223. return -1;
  1224. }
  1225. int
  1226. nfs3RAccessUnpack(uint8_t *a, uint8_t *ea, uint8_t **pa, Nfs3RAccess *x)
  1227. {
  1228. int i;
  1229. if(sunEnumUnpack(a, ea, &a, &i) < 0) goto Err; x->status = i;
  1230. if(sunUint1Unpack(a, ea, &a, &x->haveAttr) < 0) goto Err;
  1231. switch(x->haveAttr){
  1232. case 1:
  1233. if(nfs3AttrUnpack(a, ea, &a, &x->attr) < 0) goto Err;
  1234. break;
  1235. }
  1236. switch(x->status){
  1237. case Nfs3Ok:
  1238. if(sunUint32Unpack(a, ea, &a, &x->access) < 0) goto Err;
  1239. break;
  1240. }
  1241. *pa = a;
  1242. return 0;
  1243. Err:
  1244. *pa = ea;
  1245. return -1;
  1246. }
  1247. void
  1248. nfs3TReadlinkPrint(Fmt *fmt, Nfs3TReadlink *x)
  1249. {
  1250. fmtprint(fmt, "%s\n", "Nfs3TReadlink");
  1251. fmtprint(fmt, "\t%s=", "handle");
  1252. nfs3HandlePrint(fmt, &x->handle);
  1253. fmtprint(fmt, "\n");
  1254. }
  1255. uint
  1256. nfs3TReadlinkSize(Nfs3TReadlink *x)
  1257. {
  1258. uint a;
  1259. USED(x);
  1260. a = 0 + nfs3HandleSize(&x->handle);
  1261. return a;
  1262. }
  1263. int
  1264. nfs3TReadlinkPack(uint8_t *a, uint8_t *ea, uint8_t **pa, Nfs3TReadlink *x)
  1265. {
  1266. if(nfs3HandlePack(a, ea, &a, &x->handle) < 0) goto Err;
  1267. *pa = a;
  1268. return 0;
  1269. Err:
  1270. *pa = ea;
  1271. return -1;
  1272. }
  1273. int
  1274. nfs3TReadlinkUnpack(uint8_t *a, uint8_t *ea, uint8_t **pa, Nfs3TReadlink *x)
  1275. {
  1276. if(nfs3HandleUnpack(a, ea, &a, &x->handle) < 0) goto Err;
  1277. *pa = a;
  1278. return 0;
  1279. Err:
  1280. *pa = ea;
  1281. return -1;
  1282. }
  1283. void
  1284. nfs3RReadlinkPrint(Fmt *fmt, Nfs3RReadlink *x)
  1285. {
  1286. fmtprint(fmt, "%s\n", "Nfs3RReadlink");
  1287. fmtprint(fmt, "\t%s=", "status");
  1288. fmtprint(fmt, "%s", nfs3StatusStr(x->status));
  1289. fmtprint(fmt, "\n");
  1290. fmtprint(fmt, "\t%s=", "haveAttr");
  1291. fmtprint(fmt, "%d", x->haveAttr);
  1292. fmtprint(fmt, "\n");
  1293. switch(x->haveAttr){
  1294. case 1:
  1295. fmtprint(fmt, "\t%s=", "attr");
  1296. nfs3AttrPrint(fmt, &x->attr);
  1297. fmtprint(fmt, "\n");
  1298. break;
  1299. }
  1300. switch(x->status){
  1301. case Nfs3Ok:
  1302. fmtprint(fmt, "\t%s=", "data");
  1303. fmtprint(fmt, "\"%s\"", x->data);
  1304. fmtprint(fmt, "\n");
  1305. break;
  1306. }
  1307. }
  1308. uint
  1309. nfs3RReadlinkSize(Nfs3RReadlink *x)
  1310. {
  1311. uint a;
  1312. USED(x);
  1313. a = 0 + 4 + 4;
  1314. switch(x->haveAttr){
  1315. case 1:
  1316. a = a + nfs3AttrSize(&x->attr);
  1317. break;
  1318. }
  1319. switch(x->status){
  1320. case Nfs3Ok:
  1321. a = a + sunStringSize(x->data);
  1322. break;
  1323. }
  1324. return a;
  1325. }
  1326. int
  1327. nfs3RReadlinkPack(uint8_t *a, uint8_t *ea, uint8_t **pa, Nfs3RReadlink *x)
  1328. {
  1329. int i;
  1330. if(i=x->status, sunEnumPack(a, ea, &a, &i) < 0) goto Err;
  1331. if(sunUint1Pack(a, ea, &a, &x->haveAttr) < 0) goto Err;
  1332. switch(x->haveAttr){
  1333. case 1:
  1334. if(nfs3AttrPack(a, ea, &a, &x->attr) < 0) goto Err;
  1335. break;
  1336. }
  1337. switch(x->status){
  1338. case Nfs3Ok:
  1339. if(sunStringPack(a, ea, &a, &x->data, -1) < 0) goto Err;
  1340. break;
  1341. }
  1342. *pa = a;
  1343. return 0;
  1344. Err:
  1345. *pa = ea;
  1346. return -1;
  1347. }
  1348. int
  1349. nfs3RReadlinkUnpack(uint8_t *a, uint8_t *ea, uint8_t **pa, Nfs3RReadlink *x)
  1350. {
  1351. int i;
  1352. if(sunEnumUnpack(a, ea, &a, &i) < 0) goto Err; x->status = i;
  1353. if(sunUint1Unpack(a, ea, &a, &x->haveAttr) < 0) goto Err;
  1354. switch(x->haveAttr){
  1355. case 1:
  1356. if(nfs3AttrUnpack(a, ea, &a, &x->attr) < 0) goto Err;
  1357. break;
  1358. }
  1359. switch(x->status){
  1360. case Nfs3Ok:
  1361. if(sunStringUnpack(a, ea, &a, &x->data, -1) < 0) goto Err;
  1362. break;
  1363. }
  1364. *pa = a;
  1365. return 0;
  1366. Err:
  1367. *pa = ea;
  1368. return -1;
  1369. }
  1370. void
  1371. nfs3TReadPrint(Fmt *fmt, Nfs3TRead *x)
  1372. {
  1373. fmtprint(fmt, "%s\n", "Nfs3TRead");
  1374. fmtprint(fmt, "\t%s=", "handle");
  1375. nfs3HandlePrint(fmt, &x->handle);
  1376. fmtprint(fmt, "\n");
  1377. fmtprint(fmt, "\t%s=", "offset");
  1378. fmtprint(fmt, "%llud", x->offset);
  1379. fmtprint(fmt, "\n");
  1380. fmtprint(fmt, "\t%s=", "count");
  1381. fmtprint(fmt, "%ud", x->count);
  1382. fmtprint(fmt, "\n");
  1383. }
  1384. uint
  1385. nfs3TReadSize(Nfs3TRead *x)
  1386. {
  1387. uint a;
  1388. USED(x);
  1389. a = 0 + nfs3HandleSize(&x->handle) + 8 + 4;
  1390. return a;
  1391. }
  1392. int
  1393. nfs3TReadPack(uint8_t *a, uint8_t *ea, uint8_t **pa, Nfs3TRead *x)
  1394. {
  1395. if(nfs3HandlePack(a, ea, &a, &x->handle) < 0) goto Err;
  1396. if(sunUint64Pack(a, ea, &a, &x->offset) < 0) goto Err;
  1397. if(sunUint32Pack(a, ea, &a, &x->count) < 0) goto Err;
  1398. *pa = a;
  1399. return 0;
  1400. Err:
  1401. *pa = ea;
  1402. return -1;
  1403. }
  1404. int
  1405. nfs3TReadUnpack(uint8_t *a, uint8_t *ea, uint8_t **pa, Nfs3TRead *x)
  1406. {
  1407. if(nfs3HandleUnpack(a, ea, &a, &x->handle) < 0) goto Err;
  1408. if(sunUint64Unpack(a, ea, &a, &x->offset) < 0) goto Err;
  1409. if(sunUint32Unpack(a, ea, &a, &x->count) < 0) goto Err;
  1410. *pa = a;
  1411. return 0;
  1412. Err:
  1413. *pa = ea;
  1414. return -1;
  1415. }
  1416. void
  1417. nfs3RReadPrint(Fmt *fmt, Nfs3RRead *x)
  1418. {
  1419. fmtprint(fmt, "%s\n", "Nfs3RRead");
  1420. fmtprint(fmt, "\t%s=", "status");
  1421. fmtprint(fmt, "%s", nfs3StatusStr(x->status));
  1422. fmtprint(fmt, "\n");
  1423. fmtprint(fmt, "\t%s=", "haveAttr");
  1424. fmtprint(fmt, "%d", x->haveAttr);
  1425. fmtprint(fmt, "\n");
  1426. switch(x->haveAttr){
  1427. case 1:
  1428. fmtprint(fmt, "\t%s=", "attr");
  1429. nfs3AttrPrint(fmt, &x->attr);
  1430. fmtprint(fmt, "\n");
  1431. break;
  1432. }
  1433. switch(x->status){
  1434. case Nfs3Ok:
  1435. fmtprint(fmt, "\t%s=", "count");
  1436. fmtprint(fmt, "%ud", x->count);
  1437. fmtprint(fmt, "\n");
  1438. fmtprint(fmt, "\t%s=", "eof");
  1439. fmtprint(fmt, "%d", x->eof);
  1440. fmtprint(fmt, "\n");
  1441. fmtprint(fmt, "\t%s=", "data");
  1442. if(x->ndata <= 32)
  1443. fmtprint(fmt, "%.*H", x->ndata, x->data);
  1444. else
  1445. fmtprint(fmt, "%.32H...", x->data);
  1446. fmtprint(fmt, "\n");
  1447. break;
  1448. }
  1449. }
  1450. uint
  1451. nfs3RReadSize(Nfs3RRead *x)
  1452. {
  1453. uint a;
  1454. USED(x);
  1455. a = 0 + 4 + 4;
  1456. switch(x->haveAttr){
  1457. case 1:
  1458. a = a + nfs3AttrSize(&x->attr);
  1459. break;
  1460. }
  1461. switch(x->status){
  1462. case Nfs3Ok:
  1463. a = a + 4 + 4 + sunVarOpaqueSize(x->ndata);
  1464. break;
  1465. }
  1466. return a;
  1467. }
  1468. int
  1469. nfs3RReadPack(uint8_t *a, uint8_t *ea, uint8_t **pa, Nfs3RRead *x)
  1470. {
  1471. int i;
  1472. if(i=x->status, sunEnumPack(a, ea, &a, &i) < 0) goto Err;
  1473. if(sunUint1Pack(a, ea, &a, &x->haveAttr) < 0) goto Err;
  1474. switch(x->haveAttr){
  1475. case 1:
  1476. if(nfs3AttrPack(a, ea, &a, &x->attr) < 0) goto Err;
  1477. break;
  1478. }
  1479. switch(x->status){
  1480. case Nfs3Ok:
  1481. if(sunUint32Pack(a, ea, &a, &x->count) < 0) goto Err;
  1482. if(sunUint1Pack(a, ea, &a, &x->eof) < 0) goto Err;
  1483. if(sunVarOpaquePack(a, ea, &a, &x->data, &x->ndata, x->count) < 0) goto Err;
  1484. break;
  1485. }
  1486. *pa = a;
  1487. return 0;
  1488. Err:
  1489. *pa = ea;
  1490. return -1;
  1491. }
  1492. int
  1493. nfs3RReadUnpack(uint8_t *a, uint8_t *ea, uint8_t **pa, Nfs3RRead *x)
  1494. {
  1495. int i;
  1496. if(sunEnumUnpack(a, ea, &a, &i) < 0) goto Err; x->status = i;
  1497. if(sunUint1Unpack(a, ea, &a, &x->haveAttr) < 0) goto Err;
  1498. switch(x->haveAttr){
  1499. case 1:
  1500. if(nfs3AttrUnpack(a, ea, &a, &x->attr) < 0) goto Err;
  1501. break;
  1502. }
  1503. switch(x->status){
  1504. case Nfs3Ok:
  1505. if(sunUint32Unpack(a, ea, &a, &x->count) < 0) goto Err;
  1506. if(sunUint1Unpack(a, ea, &a, &x->eof) < 0) goto Err;
  1507. if(sunVarOpaqueUnpack(a, ea, &a, &x->data, &x->ndata, x->count) < 0) goto Err;
  1508. break;
  1509. }
  1510. *pa = a;
  1511. return 0;
  1512. Err:
  1513. *pa = ea;
  1514. return -1;
  1515. }
  1516. char*
  1517. nfs3SyncStr(Nfs3Sync x)
  1518. {
  1519. switch(x){
  1520. case Nfs3SyncNone:
  1521. return "Nfs3SyncNone";
  1522. case Nfs3SyncData:
  1523. return "Nfs3SyncData";
  1524. case Nfs3SyncFile:
  1525. return "Nfs3SyncFile";
  1526. default:
  1527. return "unknown";
  1528. }
  1529. }
  1530. void
  1531. nfs3TWritePrint(Fmt *fmt, Nfs3TWrite *x)
  1532. {
  1533. fmtprint(fmt, "%s\n", "Nfs3TWrite");
  1534. fmtprint(fmt, "\t%s=", "file");
  1535. nfs3HandlePrint(fmt, &x->handle);
  1536. fmtprint(fmt, "\n");
  1537. fmtprint(fmt, "\t%s=", "offset");
  1538. fmtprint(fmt, "%llud", x->offset);
  1539. fmtprint(fmt, "\n");
  1540. fmtprint(fmt, "\t%s=", "count");
  1541. fmtprint(fmt, "%ud", x->count);
  1542. fmtprint(fmt, "\n");
  1543. fmtprint(fmt, "\t%s=", "stable");
  1544. fmtprint(fmt, "%s", nfs3SyncStr(x->stable));
  1545. fmtprint(fmt, "\n");
  1546. fmtprint(fmt, "\t%s=", "data");
  1547. if(x->ndata > 32)
  1548. fmtprint(fmt, "%.32H... (%d)", x->data, x->ndata);
  1549. else
  1550. fmtprint(fmt, "%.*H", x->ndata, x->data);
  1551. fmtprint(fmt, "\n");
  1552. }
  1553. uint
  1554. nfs3TWriteSize(Nfs3TWrite *x)
  1555. {
  1556. uint a;
  1557. USED(x);
  1558. a = 0 + nfs3HandleSize(&x->handle) + 8 + 4 + 4 + sunVarOpaqueSize(x->ndata);
  1559. return a;
  1560. }
  1561. int
  1562. nfs3TWritePack(uint8_t *a, uint8_t *ea, uint8_t **pa, Nfs3TWrite *x)
  1563. {
  1564. int i;
  1565. if(nfs3HandlePack(a, ea, &a, &x->handle) < 0) goto Err;
  1566. if(sunUint64Pack(a, ea, &a, &x->offset) < 0) goto Err;
  1567. if(sunUint32Pack(a, ea, &a, &x->count) < 0) goto Err;
  1568. if(i=x->stable, sunEnumPack(a, ea, &a, &i) < 0) goto Err;
  1569. if(sunVarOpaquePack(a, ea, &a, &x->data, &x->ndata, x->count) < 0) goto Err;
  1570. *pa = a;
  1571. return 0;
  1572. Err:
  1573. *pa = ea;
  1574. return -1;
  1575. }
  1576. int
  1577. nfs3TWriteUnpack(uint8_t *a, uint8_t *ea, uint8_t **pa, Nfs3TWrite *x)
  1578. {
  1579. int i;
  1580. if(nfs3HandleUnpack(a, ea, &a, &x->handle) < 0) goto Err;
  1581. if(sunUint64Unpack(a, ea, &a, &x->offset) < 0) goto Err;
  1582. if(sunUint32Unpack(a, ea, &a, &x->count) < 0) goto Err;
  1583. if(sunEnumUnpack(a, ea, &a, &i) < 0) goto Err; x->stable = i;
  1584. if(sunVarOpaqueUnpack(a, ea, &a, &x->data, &x->ndata, x->count) < 0) goto Err;
  1585. *pa = a;
  1586. return 0;
  1587. Err:
  1588. *pa = ea;
  1589. return -1;
  1590. }
  1591. void
  1592. nfs3RWritePrint(Fmt *fmt, Nfs3RWrite *x)
  1593. {
  1594. fmtprint(fmt, "%s\n", "Nfs3RWrite");
  1595. fmtprint(fmt, "\t%s=", "status");
  1596. fmtprint(fmt, "%s", nfs3StatusStr(x->status));
  1597. fmtprint(fmt, "\n");
  1598. fmtprint(fmt, "\t%s=", "wcc");
  1599. nfs3WccPrint(fmt, &x->wcc);
  1600. fmtprint(fmt, "\n");
  1601. switch(x->status){
  1602. case Nfs3Ok:
  1603. fmtprint(fmt, "\t%s=", "count");
  1604. fmtprint(fmt, "%ud", x->count);
  1605. fmtprint(fmt, "\n");
  1606. fmtprint(fmt, "\t%s=", "committed");
  1607. fmtprint(fmt, "%s", nfs3SyncStr(x->committed));
  1608. fmtprint(fmt, "\n");
  1609. fmtprint(fmt, "\t%s=", "verf");
  1610. fmtprint(fmt, "%.*H", Nfs3WriteVerfSize, x->verf);
  1611. fmtprint(fmt, "\n");
  1612. break;
  1613. }
  1614. }
  1615. uint
  1616. nfs3RWriteSize(Nfs3RWrite *x)
  1617. {
  1618. uint a;
  1619. USED(x);
  1620. a = 0 + 4 + nfs3WccSize(&x->wcc);
  1621. switch(x->status){
  1622. case Nfs3Ok:
  1623. a = a + 4 + 4 + Nfs3WriteVerfSize;
  1624. break;
  1625. }
  1626. return a;
  1627. }
  1628. int
  1629. nfs3RWritePack(uint8_t *a, uint8_t *ea, uint8_t **pa, Nfs3RWrite *x)
  1630. {
  1631. int i;
  1632. if(i=x->status, sunEnumPack(a, ea, &a, &i) < 0) goto Err;
  1633. if(nfs3WccPack(a, ea, &a, &x->wcc) < 0) goto Err;
  1634. switch(x->status){
  1635. case Nfs3Ok:
  1636. if(sunUint32Pack(a, ea, &a, &x->count) < 0) goto Err;
  1637. if(i=x->committed, sunEnumPack(a, ea, &a, &i) < 0) goto Err;
  1638. if(sunFixedOpaquePack(a, ea, &a, x->verf, Nfs3WriteVerfSize) < 0) goto Err;
  1639. break;
  1640. }
  1641. *pa = a;
  1642. return 0;
  1643. Err:
  1644. *pa = ea;
  1645. return -1;
  1646. }
  1647. int
  1648. nfs3RWriteUnpack(uint8_t *a, uint8_t *ea, uint8_t **pa, Nfs3RWrite *x)
  1649. {
  1650. int i;
  1651. if(sunEnumUnpack(a, ea, &a, &i) < 0) goto Err; x->status = i;
  1652. if(nfs3WccUnpack(a, ea, &a, &x->wcc) < 0) goto Err;
  1653. switch(x->status){
  1654. case Nfs3Ok:
  1655. if(sunUint32Unpack(a, ea, &a, &x->count) < 0) goto Err;
  1656. if(sunEnumUnpack(a, ea, &a, &i) < 0) goto Err; x->committed = i;
  1657. if(sunFixedOpaqueUnpack(a, ea, &a, x->verf, Nfs3WriteVerfSize) < 0) goto Err;
  1658. break;
  1659. }
  1660. *pa = a;
  1661. return 0;
  1662. Err:
  1663. *pa = ea;
  1664. return -1;
  1665. }
  1666. char*
  1667. nfs3CreateStr(Nfs3Create x)
  1668. {
  1669. switch(x){
  1670. case Nfs3CreateUnchecked:
  1671. return "Nfs3CreateUnchecked";
  1672. case Nfs3CreateGuarded:
  1673. return "Nfs3CreateGuarded";
  1674. case Nfs3CreateExclusive:
  1675. return "Nfs3CreateExclusive";
  1676. default:
  1677. return "unknown";
  1678. }
  1679. }
  1680. void
  1681. nfs3TCreatePrint(Fmt *fmt, Nfs3TCreate *x)
  1682. {
  1683. fmtprint(fmt, "%s\n", "Nfs3TCreate");
  1684. fmtprint(fmt, "\t%s=", "handle");
  1685. nfs3HandlePrint(fmt, &x->handle);
  1686. fmtprint(fmt, "\n");
  1687. fmtprint(fmt, "\t%s=", "name");
  1688. fmtprint(fmt, "\"%s\"", x->name);
  1689. fmtprint(fmt, "\n");
  1690. fmtprint(fmt, "\t%s=", "mode");
  1691. fmtprint(fmt, "%s", nfs3CreateStr(x->mode));
  1692. fmtprint(fmt, "\n");
  1693. switch(x->mode){
  1694. case Nfs3CreateUnchecked:
  1695. case Nfs3CreateGuarded:
  1696. fmtprint(fmt, "\t%s=", "attr");
  1697. nfs3SetAttrPrint(fmt, &x->attr);
  1698. fmtprint(fmt, "\n");
  1699. break;
  1700. case Nfs3CreateExclusive:
  1701. fmtprint(fmt, "\t%s=", "verf");
  1702. fmtprint(fmt, "%.*H", Nfs3CreateVerfSize, x->verf);
  1703. fmtprint(fmt, "\n");
  1704. break;
  1705. }
  1706. }
  1707. uint
  1708. nfs3TCreateSize(Nfs3TCreate *x)
  1709. {
  1710. uint a;
  1711. USED(x);
  1712. a = 0 + nfs3HandleSize(&x->handle) + sunStringSize(x->name) + 4;
  1713. switch(x->mode){
  1714. case Nfs3CreateUnchecked:
  1715. case Nfs3CreateGuarded:
  1716. a = a + nfs3SetAttrSize(&x->attr);
  1717. break;
  1718. case Nfs3CreateExclusive:
  1719. a = a + Nfs3CreateVerfSize;
  1720. break;
  1721. }
  1722. return a;
  1723. }
  1724. int
  1725. nfs3TCreatePack(uint8_t *a, uint8_t *ea, uint8_t **pa, Nfs3TCreate *x)
  1726. {
  1727. int i;
  1728. if(nfs3HandlePack(a, ea, &a, &x->handle) < 0) goto Err;
  1729. if(sunStringPack(a, ea, &a, &x->name, -1) < 0) goto Err;
  1730. if(i=x->mode, sunEnumPack(a, ea, &a, &i) < 0) goto Err;
  1731. switch(x->mode){
  1732. case Nfs3CreateUnchecked:
  1733. case Nfs3CreateGuarded:
  1734. if(nfs3SetAttrPack(a, ea, &a, &x->attr) < 0) goto Err;
  1735. break;
  1736. case Nfs3CreateExclusive:
  1737. if(sunFixedOpaquePack(a, ea, &a, x->verf, Nfs3CreateVerfSize) < 0) goto Err;
  1738. break;
  1739. }
  1740. *pa = a;
  1741. return 0;
  1742. Err:
  1743. *pa = ea;
  1744. return -1;
  1745. }
  1746. int
  1747. nfs3TCreateUnpack(uint8_t *a, uint8_t *ea, uint8_t **pa, Nfs3TCreate *x)
  1748. {
  1749. int i;
  1750. if(nfs3HandleUnpack(a, ea, &a, &x->handle) < 0) goto Err;
  1751. if(sunStringUnpack(a, ea, &a, &x->name, -1) < 0) goto Err;
  1752. if(sunEnumUnpack(a, ea, &a, &i) < 0) goto Err; x->mode = i;
  1753. switch(x->mode){
  1754. case Nfs3CreateUnchecked:
  1755. case Nfs3CreateGuarded:
  1756. if(nfs3SetAttrUnpack(a, ea, &a, &x->attr) < 0) goto Err;
  1757. break;
  1758. case Nfs3CreateExclusive:
  1759. if(sunFixedOpaqueUnpack(a, ea, &a, x->verf, Nfs3CreateVerfSize) < 0) goto Err;
  1760. break;
  1761. }
  1762. *pa = a;
  1763. return 0;
  1764. Err:
  1765. *pa = ea;
  1766. return -1;
  1767. }
  1768. void
  1769. nfs3RCreatePrint(Fmt *fmt, Nfs3RCreate *x)
  1770. {
  1771. fmtprint(fmt, "%s\n", "Nfs3RCreate");
  1772. fmtprint(fmt, "\t%s=", "status");
  1773. fmtprint(fmt, "%s", nfs3StatusStr(x->status));
  1774. fmtprint(fmt, "\n");
  1775. switch(x->status){
  1776. case Nfs3Ok:
  1777. fmtprint(fmt, "\t%s=", "haveHandle");
  1778. fmtprint(fmt, "%d", x->haveHandle);
  1779. fmtprint(fmt, "\n");
  1780. switch(x->haveHandle){
  1781. case 1:
  1782. fmtprint(fmt, "\t%s=", "handle");
  1783. nfs3HandlePrint(fmt, &x->handle);
  1784. fmtprint(fmt, "\n");
  1785. break;
  1786. }
  1787. fmtprint(fmt, "\t%s=", "haveAttr");
  1788. fmtprint(fmt, "%d", x->haveAttr);
  1789. fmtprint(fmt, "\n");
  1790. switch(x->haveAttr){
  1791. case 1:
  1792. fmtprint(fmt, "\t%s=", "attr");
  1793. nfs3AttrPrint(fmt, &x->attr);
  1794. fmtprint(fmt, "\n");
  1795. break;
  1796. }
  1797. break;
  1798. }
  1799. fmtprint(fmt, "\t%s=", "dirWcc");
  1800. nfs3WccPrint(fmt, &x->dirWcc);
  1801. fmtprint(fmt, "\n");
  1802. }
  1803. uint
  1804. nfs3RCreateSize(Nfs3RCreate *x)
  1805. {
  1806. uint a;
  1807. USED(x);
  1808. a = 0 + 4;
  1809. switch(x->status){
  1810. case Nfs3Ok:
  1811. a = a + 4;
  1812. switch(x->haveHandle){
  1813. case 1:
  1814. a = a + nfs3HandleSize(&x->handle);
  1815. break;
  1816. }
  1817. a = a + 4;
  1818. switch(x->haveAttr){
  1819. case 1:
  1820. a = a + nfs3AttrSize(&x->attr);
  1821. break;
  1822. }
  1823. break;
  1824. }
  1825. a = a + nfs3WccSize(&x->dirWcc);
  1826. return a;
  1827. }
  1828. int
  1829. nfs3RCreatePack(uint8_t *a, uint8_t *ea, uint8_t **pa, Nfs3RCreate *x)
  1830. {
  1831. int i;
  1832. if(i=x->status, sunEnumPack(a, ea, &a, &i) < 0) goto Err;
  1833. switch(x->status){
  1834. case Nfs3Ok:
  1835. if(sunUint1Pack(a, ea, &a, &x->haveHandle) < 0) goto Err;
  1836. switch(x->haveHandle){
  1837. case 1:
  1838. if(nfs3HandlePack(a, ea, &a, &x->handle) < 0) goto Err;
  1839. break;
  1840. }
  1841. if(sunUint1Pack(a, ea, &a, &x->haveAttr) < 0) goto Err;
  1842. switch(x->haveAttr){
  1843. case 1:
  1844. if(nfs3AttrPack(a, ea, &a, &x->attr) < 0) goto Err;
  1845. break;
  1846. }
  1847. break;
  1848. }
  1849. if(nfs3WccPack(a, ea, &a, &x->dirWcc) < 0) goto Err;
  1850. *pa = a;
  1851. return 0;
  1852. Err:
  1853. *pa = ea;
  1854. return -1;
  1855. }
  1856. int
  1857. nfs3RCreateUnpack(uint8_t *a, uint8_t *ea, uint8_t **pa, Nfs3RCreate *x)
  1858. {
  1859. int i;
  1860. if(sunEnumUnpack(a, ea, &a, &i) < 0) goto Err; x->status = i;
  1861. switch(x->status){
  1862. case Nfs3Ok:
  1863. if(sunUint1Unpack(a, ea, &a, &x->haveHandle) < 0) goto Err;
  1864. switch(x->haveHandle){
  1865. case 1:
  1866. if(nfs3HandleUnpack(a, ea, &a, &x->handle) < 0) goto Err;
  1867. break;
  1868. }
  1869. if(sunUint1Unpack(a, ea, &a, &x->haveAttr) < 0) goto Err;
  1870. switch(x->haveAttr){
  1871. case 1:
  1872. if(nfs3AttrUnpack(a, ea, &a, &x->attr) < 0) goto Err;
  1873. break;
  1874. }
  1875. break;
  1876. }
  1877. if(nfs3WccUnpack(a, ea, &a, &x->dirWcc) < 0) goto Err;
  1878. *pa = a;
  1879. return 0;
  1880. Err:
  1881. *pa = ea;
  1882. return -1;
  1883. }
  1884. void
  1885. nfs3TMkdirPrint(Fmt *fmt, Nfs3TMkdir *x)
  1886. {
  1887. fmtprint(fmt, "%s\n", "Nfs3TMkdir");
  1888. fmtprint(fmt, "\t%s=", "handle");
  1889. nfs3HandlePrint(fmt, &x->handle);
  1890. fmtprint(fmt, "\n");
  1891. fmtprint(fmt, "\t%s=", "name");
  1892. fmtprint(fmt, "\"%s\"", x->name);
  1893. fmtprint(fmt, "\n");
  1894. fmtprint(fmt, "\t%s=", "attr");
  1895. nfs3SetAttrPrint(fmt, &x->attr);
  1896. fmtprint(fmt, "\n");
  1897. }
  1898. uint
  1899. nfs3TMkdirSize(Nfs3TMkdir *x)
  1900. {
  1901. uint a;
  1902. USED(x);
  1903. a = 0 + nfs3HandleSize(&x->handle) + sunStringSize(x->name) + nfs3SetAttrSize(&x->attr);
  1904. return a;
  1905. }
  1906. int
  1907. nfs3TMkdirPack(uint8_t *a, uint8_t *ea, uint8_t **pa, Nfs3TMkdir *x)
  1908. {
  1909. if(nfs3HandlePack(a, ea, &a, &x->handle) < 0) goto Err;
  1910. if(sunStringPack(a, ea, &a, &x->name, -1) < 0) goto Err;
  1911. if(nfs3SetAttrPack(a, ea, &a, &x->attr) < 0) goto Err;
  1912. *pa = a;
  1913. return 0;
  1914. Err:
  1915. *pa = ea;
  1916. return -1;
  1917. }
  1918. int
  1919. nfs3TMkdirUnpack(uint8_t *a, uint8_t *ea, uint8_t **pa, Nfs3TMkdir *x)
  1920. {
  1921. if(nfs3HandleUnpack(a, ea, &a, &x->handle) < 0) goto Err;
  1922. if(sunStringUnpack(a, ea, &a, &x->name, -1) < 0) goto Err;
  1923. if(nfs3SetAttrUnpack(a, ea, &a, &x->attr) < 0) goto Err;
  1924. *pa = a;
  1925. return 0;
  1926. Err:
  1927. *pa = ea;
  1928. return -1;
  1929. }
  1930. void
  1931. nfs3RMkdirPrint(Fmt *fmt, Nfs3RMkdir *x)
  1932. {
  1933. fmtprint(fmt, "%s\n", "Nfs3RMkdir");
  1934. fmtprint(fmt, "\t%s=", "status");
  1935. fmtprint(fmt, "%s", nfs3StatusStr(x->status));
  1936. fmtprint(fmt, "\n");
  1937. switch(x->status){
  1938. case Nfs3Ok:
  1939. fmtprint(fmt, "\t%s=", "haveHandle");
  1940. fmtprint(fmt, "%d", x->haveHandle);
  1941. fmtprint(fmt, "\n");
  1942. switch(x->haveHandle){
  1943. case 1:
  1944. fmtprint(fmt, "\t%s=", "handle");
  1945. nfs3HandlePrint(fmt, &x->handle);
  1946. fmtprint(fmt, "\n");
  1947. break;
  1948. }
  1949. fmtprint(fmt, "\t%s=", "haveAttr");
  1950. fmtprint(fmt, "%d", x->haveAttr);
  1951. fmtprint(fmt, "\n");
  1952. switch(x->haveAttr){
  1953. case 1:
  1954. fmtprint(fmt, "\t%s=", "attr");
  1955. nfs3AttrPrint(fmt, &x->attr);
  1956. fmtprint(fmt, "\n");
  1957. break;
  1958. }
  1959. break;
  1960. }
  1961. fmtprint(fmt, "\t%s=", "dirWcc");
  1962. nfs3WccPrint(fmt, &x->dirWcc);
  1963. fmtprint(fmt, "\n");
  1964. }
  1965. uint
  1966. nfs3RMkdirSize(Nfs3RMkdir *x)
  1967. {
  1968. uint a;
  1969. USED(x);
  1970. a = 0 + 4;
  1971. switch(x->status){
  1972. case Nfs3Ok:
  1973. a = a + 4;
  1974. switch(x->haveHandle){
  1975. case 1:
  1976. a = a + nfs3HandleSize(&x->handle);
  1977. break;
  1978. }
  1979. a = a + 4;
  1980. switch(x->haveAttr){
  1981. case 1:
  1982. a = a + nfs3AttrSize(&x->attr);
  1983. break;
  1984. }
  1985. break;
  1986. }
  1987. a = a + nfs3WccSize(&x->dirWcc);
  1988. return a;
  1989. }
  1990. int
  1991. nfs3RMkdirPack(uint8_t *a, uint8_t *ea, uint8_t **pa, Nfs3RMkdir *x)
  1992. {
  1993. int i;
  1994. if(i=x->status, sunEnumPack(a, ea, &a, &i) < 0) goto Err;
  1995. switch(x->status){
  1996. case Nfs3Ok:
  1997. if(sunUint1Pack(a, ea, &a, &x->haveHandle) < 0) goto Err;
  1998. switch(x->haveHandle){
  1999. case 1:
  2000. if(nfs3HandlePack(a, ea, &a, &x->handle) < 0) goto Err;
  2001. break;
  2002. }
  2003. if(sunUint1Pack(a, ea, &a, &x->haveAttr) < 0) goto Err;
  2004. switch(x->haveAttr){
  2005. case 1:
  2006. if(nfs3AttrPack(a, ea, &a, &x->attr) < 0) goto Err;
  2007. break;
  2008. }
  2009. break;
  2010. }
  2011. if(nfs3WccPack(a, ea, &a, &x->dirWcc) < 0) goto Err;
  2012. *pa = a;
  2013. return 0;
  2014. Err:
  2015. *pa = ea;
  2016. return -1;
  2017. }
  2018. int
  2019. nfs3RMkdirUnpack(uint8_t *a, uint8_t *ea, uint8_t **pa, Nfs3RMkdir *x)
  2020. {
  2021. int i;
  2022. if(sunEnumUnpack(a, ea, &a, &i) < 0) goto Err; x->status = i;
  2023. switch(x->status){
  2024. case Nfs3Ok:
  2025. if(sunUint1Unpack(a, ea, &a, &x->haveHandle) < 0) goto Err;
  2026. switch(x->haveHandle){
  2027. case 1:
  2028. if(nfs3HandleUnpack(a, ea, &a, &x->handle) < 0) goto Err;
  2029. break;
  2030. }
  2031. if(sunUint1Unpack(a, ea, &a, &x->haveAttr) < 0) goto Err;
  2032. switch(x->haveAttr){
  2033. case 1:
  2034. if(nfs3AttrUnpack(a, ea, &a, &x->attr) < 0) goto Err;
  2035. break;
  2036. }
  2037. break;
  2038. }
  2039. if(nfs3WccUnpack(a, ea, &a, &x->dirWcc) < 0) goto Err;
  2040. *pa = a;
  2041. return 0;
  2042. Err:
  2043. *pa = ea;
  2044. return -1;
  2045. }
  2046. void
  2047. nfs3TSymlinkPrint(Fmt *fmt, Nfs3TSymlink *x)
  2048. {
  2049. fmtprint(fmt, "%s\n", "Nfs3TSymlink");
  2050. fmtprint(fmt, "\t%s=", "handle");
  2051. nfs3HandlePrint(fmt, &x->handle);
  2052. fmtprint(fmt, "\n");
  2053. fmtprint(fmt, "\t%s=", "name");
  2054. fmtprint(fmt, "\"%s\"", x->name);
  2055. fmtprint(fmt, "\n");
  2056. fmtprint(fmt, "\t%s=", "attr");
  2057. nfs3SetAttrPrint(fmt, &x->attr);
  2058. fmtprint(fmt, "\n");
  2059. fmtprint(fmt, "\t%s=", "data");
  2060. fmtprint(fmt, "\"%s\"", x->data);
  2061. fmtprint(fmt, "\n");
  2062. }
  2063. uint
  2064. nfs3TSymlinkSize(Nfs3TSymlink *x)
  2065. {
  2066. uint a;
  2067. USED(x);
  2068. a = 0 + nfs3HandleSize(&x->handle) + sunStringSize(x->name) + nfs3SetAttrSize(&x->attr) + sunStringSize(x->data);
  2069. return a;
  2070. }
  2071. int
  2072. nfs3TSymlinkPack(uint8_t *a, uint8_t *ea, uint8_t **pa, Nfs3TSymlink *x)
  2073. {
  2074. if(nfs3HandlePack(a, ea, &a, &x->handle) < 0) goto Err;
  2075. if(sunStringPack(a, ea, &a, &x->name, -1) < 0) goto Err;
  2076. if(nfs3SetAttrPack(a, ea, &a, &x->attr) < 0) goto Err;
  2077. if(sunStringPack(a, ea, &a, &x->data, -1) < 0) goto Err;
  2078. *pa = a;
  2079. return 0;
  2080. Err:
  2081. *pa = ea;
  2082. return -1;
  2083. }
  2084. int
  2085. nfs3TSymlinkUnpack(uint8_t *a, uint8_t *ea, uint8_t **pa, Nfs3TSymlink *x)
  2086. {
  2087. if(nfs3HandleUnpack(a, ea, &a, &x->handle) < 0) goto Err;
  2088. if(sunStringUnpack(a, ea, &a, &x->name, -1) < 0) goto Err;
  2089. if(nfs3SetAttrUnpack(a, ea, &a, &x->attr) < 0) goto Err;
  2090. if(sunStringUnpack(a, ea, &a, &x->data, -1) < 0) goto Err;
  2091. *pa = a;
  2092. return 0;
  2093. Err:
  2094. *pa = ea;
  2095. return -1;
  2096. }
  2097. void
  2098. nfs3RSymlinkPrint(Fmt *fmt, Nfs3RSymlink *x)
  2099. {
  2100. fmtprint(fmt, "%s\n", "Nfs3RSymlink");
  2101. fmtprint(fmt, "\t%s=", "status");
  2102. fmtprint(fmt, "%s", nfs3StatusStr(x->status));
  2103. fmtprint(fmt, "\n");
  2104. switch(x->status){
  2105. case Nfs3Ok:
  2106. fmtprint(fmt, "\t%s=", "haveHandle");
  2107. fmtprint(fmt, "%d", x->haveHandle);
  2108. fmtprint(fmt, "\n");
  2109. switch(x->haveHandle){
  2110. case 1:
  2111. fmtprint(fmt, "\t%s=", "handle");
  2112. nfs3HandlePrint(fmt, &x->handle);
  2113. fmtprint(fmt, "\n");
  2114. break;
  2115. }
  2116. fmtprint(fmt, "\t%s=", "haveAttr");
  2117. fmtprint(fmt, "%d", x->haveAttr);
  2118. fmtprint(fmt, "\n");
  2119. switch(x->haveAttr){
  2120. case 1:
  2121. fmtprint(fmt, "\t%s=", "attr");
  2122. nfs3AttrPrint(fmt, &x->attr);
  2123. fmtprint(fmt, "\n");
  2124. break;
  2125. }
  2126. break;
  2127. }
  2128. fmtprint(fmt, "\t%s=", "dirWcc");
  2129. nfs3WccPrint(fmt, &x->dirWcc);
  2130. fmtprint(fmt, "\n");
  2131. }
  2132. uint
  2133. nfs3RSymlinkSize(Nfs3RSymlink *x)
  2134. {
  2135. uint a;
  2136. USED(x);
  2137. a = 0 + 4;
  2138. switch(x->status){
  2139. case Nfs3Ok:
  2140. a = a + 4;
  2141. switch(x->haveHandle){
  2142. case 1:
  2143. a = a + nfs3HandleSize(&x->handle);
  2144. break;
  2145. }
  2146. a = a + 4;
  2147. switch(x->haveAttr){
  2148. case 1:
  2149. a = a + nfs3AttrSize(&x->attr);
  2150. break;
  2151. }
  2152. break;
  2153. }
  2154. a = a + nfs3WccSize(&x->dirWcc);
  2155. return a;
  2156. }
  2157. int
  2158. nfs3RSymlinkPack(uint8_t *a, uint8_t *ea, uint8_t **pa, Nfs3RSymlink *x)
  2159. {
  2160. int i;
  2161. if(i=x->status, sunEnumPack(a, ea, &a, &i) < 0) goto Err;
  2162. switch(x->status){
  2163. case Nfs3Ok:
  2164. if(sunUint1Pack(a, ea, &a, &x->haveHandle) < 0) goto Err;
  2165. switch(x->haveHandle){
  2166. case 1:
  2167. if(nfs3HandlePack(a, ea, &a, &x->handle) < 0) goto Err;
  2168. break;
  2169. }
  2170. if(sunUint1Pack(a, ea, &a, &x->haveAttr) < 0) goto Err;
  2171. switch(x->haveAttr){
  2172. case 1:
  2173. if(nfs3AttrPack(a, ea, &a, &x->attr) < 0) goto Err;
  2174. break;
  2175. }
  2176. break;
  2177. }
  2178. if(nfs3WccPack(a, ea, &a, &x->dirWcc) < 0) goto Err;
  2179. *pa = a;
  2180. return 0;
  2181. Err:
  2182. *pa = ea;
  2183. return -1;
  2184. }
  2185. int
  2186. nfs3RSymlinkUnpack(uint8_t *a, uint8_t *ea, uint8_t **pa, Nfs3RSymlink *x)
  2187. {
  2188. int i;
  2189. if(sunEnumUnpack(a, ea, &a, &i) < 0) goto Err; x->status = i;
  2190. switch(x->status){
  2191. case Nfs3Ok:
  2192. if(sunUint1Unpack(a, ea, &a, &x->haveHandle) < 0) goto Err;
  2193. switch(x->haveHandle){
  2194. case 1:
  2195. if(nfs3HandleUnpack(a, ea, &a, &x->handle) < 0) goto Err;
  2196. break;
  2197. }
  2198. if(sunUint1Unpack(a, ea, &a, &x->haveAttr) < 0) goto Err;
  2199. switch(x->haveAttr){
  2200. case 1:
  2201. if(nfs3AttrUnpack(a, ea, &a, &x->attr) < 0) goto Err;
  2202. break;
  2203. }
  2204. break;
  2205. }
  2206. if(nfs3WccUnpack(a, ea, &a, &x->dirWcc) < 0) goto Err;
  2207. *pa = a;
  2208. return 0;
  2209. Err:
  2210. *pa = ea;
  2211. return -1;
  2212. }
  2213. void
  2214. nfs3TMknodPrint(Fmt *fmt, Nfs3TMknod *x)
  2215. {
  2216. fmtprint(fmt, "%s\n", "Nfs3TMknod");
  2217. fmtprint(fmt, "\t%s=", "handle");
  2218. nfs3HandlePrint(fmt, &x->handle);
  2219. fmtprint(fmt, "\n");
  2220. fmtprint(fmt, "\t%s=", "name");
  2221. fmtprint(fmt, "\"%s\"", x->name);
  2222. fmtprint(fmt, "\n");
  2223. fmtprint(fmt, "\t%s=", "type");
  2224. fmtprint(fmt, "%s", nfs3FileTypeStr(x->type));
  2225. fmtprint(fmt, "\n");
  2226. switch(x->type){
  2227. case Nfs3FileChar:
  2228. case Nfs3FileBlock:
  2229. fmtprint(fmt, "\t%s=", "attr");
  2230. nfs3SetAttrPrint(fmt, &x->attr);
  2231. fmtprint(fmt, "\n");
  2232. fmtprint(fmt, "\t%s=", "major");
  2233. fmtprint(fmt, "%ud", x->major);
  2234. fmtprint(fmt, "\n");
  2235. fmtprint(fmt, "\t%s=", "minor");
  2236. fmtprint(fmt, "%ud", x->minor);
  2237. fmtprint(fmt, "\n");
  2238. break;
  2239. case Nfs3FileSocket:
  2240. case Nfs3FileFifo:
  2241. fmtprint(fmt, "\t%s=", "attr");
  2242. nfs3SetAttrPrint(fmt, &x->attr);
  2243. fmtprint(fmt, "\n");
  2244. break;
  2245. }
  2246. }
  2247. uint
  2248. nfs3TMknodSize(Nfs3TMknod *x)
  2249. {
  2250. uint a;
  2251. USED(x);
  2252. a = 0 + nfs3HandleSize(&x->handle) + sunStringSize(x->name) + 4;
  2253. switch(x->type){
  2254. case Nfs3FileChar:
  2255. case Nfs3FileBlock:
  2256. a = a + nfs3SetAttrSize(&x->attr) + 4 + 4;
  2257. break;
  2258. case Nfs3FileSocket:
  2259. case Nfs3FileFifo:
  2260. a = a + nfs3SetAttrSize(&x->attr);
  2261. break;
  2262. }
  2263. return a;
  2264. }
  2265. int
  2266. nfs3TMknodPack(uint8_t *a, uint8_t *ea, uint8_t **pa, Nfs3TMknod *x)
  2267. {
  2268. int i;
  2269. if(nfs3HandlePack(a, ea, &a, &x->handle) < 0) goto Err;
  2270. if(sunStringPack(a, ea, &a, &x->name, -1) < 0) goto Err;
  2271. if(i=x->type, sunEnumPack(a, ea, &a, &i) < 0) goto Err;
  2272. switch(x->type){
  2273. case Nfs3FileChar:
  2274. case Nfs3FileBlock:
  2275. if(nfs3SetAttrPack(a, ea, &a, &x->attr) < 0) goto Err;
  2276. if(sunUint32Pack(a, ea, &a, &x->major) < 0) goto Err;
  2277. if(sunUint32Pack(a, ea, &a, &x->minor) < 0) goto Err;
  2278. break;
  2279. case Nfs3FileSocket:
  2280. case Nfs3FileFifo:
  2281. if(nfs3SetAttrPack(a, ea, &a, &x->attr) < 0) goto Err;
  2282. break;
  2283. }
  2284. *pa = a;
  2285. return 0;
  2286. Err:
  2287. *pa = ea;
  2288. return -1;
  2289. }
  2290. int
  2291. nfs3TMknodUnpack(uint8_t *a, uint8_t *ea, uint8_t **pa, Nfs3TMknod *x)
  2292. {
  2293. int i;
  2294. if(nfs3HandleUnpack(a, ea, &a, &x->handle) < 0) goto Err;
  2295. if(sunStringUnpack(a, ea, &a, &x->name, -1) < 0) goto Err;
  2296. if(sunEnumUnpack(a, ea, &a, &i) < 0) goto Err; x->type = i;
  2297. switch(x->type){
  2298. case Nfs3FileChar:
  2299. case Nfs3FileBlock:
  2300. if(nfs3SetAttrUnpack(a, ea, &a, &x->attr) < 0) goto Err;
  2301. if(sunUint32Unpack(a, ea, &a, &x->major) < 0) goto Err;
  2302. if(sunUint32Unpack(a, ea, &a, &x->minor) < 0) goto Err;
  2303. break;
  2304. case Nfs3FileSocket:
  2305. case Nfs3FileFifo:
  2306. if(nfs3SetAttrUnpack(a, ea, &a, &x->attr) < 0) goto Err;
  2307. break;
  2308. }
  2309. *pa = a;
  2310. return 0;
  2311. Err:
  2312. *pa = ea;
  2313. return -1;
  2314. }
  2315. void
  2316. nfs3RMknodPrint(Fmt *fmt, Nfs3RMknod *x)
  2317. {
  2318. fmtprint(fmt, "%s\n", "Nfs3RMknod");
  2319. fmtprint(fmt, "\t%s=", "status");
  2320. fmtprint(fmt, "%s", nfs3StatusStr(x->status));
  2321. fmtprint(fmt, "\n");
  2322. switch(x->status){
  2323. case Nfs3Ok:
  2324. fmtprint(fmt, "\t%s=", "haveHandle");
  2325. fmtprint(fmt, "%d", x->haveHandle);
  2326. fmtprint(fmt, "\n");
  2327. switch(x->haveHandle){
  2328. case 1:
  2329. fmtprint(fmt, "\t%s=", "handle");
  2330. nfs3HandlePrint(fmt, &x->handle);
  2331. fmtprint(fmt, "\n");
  2332. break;
  2333. }
  2334. fmtprint(fmt, "\t%s=", "haveAttr");
  2335. fmtprint(fmt, "%d", x->haveAttr);
  2336. fmtprint(fmt, "\n");
  2337. switch(x->haveAttr){
  2338. case 1:
  2339. fmtprint(fmt, "\t%s=", "attr");
  2340. nfs3AttrPrint(fmt, &x->attr);
  2341. fmtprint(fmt, "\n");
  2342. break;
  2343. }
  2344. break;
  2345. }
  2346. fmtprint(fmt, "\t%s=", "dirWcc");
  2347. nfs3WccPrint(fmt, &x->dirWcc);
  2348. fmtprint(fmt, "\n");
  2349. }
  2350. uint
  2351. nfs3RMknodSize(Nfs3RMknod *x)
  2352. {
  2353. uint a;
  2354. USED(x);
  2355. a = 0 + 4;
  2356. switch(x->status){
  2357. case Nfs3Ok:
  2358. a = a + 4;
  2359. switch(x->haveHandle){
  2360. case 1:
  2361. a = a + nfs3HandleSize(&x->handle);
  2362. break;
  2363. }
  2364. a = a + 4;
  2365. switch(x->haveAttr){
  2366. case 1:
  2367. a = a + nfs3AttrSize(&x->attr);
  2368. break;
  2369. }
  2370. break;
  2371. }
  2372. a = a + nfs3WccSize(&x->dirWcc);
  2373. return a;
  2374. }
  2375. int
  2376. nfs3RMknodPack(uint8_t *a, uint8_t *ea, uint8_t **pa, Nfs3RMknod *x)
  2377. {
  2378. int i;
  2379. if(i=x->status, sunEnumPack(a, ea, &a, &i) < 0) goto Err;
  2380. switch(x->status){
  2381. case Nfs3Ok:
  2382. if(sunUint1Pack(a, ea, &a, &x->haveHandle) < 0) goto Err;
  2383. switch(x->haveHandle){
  2384. case 1:
  2385. if(nfs3HandlePack(a, ea, &a, &x->handle) < 0) goto Err;
  2386. break;
  2387. }
  2388. if(sunUint1Pack(a, ea, &a, &x->haveAttr) < 0) goto Err;
  2389. switch(x->haveAttr){
  2390. case 1:
  2391. if(nfs3AttrPack(a, ea, &a, &x->attr) < 0) goto Err;
  2392. break;
  2393. }
  2394. break;
  2395. }
  2396. if(nfs3WccPack(a, ea, &a, &x->dirWcc) < 0) goto Err;
  2397. *pa = a;
  2398. return 0;
  2399. Err:
  2400. *pa = ea;
  2401. return -1;
  2402. }
  2403. int
  2404. nfs3RMknodUnpack(uint8_t *a, uint8_t *ea, uint8_t **pa, Nfs3RMknod *x)
  2405. {
  2406. int i;
  2407. if(sunEnumUnpack(a, ea, &a, &i) < 0) goto Err; x->status = i;
  2408. switch(x->status){
  2409. case Nfs3Ok:
  2410. if(sunUint1Unpack(a, ea, &a, &x->haveHandle) < 0) goto Err;
  2411. switch(x->haveHandle){
  2412. case 1:
  2413. if(nfs3HandleUnpack(a, ea, &a, &x->handle) < 0) goto Err;
  2414. break;
  2415. }
  2416. if(sunUint1Unpack(a, ea, &a, &x->haveAttr) < 0) goto Err;
  2417. switch(x->haveAttr){
  2418. case 1:
  2419. if(nfs3AttrUnpack(a, ea, &a, &x->attr) < 0) goto Err;
  2420. break;
  2421. }
  2422. break;
  2423. }
  2424. if(nfs3WccUnpack(a, ea, &a, &x->dirWcc) < 0) goto Err;
  2425. *pa = a;
  2426. return 0;
  2427. Err:
  2428. *pa = ea;
  2429. return -1;
  2430. }
  2431. void
  2432. nfs3TRemovePrint(Fmt *fmt, Nfs3TRemove *x)
  2433. {
  2434. fmtprint(fmt, "%s\n", "Nfs3TRemove");
  2435. fmtprint(fmt, "\t%s=", "handle");
  2436. nfs3HandlePrint(fmt, &x->handle);
  2437. fmtprint(fmt, "\n");
  2438. fmtprint(fmt, "\t%s=", "name");
  2439. fmtprint(fmt, "\"%s\"", x->name);
  2440. fmtprint(fmt, "\n");
  2441. }
  2442. uint
  2443. nfs3TRemoveSize(Nfs3TRemove *x)
  2444. {
  2445. uint a;
  2446. USED(x);
  2447. a = 0 + nfs3HandleSize(&x->handle) + sunStringSize(x->name);
  2448. return a;
  2449. }
  2450. int
  2451. nfs3TRemovePack(uint8_t *a, uint8_t *ea, uint8_t **pa, Nfs3TRemove *x)
  2452. {
  2453. if(nfs3HandlePack(a, ea, &a, &x->handle) < 0) goto Err;
  2454. if(sunStringPack(a, ea, &a, &x->name, -1) < 0) goto Err;
  2455. *pa = a;
  2456. return 0;
  2457. Err:
  2458. *pa = ea;
  2459. return -1;
  2460. }
  2461. int
  2462. nfs3TRemoveUnpack(uint8_t *a, uint8_t *ea, uint8_t **pa, Nfs3TRemove *x)
  2463. {
  2464. if(nfs3HandleUnpack(a, ea, &a, &x->handle) < 0) goto Err;
  2465. if(sunStringUnpack(a, ea, &a, &x->name, -1) < 0) goto Err;
  2466. *pa = a;
  2467. return 0;
  2468. Err:
  2469. *pa = ea;
  2470. return -1;
  2471. }
  2472. void
  2473. nfs3RRemovePrint(Fmt *fmt, Nfs3RRemove *x)
  2474. {
  2475. fmtprint(fmt, "%s\n", "Nfs3RRemove");
  2476. fmtprint(fmt, "\t%s=", "status");
  2477. fmtprint(fmt, "%s", nfs3StatusStr(x->status));
  2478. fmtprint(fmt, "\n");
  2479. fmtprint(fmt, "\t%s=", "wcc");
  2480. nfs3WccPrint(fmt, &x->wcc);
  2481. fmtprint(fmt, "\n");
  2482. }
  2483. uint
  2484. nfs3RRemoveSize(Nfs3RRemove *x)
  2485. {
  2486. uint a;
  2487. USED(x);
  2488. a = 0 + 4 + nfs3WccSize(&x->wcc);
  2489. return a;
  2490. }
  2491. int
  2492. nfs3RRemovePack(uint8_t *a, uint8_t *ea, uint8_t **pa, Nfs3RRemove *x)
  2493. {
  2494. int i;
  2495. if(i=x->status, sunEnumPack(a, ea, &a, &i) < 0) goto Err;
  2496. if(nfs3WccPack(a, ea, &a, &x->wcc) < 0) goto Err;
  2497. *pa = a;
  2498. return 0;
  2499. Err:
  2500. *pa = ea;
  2501. return -1;
  2502. }
  2503. int
  2504. nfs3RRemoveUnpack(uint8_t *a, uint8_t *ea, uint8_t **pa, Nfs3RRemove *x)
  2505. {
  2506. int i;
  2507. if(sunEnumUnpack(a, ea, &a, &i) < 0) goto Err; x->status = i;
  2508. if(nfs3WccUnpack(a, ea, &a, &x->wcc) < 0) goto Err;
  2509. *pa = a;
  2510. return 0;
  2511. Err:
  2512. *pa = ea;
  2513. return -1;
  2514. }
  2515. void
  2516. nfs3TRmdirPrint(Fmt *fmt, Nfs3TRmdir *x)
  2517. {
  2518. fmtprint(fmt, "%s\n", "Nfs3TRmdir");
  2519. fmtprint(fmt, "\t%s=", "handle");
  2520. nfs3HandlePrint(fmt, &x->handle);
  2521. fmtprint(fmt, "\n");
  2522. fmtprint(fmt, "\t%s=", "name");
  2523. fmtprint(fmt, "\"%s\"", x->name);
  2524. fmtprint(fmt, "\n");
  2525. }
  2526. uint
  2527. nfs3TRmdirSize(Nfs3TRmdir *x)
  2528. {
  2529. uint a;
  2530. USED(x);
  2531. a = 0 + nfs3HandleSize(&x->handle) + sunStringSize(x->name);
  2532. return a;
  2533. }
  2534. int
  2535. nfs3TRmdirPack(uint8_t *a, uint8_t *ea, uint8_t **pa, Nfs3TRmdir *x)
  2536. {
  2537. if(nfs3HandlePack(a, ea, &a, &x->handle) < 0) goto Err;
  2538. if(sunStringPack(a, ea, &a, &x->name, -1) < 0) goto Err;
  2539. *pa = a;
  2540. return 0;
  2541. Err:
  2542. *pa = ea;
  2543. return -1;
  2544. }
  2545. int
  2546. nfs3TRmdirUnpack(uint8_t *a, uint8_t *ea, uint8_t **pa, Nfs3TRmdir *x)
  2547. {
  2548. if(nfs3HandleUnpack(a, ea, &a, &x->handle) < 0) goto Err;
  2549. if(sunStringUnpack(a, ea, &a, &x->name, -1) < 0) goto Err;
  2550. *pa = a;
  2551. return 0;
  2552. Err:
  2553. *pa = ea;
  2554. return -1;
  2555. }
  2556. void
  2557. nfs3RRmdirPrint(Fmt *fmt, Nfs3RRmdir *x)
  2558. {
  2559. fmtprint(fmt, "%s\n", "Nfs3RRmdir");
  2560. fmtprint(fmt, "\t%s=", "status");
  2561. fmtprint(fmt, "%s", nfs3StatusStr(x->status));
  2562. fmtprint(fmt, "\n");
  2563. fmtprint(fmt, "\t%s=", "wcc");
  2564. nfs3WccPrint(fmt, &x->wcc);
  2565. fmtprint(fmt, "\n");
  2566. }
  2567. uint
  2568. nfs3RRmdirSize(Nfs3RRmdir *x)
  2569. {
  2570. uint a;
  2571. USED(x);
  2572. a = 0 + 4 + nfs3WccSize(&x->wcc);
  2573. return a;
  2574. }
  2575. int
  2576. nfs3RRmdirPack(uint8_t *a, uint8_t *ea, uint8_t **pa, Nfs3RRmdir *x)
  2577. {
  2578. int i;
  2579. if(i=x->status, sunEnumPack(a, ea, &a, &i) < 0) goto Err;
  2580. if(nfs3WccPack(a, ea, &a, &x->wcc) < 0) goto Err;
  2581. *pa = a;
  2582. return 0;
  2583. Err:
  2584. *pa = ea;
  2585. return -1;
  2586. }
  2587. int
  2588. nfs3RRmdirUnpack(uint8_t *a, uint8_t *ea, uint8_t **pa, Nfs3RRmdir *x)
  2589. {
  2590. int i;
  2591. if(sunEnumUnpack(a, ea, &a, &i) < 0) goto Err; x->status = i;
  2592. if(nfs3WccUnpack(a, ea, &a, &x->wcc) < 0) goto Err;
  2593. *pa = a;
  2594. return 0;
  2595. Err:
  2596. *pa = ea;
  2597. return -1;
  2598. }
  2599. void
  2600. nfs3TRenamePrint(Fmt *fmt, Nfs3TRename *x)
  2601. {
  2602. fmtprint(fmt, "%s\n", "Nfs3TRename");
  2603. fmtprint(fmt, "\t%s=", "from");
  2604. fmtprint(fmt, "{\n");
  2605. fmtprint(fmt, "\t\t%s=", "handle");
  2606. nfs3HandlePrint(fmt, &x->from.handle);
  2607. fmtprint(fmt, "\n");
  2608. fmtprint(fmt, "\t\t%s=", "name");
  2609. fmtprint(fmt, "\"%s\"", x->from.name);
  2610. fmtprint(fmt, "\n");
  2611. fmtprint(fmt, "\t}");
  2612. fmtprint(fmt, "\n");
  2613. fmtprint(fmt, "\t%s=", "to");
  2614. fmtprint(fmt, "{\n");
  2615. fmtprint(fmt, "\t\t%s=", "handle");
  2616. nfs3HandlePrint(fmt, &x->to.handle);
  2617. fmtprint(fmt, "\n");
  2618. fmtprint(fmt, "\t\t%s=", "name");
  2619. fmtprint(fmt, "\"%s\"", x->to.name);
  2620. fmtprint(fmt, "\n");
  2621. fmtprint(fmt, "\t}");
  2622. fmtprint(fmt, "\n");
  2623. }
  2624. uint
  2625. nfs3TRenameSize(Nfs3TRename *x)
  2626. {
  2627. uint a;
  2628. USED(x);
  2629. a = 0 + nfs3HandleSize(&x->from.handle) + sunStringSize(x->from.name) + nfs3HandleSize(&x->to.handle) + sunStringSize(x->to.name);
  2630. return a;
  2631. }
  2632. int
  2633. nfs3TRenamePack(uint8_t *a, uint8_t *ea, uint8_t **pa, Nfs3TRename *x)
  2634. {
  2635. if(nfs3HandlePack(a, ea, &a, &x->from.handle) < 0) goto Err;
  2636. if(sunStringPack(a, ea, &a, &x->from.name, -1) < 0) goto Err;
  2637. if(nfs3HandlePack(a, ea, &a, &x->to.handle) < 0) goto Err;
  2638. if(sunStringPack(a, ea, &a, &x->to.name, -1) < 0) goto Err;
  2639. *pa = a;
  2640. return 0;
  2641. Err:
  2642. *pa = ea;
  2643. return -1;
  2644. }
  2645. int
  2646. nfs3TRenameUnpack(uint8_t *a, uint8_t *ea, uint8_t **pa, Nfs3TRename *x)
  2647. {
  2648. if(nfs3HandleUnpack(a, ea, &a, &x->from.handle) < 0) goto Err;
  2649. if(sunStringUnpack(a, ea, &a, &x->from.name, -1) < 0) goto Err;
  2650. if(nfs3HandleUnpack(a, ea, &a, &x->to.handle) < 0) goto Err;
  2651. if(sunStringUnpack(a, ea, &a, &x->to.name, -1) < 0) goto Err;
  2652. *pa = a;
  2653. return 0;
  2654. Err:
  2655. *pa = ea;
  2656. return -1;
  2657. }
  2658. void
  2659. nfs3RRenamePrint(Fmt *fmt, Nfs3RRename *x)
  2660. {
  2661. fmtprint(fmt, "%s\n", "Nfs3RRename");
  2662. fmtprint(fmt, "\t%s=", "status");
  2663. fmtprint(fmt, "%s", nfs3StatusStr(x->status));
  2664. fmtprint(fmt, "\n");
  2665. fmtprint(fmt, "\t%s=", "fromWcc");
  2666. nfs3WccPrint(fmt, &x->fromWcc);
  2667. fmtprint(fmt, "\n");
  2668. fmtprint(fmt, "\t%s=", "toWcc");
  2669. nfs3WccPrint(fmt, &x->toWcc);
  2670. fmtprint(fmt, "\n");
  2671. }
  2672. uint
  2673. nfs3RRenameSize(Nfs3RRename *x)
  2674. {
  2675. uint a;
  2676. USED(x);
  2677. a = 0 + 4 + nfs3WccSize(&x->fromWcc) + nfs3WccSize(&x->toWcc);
  2678. return a;
  2679. }
  2680. int
  2681. nfs3RRenamePack(uint8_t *a, uint8_t *ea, uint8_t **pa, Nfs3RRename *x)
  2682. {
  2683. int i;
  2684. if(i=x->status, sunEnumPack(a, ea, &a, &i) < 0) goto Err;
  2685. if(nfs3WccPack(a, ea, &a, &x->fromWcc) < 0) goto Err;
  2686. if(nfs3WccPack(a, ea, &a, &x->toWcc) < 0) goto Err;
  2687. *pa = a;
  2688. return 0;
  2689. Err:
  2690. *pa = ea;
  2691. return -1;
  2692. }
  2693. int
  2694. nfs3RRenameUnpack(uint8_t *a, uint8_t *ea, uint8_t **pa, Nfs3RRename *x)
  2695. {
  2696. int i;
  2697. if(sunEnumUnpack(a, ea, &a, &i) < 0) goto Err; x->status = i;
  2698. if(nfs3WccUnpack(a, ea, &a, &x->fromWcc) < 0) goto Err;
  2699. if(nfs3WccUnpack(a, ea, &a, &x->toWcc) < 0) goto Err;
  2700. *pa = a;
  2701. return 0;
  2702. Err:
  2703. *pa = ea;
  2704. return -1;
  2705. }
  2706. void
  2707. nfs3TLinkPrint(Fmt *fmt, Nfs3TLink *x)
  2708. {
  2709. fmtprint(fmt, "%s\n", "Nfs3TLink");
  2710. fmtprint(fmt, "\t%s=", "handle");
  2711. nfs3HandlePrint(fmt, &x->handle);
  2712. fmtprint(fmt, "\n");
  2713. fmtprint(fmt, "\t%s=", "link");
  2714. fmtprint(fmt, "{\n");
  2715. fmtprint(fmt, "\t\t%s=", "handle");
  2716. nfs3HandlePrint(fmt, &x->link.handle);
  2717. fmtprint(fmt, "\n");
  2718. fmtprint(fmt, "\t\t%s=", "name");
  2719. fmtprint(fmt, "\"%s\"", x->link.name);
  2720. fmtprint(fmt, "\n");
  2721. fmtprint(fmt, "\t}");
  2722. fmtprint(fmt, "\n");
  2723. }
  2724. uint
  2725. nfs3TLinkSize(Nfs3TLink *x)
  2726. {
  2727. uint a;
  2728. USED(x);
  2729. a = 0 + nfs3HandleSize(&x->handle) + nfs3HandleSize(&x->link.handle) + sunStringSize(x->link.name);
  2730. return a;
  2731. }
  2732. int
  2733. nfs3TLinkPack(uint8_t *a, uint8_t *ea, uint8_t **pa, Nfs3TLink *x)
  2734. {
  2735. if(nfs3HandlePack(a, ea, &a, &x->handle) < 0) goto Err;
  2736. if(nfs3HandlePack(a, ea, &a, &x->link.handle) < 0) goto Err;
  2737. if(sunStringPack(a, ea, &a, &x->link.name, -1) < 0) goto Err;
  2738. *pa = a;
  2739. return 0;
  2740. Err:
  2741. *pa = ea;
  2742. return -1;
  2743. }
  2744. int
  2745. nfs3TLinkUnpack(uint8_t *a, uint8_t *ea, uint8_t **pa, Nfs3TLink *x)
  2746. {
  2747. if(nfs3HandleUnpack(a, ea, &a, &x->handle) < 0) goto Err;
  2748. if(nfs3HandleUnpack(a, ea, &a, &x->link.handle) < 0) goto Err;
  2749. if(sunStringUnpack(a, ea, &a, &x->link.name, -1) < 0) goto Err;
  2750. *pa = a;
  2751. return 0;
  2752. Err:
  2753. *pa = ea;
  2754. return -1;
  2755. }
  2756. void
  2757. nfs3RLinkPrint(Fmt *fmt, Nfs3RLink *x)
  2758. {
  2759. fmtprint(fmt, "%s\n", "Nfs3RLink");
  2760. fmtprint(fmt, "\t%s=", "status");
  2761. fmtprint(fmt, "%s", nfs3StatusStr(x->status));
  2762. fmtprint(fmt, "\n");
  2763. fmtprint(fmt, "\t%s=", "haveAttr");
  2764. fmtprint(fmt, "%d", x->haveAttr);
  2765. fmtprint(fmt, "\n");
  2766. switch(x->haveAttr){
  2767. case 1:
  2768. fmtprint(fmt, "\t%s=", "attr");
  2769. nfs3AttrPrint(fmt, &x->attr);
  2770. fmtprint(fmt, "\n");
  2771. break;
  2772. }
  2773. fmtprint(fmt, "\t%s=", "dirWcc");
  2774. nfs3WccPrint(fmt, &x->dirWcc);
  2775. fmtprint(fmt, "\n");
  2776. }
  2777. uint
  2778. nfs3RLinkSize(Nfs3RLink *x)
  2779. {
  2780. uint a;
  2781. USED(x);
  2782. a = 0 + 4 + 4;
  2783. switch(x->haveAttr){
  2784. case 1:
  2785. a = a + nfs3AttrSize(&x->attr);
  2786. break;
  2787. }
  2788. a = a + nfs3WccSize(&x->dirWcc);
  2789. return a;
  2790. }
  2791. int
  2792. nfs3RLinkPack(uint8_t *a, uint8_t *ea, uint8_t **pa, Nfs3RLink *x)
  2793. {
  2794. int i;
  2795. if(i=x->status, sunEnumPack(a, ea, &a, &i) < 0) goto Err;
  2796. if(sunUint1Pack(a, ea, &a, &x->haveAttr) < 0) goto Err;
  2797. switch(x->haveAttr){
  2798. case 1:
  2799. if(nfs3AttrPack(a, ea, &a, &x->attr) < 0) goto Err;
  2800. break;
  2801. }
  2802. if(nfs3WccPack(a, ea, &a, &x->dirWcc) < 0) goto Err;
  2803. *pa = a;
  2804. return 0;
  2805. Err:
  2806. *pa = ea;
  2807. return -1;
  2808. }
  2809. int
  2810. nfs3RLinkUnpack(uint8_t *a, uint8_t *ea, uint8_t **pa, Nfs3RLink *x)
  2811. {
  2812. int i;
  2813. if(sunEnumUnpack(a, ea, &a, &i) < 0) goto Err; x->status = i;
  2814. if(sunUint1Unpack(a, ea, &a, &x->haveAttr) < 0) goto Err;
  2815. switch(x->haveAttr){
  2816. case 1:
  2817. if(nfs3AttrUnpack(a, ea, &a, &x->attr) < 0) goto Err;
  2818. break;
  2819. }
  2820. if(nfs3WccUnpack(a, ea, &a, &x->dirWcc) < 0) goto Err;
  2821. *pa = a;
  2822. return 0;
  2823. Err:
  2824. *pa = ea;
  2825. return -1;
  2826. }
  2827. void
  2828. nfs3TReadDirPrint(Fmt *fmt, Nfs3TReadDir *x)
  2829. {
  2830. fmtprint(fmt, "%s\n", "Nfs3TReadDir");
  2831. fmtprint(fmt, "\t%s=", "handle");
  2832. nfs3HandlePrint(fmt, &x->handle);
  2833. fmtprint(fmt, "\n");
  2834. fmtprint(fmt, "\t%s=", "cookie");
  2835. fmtprint(fmt, "%llud", x->cookie);
  2836. fmtprint(fmt, "\n");
  2837. fmtprint(fmt, "\t%s=", "verf");
  2838. fmtprint(fmt, "%.*H", Nfs3CookieVerfSize, x->verf);
  2839. fmtprint(fmt, "\n");
  2840. fmtprint(fmt, "\t%s=", "count");
  2841. fmtprint(fmt, "%ud", x->count);
  2842. fmtprint(fmt, "\n");
  2843. }
  2844. uint
  2845. nfs3TReadDirSize(Nfs3TReadDir *x)
  2846. {
  2847. uint a;
  2848. USED(x);
  2849. a = 0 + nfs3HandleSize(&x->handle) + 8 + Nfs3CookieVerfSize + 4;
  2850. return a;
  2851. }
  2852. int
  2853. nfs3TReadDirPack(uint8_t *a, uint8_t *ea, uint8_t **pa, Nfs3TReadDir *x)
  2854. {
  2855. if(nfs3HandlePack(a, ea, &a, &x->handle) < 0) goto Err;
  2856. if(sunUint64Pack(a, ea, &a, &x->cookie) < 0) goto Err;
  2857. if(sunFixedOpaquePack(a, ea, &a, x->verf, Nfs3CookieVerfSize) < 0) goto Err;
  2858. if(sunUint32Pack(a, ea, &a, &x->count) < 0) goto Err;
  2859. *pa = a;
  2860. return 0;
  2861. Err:
  2862. *pa = ea;
  2863. return -1;
  2864. }
  2865. int
  2866. nfs3TReadDirUnpack(uint8_t *a, uint8_t *ea, uint8_t **pa, Nfs3TReadDir *x)
  2867. {
  2868. if(nfs3HandleUnpack(a, ea, &a, &x->handle) < 0) goto Err;
  2869. if(sunUint64Unpack(a, ea, &a, &x->cookie) < 0) goto Err;
  2870. if(sunFixedOpaqueUnpack(a, ea, &a, x->verf, Nfs3CookieVerfSize) < 0) goto Err;
  2871. if(sunUint32Unpack(a, ea, &a, &x->count) < 0) goto Err;
  2872. *pa = a;
  2873. return 0;
  2874. Err:
  2875. *pa = ea;
  2876. return -1;
  2877. }
  2878. void
  2879. nfs3EntryPrint(Fmt *fmt, Nfs3Entry *x)
  2880. {
  2881. fmtprint(fmt, "%s\n", "Nfs3Entry");
  2882. fmtprint(fmt, "\t%s=", "fileid");
  2883. fmtprint(fmt, "%llud", x->fileid);
  2884. fmtprint(fmt, "\n");
  2885. fmtprint(fmt, "\t%s=", "name");
  2886. fmtprint(fmt, "\"%s\"", x->name);
  2887. fmtprint(fmt, "\n");
  2888. fmtprint(fmt, "\t%s=", "cookie");
  2889. fmtprint(fmt, "%llud", x->cookie);
  2890. fmtprint(fmt, "\n");
  2891. }
  2892. uint
  2893. nfs3EntrySize(Nfs3Entry *x)
  2894. {
  2895. uint a;
  2896. USED(x);
  2897. a = 0 + 4 + 8 + sunStringSize(x->name) + 8;
  2898. return a;
  2899. }
  2900. int
  2901. nfs3EntryPack(uint8_t *a, uint8_t *ea, uint8_t **pa, Nfs3Entry *x)
  2902. {
  2903. u1int one;
  2904. one = 1;
  2905. if(sunUint1Pack(a, ea, &a, &one) < 0) goto Err;
  2906. if(sunUint64Pack(a, ea, &a, &x->fileid) < 0) goto Err;
  2907. if(sunStringPack(a, ea, &a, &x->name, -1) < 0) goto Err;
  2908. if(sunUint64Pack(a, ea, &a, &x->cookie) < 0) goto Err;
  2909. *pa = a;
  2910. return 0;
  2911. Err:
  2912. *pa = ea;
  2913. return -1;
  2914. }
  2915. int
  2916. nfs3EntryUnpack(uint8_t *a, uint8_t *ea, uint8_t **pa, Nfs3Entry *x)
  2917. {
  2918. u1int one;
  2919. memset(x, 0, sizeof *x);
  2920. if(sunUint1Unpack(a, ea, &a, &one) < 0 || one != 1) goto Err;
  2921. if(sunUint64Unpack(a, ea, &a, &x->fileid) < 0) goto Err;
  2922. if(sunStringUnpack(a, ea, &a, &x->name, -1) < 0) goto Err;
  2923. if(sunUint64Unpack(a, ea, &a, &x->cookie) < 0) goto Err;
  2924. *pa = a;
  2925. return 0;
  2926. Err:
  2927. *pa = ea;
  2928. return -1;
  2929. }
  2930. void
  2931. nfs3RReadDirPrint(Fmt *fmt, Nfs3RReadDir *x)
  2932. {
  2933. fmtprint(fmt, "%s\n", "Nfs3RReadDir");
  2934. fmtprint(fmt, "\t%s=", "status");
  2935. fmtprint(fmt, "%s", nfs3StatusStr(x->status));
  2936. fmtprint(fmt, "\n");
  2937. fmtprint(fmt, "\t%s=", "haveAttr");
  2938. fmtprint(fmt, "%d", x->haveAttr);
  2939. fmtprint(fmt, "\n");
  2940. switch(x->haveAttr){
  2941. case 1:
  2942. fmtprint(fmt, "\t%s=", "attr");
  2943. nfs3AttrPrint(fmt, &x->attr);
  2944. fmtprint(fmt, "\n");
  2945. break;
  2946. }
  2947. switch(x->status){
  2948. case Nfs3Ok:
  2949. fmtprint(fmt, "\t%s=", "verf");
  2950. fmtprint(fmt, "%.*H", Nfs3CookieVerfSize, x->verf);
  2951. fmtprint(fmt, "\n");
  2952. fmtprint(fmt, "\t%s=%ud\n", "count", x->count);
  2953. fmtprint(fmt, "\t%s=", "eof");
  2954. fmtprint(fmt, "%d", x->eof);
  2955. fmtprint(fmt, "\n");
  2956. break;
  2957. }
  2958. }
  2959. uint
  2960. nfs3RReadDirSize(Nfs3RReadDir *x)
  2961. {
  2962. uint a;
  2963. USED(x);
  2964. a = 0 + 4 + 4;
  2965. switch(x->haveAttr){
  2966. case 1:
  2967. a = a + nfs3AttrSize(&x->attr);
  2968. break;
  2969. }
  2970. switch(x->status){
  2971. case Nfs3Ok:
  2972. a = a + Nfs3CookieVerfSize;
  2973. a += x->count;
  2974. a += 4 + 4;
  2975. break;
  2976. }
  2977. return a;
  2978. }
  2979. int
  2980. nfs3RReadDirPack(uint8_t *a, uint8_t *ea, uint8_t **pa, Nfs3RReadDir *x)
  2981. {
  2982. int i;
  2983. u1int zero;
  2984. if(i=x->status, sunEnumPack(a, ea, &a, &i) < 0) goto Err;
  2985. if(sunUint1Pack(a, ea, &a, &x->haveAttr) < 0) goto Err;
  2986. switch(x->haveAttr){
  2987. case 1:
  2988. if(nfs3AttrPack(a, ea, &a, &x->attr) < 0) goto Err;
  2989. break;
  2990. }
  2991. switch(x->status){
  2992. case Nfs3Ok:
  2993. if(sunFixedOpaquePack(a, ea, &a, x->verf, Nfs3CookieVerfSize) < 0) goto Err;
  2994. if(sunFixedOpaquePack(a, ea, &a, x->data, x->count) < 0) goto Err;
  2995. zero = 0;
  2996. if(sunUint1Pack(a, ea, &a, &zero) < 0) goto Err;
  2997. if(sunUint1Pack(a, ea, &a, &x->eof) < 0) goto Err;
  2998. break;
  2999. }
  3000. *pa = a;
  3001. return 0;
  3002. Err:
  3003. *pa = ea;
  3004. return -1;
  3005. }
  3006. static int
  3007. countEntry(uint8_t *a, uint8_t *ea, uint8_t **pa, uint32_t *n)
  3008. {
  3009. uint8_t *oa;
  3010. uint64_t u64;
  3011. uint32_t u32;
  3012. u1int u1;
  3013. oa = a;
  3014. for(;;){
  3015. if(sunUint1Unpack(a, ea, &a, &u1) < 0)
  3016. return -1;
  3017. if(u1 == 0)
  3018. break;
  3019. if(sunUint64Unpack(a, ea, &a, &u64) < 0
  3020. || sunUint32Unpack(a, ea, &a, &u32) < 0)
  3021. return -1;
  3022. a += (u32+3)&~3;
  3023. if(a >= ea)
  3024. return -1;
  3025. if(sunUint64Unpack(a, ea, &a, &u64) < 0)
  3026. return -1;
  3027. }
  3028. *n = (a-4) - oa;
  3029. *pa = a;
  3030. return 0;
  3031. }
  3032. int
  3033. nfs3RReadDirUnpack(uint8_t *a, uint8_t *ea, uint8_t **pa, Nfs3RReadDir *x)
  3034. {
  3035. int i;
  3036. if(sunEnumUnpack(a, ea, &a, &i) < 0) goto Err; x->status = i;
  3037. if(sunUint1Unpack(a, ea, &a, &x->haveAttr) < 0) goto Err;
  3038. switch(x->haveAttr){
  3039. case 1:
  3040. if(nfs3AttrUnpack(a, ea, &a, &x->attr) < 0) goto Err;
  3041. break;
  3042. }
  3043. if(x->status == Nfs3Ok){
  3044. if(sunFixedOpaqueUnpack(a, ea, &a, x->verf, Nfs3CookieVerfSize) < 0) goto Err;
  3045. x->data = a;
  3046. if(countEntry(a, ea, &a, &x->count) < 0) goto Err;
  3047. if(sunUint1Unpack(a, ea, &a, &x->eof) < 0) goto Err;
  3048. }
  3049. *pa = a;
  3050. return 0;
  3051. Err:
  3052. *pa = ea;
  3053. return -1;
  3054. }
  3055. void
  3056. nfs3TReadDirPlusPrint(Fmt *fmt, Nfs3TReadDirPlus *x)
  3057. {
  3058. fmtprint(fmt, "%s\n", "Nfs3TReadDirPlus");
  3059. fmtprint(fmt, "\t%s=", "handle");
  3060. nfs3HandlePrint(fmt, &x->handle);
  3061. fmtprint(fmt, "\n");
  3062. fmtprint(fmt, "\t%s=", "cookie");
  3063. fmtprint(fmt, "%llud", x->cookie);
  3064. fmtprint(fmt, "\n");
  3065. fmtprint(fmt, "\t%s=", "verf");
  3066. fmtprint(fmt, "%.*H", Nfs3CookieVerfSize, x->verf);
  3067. fmtprint(fmt, "\n");
  3068. fmtprint(fmt, "\t%s=", "dirCount");
  3069. fmtprint(fmt, "%ud", x->dirCount);
  3070. fmtprint(fmt, "\n");
  3071. fmtprint(fmt, "\t%s=", "maxCount");
  3072. fmtprint(fmt, "%ud", x->maxCount);
  3073. fmtprint(fmt, "\n");
  3074. }
  3075. uint
  3076. nfs3TReadDirPlusSize(Nfs3TReadDirPlus *x)
  3077. {
  3078. uint a;
  3079. USED(x);
  3080. a = 0 + nfs3HandleSize(&x->handle) + 8 + Nfs3CookieVerfSize + 4 + 4;
  3081. return a;
  3082. }
  3083. int
  3084. nfs3TReadDirPlusPack(uint8_t *a, uint8_t *ea, uint8_t **pa,
  3085. Nfs3TReadDirPlus *x)
  3086. {
  3087. if(nfs3HandlePack(a, ea, &a, &x->handle) < 0) goto Err;
  3088. if(sunUint64Pack(a, ea, &a, &x->cookie) < 0) goto Err;
  3089. if(sunFixedOpaquePack(a, ea, &a, x->verf, Nfs3CookieVerfSize) < 0) goto Err;
  3090. if(sunUint32Pack(a, ea, &a, &x->dirCount) < 0) goto Err;
  3091. if(sunUint32Pack(a, ea, &a, &x->maxCount) < 0) goto Err;
  3092. *pa = a;
  3093. return 0;
  3094. Err:
  3095. *pa = ea;
  3096. return -1;
  3097. }
  3098. int
  3099. nfs3TReadDirPlusUnpack(uint8_t *a, uint8_t *ea, uint8_t **pa,
  3100. Nfs3TReadDirPlus *x)
  3101. {
  3102. if(nfs3HandleUnpack(a, ea, &a, &x->handle) < 0) goto Err;
  3103. if(sunUint64Unpack(a, ea, &a, &x->cookie) < 0) goto Err;
  3104. if(sunFixedOpaqueUnpack(a, ea, &a, x->verf, Nfs3CookieVerfSize) < 0) goto Err;
  3105. if(sunUint32Unpack(a, ea, &a, &x->dirCount) < 0) goto Err;
  3106. if(sunUint32Unpack(a, ea, &a, &x->maxCount) < 0) goto Err;
  3107. *pa = a;
  3108. return 0;
  3109. Err:
  3110. *pa = ea;
  3111. return -1;
  3112. }
  3113. void
  3114. nfs3EntryPlusPrint(Fmt *fmt, Nfs3Entry *x)
  3115. {
  3116. fmtprint(fmt, "%s\n", "Nfs3EntryPlus");
  3117. fmtprint(fmt, "\t%s=", "fileid");
  3118. fmtprint(fmt, "%llud", x->fileid);
  3119. fmtprint(fmt, "\n");
  3120. fmtprint(fmt, "\t%s=", "name");
  3121. fmtprint(fmt, "\"%s\"", x->name);
  3122. fmtprint(fmt, "\n");
  3123. fmtprint(fmt, "\t%s=", "cookie");
  3124. fmtprint(fmt, "%llud", x->cookie);
  3125. fmtprint(fmt, "\n");
  3126. fmtprint(fmt, "\t%s=", "haveAttr");
  3127. fmtprint(fmt, "%d", x->haveAttr);
  3128. fmtprint(fmt, "\n");
  3129. switch(x->haveAttr){
  3130. case 1:
  3131. fmtprint(fmt, "\t%s=", "attr");
  3132. nfs3AttrPrint(fmt, &x->attr);
  3133. fmtprint(fmt, "\n");
  3134. break;
  3135. }
  3136. fmtprint(fmt, "\t%s=", "haveHandle");
  3137. fmtprint(fmt, "%d", x->haveHandle);
  3138. fmtprint(fmt, "\n");
  3139. switch(x->haveHandle){
  3140. case 1:
  3141. fmtprint(fmt, "\t%s=", "handle");
  3142. nfs3HandlePrint(fmt, &x->handle);
  3143. fmtprint(fmt, "\n");
  3144. break;
  3145. }
  3146. }
  3147. uint
  3148. nfs3EntryPlusSize(Nfs3Entry *x)
  3149. {
  3150. uint a;
  3151. USED(x);
  3152. a = 0 + 8 + sunStringSize(x->name) + 8 + 4;
  3153. switch(x->haveAttr){
  3154. case 1:
  3155. a = a + nfs3AttrSize(&x->attr);
  3156. break;
  3157. }
  3158. a = a + 4;
  3159. switch(x->haveHandle){
  3160. case 1:
  3161. a = a + nfs3HandleSize(&x->handle);
  3162. break;
  3163. }
  3164. return a;
  3165. }
  3166. int
  3167. nfs3EntryPlusPack(uint8_t *a, uint8_t *ea, uint8_t **pa, Nfs3Entry *x)
  3168. {
  3169. u1int u1;
  3170. if(sunUint1Pack(a, ea, &a, &u1) < 0) goto Err;
  3171. if(sunUint64Pack(a, ea, &a, &x->fileid) < 0) goto Err;
  3172. if(sunStringPack(a, ea, &a, &x->name, -1) < 0) goto Err;
  3173. if(sunUint64Pack(a, ea, &a, &x->cookie) < 0) goto Err;
  3174. if(sunUint1Pack(a, ea, &a, &x->haveAttr) < 0) goto Err;
  3175. switch(x->haveAttr){
  3176. case 1:
  3177. if(nfs3AttrPack(a, ea, &a, &x->attr) < 0) goto Err;
  3178. break;
  3179. }
  3180. if(sunUint1Pack(a, ea, &a, &x->haveHandle) < 0) goto Err;
  3181. switch(x->haveHandle){
  3182. case 1:
  3183. if(nfs3HandlePack(a, ea, &a, &x->handle) < 0) goto Err;
  3184. break;
  3185. }
  3186. *pa = a;
  3187. return 0;
  3188. Err:
  3189. *pa = ea;
  3190. return -1;
  3191. }
  3192. int
  3193. nfs3EntryPlusUnpack(uint8_t *a, uint8_t *ea, uint8_t **pa, Nfs3Entry *x)
  3194. {
  3195. u1int u1;
  3196. if(sunUint1Unpack(a, ea, &a, &u1) < 0 || u1 != 1) goto Err;
  3197. if(sunUint64Unpack(a, ea, &a, &x->fileid) < 0) goto Err;
  3198. if(sunStringUnpack(a, ea, &a, &x->name, -1) < 0) goto Err;
  3199. if(sunUint64Unpack(a, ea, &a, &x->cookie) < 0) goto Err;
  3200. if(sunUint1Unpack(a, ea, &a, &x->haveAttr) < 0) goto Err;
  3201. switch(x->haveAttr){
  3202. case 1:
  3203. if(nfs3AttrUnpack(a, ea, &a, &x->attr) < 0) goto Err;
  3204. break;
  3205. }
  3206. if(sunUint1Unpack(a, ea, &a, &x->haveHandle) < 0) goto Err;
  3207. switch(x->haveHandle){
  3208. case 1:
  3209. if(nfs3HandleUnpack(a, ea, &a, &x->handle) < 0) goto Err;
  3210. break;
  3211. }
  3212. *pa = a;
  3213. return 0;
  3214. Err:
  3215. *pa = ea;
  3216. return -1;
  3217. }
  3218. void
  3219. nfs3RReadDirPlusPrint(Fmt *fmt, Nfs3RReadDirPlus *x)
  3220. {
  3221. fmtprint(fmt, "%s\n", "Nfs3RReadDirPlus");
  3222. fmtprint(fmt, "\t%s=", "status");
  3223. fmtprint(fmt, "%s", nfs3StatusStr(x->status));
  3224. fmtprint(fmt, "\n");
  3225. fmtprint(fmt, "\t%s=", "haveAttr");
  3226. fmtprint(fmt, "%d", x->haveAttr);
  3227. fmtprint(fmt, "\n");
  3228. switch(x->haveAttr){
  3229. case 1:
  3230. fmtprint(fmt, "\t%s=", "attr");
  3231. nfs3AttrPrint(fmt, &x->attr);
  3232. fmtprint(fmt, "\n");
  3233. break;
  3234. }
  3235. switch(x->status){
  3236. case Nfs3Ok:
  3237. fmtprint(fmt, "\t%s=", "verf");
  3238. fmtprint(fmt, "%.*H", Nfs3CookieVerfSize, x->verf);
  3239. fmtprint(fmt, "\n");
  3240. fmtprint(fmt, "\tcount=%ud\n", x->count);
  3241. fmtprint(fmt, "\t%s=", "eof");
  3242. fmtprint(fmt, "%d", x->eof);
  3243. fmtprint(fmt, "\n");
  3244. break;
  3245. }
  3246. }
  3247. uint
  3248. nfs3RReadDirPlusSize(Nfs3RReadDirPlus *x)
  3249. {
  3250. uint a;
  3251. USED(x);
  3252. a = 0 + 4 + 4;
  3253. switch(x->haveAttr){
  3254. case 1:
  3255. a = a + nfs3AttrSize(&x->attr);
  3256. break;
  3257. }
  3258. switch(x->status){
  3259. case Nfs3Ok:
  3260. a = a + Nfs3CookieVerfSize;
  3261. a += x->count;
  3262. a += 4 + 4;
  3263. break;
  3264. }
  3265. return a;
  3266. }
  3267. int
  3268. nfs3RReadDirPlusPack(uint8_t *a, uint8_t *ea, uint8_t **pa,
  3269. Nfs3RReadDirPlus *x)
  3270. {
  3271. int i;
  3272. u1int zero;
  3273. if(i=x->status, sunEnumPack(a, ea, &a, &i) < 0) goto Err;
  3274. if(sunUint1Pack(a, ea, &a, &x->haveAttr) < 0) goto Err;
  3275. switch(x->haveAttr){
  3276. case 1:
  3277. if(nfs3AttrPack(a, ea, &a, &x->attr) < 0) goto Err;
  3278. break;
  3279. }
  3280. switch(x->status){
  3281. case Nfs3Ok:
  3282. if(sunFixedOpaquePack(a, ea, &a, x->verf, Nfs3CookieVerfSize) < 0) goto Err;
  3283. if(sunFixedOpaquePack(a, ea, &a, x->data, x->count) < 0) goto Err;
  3284. zero = 0;
  3285. if(sunUint1Pack(a, ea, &a, &zero) < 0) goto Err;
  3286. if(sunUint1Pack(a, ea, &a, &x->eof) < 0) goto Err;
  3287. break;
  3288. }
  3289. *pa = a;
  3290. return 0;
  3291. Err:
  3292. *pa = ea;
  3293. return -1;
  3294. }
  3295. static int
  3296. countEntryPlus(uint8_t *a, uint8_t *ea, uint8_t **pa, uint32_t *n)
  3297. {
  3298. uint8_t *oa;
  3299. uint64_t u64;
  3300. uint32_t u32;
  3301. u1int u1;
  3302. Nfs3Handle h;
  3303. Nfs3Attr attr;
  3304. oa = a;
  3305. for(;;){
  3306. if(sunUint1Unpack(a, ea, &a, &u1) < 0)
  3307. return -1;
  3308. if(u1 == 0)
  3309. break;
  3310. if(sunUint64Unpack(a, ea, &a, &u64) < 0
  3311. || sunUint32Unpack(a, ea, &a, &u32) < 0)
  3312. return -1;
  3313. a += (u32+3)&~3;
  3314. if(a >= ea)
  3315. return -1;
  3316. if(sunUint64Unpack(a, ea, &a, &u64) < 0
  3317. || sunUint1Unpack(a, ea, &a, &u1) < 0
  3318. || (u1 && nfs3AttrUnpack(a, ea, &a, &attr) < 0)
  3319. || sunUint1Unpack(a, ea, &a, &u1) < 0
  3320. || (u1 && nfs3HandleUnpack(a, ea, &a, &h) < 0))
  3321. return -1;
  3322. }
  3323. *n = (a-4) - oa;
  3324. *pa = a;
  3325. return 0;
  3326. }
  3327. int
  3328. nfs3RReadDirPlusUnpack(uint8_t *a, uint8_t *ea, uint8_t **pa,
  3329. Nfs3RReadDirPlus *x)
  3330. {
  3331. int i;
  3332. if(sunEnumUnpack(a, ea, &a, &i) < 0) goto Err; x->status = i;
  3333. if(sunUint1Unpack(a, ea, &a, &x->haveAttr) < 0) goto Err;
  3334. switch(x->haveAttr){
  3335. case 1:
  3336. if(nfs3AttrUnpack(a, ea, &a, &x->attr) < 0) goto Err;
  3337. break;
  3338. }
  3339. if(x->status == Nfs3Ok){
  3340. if(sunFixedOpaqueUnpack(a, ea, &a, x->verf, Nfs3CookieVerfSize) < 0) goto Err;
  3341. x->data = a;
  3342. if(countEntryPlus(a, ea, &a, &x->count) < 0) goto Err;
  3343. if(sunUint1Unpack(a, ea, &a, &x->eof) < 0) goto Err;
  3344. }
  3345. *pa = a;
  3346. return 0;
  3347. Err:
  3348. *pa = ea;
  3349. return -1;
  3350. }
  3351. void
  3352. nfs3TFsStatPrint(Fmt *fmt, Nfs3TFsStat *x)
  3353. {
  3354. fmtprint(fmt, "%s\n", "Nfs3TFsStat");
  3355. fmtprint(fmt, "\t%s=", "handle");
  3356. nfs3HandlePrint(fmt, &x->handle);
  3357. fmtprint(fmt, "\n");
  3358. }
  3359. uint
  3360. nfs3TFsStatSize(Nfs3TFsStat *x)
  3361. {
  3362. uint a;
  3363. USED(x);
  3364. a = 0 + nfs3HandleSize(&x->handle);
  3365. return a;
  3366. }
  3367. int
  3368. nfs3TFsStatPack(uint8_t *a, uint8_t *ea, uint8_t **pa, Nfs3TFsStat *x)
  3369. {
  3370. if(nfs3HandlePack(a, ea, &a, &x->handle) < 0) goto Err;
  3371. *pa = a;
  3372. return 0;
  3373. Err:
  3374. *pa = ea;
  3375. return -1;
  3376. }
  3377. int
  3378. nfs3TFsStatUnpack(uint8_t *a, uint8_t *ea, uint8_t **pa, Nfs3TFsStat *x)
  3379. {
  3380. if(nfs3HandleUnpack(a, ea, &a, &x->handle) < 0) goto Err;
  3381. *pa = a;
  3382. return 0;
  3383. Err:
  3384. *pa = ea;
  3385. return -1;
  3386. }
  3387. void
  3388. nfs3RFsStatPrint(Fmt *fmt, Nfs3RFsStat *x)
  3389. {
  3390. fmtprint(fmt, "%s\n", "Nfs3RFsStat");
  3391. fmtprint(fmt, "\t%s=", "status");
  3392. fmtprint(fmt, "%s", nfs3StatusStr(x->status));
  3393. fmtprint(fmt, "\n");
  3394. fmtprint(fmt, "\t%s=", "haveAttr");
  3395. fmtprint(fmt, "%d", x->haveAttr);
  3396. fmtprint(fmt, "\n");
  3397. switch(x->haveAttr){
  3398. case 1:
  3399. fmtprint(fmt, "\t%s=", "attr");
  3400. nfs3AttrPrint(fmt, &x->attr);
  3401. fmtprint(fmt, "\n");
  3402. break;
  3403. }
  3404. switch(x->status){
  3405. case Nfs3Ok:
  3406. fmtprint(fmt, "\t%s=", "totalBytes");
  3407. fmtprint(fmt, "%llud", x->totalBytes);
  3408. fmtprint(fmt, "\n");
  3409. fmtprint(fmt, "\t%s=", "freeBytes");
  3410. fmtprint(fmt, "%llud", x->freeBytes);
  3411. fmtprint(fmt, "\n");
  3412. fmtprint(fmt, "\t%s=", "availBytes");
  3413. fmtprint(fmt, "%llud", x->availBytes);
  3414. fmtprint(fmt, "\n");
  3415. fmtprint(fmt, "\t%s=", "totalFiles");
  3416. fmtprint(fmt, "%llud", x->totalFiles);
  3417. fmtprint(fmt, "\n");
  3418. fmtprint(fmt, "\t%s=", "freeFiles");
  3419. fmtprint(fmt, "%llud", x->freeFiles);
  3420. fmtprint(fmt, "\n");
  3421. fmtprint(fmt, "\t%s=", "availFiles");
  3422. fmtprint(fmt, "%llud", x->availFiles);
  3423. fmtprint(fmt, "\n");
  3424. fmtprint(fmt, "\t%s=", "invarSec");
  3425. fmtprint(fmt, "%ud", x->invarSec);
  3426. fmtprint(fmt, "\n");
  3427. break;
  3428. }
  3429. }
  3430. uint
  3431. nfs3RFsStatSize(Nfs3RFsStat *x)
  3432. {
  3433. uint a;
  3434. USED(x);
  3435. a = 0 + 4 + 4;
  3436. switch(x->haveAttr){
  3437. case 1:
  3438. a = a + nfs3AttrSize(&x->attr);
  3439. break;
  3440. }
  3441. switch(x->status){
  3442. case Nfs3Ok:
  3443. a = a + 8 + 8 + 8 + 8 + 8 + 8 + 4;
  3444. break;
  3445. }
  3446. return a;
  3447. }
  3448. int
  3449. nfs3RFsStatPack(uint8_t *a, uint8_t *ea, uint8_t **pa, Nfs3RFsStat *x)
  3450. {
  3451. int i;
  3452. if(i=x->status, sunEnumPack(a, ea, &a, &i) < 0) goto Err;
  3453. if(sunUint1Pack(a, ea, &a, &x->haveAttr) < 0) goto Err;
  3454. switch(x->haveAttr){
  3455. case 1:
  3456. if(nfs3AttrPack(a, ea, &a, &x->attr) < 0) goto Err;
  3457. break;
  3458. }
  3459. switch(x->status){
  3460. case Nfs3Ok:
  3461. if(sunUint64Pack(a, ea, &a, &x->totalBytes) < 0) goto Err;
  3462. if(sunUint64Pack(a, ea, &a, &x->freeBytes) < 0) goto Err;
  3463. if(sunUint64Pack(a, ea, &a, &x->availBytes) < 0) goto Err;
  3464. if(sunUint64Pack(a, ea, &a, &x->totalFiles) < 0) goto Err;
  3465. if(sunUint64Pack(a, ea, &a, &x->freeFiles) < 0) goto Err;
  3466. if(sunUint64Pack(a, ea, &a, &x->availFiles) < 0) goto Err;
  3467. if(sunUint32Pack(a, ea, &a, &x->invarSec) < 0) goto Err;
  3468. break;
  3469. }
  3470. *pa = a;
  3471. return 0;
  3472. Err:
  3473. *pa = ea;
  3474. return -1;
  3475. }
  3476. int
  3477. nfs3RFsStatUnpack(uint8_t *a, uint8_t *ea, uint8_t **pa, Nfs3RFsStat *x)
  3478. {
  3479. int i;
  3480. if(sunEnumUnpack(a, ea, &a, &i) < 0) goto Err; x->status = i;
  3481. if(sunUint1Unpack(a, ea, &a, &x->haveAttr) < 0) goto Err;
  3482. switch(x->haveAttr){
  3483. case 1:
  3484. if(nfs3AttrUnpack(a, ea, &a, &x->attr) < 0) goto Err;
  3485. break;
  3486. }
  3487. switch(x->status){
  3488. case Nfs3Ok:
  3489. if(sunUint64Unpack(a, ea, &a, &x->totalBytes) < 0) goto Err;
  3490. if(sunUint64Unpack(a, ea, &a, &x->freeBytes) < 0) goto Err;
  3491. if(sunUint64Unpack(a, ea, &a, &x->availBytes) < 0) goto Err;
  3492. if(sunUint64Unpack(a, ea, &a, &x->totalFiles) < 0) goto Err;
  3493. if(sunUint64Unpack(a, ea, &a, &x->freeFiles) < 0) goto Err;
  3494. if(sunUint64Unpack(a, ea, &a, &x->availFiles) < 0) goto Err;
  3495. if(sunUint32Unpack(a, ea, &a, &x->invarSec) < 0) goto Err;
  3496. break;
  3497. }
  3498. *pa = a;
  3499. return 0;
  3500. Err:
  3501. *pa = ea;
  3502. return -1;
  3503. }
  3504. void
  3505. nfs3TFsInfoPrint(Fmt *fmt, Nfs3TFsInfo *x)
  3506. {
  3507. fmtprint(fmt, "%s\n", "Nfs3TFsInfo");
  3508. fmtprint(fmt, "\t%s=", "handle");
  3509. nfs3HandlePrint(fmt, &x->handle);
  3510. fmtprint(fmt, "\n");
  3511. }
  3512. uint
  3513. nfs3TFsInfoSize(Nfs3TFsInfo *x)
  3514. {
  3515. uint a;
  3516. USED(x);
  3517. a = 0 + nfs3HandleSize(&x->handle);
  3518. return a;
  3519. }
  3520. int
  3521. nfs3TFsInfoPack(uint8_t *a, uint8_t *ea, uint8_t **pa, Nfs3TFsInfo *x)
  3522. {
  3523. if(nfs3HandlePack(a, ea, &a, &x->handle) < 0) goto Err;
  3524. *pa = a;
  3525. return 0;
  3526. Err:
  3527. *pa = ea;
  3528. return -1;
  3529. }
  3530. int
  3531. nfs3TFsInfoUnpack(uint8_t *a, uint8_t *ea, uint8_t **pa, Nfs3TFsInfo *x)
  3532. {
  3533. if(nfs3HandleUnpack(a, ea, &a, &x->handle) < 0) goto Err;
  3534. *pa = a;
  3535. return 0;
  3536. Err:
  3537. *pa = ea;
  3538. return -1;
  3539. }
  3540. void
  3541. nfs3RFsInfoPrint(Fmt *fmt, Nfs3RFsInfo *x)
  3542. {
  3543. fmtprint(fmt, "%s\n", "Nfs3RFsInfo");
  3544. fmtprint(fmt, "\t%s=", "status");
  3545. fmtprint(fmt, "%s", nfs3StatusStr(x->status));
  3546. fmtprint(fmt, "\n");
  3547. fmtprint(fmt, "\t%s=", "haveAttr");
  3548. fmtprint(fmt, "%d", x->haveAttr);
  3549. fmtprint(fmt, "\n");
  3550. switch(x->haveAttr){
  3551. case 1:
  3552. fmtprint(fmt, "\t%s=", "attr");
  3553. nfs3AttrPrint(fmt, &x->attr);
  3554. fmtprint(fmt, "\n");
  3555. break;
  3556. }
  3557. switch(x->status){
  3558. case Nfs3Ok:
  3559. fmtprint(fmt, "\t%s=", "readMax");
  3560. fmtprint(fmt, "%ud", x->readMax);
  3561. fmtprint(fmt, "\n");
  3562. fmtprint(fmt, "\t%s=", "readPref");
  3563. fmtprint(fmt, "%ud", x->readPref);
  3564. fmtprint(fmt, "\n");
  3565. fmtprint(fmt, "\t%s=", "readMult");
  3566. fmtprint(fmt, "%ud", x->readMult);
  3567. fmtprint(fmt, "\n");
  3568. fmtprint(fmt, "\t%s=", "writeMax");
  3569. fmtprint(fmt, "%ud", x->writeMax);
  3570. fmtprint(fmt, "\n");
  3571. fmtprint(fmt, "\t%s=", "writePref");
  3572. fmtprint(fmt, "%ud", x->writePref);
  3573. fmtprint(fmt, "\n");
  3574. fmtprint(fmt, "\t%s=", "writeMult");
  3575. fmtprint(fmt, "%ud", x->writeMult);
  3576. fmtprint(fmt, "\n");
  3577. fmtprint(fmt, "\t%s=", "readDirPref");
  3578. fmtprint(fmt, "%ud", x->readDirPref);
  3579. fmtprint(fmt, "\n");
  3580. fmtprint(fmt, "\t%s=", "maxFileSize");
  3581. fmtprint(fmt, "%llud", x->maxFileSize);
  3582. fmtprint(fmt, "\n");
  3583. fmtprint(fmt, "\t%s=", "timePrec");
  3584. nfs3TimePrint(fmt, &x->timePrec);
  3585. fmtprint(fmt, "\n");
  3586. fmtprint(fmt, "\t%s=", "flags");
  3587. fmtprint(fmt, "%ud", x->flags);
  3588. fmtprint(fmt, "\n");
  3589. break;
  3590. }
  3591. }
  3592. uint
  3593. nfs3RFsInfoSize(Nfs3RFsInfo *x)
  3594. {
  3595. uint a;
  3596. USED(x);
  3597. a = 0 + 4 + 4;
  3598. switch(x->haveAttr){
  3599. case 1:
  3600. a = a + nfs3AttrSize(&x->attr);
  3601. break;
  3602. }
  3603. switch(x->status){
  3604. case Nfs3Ok:
  3605. a = a + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 8 + nfs3TimeSize(&x->timePrec) + 4;
  3606. break;
  3607. }
  3608. return a;
  3609. }
  3610. int
  3611. nfs3RFsInfoPack(uint8_t *a, uint8_t *ea, uint8_t **pa, Nfs3RFsInfo *x)
  3612. {
  3613. int i;
  3614. if(i=x->status, sunEnumPack(a, ea, &a, &i) < 0) goto Err;
  3615. if(sunUint1Pack(a, ea, &a, &x->haveAttr) < 0) goto Err;
  3616. switch(x->haveAttr){
  3617. case 1:
  3618. if(nfs3AttrPack(a, ea, &a, &x->attr) < 0) goto Err;
  3619. break;
  3620. }
  3621. switch(x->status){
  3622. case Nfs3Ok:
  3623. if(sunUint32Pack(a, ea, &a, &x->readMax) < 0) goto Err;
  3624. if(sunUint32Pack(a, ea, &a, &x->readPref) < 0) goto Err;
  3625. if(sunUint32Pack(a, ea, &a, &x->readMult) < 0) goto Err;
  3626. if(sunUint32Pack(a, ea, &a, &x->writeMax) < 0) goto Err;
  3627. if(sunUint32Pack(a, ea, &a, &x->writePref) < 0) goto Err;
  3628. if(sunUint32Pack(a, ea, &a, &x->writeMult) < 0) goto Err;
  3629. if(sunUint32Pack(a, ea, &a, &x->readDirPref) < 0) goto Err;
  3630. if(sunUint64Pack(a, ea, &a, &x->maxFileSize) < 0) goto Err;
  3631. if(nfs3TimePack(a, ea, &a, &x->timePrec) < 0) goto Err;
  3632. if(sunUint32Pack(a, ea, &a, &x->flags) < 0) goto Err;
  3633. break;
  3634. }
  3635. *pa = a;
  3636. return 0;
  3637. Err:
  3638. *pa = ea;
  3639. return -1;
  3640. }
  3641. int
  3642. nfs3RFsInfoUnpack(uint8_t *a, uint8_t *ea, uint8_t **pa, Nfs3RFsInfo *x)
  3643. {
  3644. int i;
  3645. if(sunEnumUnpack(a, ea, &a, &i) < 0) goto Err; x->status = i;
  3646. if(sunUint1Unpack(a, ea, &a, &x->haveAttr) < 0) goto Err;
  3647. switch(x->haveAttr){
  3648. case 1:
  3649. if(nfs3AttrUnpack(a, ea, &a, &x->attr) < 0) goto Err;
  3650. break;
  3651. }
  3652. switch(x->status){
  3653. case Nfs3Ok:
  3654. if(sunUint32Unpack(a, ea, &a, &x->readMax) < 0) goto Err;
  3655. if(sunUint32Unpack(a, ea, &a, &x->readPref) < 0) goto Err;
  3656. if(sunUint32Unpack(a, ea, &a, &x->readMult) < 0) goto Err;
  3657. if(sunUint32Unpack(a, ea, &a, &x->writeMax) < 0) goto Err;
  3658. if(sunUint32Unpack(a, ea, &a, &x->writePref) < 0) goto Err;
  3659. if(sunUint32Unpack(a, ea, &a, &x->writeMult) < 0) goto Err;
  3660. if(sunUint32Unpack(a, ea, &a, &x->readDirPref) < 0) goto Err;
  3661. if(sunUint64Unpack(a, ea, &a, &x->maxFileSize) < 0) goto Err;
  3662. if(nfs3TimeUnpack(a, ea, &a, &x->timePrec) < 0) goto Err;
  3663. if(sunUint32Unpack(a, ea, &a, &x->flags) < 0) goto Err;
  3664. break;
  3665. }
  3666. *pa = a;
  3667. return 0;
  3668. Err:
  3669. *pa = ea;
  3670. return -1;
  3671. }
  3672. void
  3673. nfs3TPathconfPrint(Fmt *fmt, Nfs3TPathconf *x)
  3674. {
  3675. fmtprint(fmt, "%s\n", "Nfs3TPathconf");
  3676. fmtprint(fmt, "\t%s=", "handle");
  3677. nfs3HandlePrint(fmt, &x->handle);
  3678. fmtprint(fmt, "\n");
  3679. }
  3680. uint
  3681. nfs3TPathconfSize(Nfs3TPathconf *x)
  3682. {
  3683. uint a;
  3684. USED(x);
  3685. a = 0 + nfs3HandleSize(&x->handle);
  3686. return a;
  3687. }
  3688. int
  3689. nfs3TPathconfPack(uint8_t *a, uint8_t *ea, uint8_t **pa, Nfs3TPathconf *x)
  3690. {
  3691. if(nfs3HandlePack(a, ea, &a, &x->handle) < 0) goto Err;
  3692. *pa = a;
  3693. return 0;
  3694. Err:
  3695. *pa = ea;
  3696. return -1;
  3697. }
  3698. int
  3699. nfs3TPathconfUnpack(uint8_t *a, uint8_t *ea, uint8_t **pa, Nfs3TPathconf *x)
  3700. {
  3701. if(nfs3HandleUnpack(a, ea, &a, &x->handle) < 0) goto Err;
  3702. *pa = a;
  3703. return 0;
  3704. Err:
  3705. *pa = ea;
  3706. return -1;
  3707. }
  3708. void
  3709. nfs3RPathconfPrint(Fmt *fmt, Nfs3RPathconf *x)
  3710. {
  3711. fmtprint(fmt, "%s\n", "Nfs3RPathconf");
  3712. fmtprint(fmt, "\t%s=", "status");
  3713. fmtprint(fmt, "%s", nfs3StatusStr(x->status));
  3714. fmtprint(fmt, "\n");
  3715. fmtprint(fmt, "\t%s=", "haveAttr");
  3716. fmtprint(fmt, "%d", x->haveAttr);
  3717. fmtprint(fmt, "\n");
  3718. switch(x->haveAttr){
  3719. case 1:
  3720. fmtprint(fmt, "\t%s=", "attr");
  3721. nfs3AttrPrint(fmt, &x->attr);
  3722. fmtprint(fmt, "\n");
  3723. break;
  3724. }
  3725. switch(x->status){
  3726. case Nfs3Ok:
  3727. fmtprint(fmt, "\t%s=", "maxLink");
  3728. fmtprint(fmt, "%ud", x->maxLink);
  3729. fmtprint(fmt, "\n");
  3730. fmtprint(fmt, "\t%s=", "maxName");
  3731. fmtprint(fmt, "%ud", x->maxName);
  3732. fmtprint(fmt, "\n");
  3733. fmtprint(fmt, "\t%s=", "noTrunc");
  3734. fmtprint(fmt, "%d", x->noTrunc);
  3735. fmtprint(fmt, "\n");
  3736. fmtprint(fmt, "\t%s=", "chownRestricted");
  3737. fmtprint(fmt, "%d", x->chownRestricted);
  3738. fmtprint(fmt, "\n");
  3739. fmtprint(fmt, "\t%s=", "caseInsensitive");
  3740. fmtprint(fmt, "%d", x->caseInsensitive);
  3741. fmtprint(fmt, "\n");
  3742. fmtprint(fmt, "\t%s=", "casePreserving");
  3743. fmtprint(fmt, "%d", x->casePreserving);
  3744. fmtprint(fmt, "\n");
  3745. break;
  3746. }
  3747. }
  3748. uint
  3749. nfs3RPathconfSize(Nfs3RPathconf *x)
  3750. {
  3751. uint a;
  3752. USED(x);
  3753. a = 0 + 4 + 4;
  3754. switch(x->haveAttr){
  3755. case 1:
  3756. a = a + nfs3AttrSize(&x->attr);
  3757. break;
  3758. }
  3759. switch(x->status){
  3760. case Nfs3Ok:
  3761. a = a + 4 + 4 + 4 + 4 + 4 + 4;
  3762. break;
  3763. }
  3764. return a;
  3765. }
  3766. int
  3767. nfs3RPathconfPack(uint8_t *a, uint8_t *ea, uint8_t **pa, Nfs3RPathconf *x)
  3768. {
  3769. int i;
  3770. if(i=x->status, sunEnumPack(a, ea, &a, &i) < 0) goto Err;
  3771. if(sunUint1Pack(a, ea, &a, &x->haveAttr) < 0) goto Err;
  3772. switch(x->haveAttr){
  3773. case 1:
  3774. if(nfs3AttrPack(a, ea, &a, &x->attr) < 0) goto Err;
  3775. break;
  3776. }
  3777. switch(x->status){
  3778. case Nfs3Ok:
  3779. if(sunUint32Pack(a, ea, &a, &x->maxLink) < 0) goto Err;
  3780. if(sunUint32Pack(a, ea, &a, &x->maxName) < 0) goto Err;
  3781. if(sunUint1Pack(a, ea, &a, &x->noTrunc) < 0) goto Err;
  3782. if(sunUint1Pack(a, ea, &a, &x->chownRestricted) < 0) goto Err;
  3783. if(sunUint1Pack(a, ea, &a, &x->caseInsensitive) < 0) goto Err;
  3784. if(sunUint1Pack(a, ea, &a, &x->casePreserving) < 0) goto Err;
  3785. break;
  3786. }
  3787. *pa = a;
  3788. return 0;
  3789. Err:
  3790. *pa = ea;
  3791. return -1;
  3792. }
  3793. int
  3794. nfs3RPathconfUnpack(uint8_t *a, uint8_t *ea, uint8_t **pa, Nfs3RPathconf *x)
  3795. {
  3796. int i;
  3797. if(sunEnumUnpack(a, ea, &a, &i) < 0) goto Err; x->status = i;
  3798. if(sunUint1Unpack(a, ea, &a, &x->haveAttr) < 0) goto Err;
  3799. switch(x->haveAttr){
  3800. case 1:
  3801. if(nfs3AttrUnpack(a, ea, &a, &x->attr) < 0) goto Err;
  3802. break;
  3803. }
  3804. switch(x->status){
  3805. case Nfs3Ok:
  3806. if(sunUint32Unpack(a, ea, &a, &x->maxLink) < 0) goto Err;
  3807. if(sunUint32Unpack(a, ea, &a, &x->maxName) < 0) goto Err;
  3808. if(sunUint1Unpack(a, ea, &a, &x->noTrunc) < 0) goto Err;
  3809. if(sunUint1Unpack(a, ea, &a, &x->chownRestricted) < 0) goto Err;
  3810. if(sunUint1Unpack(a, ea, &a, &x->caseInsensitive) < 0) goto Err;
  3811. if(sunUint1Unpack(a, ea, &a, &x->casePreserving) < 0) goto Err;
  3812. break;
  3813. }
  3814. *pa = a;
  3815. return 0;
  3816. Err:
  3817. *pa = ea;
  3818. return -1;
  3819. }
  3820. void
  3821. nfs3TCommitPrint(Fmt *fmt, Nfs3TCommit *x)
  3822. {
  3823. fmtprint(fmt, "%s\n", "Nfs3TCommit");
  3824. fmtprint(fmt, "\t%s=", "handle");
  3825. nfs3HandlePrint(fmt, &x->handle);
  3826. fmtprint(fmt, "\n");
  3827. fmtprint(fmt, "\t%s=", "offset");
  3828. fmtprint(fmt, "%llud", x->offset);
  3829. fmtprint(fmt, "\n");
  3830. fmtprint(fmt, "\t%s=", "count");
  3831. fmtprint(fmt, "%ud", x->count);
  3832. fmtprint(fmt, "\n");
  3833. }
  3834. uint
  3835. nfs3TCommitSize(Nfs3TCommit *x)
  3836. {
  3837. uint a;
  3838. USED(x);
  3839. a = 0 + nfs3HandleSize(&x->handle) + 8 + 4;
  3840. return a;
  3841. }
  3842. int
  3843. nfs3TCommitPack(uint8_t *a, uint8_t *ea, uint8_t **pa, Nfs3TCommit *x)
  3844. {
  3845. if(nfs3HandlePack(a, ea, &a, &x->handle) < 0) goto Err;
  3846. if(sunUint64Pack(a, ea, &a, &x->offset) < 0) goto Err;
  3847. if(sunUint32Pack(a, ea, &a, &x->count) < 0) goto Err;
  3848. *pa = a;
  3849. return 0;
  3850. Err:
  3851. *pa = ea;
  3852. return -1;
  3853. }
  3854. int
  3855. nfs3TCommitUnpack(uint8_t *a, uint8_t *ea, uint8_t **pa, Nfs3TCommit *x)
  3856. {
  3857. if(nfs3HandleUnpack(a, ea, &a, &x->handle) < 0) goto Err;
  3858. if(sunUint64Unpack(a, ea, &a, &x->offset) < 0) goto Err;
  3859. if(sunUint32Unpack(a, ea, &a, &x->count) < 0) goto Err;
  3860. *pa = a;
  3861. return 0;
  3862. Err:
  3863. *pa = ea;
  3864. return -1;
  3865. }
  3866. void
  3867. nfs3RCommitPrint(Fmt *fmt, Nfs3RCommit *x)
  3868. {
  3869. fmtprint(fmt, "%s\n", "Nfs3RCommit");
  3870. fmtprint(fmt, "\t%s=", "status");
  3871. fmtprint(fmt, "%s", nfs3StatusStr(x->status));
  3872. fmtprint(fmt, "\n");
  3873. fmtprint(fmt, "\t%s=", "wcc");
  3874. nfs3WccPrint(fmt, &x->wcc);
  3875. fmtprint(fmt, "\n");
  3876. switch(x->status){
  3877. case Nfs3Ok:
  3878. fmtprint(fmt, "\t%s=", "verf");
  3879. fmtprint(fmt, "%.*H", Nfs3WriteVerfSize, x->verf);
  3880. fmtprint(fmt, "\n");
  3881. break;
  3882. }
  3883. }
  3884. uint
  3885. nfs3RCommitSize(Nfs3RCommit *x)
  3886. {
  3887. uint a;
  3888. USED(x);
  3889. a = 0 + 4 + nfs3WccSize(&x->wcc);
  3890. switch(x->status){
  3891. case Nfs3Ok:
  3892. a = a + Nfs3WriteVerfSize;
  3893. break;
  3894. }
  3895. return a;
  3896. }
  3897. int
  3898. nfs3RCommitPack(uint8_t *a, uint8_t *ea, uint8_t **pa, Nfs3RCommit *x)
  3899. {
  3900. int i;
  3901. if(i=x->status, sunEnumPack(a, ea, &a, &i) < 0) goto Err;
  3902. if(nfs3WccPack(a, ea, &a, &x->wcc) < 0) goto Err;
  3903. switch(x->status){
  3904. case Nfs3Ok:
  3905. if(sunFixedOpaquePack(a, ea, &a, x->verf, Nfs3WriteVerfSize) < 0) goto Err;
  3906. break;
  3907. }
  3908. *pa = a;
  3909. return 0;
  3910. Err:
  3911. *pa = ea;
  3912. return -1;
  3913. }
  3914. int
  3915. nfs3RCommitUnpack(uint8_t *a, uint8_t *ea, uint8_t **pa, Nfs3RCommit *x)
  3916. {
  3917. int i;
  3918. if(sunEnumUnpack(a, ea, &a, &i) < 0) goto Err; x->status = i;
  3919. if(nfs3WccUnpack(a, ea, &a, &x->wcc) < 0) goto Err;
  3920. switch(x->status){
  3921. case Nfs3Ok:
  3922. if(sunFixedOpaqueUnpack(a, ea, &a, x->verf, Nfs3WriteVerfSize) < 0) goto Err;
  3923. break;
  3924. }
  3925. *pa = a;
  3926. return 0;
  3927. Err:
  3928. *pa = ea;
  3929. return -1;
  3930. }
  3931. typedef int (*P)(uint8_t*, uint8_t*, uint8_t**, SunCall*);
  3932. typedef void (*F)(Fmt*, SunCall*);
  3933. typedef uint (*S)(SunCall*);
  3934. static SunProc proc[] = {
  3935. (P)nfs3TNullPack, (P)nfs3TNullUnpack, (S)nfs3TNullSize, (F)nfs3TNullPrint, sizeof(Nfs3TNull),
  3936. (P)nfs3RNullPack, (P)nfs3RNullUnpack, (S)nfs3RNullSize, (F)nfs3RNullPrint, sizeof(Nfs3RNull),
  3937. (P)nfs3TGetattrPack, (P)nfs3TGetattrUnpack, (S)nfs3TGetattrSize, (F)nfs3TGetattrPrint, sizeof(Nfs3TGetattr),
  3938. (P)nfs3RGetattrPack, (P)nfs3RGetattrUnpack, (S)nfs3RGetattrSize, (F)nfs3RGetattrPrint, sizeof(Nfs3RGetattr),
  3939. (P)nfs3TSetattrPack, (P)nfs3TSetattrUnpack, (S)nfs3TSetattrSize, (F)nfs3TSetattrPrint, sizeof(Nfs3TSetattr),
  3940. (P)nfs3RSetattrPack, (P)nfs3RSetattrUnpack, (S)nfs3RSetattrSize, (F)nfs3RSetattrPrint, sizeof(Nfs3RSetattr),
  3941. (P)nfs3TLookupPack, (P)nfs3TLookupUnpack, (S)nfs3TLookupSize, (F)nfs3TLookupPrint, sizeof(Nfs3TLookup),
  3942. (P)nfs3RLookupPack, (P)nfs3RLookupUnpack, (S)nfs3RLookupSize, (F)nfs3RLookupPrint, sizeof(Nfs3RLookup),
  3943. (P)nfs3TAccessPack, (P)nfs3TAccessUnpack, (S)nfs3TAccessSize, (F)nfs3TAccessPrint, sizeof(Nfs3TAccess),
  3944. (P)nfs3RAccessPack, (P)nfs3RAccessUnpack, (S)nfs3RAccessSize, (F)nfs3RAccessPrint, sizeof(Nfs3RAccess),
  3945. (P)nfs3TReadlinkPack, (P)nfs3TReadlinkUnpack, (S)nfs3TReadlinkSize, (F)nfs3TReadlinkPrint, sizeof(Nfs3TReadlink),
  3946. (P)nfs3RReadlinkPack, (P)nfs3RReadlinkUnpack, (S)nfs3RReadlinkSize, (F)nfs3RReadlinkPrint, sizeof(Nfs3RReadlink),
  3947. (P)nfs3TReadPack, (P)nfs3TReadUnpack, (S)nfs3TReadSize, (F)nfs3TReadPrint, sizeof(Nfs3TRead),
  3948. (P)nfs3RReadPack, (P)nfs3RReadUnpack, (S)nfs3RReadSize, (F)nfs3RReadPrint, sizeof(Nfs3RRead),
  3949. (P)nfs3TWritePack, (P)nfs3TWriteUnpack, (S)nfs3TWriteSize, (F)nfs3TWritePrint, sizeof(Nfs3TWrite),
  3950. (P)nfs3RWritePack, (P)nfs3RWriteUnpack, (S)nfs3RWriteSize, (F)nfs3RWritePrint, sizeof(Nfs3RWrite),
  3951. (P)nfs3TCreatePack, (P)nfs3TCreateUnpack, (S)nfs3TCreateSize, (F)nfs3TCreatePrint, sizeof(Nfs3TCreate),
  3952. (P)nfs3RCreatePack, (P)nfs3RCreateUnpack, (S)nfs3RCreateSize, (F)nfs3RCreatePrint, sizeof(Nfs3RCreate),
  3953. (P)nfs3TMkdirPack, (P)nfs3TMkdirUnpack, (S)nfs3TMkdirSize, (F)nfs3TMkdirPrint, sizeof(Nfs3TMkdir),
  3954. (P)nfs3RMkdirPack, (P)nfs3RMkdirUnpack, (S)nfs3RMkdirSize, (F)nfs3RMkdirPrint, sizeof(Nfs3RMkdir),
  3955. (P)nfs3TSymlinkPack, (P)nfs3TSymlinkUnpack, (S)nfs3TSymlinkSize, (F)nfs3TSymlinkPrint, sizeof(Nfs3TSymlink),
  3956. (P)nfs3RSymlinkPack, (P)nfs3RSymlinkUnpack, (S)nfs3RSymlinkSize, (F)nfs3RSymlinkPrint, sizeof(Nfs3RSymlink),
  3957. (P)nfs3TMknodPack, (P)nfs3TMknodUnpack, (S)nfs3TMknodSize, (F)nfs3TMknodPrint, sizeof(Nfs3TMknod),
  3958. (P)nfs3RMknodPack, (P)nfs3RMknodUnpack, (S)nfs3RMknodSize, (F)nfs3RMknodPrint, sizeof(Nfs3RMknod),
  3959. (P)nfs3TRemovePack, (P)nfs3TRemoveUnpack, (S)nfs3TRemoveSize, (F)nfs3TRemovePrint, sizeof(Nfs3TRemove),
  3960. (P)nfs3RRemovePack, (P)nfs3RRemoveUnpack, (S)nfs3RRemoveSize, (F)nfs3RRemovePrint, sizeof(Nfs3RRemove),
  3961. (P)nfs3TRmdirPack, (P)nfs3TRmdirUnpack, (S)nfs3TRmdirSize, (F)nfs3TRmdirPrint, sizeof(Nfs3TRmdir),
  3962. (P)nfs3RRmdirPack, (P)nfs3RRmdirUnpack, (S)nfs3RRmdirSize, (F)nfs3RRmdirPrint, sizeof(Nfs3RRmdir),
  3963. (P)nfs3TRenamePack, (P)nfs3TRenameUnpack, (S)nfs3TRenameSize, (F)nfs3TRenamePrint, sizeof(Nfs3TRename),
  3964. (P)nfs3RRenamePack, (P)nfs3RRenameUnpack, (S)nfs3RRenameSize, (F)nfs3RRenamePrint, sizeof(Nfs3RRename),
  3965. (P)nfs3TLinkPack, (P)nfs3TLinkUnpack, (S)nfs3TLinkSize, (F)nfs3TLinkPrint, sizeof(Nfs3TLink),
  3966. (P)nfs3RLinkPack, (P)nfs3RLinkUnpack, (S)nfs3RLinkSize, (F)nfs3RLinkPrint, sizeof(Nfs3RLink),
  3967. (P)nfs3TReadDirPack, (P)nfs3TReadDirUnpack, (S)nfs3TReadDirSize, (F)nfs3TReadDirPrint, sizeof(Nfs3TReadDir),
  3968. (P)nfs3RReadDirPack, (P)nfs3RReadDirUnpack, (S)nfs3RReadDirSize, (F)nfs3RReadDirPrint, sizeof(Nfs3RReadDir),
  3969. (P)nfs3TReadDirPlusPack, (P)nfs3TReadDirPlusUnpack, (S)nfs3TReadDirPlusSize, (F)nfs3TReadDirPlusPrint, sizeof(Nfs3TReadDirPlus),
  3970. (P)nfs3RReadDirPlusPack, (P)nfs3RReadDirPlusUnpack, (S)nfs3RReadDirPlusSize, (F)nfs3RReadDirPlusPrint, sizeof(Nfs3RReadDirPlus),
  3971. (P)nfs3TFsStatPack, (P)nfs3TFsStatUnpack, (S)nfs3TFsStatSize, (F)nfs3TFsStatPrint, sizeof(Nfs3TFsStat),
  3972. (P)nfs3RFsStatPack, (P)nfs3RFsStatUnpack, (S)nfs3RFsStatSize, (F)nfs3RFsStatPrint, sizeof(Nfs3RFsStat),
  3973. (P)nfs3TFsInfoPack, (P)nfs3TFsInfoUnpack, (S)nfs3TFsInfoSize, (F)nfs3TFsInfoPrint, sizeof(Nfs3TFsInfo),
  3974. (P)nfs3RFsInfoPack, (P)nfs3RFsInfoUnpack, (S)nfs3RFsInfoSize, (F)nfs3RFsInfoPrint, sizeof(Nfs3RFsInfo),
  3975. (P)nfs3TPathconfPack, (P)nfs3TPathconfUnpack, (S)nfs3TPathconfSize, (F)nfs3TPathconfPrint, sizeof(Nfs3TPathconf),
  3976. (P)nfs3RPathconfPack, (P)nfs3RPathconfUnpack, (S)nfs3RPathconfSize, (F)nfs3RPathconfPrint, sizeof(Nfs3RPathconf),
  3977. (P)nfs3TCommitPack, (P)nfs3TCommitUnpack, (S)nfs3TCommitSize, (F)nfs3TCommitPrint, sizeof(Nfs3TCommit),
  3978. (P)nfs3RCommitPack, (P)nfs3RCommitUnpack, (S)nfs3RCommitSize, (F)nfs3RCommitPrint, sizeof(Nfs3RCommit)
  3979. };
  3980. SunProg nfs3Prog =
  3981. {
  3982. Nfs3Program,
  3983. Nfs3Version,
  3984. proc,
  3985. nelem(proc),
  3986. };