Lines Matching defs:xsk

46  *       then remove xsk sockets from queue 0 on both veth interfaces and
100 #include "xsk.h"
225 static void enable_busy_poll(struct xsk_socket_info *xsk)
230 if (setsockopt(xsk_socket__fd(xsk->xsk), SOL_SOCKET, SO_PREFER_BUSY_POLL,
235 if (setsockopt(xsk_socket__fd(xsk->xsk), SOL_SOCKET, SO_BUSY_POLL,
240 if (setsockopt(xsk_socket__fd(xsk->xsk), SOL_SOCKET, SO_BUSY_POLL_BUDGET,
245 static int __xsk_configure_socket(struct xsk_socket_info *xsk, struct xsk_umem_info *umem,
252 xsk->umem = umem;
253 cfg.rx_size = xsk->rxqsize;
261 txr = ifobject->tx_on ? &xsk->tx : NULL;
262 rxr = ifobject->rx_on ? &xsk->rx : NULL;
263 return xsk_socket__create(&xsk->xsk, ifobject->ifindex, 0, umem->umem, rxr, txr, &cfg);
270 struct xsk_socket_info *xsk;
290 xsk = calloc(1, sizeof(struct xsk_socket_info));
291 if (!xsk)
295 xsk->rxqsize = XSK_RING_CONS__DEFAULT_NUM_DESCS;
296 ret = __xsk_configure_socket(xsk, umem, ifobject, false);
300 xsk_socket__delete(xsk->xsk);
301 free(xsk);
389 ifobj->xsk = &ifobj->xsk_arr[0];
424 test->xskmap_rx = ifobj_rx->xdp_progs->maps.xsk;
426 test->xskmap_tx = ifobj_tx->xdp_progs->maps.xsk;
919 static void kick_tx(struct xsk_socket_info *xsk)
923 ret = sendto(xsk_socket__fd(xsk->xsk), NULL, 0, MSG_DONTWAIT, NULL, 0);
933 static void kick_rx(struct xsk_socket_info *xsk)
937 ret = recvfrom(xsk_socket__fd(xsk->xsk), NULL, 0, MSG_DONTWAIT, NULL, NULL);
942 static int complete_pkts(struct xsk_socket_info *xsk, int batch_size)
947 if (xsk_ring_prod__needs_wakeup(&xsk->tx))
948 kick_tx(xsk);
950 rcvd = xsk_ring_cons__peek(&xsk->umem->cq, batch_size, &idx);
952 if (rcvd > xsk->outstanding_tx) {
953 u64 addr = *xsk_ring_cons__comp_addr(&xsk->umem->cq, idx + rcvd - 1);
960 xsk_ring_cons__release(&xsk->umem->cq, rcvd);
961 xsk->outstanding_tx -= rcvd;
971 struct xsk_socket_info *xsk = test->ifobj_rx->xsk;
974 struct xsk_umem_info *umem = xsk->umem;
996 kick_rx(xsk);
1014 rcvd = xsk_ring_cons__peek(&xsk->rx, BATCH_SIZE, &idx_rx);
1033 const struct xdp_desc *desc = xsk_ring_cons__rx_desc(&xsk->rx, idx_rx++);
1073 xsk_ring_cons__cancel(&xsk->rx, nb_frags);
1084 xsk_ring_cons__release(&xsk->rx, frags_processed);
1099 struct xsk_socket_info *xsk = ifobject->xsk;
1107 kick_tx(xsk);
1111 while (xsk_ring_prod__reserve(&xsk->tx, BATCH_SIZE, &idx) < BATCH_SIZE) {
1131 complete_pkts(xsk, BATCH_SIZE);
1144 xsk_ring_prod__cancel(&xsk->tx, BATCH_SIZE - i);
1150 struct xdp_desc *tx_desc = xsk_ring_prod__tx_desc(&xsk->tx, idx + i);
1185 xsk_ring_prod__submit(&xsk->tx, i);
1186 xsk->outstanding_tx += valid_frags;
1200 if (complete_pkts(xsk, i))
1210 static void wait_for_tx_completion(struct xsk_socket_info *xsk)
1212 while (xsk->outstanding_tx)
1213 complete_pkts(xsk, BATCH_SIZE);
1223 fds.fd = xsk_socket__fd(ifobject->xsk->xsk);
1236 wait_for_tx_completion(ifobject->xsk);
1240 static int get_xsk_stats(struct xsk_socket *xsk, struct xdp_statistics *stats)
1242 int fd = xsk_socket__fd(xsk), err;
1265 struct xsk_socket *xsk = ifobject->xsk->xsk;
1269 kick_rx(ifobject->xsk);
1271 err = get_xsk_stats(xsk, &stats);
1290 struct xsk_socket *xsk = ifobject->xsk->xsk;
1295 kick_rx(ifobject->xsk);
1297 err = get_xsk_stats(xsk, &stats);
1309 struct xsk_socket *xsk = ifobject->xsk->xsk;
1314 kick_rx(ifobject->xsk);
1316 err = get_xsk_stats(xsk, &stats);
1328 struct xsk_socket *xsk = ifobject->xsk->xsk;
1329 int fd = xsk_socket__fd(xsk);
1379 ifobject->xsk = &ifobject->xsk_arr[0];
1453 ifobject->xsk = &ifobject->xsk_arr[0];
1460 ret = xsk_update_xskmap(ifobject->xskmap, ifobject->xsk->xsk);
1501 err = xsk_update_xskmap(ifobject->xskmap, ifobject->xsk->xsk);
1508 fds.fd = xsk_socket__fd(ifobject->xsk->xsk);
1651 xsk_socket__delete(ifobj2->xsk->xsk);
1652 xsk_socket__delete(ifobj1->xsk->xsk);
1730 xsk_socket__delete(ifobj_tx->xsk->xsk);
1731 xsk_socket__delete(ifobj_rx->xsk->xsk);
1732 ifobj_tx->xsk = &ifobj_tx->xsk_arr[1];
1733 ifobj_rx->xsk = &ifobj_rx->xsk_arr[1];
1735 ret = xsk_update_xskmap(ifobj_rx->xskmap, ifobj_rx->xsk->xsk);
1790 test->ifobj_rx->xsk->rxqsize = DEFAULT_UMEM_BUFFERS;
1938 skel_rx->maps.xsk, skel_tx->maps.xsk);
1954 skel_rx->maps.xsk, skel_tx->maps.xsk);