Lines Matching defs:xsk
35 #include "xsk.h"
109 int xsk_socket__fd(const struct xsk_socket *xsk)
111 return xsk ? xsk->fd : -EINVAL;
356 static int xsk_load_xdp_prog(struct xsk_socket *xsk)
359 struct xsk_ctx *ctx = xsk->ctx;
429 err = bpf_set_link_xdp_fd(xsk->ctx->ifindex, prog_fd,
430 xsk->config.xdp_flags);
440 static int xsk_get_max_queues(struct xsk_socket *xsk)
443 struct xsk_ctx *ctx = xsk->ctx;
478 static int xsk_create_bpf_maps(struct xsk_socket *xsk)
480 struct xsk_ctx *ctx = xsk->ctx;
484 max_queues = xsk_get_max_queues(xsk);
498 static void xsk_delete_bpf_maps(struct xsk_socket *xsk)
500 struct xsk_ctx *ctx = xsk->ctx;
506 static int xsk_lookup_bpf_maps(struct xsk_socket *xsk)
511 struct xsk_ctx *ctx = xsk->ctx;
564 static int xsk_set_bpf_maps(struct xsk_socket *xsk)
566 struct xsk_ctx *ctx = xsk->ctx;
569 &xsk->fd, 0);
572 static int xsk_setup_xdp_prog(struct xsk_socket *xsk)
574 struct xsk_ctx *ctx = xsk->ctx;
579 xsk->config.xdp_flags);
584 err = xsk_create_bpf_maps(xsk);
588 err = xsk_load_xdp_prog(xsk);
590 xsk_delete_bpf_maps(xsk);
597 err = xsk_lookup_bpf_maps(xsk);
604 if (xsk->rx)
605 err = xsk_set_bpf_maps(xsk);
607 xsk_delete_bpf_maps(xsk);
659 static struct xsk_ctx *xsk_create_ctx(struct xsk_socket *xsk,
673 err = xsk_create_umem_rings(umem, xsk->fd, fill, comp);
710 struct xsk_socket *xsk;
719 xsk = calloc(1, sizeof(*xsk));
720 if (!xsk)
723 err = xsk_set_xdp_socket_config(&xsk->config, usr_config);
727 xsk->outstanding_tx = 0;
735 xsk->fd = socket(AF_XDP, SOCK_RAW, 0);
736 if (xsk->fd < 0) {
741 xsk->fd = umem->fd;
753 ctx = xsk_create_ctx(xsk, umem, ifindex, ifname, queue_id,
760 xsk->ctx = ctx;
763 err = setsockopt(xsk->fd, SOL_XDP, XDP_RX_RING,
764 &xsk->config.rx_size,
765 sizeof(xsk->config.rx_size));
770 if (xsk->fd == umem->fd)
774 err = setsockopt(xsk->fd, SOL_XDP, XDP_TX_RING,
775 &xsk->config.tx_size,
776 sizeof(xsk->config.tx_size));
781 if (xsk->fd == umem->fd)
785 err = xsk_get_mmap_offsets(xsk->fd, &off);
793 xsk->config.rx_size * sizeof(struct xdp_desc),
795 xsk->fd, XDP_PGOFF_RX_RING);
801 rx->mask = xsk->config.rx_size - 1;
802 rx->size = xsk->config.rx_size;
810 xsk->rx = rx;
814 xsk->config.tx_size * sizeof(struct xdp_desc),
816 xsk->fd, XDP_PGOFF_TX_RING);
822 tx->mask = xsk->config.tx_size - 1;
823 tx->size = xsk->config.tx_size;
832 tx->cached_cons = *tx->consumer + xsk->config.tx_size;
834 xsk->tx = tx;
843 sxdp.sxdp_flags = xsk->config.bind_flags;
846 err = bind(xsk->fd, (struct sockaddr *)&sxdp, sizeof(sxdp));
852 if (!(xsk->config.libbpf_flags & XSK_LIBBPF_FLAGS__INHIBIT_PROG_LOAD)) {
853 err = xsk_setup_xdp_prog(xsk);
858 *xsk_ptr = xsk;
866 xsk->config.tx_size * sizeof(struct xdp_desc));
870 xsk->config.rx_size * sizeof(struct xdp_desc));
875 close(xsk->fd);
877 free(xsk);
919 void xsk_socket__delete(struct xsk_socket *xsk)
927 if (!xsk)
930 ctx = xsk->ctx;
934 xsk_delete_bpf_maps(xsk);
940 err = xsk_get_mmap_offsets(xsk->fd, &off);
942 if (xsk->rx) {
943 munmap(xsk->rx->ring - off.rx.desc,
944 off.rx.desc + xsk->config.rx_size * desc_sz);
946 if (xsk->tx) {
947 munmap(xsk->tx->ring - off.tx.desc,
948 off.tx.desc + xsk->config.tx_size * desc_sz);
956 if (xsk->fd != umem->fd)
957 close(xsk->fd);
958 free(xsk);