On 12/10/2018 04:34 PM, Magnus Karlsson wrote:
[...]
> diff --git a/tools/lib/bpf/README.rst b/tools/lib/bpf/README.rst
> index 056f383..5a4d644 100644
> --- a/tools/lib/bpf/README.rst
> +++ b/tools/lib/bpf/README.rst
> @@ -9,7 +9,7 @@ described here. It's recommended to follow these conventions 
> whenever a
>  new function or type is added to keep libbpf API clean and consistent.
>  
>  All types and functions provided by libbpf API should have one of the
> -following prefixes: ``bpf_``, ``btf_``, ``libbpf_``.
> +following prefixes: ``bpf_``, ``btf_``, ``libbpf_``, ``xsk_``.
>  
>  System call wrappers
>  --------------------
> @@ -62,6 +62,15 @@ Auxiliary functions and types that don't fit well in any 
> of categories
>  described above should have ``libbpf_`` prefix, e.g.
>  ``libbpf_get_error`` or ``libbpf_prog_type_by_name``.
>  
> +AF_XDP functions
> +-------------------
> +
> +AF_XDP functions should have ``xsk_`` prefix, e.g.  ``xsk_get_data``
> +or ``xsk_create_umem``. The interface consists of both low-level ring
> +access functions and high-level configuration functions. These can be
> +mixed and matched. Note that these functions are not reentrant for
> +performance reasons.
> +
>  libbpf ABI
>  ==========
>  
[...]
> +
> +LIBBPF_API size_t xsk_peek_cons(struct xsk_cons_ring *ring, size_t nb,
> +                             __u32 *idx);
> +LIBBPF_API void xsk_release_cons(struct xsk_cons_ring *ring);
> +LIBBPF_API size_t xsk_reserve_prod(struct xsk_prod_ring *ring, size_t nb,
> +                                __u32 *idx);
> +LIBBPF_API void xsk_submit_prod(struct xsk_prod_ring *ring);
> +
> +LIBBPF_API void *xsk_get_data(void *umem_area, __u64 addr);

Nit (though exposed API related): Given existing naming conventions I think 
these
API helpers should have xsk__ prefix (double '_') similarly as done with btf 
ones.

> +#define XSK_DEFAULT_NUM_DESCS      2048
> +#define XSK_DEFAULT_FRAME_SHIFT    11 /* 2048 bytes */
> +#define XSK_DEFAULT_FRAME_SIZE     (1 << XSK_DEFAULT_FRAME_SHIFT)
> +#define XSK_DEFAULT_FRAME_HEADROOM 0
> +
> +struct xsk_umem_config {
> +     __u32 fq_size;
> +     __u32 cq_size;
> +     __u32 frame_size;
> +     __u32 frame_headroom;
> +};
> +
> +struct xsk_xdp_socket_config {
> +     __u32 rx_size;
> +     __u32 tx_size;
> +};
> +
> +/* Set config to XSK_DEFAULT_CONFIG to get the default configuration. */
> +LIBBPF_API int xsk_create_umem(void *umem_area, __u64 size,
> +                            struct xsk_prod_ring *fq,
> +                            struct xsk_cons_ring *cq,
> +                            struct xsk_umem_config *config);
> +LIBBPF_API int xsk_create_xdp_socket(int umem_fd, struct xsk_cons_ring *rx,
> +                                  struct xsk_prod_ring *tx,
> +                                  struct xsk_xdp_socket_config *config);
> +/* Returns 0 for success. */
> +LIBBPF_API int xsk_delete_umem(int fd);
> +LIBBPF_API int xsk_delete_xdp_socket(int fd);
> +
>  #ifdef __cplusplus

Reply via email to