Lines Matching refs:xsk

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