Lines Matching +full:left +full:-

1 /*-
2 * SPDX-License-Identifier: BSD-2-Clause
25 #include <atf-c.h>
54 ATF_REQUIRE_MSG(flags != -1, "fcntl failed: %s", strerror(errno)); in noblocking()
100 error = bind(sd[0], sinp, sinp->sa_len); in tcp_socketpair()
105 error = getsockname(sd[0], sinp, &(socklen_t){ sinp->sa_len }); in tcp_socketpair()
108 error = connect(sd[1], sinp, sinp->sa_len); in tcp_socketpair()
157 sp->sp_fd = fd; in splice_init()
158 sp->sp_max = max; in splice_init()
160 sp->sp_idle = *tv; in splice_init()
162 sp->sp_idle.tv_sec = sp->sp_idle.tv_usec = 0; in splice_init()
171 splice_init(&sp, -1, 0, NULL); in unsplice()
199 * A structure representing a spliced pair of connections. left[1] is
203 int left[2]; member
217 tcp4_socketpair(sc->left); in splice_conn_init_limits()
218 tcp4_socketpair(sc->right); in splice_conn_init_limits()
219 splice_pair(sc->left[1], sc->right[0], max, tv); in splice_conn_init_limits()
233 data = fionread(sc->left[0]); in splice_conn_check_empty()
234 ATF_REQUIRE_MSG(data == 0, "unexpected data on left[0]: %d", data); in splice_conn_check_empty()
235 data = fionread(sc->left[1]); in splice_conn_check_empty()
236 ATF_REQUIRE_MSG(data == 0, "unexpected data on left[1]: %d", data); in splice_conn_check_empty()
237 data = fionread(sc->right[0]); in splice_conn_check_empty()
239 data = fionread(sc->right[1]); in splice_conn_check_empty()
246 checked_close(sc->left[0]); in splice_conn_fini()
247 checked_close(sc->left[1]); in splice_conn_fini()
248 checked_close(sc->right[0]); in splice_conn_fini()
249 checked_close(sc->right[1]); in splice_conn_fini()
255 noblocking(sc->left[0]); in splice_conn_noblocking()
256 noblocking(sc->left[1]); in splice_conn_noblocking()
257 noblocking(sc->right[0]); in splice_conn_noblocking()
258 noblocking(sc->right[1]); in splice_conn_noblocking()
271 check_nspliced(sc.left[1], 0); in ATF_TC_BODY()
274 /* Left-to-right. */ in ATF_TC_BODY()
276 n = write(sc.left[0], &c, 1); in ATF_TC_BODY()
281 check_nspliced(sc.left[1], 1); in ATF_TC_BODY()
284 /* Right-to-left. */ in ATF_TC_BODY()
288 n = read(sc.left[0], &c, 1); in ATF_TC_BODY()
291 check_nspliced(sc.left[1], 1); in ATF_TC_BODY()
295 unsplice(sc.left[1]); in ATF_TC_BODY()
297 check_nspliced(sc.left[1], 1); in ATF_TC_BODY()
327 int error, left[2], right[2]; in ATF_TC_BODY() local
329 tcp4_socketpair(left); in ATF_TC_BODY()
335 remove_rights(left[1], cap_rights_init(&rights, CAP_RECV)); in ATF_TC_BODY()
337 error = setsockopt(left[1], SOL_SOCKET, SO_SPLICE, &sp, sizeof(sp)); in ATF_TC_BODY()
338 ATF_REQUIRE_ERRNO(ENOTCAPABLE, error == -1); in ATF_TC_BODY()
340 /* Make sure we can still splice left[1] in the other direction. */ in ATF_TC_BODY()
341 splice_init(&sp, left[1], 0, NULL); in ATF_TC_BODY()
344 splice_init(&sp, -1, 0, NULL); in ATF_TC_BODY()
349 * Now remove send rights from left[1] and verify that splicing is no in ATF_TC_BODY()
352 remove_rights(left[1], cap_rights_init(&rights, CAP_SEND)); in ATF_TC_BODY()
353 splice_init(&sp, left[1], 0, NULL); in ATF_TC_BODY()
355 ATF_REQUIRE_ERRNO(ENOTCAPABLE, error == -1); in ATF_TC_BODY()
360 n = -1; in ATF_TC_BODY()
361 error = getsockopt(left[1], SOL_SOCKET, SO_SPLICE, &n, in ATF_TC_BODY()
370 splice_pair(left[0], right[1], 0, NULL); in ATF_TC_BODY()
371 error = cap_rights_limit(left[0], in ATF_TC_BODY()
375 unsplice(left[0]); in ATF_TC_BODY()
377 checked_close(left[0]); in ATF_TC_BODY()
378 checked_close(left[1]); in ATF_TC_BODY()
395 tcp4_socketpair(sc.left); in ATF_TC_BODY()
399 splice_init(&sp, sc.right[0], -3, NULL); in ATF_TC_BODY()
400 error = setsockopt(sc.left[1], SOL_SOCKET, SO_SPLICE, &sp, sizeof(sp)); in ATF_TC_BODY()
401 ATF_REQUIRE_ERRNO(EINVAL, error == -1); in ATF_TC_BODY()
403 /* Can't unsplice a never-spliced socket. */ in ATF_TC_BODY()
404 splice_init(&sp, -1, 0, NULL); in ATF_TC_BODY()
405 error = setsockopt(sc.left[1], SOL_SOCKET, SO_SPLICE, &sp, sizeof(sp)); in ATF_TC_BODY()
406 ATF_REQUIRE_ERRNO(ENOTCONN, error == -1); in ATF_TC_BODY()
408 /* Can't double-unsplice a socket. */ in ATF_TC_BODY()
410 error = setsockopt(sc.left[1], SOL_SOCKET, SO_SPLICE, &sp, sizeof(sp)); in ATF_TC_BODY()
412 unsplice(sc.left[1]); in ATF_TC_BODY()
413 splice_init(&sp, -1, 0, NULL); in ATF_TC_BODY()
414 error = setsockopt(sc.left[1], SOL_SOCKET, SO_SPLICE, &sp, sizeof(sp)); in ATF_TC_BODY()
415 ATF_REQUIRE_ERRNO(ENOTCONN, error == -1); in ATF_TC_BODY()
419 error = setsockopt(sc.left[1], SOL_SOCKET, SO_SPLICE, &sp, sizeof(sp)); in ATF_TC_BODY()
422 error = setsockopt(sc.left[1], SOL_SOCKET, SO_SPLICE, &sp, sizeof(sp)); in ATF_TC_BODY()
423 ATF_REQUIRE_ERRNO(EBUSY, error == -1); in ATF_TC_BODY()
425 error = setsockopt(sc.left[0], SOL_SOCKET, SO_SPLICE, &sp, sizeof(sp)); in ATF_TC_BODY()
426 ATF_REQUIRE_ERRNO(EBUSY, error == -1); in ATF_TC_BODY()
427 splice_init(&sp, -1, 0, NULL); in ATF_TC_BODY()
428 error = setsockopt(sc.left[1], SOL_SOCKET, SO_SPLICE, &sp, sizeof(sp)); in ATF_TC_BODY()
430 /* Can't splice to a non-socket. */ in ATF_TC_BODY()
435 error = setsockopt(sc.left[1], SOL_SOCKET, SO_SPLICE, &sp, sizeof(sp)); in ATF_TC_BODY()
436 ATF_REQUIRE_ERRNO(ENOTSOCK, error == -1); in ATF_TC_BODY()
441 error = setsockopt(sc.left[1], SOL_SOCKET, SO_SPLICE, &sp, sizeof(sp)); in ATF_TC_BODY()
442 ATF_REQUIRE_ERRNO(EBADF, error == -1); in ATF_TC_BODY()
448 error = setsockopt(sc.left[1], SOL_SOCKET, SO_SPLICE, &sp, sizeof(sp)); in ATF_TC_BODY()
449 ATF_REQUIRE_ERRNO(EPROTONOSUPPORT, error == -1); in ATF_TC_BODY()
451 ATF_REQUIRE_ERRNO(EPROTONOSUPPORT, error == -1); in ATF_TC_BODY()
459 error = setsockopt(sc.left[1], SOL_SOCKET, SO_SPLICE, &sp, sizeof(sp)); in ATF_TC_BODY()
460 ATF_REQUIRE_ERRNO(ENOTCONN, error == -1); in ATF_TC_BODY()
463 ATF_REQUIRE_ERRNO(ENOTCONN, error == -1); in ATF_TC_BODY()
486 EV_SET(&kev, sc.left[1], EVFILT_READ, EV_ADD, 0, 0, NULL); in ATF_TC_BODY()
496 n = write(sc.left[0], &b, 1); in ATF_TC_BODY()
509 n = read(sc.left[0], &b, 1); in ATF_TC_BODY()
530 for (size_t total = sizeof(buf); total > 0; total -= n) { in ATF_TC_BODY()
531 n = write(sc.left[0], buf, total); in ATF_TC_BODY()
534 for (size_t total = sizeof(buf); total > 0; total -= n) { in ATF_TC_BODY()
539 check_nspliced(sc.left[1], sizeof(buf)); in ATF_TC_BODY()
544 n = write(sc.left[0], &b, 1); in ATF_TC_BODY()
555 n = write(sc.left[0], &b, 1); in ATF_TC_BODY()
557 n = read(sc.left[1], &b, 1); in ATF_TC_BODY()
582 for (size_t total = sizeof(buf); total > 0; total -= n) { in ATF_TC_BODY()
583 n = write(sc.left[0], buf, total); in ATF_TC_BODY()
586 for (size_t total = sizeof(buf); total > 0; total -= n) { in ATF_TC_BODY()
591 check_nspliced(sc.left[1], sizeof(buf)); in ATF_TC_BODY()
603 n = write(sc.left[0], &b, 1); in ATF_TC_BODY()
605 n = read(sc.left[1], &b, 1); in ATF_TC_BODY()
628 error = listen(sc.left[1], 1); in ATF_TC_BODY()
629 ATF_REQUIRE_ERRNO(EINVAL, error == -1); in ATF_TC_BODY()
631 ATF_REQUIRE_ERRNO(EINVAL, error == -1); in ATF_TC_BODY()
645 ATF_REQUIRE_ERRNO(EINVAL, error == -1); in ATF_TC_BODY()
648 ATF_REQUIRE_ERRNO(EINVAL, error == -1); in ATF_TC_BODY()
653 splice_init(&sp, -1, 0, NULL); in ATF_TC_BODY()
655 ATF_REQUIRE_ERRNO(EINVAL, error == -1); in ATF_TC_BODY()
734 n = write(sc.left[0], buf, sizeof(buf)); in ATF_TC_BODY()
736 ATF_REQUIRE_ERRNO(EAGAIN, n == -1); in ATF_TC_BODY()
745 ATF_REQUIRE_ERRNO(EAGAIN, n == -1); in ATF_TC_BODY()
750 sofar -= n; in ATF_TC_BODY()
766 /* Left-to-right. */ in ATF_TC_BODY()
768 n = write(sc.left[0], &c, 1); in ATF_TC_BODY()
773 check_nspliced(sc.left[1], 1); in ATF_TC_BODY()
776 /* Right-to-left. */ in ATF_TC_BODY()
780 n = read(sc.left[0], &c, 1); in ATF_TC_BODY()
783 check_nspliced(sc.left[1], 1); in ATF_TC_BODY()
787 unsplice(sc.left[1]); in ATF_TC_BODY()
789 check_nspliced(sc.left[1], 1); in ATF_TC_BODY()
793 splice_pair(sc.left[1], sc.right[0], 0, NULL); in ATF_TC_BODY()
794 check_nspliced(sc.left[1], 0); in ATF_TC_BODY()
797 /* Left-to-right. */ in ATF_TC_BODY()
799 n = write(sc.left[0], &c, 1); in ATF_TC_BODY()
804 check_nspliced(sc.left[1], 1); in ATF_TC_BODY()
807 /* Right-to-left. */ in ATF_TC_BODY()
811 n = read(sc.left[0], &c, 1); in ATF_TC_BODY()
814 check_nspliced(sc.left[1], 1); in ATF_TC_BODY()
838 error = fcntl(xfer->fd, F_SETFL, O_NONBLOCK); in xfer()
841 sz = MIN(xfer->bytes, 1024 * 1024); in xfer()
846 pthread_barrier_wait(xfer->barrier); in xfer()
848 for (resid = xfer->bytes; xfer->bytes > 0 || resid > 0;) { in xfer()
849 n = write(xfer->fd, buf, MIN(sz, xfer->bytes)); in xfer()
851 ATF_REQUIRE_ERRNO(EAGAIN, n == -1); in xfer()
854 ATF_REQUIRE(xfer->bytes >= (size_t)n); in xfer()
855 xfer->bytes -= n; in xfer()
858 n = read(xfer->fd, buf, sz); in xfer()
860 ATF_REQUIRE_ERRNO(EAGAIN, n == -1); in xfer()
864 resid -= n; in xfer()
894 .fd = sc.left[0] in ATF_TC_BODY()