Lines Matching refs:xsk

37 #include "xsk.h"
97 int xsk_socket__fd(const struct xsk_socket *xsk)
99 return xsk ? xsk->fd : -EINVAL;
448 int xsk_update_xskmap(struct bpf_map *map, struct xsk_socket *xsk, u32 index)
453 sock_fd = xsk_socket__fd(xsk);
502 static struct xsk_ctx *xsk_create_ctx(struct xsk_socket *xsk,
516 err = xsk_create_umem_rings(umem, xsk->fd, fill, comp);
551 struct xsk_socket *xsk;
560 xsk = calloc(1, sizeof(*xsk));
561 if (!xsk)
564 err = xsk_set_xdp_socket_config(&xsk->config, usr_config);
569 xsk->fd = socket(AF_XDP, SOCK_RAW | SOCK_CLOEXEC, 0);
570 if (xsk->fd < 0) {
575 xsk->fd = umem->fd;
587 ctx = xsk_create_ctx(xsk, umem, ifindex, queue_id, fill, comp);
593 xsk->ctx = ctx;
596 err = setsockopt(xsk->fd, SOL_XDP, XDP_RX_RING,
597 &xsk->config.rx_size,
598 sizeof(xsk->config.rx_size));
603 if (xsk->fd == umem->fd)
607 err = setsockopt(xsk->fd, SOL_XDP, XDP_TX_RING,
608 &xsk->config.tx_size,
609 sizeof(xsk->config.tx_size));
614 if (xsk->fd == umem->fd)
618 err = xsk_get_mmap_offsets(xsk->fd, &off);
626 xsk->config.rx_size * sizeof(struct xdp_desc),
628 xsk->fd, XDP_PGOFF_RX_RING);
634 rx->mask = xsk->config.rx_size - 1;
635 rx->size = xsk->config.rx_size;
643 xsk->rx = rx;
647 xsk->config.tx_size * sizeof(struct xdp_desc),
649 xsk->fd, XDP_PGOFF_TX_RING);
655 tx->mask = xsk->config.tx_size - 1;
656 tx->size = xsk->config.tx_size;
665 tx->cached_cons = *tx->consumer + xsk->config.tx_size;
667 xsk->tx = tx;
676 sxdp.sxdp_flags = xsk->config.bind_flags;
679 err = bind(xsk->fd, (struct sockaddr *)&sxdp, sizeof(sxdp));
685 *xsk_ptr = xsk;
693 xsk->config.tx_size * sizeof(struct xdp_desc));
697 xsk->config.rx_size * sizeof(struct xdp_desc));
702 close(xsk->fd);
704 free(xsk);
746 void xsk_socket__delete(struct xsk_socket *xsk)
754 if (!xsk)
757 ctx = xsk->ctx;
762 err = xsk_get_mmap_offsets(xsk->fd, &off);
764 if (xsk->rx) {
765 munmap(xsk->rx->ring - off.rx.desc,
766 off.rx.desc + xsk->config.rx_size * desc_sz);
768 if (xsk->tx) {
769 munmap(xsk->tx->ring - off.tx.desc,
770 off.tx.desc + xsk->config.tx_size * desc_sz);
778 if (xsk->fd != umem->fd)
779 close(xsk->fd);
780 free(xsk);