Lines Matching refs:xsk

7 #include "xsk.h"
49 struct xsk {
59 static int open_xsk(int ifindex, struct xsk *xsk)
79 xsk->umem_area = mmap(NULL, UMEM_SIZE, PROT_READ | PROT_WRITE, mmap_flags, -1, 0);
80 if (!ASSERT_NEQ(xsk->umem_area, MAP_FAILED, "mmap"))
83 ret = xsk_umem__create(&xsk->umem,
84 xsk->umem_area, UMEM_SIZE,
85 &xsk->fill,
86 &xsk->comp,
91 ret = xsk_socket__create(&xsk->socket, ifindex, QUEUE_ID,
92 xsk->umem,
93 &xsk->rx,
94 &xsk->tx,
105 printf("%p: tx_desc[%d] -> %lx\n", xsk, i, addr);
110 ret = xsk_ring_prod__reserve(&xsk->fill, UMEM_NUM / 2, &idx);
118 printf("%p: rx_desc[%d] -> %lx\n", xsk, i, addr);
119 *xsk_ring_prod__fill_addr(&xsk->fill, i) = addr;
121 xsk_ring_prod__submit(&xsk->fill, ret);
126 static void close_xsk(struct xsk *xsk)
128 if (xsk->umem)
129 xsk_umem__delete(xsk->umem);
130 if (xsk->socket)
131 xsk_socket__delete(xsk->socket);
132 munmap(xsk->umem_area, UMEM_SIZE);
152 static int generate_packet(struct xsk *xsk, __u16 dst_port)
163 ret = xsk_ring_prod__reserve(&xsk->tx, 1, &idx);
167 tx_desc = xsk_ring_prod__tx_desc(&xsk->tx, idx);
169 printf("%p: tx_desc[%u]->addr=%llx\n", xsk, idx, tx_desc->addr);
170 data = xsk_umem__get_data(xsk->umem_area, tx_desc->addr);
210 xsk_ring_prod__submit(&xsk->tx, 1);
212 ret = sendto(xsk_socket__fd(xsk->socket), NULL, 0, MSG_DONTWAIT, NULL, 0);
243 static void complete_tx(struct xsk *xsk)
250 if (ASSERT_EQ(xsk_ring_cons__peek(&xsk->comp, 1, &idx), 1, "xsk_ring_cons__peek")) {
251 addr = *xsk_ring_cons__comp_addr(&xsk->comp, idx);
253 printf("%p: complete tx idx=%u addr=%llx\n", xsk, idx, addr);
255 data = xsk_umem__get_data(xsk->umem_area, addr);
260 xsk_ring_cons__release(&xsk->comp, 1);
264 static void refill_rx(struct xsk *xsk, __u64 addr)
268 if (ASSERT_EQ(xsk_ring_prod__reserve(&xsk->fill, 1, &idx), 1, "xsk_ring_prod__reserve")) {
269 printf("%p: complete idx=%u addr=%llx\n", xsk, idx, addr);
270 *xsk_ring_prod__fill_addr(&xsk->fill, idx) = addr;
271 xsk_ring_prod__submit(&xsk->fill, 1);
275 static int verify_xsk_metadata(struct xsk *xsk, bool sent_from_af_xdp)
289 ret = recvfrom(xsk_socket__fd(xsk->socket), NULL, 0, MSG_DONTWAIT, NULL, NULL);
293 fds.fd = xsk_socket__fd(xsk->socket);
300 ret = xsk_ring_cons__peek(&xsk->rx, 1, &idx);
304 rx_desc = xsk_ring_cons__rx_desc(&xsk->rx, idx);
308 xsk, idx, rx_desc->addr, addr, comp_addr);
309 data = xsk_umem__get_data(xsk->umem_area, addr);
347 xsk_ring_cons__release(&xsk->rx, 1);
348 refill_rx(xsk, comp_addr);
373 struct xsk tx_xsk = {};
374 struct xsk rx_xsk = {};
451 ret = bpf_map_update_elem(bpf_map__fd(bpf_obj->maps.xsk), &queue_id, &sock_fd, 0);