Lines Matching +full:sync +full:- +full:token

1 // SPDX-License-Identifier: GPL-2.0
9 * ncdevmem -s <server IP> [-c <client IP>] -f eth1 -l -p 5201
12 * echo -n "hello\nworld" | nc -s <server IP> 5201 -p 5201
17 * ncdevmem -s <server IP> [-c <client IP>] -f eth1 -l -p 5201 -v 7
20 * yes $(echo -e \\x01\\x02\\x03\\x04\\x05\\x06) | \
22 * head -c 5G | \
23 * nc <server IP> 5201 -p 5201
51 #include <linux/dma-buf.h>
62 #include "netdev-user.h"
63 #include "ethtool-user.h"
78 static int start_queue = -1;
79 static int num_queues = -1;
110 ctx->size = size; in udmabuf_alloc()
112 ctx->devfd = open("/dev/udmabuf", O_RDWR); in udmabuf_alloc()
113 if (ctx->devfd < 0) in udmabuf_alloc()
115 "%s: [skip,no-udmabuf: Unable to access DMA buffer device file]\n", in udmabuf_alloc()
118 ctx->memfd = memfd_create("udmabuf-test", MFD_ALLOW_SEALING); in udmabuf_alloc()
119 if (ctx->memfd < 0) in udmabuf_alloc()
120 error(1, errno, "%s: [skip,no-memfd]\n", TEST_PREFIX); in udmabuf_alloc()
122 ret = fcntl(ctx->memfd, F_ADD_SEALS, F_SEAL_SHRINK); in udmabuf_alloc()
124 error(1, errno, "%s: [skip,fcntl-add-seals]\n", TEST_PREFIX); in udmabuf_alloc()
126 ret = ftruncate(ctx->memfd, size); in udmabuf_alloc()
127 if (ret == -1) in udmabuf_alloc()
128 error(1, errno, "%s: [FAIL,memfd-truncate]\n", TEST_PREFIX); in udmabuf_alloc()
132 create.memfd = ctx->memfd; in udmabuf_alloc()
135 ctx->fd = ioctl(ctx->devfd, UDMABUF_CREATE, &create); in udmabuf_alloc()
136 if (ctx->fd < 0) in udmabuf_alloc()
139 ctx->buf_mem = mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED, in udmabuf_alloc()
140 ctx->fd, 0); in udmabuf_alloc()
141 if (ctx->buf_mem == MAP_FAILED) in udmabuf_alloc()
149 munmap(ctx->buf_mem, ctx->size); in udmabuf_free()
150 close(ctx->fd); in udmabuf_free()
151 close(ctx->memfd); in udmabuf_free()
152 close(ctx->devfd); in udmabuf_free()
159 struct dma_buf_sync sync = {}; in udmabuf_memcpy_from_device() local
161 sync.flags = DMA_BUF_SYNC_START; in udmabuf_memcpy_from_device()
162 ioctl(src->fd, DMA_BUF_IOCTL_SYNC, &sync); in udmabuf_memcpy_from_device()
164 memcpy(dst, src->buf_mem + off, n); in udmabuf_memcpy_from_device()
166 sync.flags = DMA_BUF_SYNC_END; in udmabuf_memcpy_from_device()
167 ioctl(src->fd, DMA_BUF_IOCTL_SYNC, &sync); in udmabuf_memcpy_from_device()
217 int num = -1; in rxq_num()
222 return -1; in rxq_num()
229 num = rsp->rx_count + rsp->combined_count; in rxq_num()
255 run_command("sudo ethtool -K %s ntuple off >&2", ifname); in reset_flow_steering()
256 run_command("sudo ethtool -K %s ntuple on >&2", ifname); in reset_flow_steering()
258 "sudo ethtool -n %s | grep 'Filter:' | awk '{print $2}' | xargs -n1 ethtool -N %s delete >&2", in reset_flow_steering()
289 return -1; in configure_headersplit()
294 /* 0 - off, 1 - auto, 2 - on */ in configure_headersplit()
298 fprintf(stderr, "YNL failed: %s\n", ys->err.msg); in configure_headersplit()
308 tcp_data_split_str(get_rsp->tcp_data_split)); in configure_headersplit()
319 return run_command("sudo ethtool -X %s equal %d >&2", ifname, start_queue); in configure_rss()
324 return run_command("sudo ethtool -L %s rx %u tx %u", ifname, rx, tx); in configure_channels()
333 inet_ntop(AF_INET6, &server_sin->sin6_addr, buf, sizeof(buf)); in configure_flow_steering()
336 if (IN6_IS_ADDR_V4MAPPED(&server_sin->sin6_addr)) { in configure_flow_steering()
341 …return run_command("sudo ethtool -N %s flow-type %s %s %s dst-ip %s %s %s dst-port %s queue %d >&2… in configure_flow_steering()
344 client_ip ? "src-ip" : "", in configure_flow_steering()
347 client_ip ? "src-port" : "", in configure_flow_steering()
363 return -1; in bind_rx_queue()
377 if (!rsp->_present.id) { in bind_rx_queue()
382 fprintf(stderr, "got dmabuf id=%d\n", rsp->id); in bind_rx_queue()
383 dmabuf_id = rsp->id; in bind_rx_queue()
391 fprintf(stderr, "YNL failed: %s\n", (*ys)->err.msg); in bind_rx_queue()
394 return -1; in bind_rx_queue()
415 sin6->sin6_family = AF_INET6; in parse_address()
416 sin6->sin6_port = htons(port); in parse_address()
418 ret = inet_pton(sin6->sin6_family, str, &sin6->sin6_addr); in parse_address()
421 ret = inet_pton(AF_INET, str, &sin6->sin6_addr.s6_addr32[3]); in parse_address()
423 return -1; in parse_address()
426 sin6->sin6_addr.s6_addr32[0] = 0; in parse_address()
427 sin6->sin6_addr.s6_addr32[1] = 0; in parse_address()
428 sin6->sin6_addr.s6_addr16[4] = 0; in parse_address()
429 sin6->sin6_addr.s6_addr16[5] = 0xffff; in parse_address()
484 if (bind_rx_queue(ifindex, mem->fd, queues, num_queues, &ys)) in do_server()
487 tmp_mem = malloc(mem->size); in do_server()
527 struct dmabuf_token token; in do_server() local
551 if (cm->cmsg_level != SOL_SOCKET || in do_server()
552 (cm->cmsg_type != SCM_DEVMEM_DMABUF && in do_server()
553 cm->cmsg_type != SCM_DEVMEM_LINEAR)) { in do_server()
554 fprintf(stderr, "skipping non-devmem cmsg\n"); in do_server()
561 if (cm->cmsg_type == SCM_DEVMEM_LINEAR) { in do_server()
566 "SCM_DEVMEM_LINEAR. dmabuf_cmsg->frag_size=%u\n", in do_server()
567 dmabuf_cmsg->frag_size); in do_server()
572 token.token_start = dmabuf_cmsg->frag_token; in do_server()
573 token.token_count = 1; in do_server()
575 total_received += dmabuf_cmsg->frag_size; in do_server()
577 …"received frag_page=%llu, in_page_offset=%llu, frag_offset=%llu, frag_size=%u, token=%u, total_rec… in do_server()
578 dmabuf_cmsg->frag_offset >> PAGE_SHIFT, in do_server()
579 dmabuf_cmsg->frag_offset % getpagesize(), in do_server()
580 dmabuf_cmsg->frag_offset, in do_server()
581 dmabuf_cmsg->frag_size, dmabuf_cmsg->frag_token, in do_server()
582 total_received, dmabuf_cmsg->dmabuf_id); in do_server()
584 if (dmabuf_cmsg->dmabuf_id != dmabuf_id) in do_server()
588 if (dmabuf_cmsg->frag_size % getpagesize()) in do_server()
593 provider->memcpy_from_device(tmp_mem, mem, in do_server()
594 dmabuf_cmsg->frag_offset, in do_server()
595 dmabuf_cmsg->frag_size); in do_server()
599 dmabuf_cmsg->frag_size); in do_server()
602 dmabuf_cmsg->frag_size); in do_server()
605 SO_DEVMEM_DONTNEED, &token, in do_server()
606 sizeof(token)); in do_server()
639 mem = provider->alloc(getpagesize() * NUM_PAGES); in run_devmem_tests()
650 if (!bind_rx_queue(ifindex, mem->fd, queues, num_queues, &ys)) in run_devmem_tests()
663 if (!bind_rx_queue(ifindex, mem->fd, queues, num_queues, &ys)) in run_devmem_tests()
676 if (bind_rx_queue(ifindex, mem->fd, queues, num_queues, &ys)) in run_devmem_tests()
680 if (!configure_channels(num_queues, num_queues - 1)) in run_devmem_tests()
686 provider->free(mem); in run_devmem_tests()
695 while ((opt = getopt(argc, argv, "ls:c:p:v:q:t:f:")) != -1) { in main()
728 error(1, 0, "Missing -f argument\n"); in main()
746 error(1, 0, "Both -t and -q are required\n"); in main()
758 start_queue = rxq_num(ifindex) - num_queues; in main()
770 error(1, 0, "Missing -t argument\n"); in main()
773 error(1, 0, "Missing -q argument\n"); in main()
776 error(1, 0, "Missing -s argument\n"); in main()
779 error(1, 0, "Missing -p argument\n"); in main()
781 mem = provider->alloc(getpagesize() * NUM_PAGES); in main()
783 provider->free(mem); in main()