Lines Matching +full:num +full:- +full:transfer +full:- +full:bits
29 * Based on libixp code: ©2007-2010 Kris Maglione <maglione.k at Gmail>
62 * Transfer data from incoming request, or to outgoing response,
66 * just len itself, converted to signed), or -1 if we ran out of space.
68 * Note that if we return -1, subsequent l9p_iov_io() calls with
69 * the same (and not-reset) msg and len > 0 will also return -1.
83 if (msg->lm_cursor_iov >= msg->lm_niov) in l9p_iov_io()
84 return (-1); in l9p_iov_io()
89 size_t idx = msg->lm_cursor_iov; in l9p_iov_io()
90 size_t space = msg->lm_iov[idx].iov_len - msg->lm_cursor_offset; in l9p_iov_io()
93 if (msg->lm_mode == L9P_PACK) { in l9p_iov_io()
94 memcpy((char *)msg->lm_iov[idx].iov_base + in l9p_iov_io()
95 msg->lm_cursor_offset, (char *)buffer + done, in l9p_iov_io()
99 if (msg->lm_mode == L9P_UNPACK) { in l9p_iov_io()
101 (char *)msg->lm_iov[idx].iov_base + in l9p_iov_io()
102 msg->lm_cursor_offset, towrite); in l9p_iov_io()
105 msg->lm_cursor_offset += towrite; in l9p_iov_io()
108 left -= towrite; in l9p_iov_io()
110 if (space - towrite == 0) { in l9p_iov_io()
112 msg->lm_cursor_iov++; in l9p_iov_io()
113 msg->lm_cursor_offset = 0; in l9p_iov_io()
115 if (msg->lm_cursor_iov >= msg->lm_niov && left > 0) in l9p_iov_io()
116 return (-1); in l9p_iov_io()
120 msg->lm_size += done; in l9p_iov_io()
125 * Pack or unpack a byte (8 bits).
127 * Returns 1 (success, 1 byte) or -1 (error).
137 * Pack or unpack 16-bit value.
139 * Returns 2 or -1.
147 * for all of this foolery on little-endian hosts, in l9p_pu16()
154 if (msg->lm_mode == L9P_PACK) { in l9p_pu16()
167 * Pack or unpack 32-bit value.
169 * Returns 4 or -1.
178 if (msg->lm_mode == L9P_PACK) { in l9p_pu32()
191 * Pack or unpack 64-bit value.
193 * Returns 8 or -1.
202 if (msg->lm_mode == L9P_PACK) { in l9p_pu64()
215 * Pack or unpack a string, encoded as 2-byte length followed by
219 * When unpacking, this allocates a new string (NUL-terminated).
221 * Return -1 on error (not space, or failed to allocate string,
232 if (msg->lm_mode == L9P_PACK) in l9p_pustring()
236 return (-1); in l9p_pustring()
238 if (msg->lm_mode == L9P_UNPACK) { in l9p_pustring()
241 return (-1); in l9p_pustring()
245 return (-1); in l9p_pustring()
247 if (msg->lm_mode == L9P_UNPACK) { in l9p_pustring()
255 return (-1); in l9p_pustring()
262 * Pack or unpack a number (*num) of strings (but at most max of
267 * was reduced, the original *num value is unchanged; only the
268 * wire-format number is reduced. If unpacking and the input
269 * number of strings exceeds the max, the incoming *num is reduced
272 * Returns -1 on error.
275 l9p_pustrings(struct l9p_message *msg, uint16_t *num, char **strings, in l9p_pustrings() argument
282 if (msg->lm_mode == L9P_PACK) { in l9p_pustrings()
283 lim = *num; in l9p_pustrings()
289 r = l9p_pu16(msg, num); in l9p_pustrings()
290 lim = *num; in l9p_pustrings()
292 *num = (uint16_t)(lim = max); in l9p_pustrings()
295 return (-1); in l9p_pustrings()
300 return (-1); in l9p_pustrings()
311 * Returns 13 (success) or -1 (error).
319 if (msg->lm_mode == L9P_PACK) { in l9p_puqid()
320 type = qid->type; in l9p_puqid()
324 qid->type = type; in l9p_puqid()
327 r = l9p_pu32(msg, &qid->version); in l9p_puqid()
329 r = l9p_pu64(msg, &qid->path); in l9p_puqid()
335 * Pack or unpack *num qids.
337 * Returns 2 + 13 * *num (after possibly setting *num), or -1 on error.
340 l9p_puqids(struct l9p_message *msg, uint16_t *num, struct l9p_qid *qids) in l9p_puqids() argument
345 r = l9p_pu16(msg, num); in l9p_puqids()
349 if (*num > L9P_MAX_WELEM) in l9p_puqids()
350 return (-1); in l9p_puqids()
352 for (i = 0, lim = *num; i < lim; i++) { in l9p_puqids()
355 return (-1); in l9p_puqids()
367 * Returns the number of bytes packed/unpacked, or -1 on error.
376 /* The on-wire size field excludes the size of the size field. */ in l9p_pustat()
377 if (msg->lm_mode == L9P_PACK) in l9p_pustat()
378 size = l9p_sizeof_stat(stat, version) - 2; in l9p_pustat()
381 r += l9p_pu16(msg, &stat->type); in l9p_pustat()
382 r += l9p_pu32(msg, &stat->dev); in l9p_pustat()
383 r += l9p_puqid(msg, &stat->qid); in l9p_pustat()
384 r += l9p_pu32(msg, &stat->mode); in l9p_pustat()
385 r += l9p_pu32(msg, &stat->atime); in l9p_pustat()
386 r += l9p_pu32(msg, &stat->mtime); in l9p_pustat()
387 r += l9p_pu64(msg, &stat->length); in l9p_pustat()
388 r += l9p_pustring(msg, &stat->name); in l9p_pustat()
389 r += l9p_pustring(msg, &stat->uid); in l9p_pustat()
390 r += l9p_pustring(msg, &stat->gid); in l9p_pustat()
391 r += l9p_pustring(msg, &stat->muid); in l9p_pustat()
394 r += l9p_pustring(msg, &stat->extension); in l9p_pustat()
395 r += l9p_pu32(msg, &stat->n_uid); in l9p_pustat()
396 r += l9p_pu32(msg, &stat->n_gid); in l9p_pustat()
397 r += l9p_pu32(msg, &stat->n_muid); in l9p_pustat()
401 return (-1); in l9p_pustat()
407 * Pack or unpack a variable-length dirent.
412 * Returns the wire-format length, or -1 if we ran out of room.
419 r = l9p_puqid(msg, &de->qid); in l9p_pudirent()
420 r += l9p_pu64(msg, &de->offset); in l9p_pudirent()
421 r += l9p_pu8(msg, &de->type); in l9p_pudirent()
422 s = l9p_pustring(msg, &de->name); in l9p_pudirent()
424 return (-1); in l9p_pudirent()
431 * Returns 0 on success, -1 on error. (It's up to the caller
446 l9p_pu8(msg, &fcall->hdr.type); in l9p_pufcall()
447 r = l9p_pu16(msg, &fcall->hdr.tag); in l9p_pufcall()
449 return (-1); in l9p_pufcall()
459 switch (fcall->hdr.type) { in l9p_pufcall()
462 l9p_pu32(msg, &fcall->version.msize); in l9p_pufcall()
463 r = l9p_pustring(msg, &fcall->version.version); in l9p_pufcall()
467 l9p_pu32(msg, &fcall->tauth.afid); in l9p_pufcall()
468 r = l9p_pustring(msg, &fcall->tauth.uname); in l9p_pufcall()
471 r = l9p_pustring(msg, &fcall->tauth.aname); in l9p_pufcall()
475 r = l9p_pu32(msg, &fcall->tauth.n_uname); in l9p_pufcall()
479 r = l9p_puqid(msg, &fcall->rauth.aqid); in l9p_pufcall()
483 l9p_pu32(msg, &fcall->hdr.fid); in l9p_pufcall()
484 l9p_pu32(msg, &fcall->tattach.afid); in l9p_pufcall()
485 r = l9p_pustring(msg, &fcall->tattach.uname); in l9p_pufcall()
488 r = l9p_pustring(msg, &fcall->tattach.aname); in l9p_pufcall()
492 r = l9p_pu32(msg, &fcall->tattach.n_uname); in l9p_pufcall()
496 r = l9p_puqid(msg, &fcall->rattach.qid); in l9p_pufcall()
500 r = l9p_pustring(msg, &fcall->error.ename); in l9p_pufcall()
504 r = l9p_pu32(msg, &fcall->error.errnum); in l9p_pufcall()
508 r = l9p_pu32(msg, &fcall->error.errnum); in l9p_pufcall()
512 r = l9p_pu16(msg, &fcall->tflush.oldtag); in l9p_pufcall()
519 l9p_pu32(msg, &fcall->hdr.fid); in l9p_pufcall()
520 l9p_pu32(msg, &fcall->twalk.newfid); in l9p_pufcall()
521 r = l9p_pustrings(msg, &fcall->twalk.nwname, in l9p_pufcall()
522 fcall->twalk.wname, N(fcall->twalk.wname)); in l9p_pufcall()
526 r = l9p_puqids(msg, &fcall->rwalk.nwqid, fcall->rwalk.wqid); in l9p_pufcall()
530 l9p_pu32(msg, &fcall->hdr.fid); in l9p_pufcall()
531 r = l9p_pu8(msg, &fcall->topen.mode); in l9p_pufcall()
535 l9p_puqid(msg, &fcall->ropen.qid); in l9p_pufcall()
536 r = l9p_pu32(msg, &fcall->ropen.iounit); in l9p_pufcall()
540 l9p_pu32(msg, &fcall->hdr.fid); in l9p_pufcall()
541 r = l9p_pustring(msg, &fcall->tcreate.name); in l9p_pufcall()
544 l9p_pu32(msg, &fcall->tcreate.perm); in l9p_pufcall()
545 r = l9p_pu8(msg, &fcall->tcreate.mode); in l9p_pufcall()
547 r = l9p_pustring(msg, &fcall->tcreate.extension); in l9p_pufcall()
551 l9p_puqid(msg, &fcall->rcreate.qid); in l9p_pufcall()
552 r = l9p_pu32(msg, &fcall->rcreate.iounit); in l9p_pufcall()
557 l9p_pu32(msg, &fcall->hdr.fid); in l9p_pufcall()
558 l9p_pu64(msg, &fcall->io.offset); in l9p_pufcall()
559 r = l9p_pu32(msg, &fcall->io.count); in l9p_pufcall()
564 r = l9p_pu32(msg, &fcall->io.count); in l9p_pufcall()
568 l9p_pu32(msg, &fcall->hdr.fid); in l9p_pufcall()
569 l9p_pu64(msg, &fcall->io.offset); in l9p_pufcall()
570 r = l9p_pu32(msg, &fcall->io.count); in l9p_pufcall()
574 r = l9p_pu32(msg, &fcall->io.count); in l9p_pufcall()
581 r = l9p_pu32(msg, &fcall->hdr.fid); in l9p_pufcall()
590 uint16_t size = l9p_sizeof_stat(&fcall->rstat.stat, in l9p_pufcall()
593 r = l9p_pustat(msg, &fcall->rstat.stat, version); in l9p_pufcall()
600 l9p_pu32(msg, &fcall->hdr.fid); in l9p_pufcall()
602 r = l9p_pustat(msg, &fcall->twstat.stat, version); in l9p_pufcall()
610 l9p_pu32(msg, &fcall->rstatfs.statfs.type); in l9p_pufcall()
611 l9p_pu32(msg, &fcall->rstatfs.statfs.bsize); in l9p_pufcall()
612 l9p_pu64(msg, &fcall->rstatfs.statfs.blocks); in l9p_pufcall()
613 l9p_pu64(msg, &fcall->rstatfs.statfs.bfree); in l9p_pufcall()
614 l9p_pu64(msg, &fcall->rstatfs.statfs.bavail); in l9p_pufcall()
615 l9p_pu64(msg, &fcall->rstatfs.statfs.files); in l9p_pufcall()
616 l9p_pu64(msg, &fcall->rstatfs.statfs.ffree); in l9p_pufcall()
617 l9p_pu64(msg, &fcall->rstatfs.statfs.fsid); in l9p_pufcall()
618 r = l9p_pu32(msg, &fcall->rstatfs.statfs.namelen); in l9p_pufcall()
622 l9p_pu32(msg, &fcall->hdr.fid); in l9p_pufcall()
623 r = l9p_pu32(msg, &fcall->tlopen.flags); in l9p_pufcall()
627 l9p_puqid(msg, &fcall->rlopen.qid); in l9p_pufcall()
628 r = l9p_pu32(msg, &fcall->rlopen.iounit); in l9p_pufcall()
632 l9p_pu32(msg, &fcall->hdr.fid); in l9p_pufcall()
633 r = l9p_pustring(msg, &fcall->tlcreate.name); in l9p_pufcall()
636 l9p_pu32(msg, &fcall->tlcreate.flags); in l9p_pufcall()
637 l9p_pu32(msg, &fcall->tlcreate.mode); in l9p_pufcall()
638 r = l9p_pu32(msg, &fcall->tlcreate.gid); in l9p_pufcall()
642 l9p_puqid(msg, &fcall->rlcreate.qid); in l9p_pufcall()
643 r = l9p_pu32(msg, &fcall->rlcreate.iounit); in l9p_pufcall()
647 l9p_pu32(msg, &fcall->hdr.fid); in l9p_pufcall()
648 r = l9p_pustring(msg, &fcall->tsymlink.name); in l9p_pufcall()
651 r = l9p_pustring(msg, &fcall->tsymlink.symtgt); in l9p_pufcall()
654 r = l9p_pu32(msg, &fcall->tlcreate.gid); in l9p_pufcall()
658 r = l9p_puqid(msg, &fcall->rsymlink.qid); in l9p_pufcall()
662 l9p_pu32(msg, &fcall->hdr.fid); in l9p_pufcall()
663 r = l9p_pustring(msg, &fcall->tmknod.name); in l9p_pufcall()
666 l9p_pu32(msg, &fcall->tmknod.mode); in l9p_pufcall()
667 l9p_pu32(msg, &fcall->tmknod.major); in l9p_pufcall()
668 l9p_pu32(msg, &fcall->tmknod.minor); in l9p_pufcall()
669 r = l9p_pu32(msg, &fcall->tmknod.gid); in l9p_pufcall()
673 r = l9p_puqid(msg, &fcall->rmknod.qid); in l9p_pufcall()
677 l9p_pu32(msg, &fcall->hdr.fid); in l9p_pufcall()
678 l9p_pu32(msg, &fcall->trename.dfid); in l9p_pufcall()
679 r = l9p_pustring(msg, &fcall->trename.name); in l9p_pufcall()
686 r = l9p_pu32(msg, &fcall->hdr.fid); in l9p_pufcall()
690 r = l9p_pustring(msg, &fcall->rreadlink.target); in l9p_pufcall()
694 l9p_pu32(msg, &fcall->hdr.fid); in l9p_pufcall()
695 r = l9p_pu64(msg, &fcall->tgetattr.request_mask); in l9p_pufcall()
699 l9p_pu64(msg, &fcall->rgetattr.valid); in l9p_pufcall()
700 l9p_puqid(msg, &fcall->rgetattr.qid); in l9p_pufcall()
701 l9p_pu32(msg, &fcall->rgetattr.mode); in l9p_pufcall()
702 l9p_pu32(msg, &fcall->rgetattr.uid); in l9p_pufcall()
703 l9p_pu32(msg, &fcall->rgetattr.gid); in l9p_pufcall()
704 l9p_pu64(msg, &fcall->rgetattr.nlink); in l9p_pufcall()
705 l9p_pu64(msg, &fcall->rgetattr.rdev); in l9p_pufcall()
706 l9p_pu64(msg, &fcall->rgetattr.size); in l9p_pufcall()
707 l9p_pu64(msg, &fcall->rgetattr.blksize); in l9p_pufcall()
708 l9p_pu64(msg, &fcall->rgetattr.blocks); in l9p_pufcall()
709 l9p_pu64(msg, &fcall->rgetattr.atime_sec); in l9p_pufcall()
710 l9p_pu64(msg, &fcall->rgetattr.atime_nsec); in l9p_pufcall()
711 l9p_pu64(msg, &fcall->rgetattr.mtime_sec); in l9p_pufcall()
712 l9p_pu64(msg, &fcall->rgetattr.mtime_nsec); in l9p_pufcall()
713 l9p_pu64(msg, &fcall->rgetattr.ctime_sec); in l9p_pufcall()
714 l9p_pu64(msg, &fcall->rgetattr.ctime_nsec); in l9p_pufcall()
715 l9p_pu64(msg, &fcall->rgetattr.btime_sec); in l9p_pufcall()
716 l9p_pu64(msg, &fcall->rgetattr.btime_nsec); in l9p_pufcall()
717 l9p_pu64(msg, &fcall->rgetattr.gen); in l9p_pufcall()
718 r = l9p_pu64(msg, &fcall->rgetattr.data_version); in l9p_pufcall()
722 l9p_pu32(msg, &fcall->hdr.fid); in l9p_pufcall()
723 l9p_pu32(msg, &fcall->tsetattr.valid); in l9p_pufcall()
724 l9p_pu32(msg, &fcall->tsetattr.mode); in l9p_pufcall()
725 l9p_pu32(msg, &fcall->tsetattr.uid); in l9p_pufcall()
726 l9p_pu32(msg, &fcall->tsetattr.gid); in l9p_pufcall()
727 l9p_pu64(msg, &fcall->tsetattr.size); in l9p_pufcall()
728 l9p_pu64(msg, &fcall->tsetattr.atime_sec); in l9p_pufcall()
729 l9p_pu64(msg, &fcall->tsetattr.atime_nsec); in l9p_pufcall()
730 l9p_pu64(msg, &fcall->tsetattr.mtime_sec); in l9p_pufcall()
731 r = l9p_pu64(msg, &fcall->tsetattr.mtime_nsec); in l9p_pufcall()
738 l9p_pu32(msg, &fcall->hdr.fid); in l9p_pufcall()
739 l9p_pu32(msg, &fcall->txattrwalk.newfid); in l9p_pufcall()
740 r = l9p_pustring(msg, &fcall->txattrwalk.name); in l9p_pufcall()
744 r = l9p_pu64(msg, &fcall->rxattrwalk.size); in l9p_pufcall()
748 l9p_pu32(msg, &fcall->hdr.fid); in l9p_pufcall()
749 r = l9p_pustring(msg, &fcall->txattrcreate.name); in l9p_pufcall()
752 l9p_pu64(msg, &fcall->txattrcreate.attr_size); in l9p_pufcall()
753 r = l9p_pu32(msg, &fcall->txattrcreate.flags); in l9p_pufcall()
760 r = l9p_pu32(msg, &fcall->hdr.fid); in l9p_pufcall()
767 l9p_pu32(msg, &fcall->hdr.fid); in l9p_pufcall()
768 l9p_pu8(msg, &fcall->tlock.type); in l9p_pufcall()
769 l9p_pu32(msg, &fcall->tlock.flags); in l9p_pufcall()
770 l9p_pu64(msg, &fcall->tlock.start); in l9p_pufcall()
771 l9p_pu64(msg, &fcall->tlock.length); in l9p_pufcall()
772 l9p_pu32(msg, &fcall->tlock.proc_id); in l9p_pufcall()
773 r = l9p_pustring(msg, &fcall->tlock.client_id); in l9p_pufcall()
777 r = l9p_pu8(msg, &fcall->rlock.status); in l9p_pufcall()
781 l9p_pu32(msg, &fcall->hdr.fid); in l9p_pufcall()
785 l9p_pu8(msg, &fcall->getlock.type); in l9p_pufcall()
786 l9p_pu64(msg, &fcall->getlock.start); in l9p_pufcall()
787 l9p_pu64(msg, &fcall->getlock.length); in l9p_pufcall()
788 l9p_pu32(msg, &fcall->getlock.proc_id); in l9p_pufcall()
789 r = l9p_pustring(msg, &fcall->getlock.client_id); in l9p_pufcall()
793 l9p_pu32(msg, &fcall->tlink.dfid); in l9p_pufcall()
794 l9p_pu32(msg, &fcall->hdr.fid); in l9p_pufcall()
795 r = l9p_pustring(msg, &fcall->tlink.name); in l9p_pufcall()
802 l9p_pu32(msg, &fcall->hdr.fid); in l9p_pufcall()
803 r = l9p_pustring(msg, &fcall->tmkdir.name); in l9p_pufcall()
806 l9p_pu32(msg, &fcall->tmkdir.mode); in l9p_pufcall()
807 r = l9p_pu32(msg, &fcall->tmkdir.gid); in l9p_pufcall()
811 r = l9p_puqid(msg, &fcall->rmkdir.qid); in l9p_pufcall()
815 l9p_pu32(msg, &fcall->hdr.fid); in l9p_pufcall()
816 r = l9p_pustring(msg, &fcall->trenameat.oldname); in l9p_pufcall()
819 l9p_pu32(msg, &fcall->trenameat.newdirfid); in l9p_pufcall()
820 r = l9p_pustring(msg, &fcall->trenameat.newname); in l9p_pufcall()
827 l9p_pu32(msg, &fcall->hdr.fid); in l9p_pufcall()
828 r = l9p_pustring(msg, &fcall->tunlinkat.name); in l9p_pufcall()
831 r = l9p_pu32(msg, &fcall->tunlinkat.flags); in l9p_pufcall()
839 __func__, fcall->hdr.type); in l9p_pufcall()
843 /* Check for over- or under-run, or pustring error. */ in l9p_pufcall()
845 return (-1); in l9p_pufcall()
847 if (msg->lm_mode == L9P_PACK) { in l9p_pufcall()
849 uint32_t len = (uint32_t)msg->lm_size; in l9p_pufcall()
850 msg->lm_cursor_offset = 0; in l9p_pufcall()
851 msg->lm_cursor_iov = 0; in l9p_pufcall()
858 msg->lm_size -= sizeof(uint32_t); in l9p_pufcall()
860 if (fcall->hdr.type == L9P_RREAD || in l9p_pufcall()
861 fcall->hdr.type == L9P_RREADDIR) in l9p_pufcall()
862 len += fcall->io.count; in l9p_pufcall()
879 switch (fcall->hdr.type) { in l9p_freefcall()
883 free(fcall->version.version); in l9p_freefcall()
887 free(fcall->tattach.aname); in l9p_freefcall()
888 free(fcall->tattach.uname); in l9p_freefcall()
892 for (i = 0; i < fcall->twalk.nwname; i++) in l9p_freefcall()
893 free(fcall->twalk.wname[i]); in l9p_freefcall()
898 free(fcall->tcreate.name); in l9p_freefcall()
899 free(fcall->tcreate.extension); in l9p_freefcall()
903 l9p_freestat(&fcall->rstat.stat); in l9p_freefcall()
907 l9p_freestat(&fcall->twstat.stat); in l9p_freefcall()
911 free(fcall->tlcreate.name); in l9p_freefcall()
915 free(fcall->tsymlink.name); in l9p_freefcall()
916 free(fcall->tsymlink.symtgt); in l9p_freefcall()
920 free(fcall->tmknod.name); in l9p_freefcall()
924 free(fcall->trename.name); in l9p_freefcall()
928 free(fcall->rreadlink.target); in l9p_freefcall()
932 free(fcall->txattrwalk.name); in l9p_freefcall()
936 free(fcall->txattrcreate.name); in l9p_freefcall()
940 free(fcall->tlock.client_id); in l9p_freefcall()
945 free(fcall->getlock.client_id); in l9p_freefcall()
949 free(fcall->tlink.name); in l9p_freefcall()
953 free(fcall->tmkdir.name); in l9p_freefcall()
957 free(fcall->trenameat.oldname); in l9p_freefcall()
958 free(fcall->trenameat.newname); in l9p_freefcall()
962 free(fcall->tunlinkat.name); in l9p_freefcall()
970 free(stat->name); in l9p_freestat()
971 free(stat->extension); in l9p_freestat()
972 free(stat->uid); in l9p_freestat()
973 free(stat->gid); in l9p_freestat()
974 free(stat->muid); in l9p_freestat()
986 + STRING_SIZE(stat->name) in l9p_sizeof_stat()
987 + STRING_SIZE(stat->uid) in l9p_sizeof_stat()
988 + STRING_SIZE(stat->gid) in l9p_sizeof_stat()
989 + STRING_SIZE(stat->muid); in l9p_sizeof_stat()
992 size += STRING_SIZE(stat->extension) in l9p_sizeof_stat()