All of lore.kernel.org
 help / color / mirror / Atom feed
From: Daniel Borkmann <daniel@iogearbox.net>
To: Mauricio Vasquez B <mauricio.vasquez@polito.it>,
	Alexei Starovoitov <ast@kernel.org>
Cc: netdev@vger.kernel.org
Subject: Re: [PATCH bpf-next 2/3] selftests/bpf: add test cases for BPF_MAP_TYPE_QUEUE
Date: Tue, 7 Aug 2018 15:42:20 +0200	[thread overview]
Message-ID: <d951753b-2298-1d78-ee6e-fc9f207593bf@iogearbox.net> (raw)
In-Reply-To: <153356391611.6981.14864460244240605372.stgit@kernel>

On 08/06/2018 03:58 PM, Mauricio Vasquez B wrote:
> Signed-off-by: Mauricio Vasquez B <mauricio.vasquez@polito.it>
> ---
>  tools/include/uapi/linux/bpf.h          |    5 ++
>  tools/testing/selftests/bpf/test_maps.c |   72 +++++++++++++++++++++++++++++++
>  2 files changed, 77 insertions(+)
> 
> diff --git a/tools/include/uapi/linux/bpf.h b/tools/include/uapi/linux/bpf.h
> index 0ebaaf7f3568..2c171c40eb45 100644
> --- a/tools/include/uapi/linux/bpf.h
> +++ b/tools/include/uapi/linux/bpf.h
> @@ -120,6 +120,7 @@ enum bpf_map_type {
>  	BPF_MAP_TYPE_CPUMAP,
>  	BPF_MAP_TYPE_XSKMAP,
>  	BPF_MAP_TYPE_SOCKHASH,
> +	BPF_MAP_TYPE_QUEUE,
>  };
>  
>  enum bpf_prog_type {
> @@ -255,6 +256,10 @@ enum bpf_attach_type {
>  /* Flag for stack_map, store build_id+offset instead of pointer */
>  #define BPF_F_STACK_BUILD_ID	(1U << 5)
>  
> +/* Flags for queue_map, type of queue */
> +#define BPF_F_QUEUE_FIFO	(1U << 16)
> +#define BPF_F_QUEUE_LIFO	(2U << 16)
> +
>  enum bpf_stack_build_id_status {
>  	/* user space need an empty entry to identify end of a trace */
>  	BPF_STACK_BUILD_ID_EMPTY = 0,
> diff --git a/tools/testing/selftests/bpf/test_maps.c b/tools/testing/selftests/bpf/test_maps.c
> index 6c253343a6f9..34567b017dbb 100644
> --- a/tools/testing/selftests/bpf/test_maps.c
> +++ b/tools/testing/selftests/bpf/test_maps.c
> @@ -457,6 +457,77 @@ static void test_devmap(int task, void *data)
>  	close(fd);
>  }
>  
> +static void test_queuemap(int task, void *data)
> +{
> +	__u32 value;
> +	int fd, i;
> +
> +	/* test FIFO */
> +	fd = bpf_create_map(BPF_MAP_TYPE_QUEUE, 0, sizeof(value), 32,
> +			    BPF_F_QUEUE_FIFO);

We should also feed in 'map_flags' so that both prealloc and non-prealloc
will be tested.

> +	if (fd < 0) {
> +		printf("Failed to create queuemap '%s'!\n", strerror(errno));
> +		exit(1);
> +	}
> +
> +	/* Push 32 elements */
> +	for (i = 0; i < 32; i++) {
> +		value = 1000 - i * 3;
> +		assert(bpf_map_update_elem(fd, NULL, &value, 0) == 0);
> +	}
> +
> +	/* Check that element cannot be pushed due to max_entries limit */
> +	value = 1000;
> +	assert(bpf_map_update_elem(fd, NULL, &value, 0) == -1 &&
> +	       errno == E2BIG);
> +
> +	/* Pop all elements */
> +	for (i = 0; i < 32; i++)
> +		assert(bpf_map_lookup_elem(fd, NULL, &value) == 0 &&
> +		       value == (1000 - i * 3));
> +
> +	/* Check that there are not elements left */
> +	assert(bpf_map_lookup_elem(fd, NULL, &value) == -1 && errno == ENOENT);
> +
> +	assert(bpf_map_delete_elem(fd, NULL) == -1 && errno == EINVAL);
> +	assert(bpf_map_get_next_key(fd, NULL, NULL) == -1 && errno == EINVAL);
> +
> +	close(fd);
> +
> +	/* test LIFO */
> +	fd = bpf_create_map(BPF_MAP_TYPE_QUEUE, 0, sizeof(value), 32,
> +			    BPF_F_QUEUE_LIFO);

Ditto.

> +	if (fd < 0) {
> +		printf("Failed to create queuemap '%s'!\n", strerror(errno));
> +		exit(1);
> +	}
> +
> +	/* Push 32 elements */
> +	for (i = 0; i < 32; i++) {
> +		value = 1000 - i * 3;
> +		assert(bpf_map_update_elem(fd, NULL, &value, 0) == 0);
> +	}
> +
> +	/* Check that element cannot be pushed due to max_entries limit */
> +	value = 1000;
> +	assert(bpf_map_update_elem(fd, NULL, &value, 0) == -1 &&
> +	       errno == E2BIG);
> +
> +	/* Pop all elements */
> +	for (i = 31; i >= 0; i--)
> +		assert(bpf_map_lookup_elem(fd, NULL, &value) == 0 &&
> +		       value == (1000 - i * 3));
> +
> +	/* Check that there are not elements left */
> +	assert(bpf_map_lookup_elem(fd, NULL, &value) == -1 &&
> +	       errno == ENOENT);
> +
> +	assert(bpf_map_delete_elem(fd, NULL) == -1 && errno == EINVAL);
> +	assert(bpf_map_get_next_key(fd, NULL, NULL) == -1 && errno == EINVAL);
> +
> +	close(fd);
> +}
> +
>  #include <sys/socket.h>
>  #include <sys/ioctl.h>
>  #include <arpa/inet.h>
> @@ -1162,6 +1233,7 @@ static void run_all_tests(void)
>  	test_arraymap_percpu_many_keys();
>  
>  	test_devmap(0, NULL);
> +	test_queuemap(0, NULL);
>  	test_sockmap(0, NULL);
>  
>  	test_map_large();
> 

  reply	other threads:[~2018-08-07 15:56 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-08-06 13:58 [PATCH bpf-next 0/3] Implement bpf map queue Mauricio Vasquez B
2018-08-06 13:58 ` [PATCH bpf-next 1/3] bpf: add bpf queue map Mauricio Vasquez B
2018-08-07 13:40   ` Daniel Borkmann
2018-08-09  2:50     ` Mauricio Vasquez
2018-08-07 13:52   ` Daniel Borkmann
2018-08-09  2:55     ` Mauricio Vasquez
2018-08-07 14:42   ` Alexei Starovoitov
2018-08-09  3:08     ` Mauricio Vasquez
2018-08-09  4:48       ` Alexei Starovoitov
2018-08-09  9:02         ` Daniel Borkmann
2018-08-09 14:51           ` Mauricio Vasquez
2018-08-09 16:23             ` Alexei Starovoitov
2018-08-09 23:41               ` Mauricio Vasquez
2018-08-10  3:09                 ` Alexei Starovoitov
2018-08-06 13:58 ` [PATCH bpf-next 2/3] selftests/bpf: add test cases for BPF_MAP_TYPE_QUEUE Mauricio Vasquez B
2018-08-07 13:42   ` Daniel Borkmann [this message]
2018-08-06 13:58 ` [PATCH bpf-next 3/3] bpf: add sample " Mauricio Vasquez B
2018-08-07 13:44   ` Daniel Borkmann
2018-08-09  2:52     ` Mauricio Vasquez
2018-08-07 20:31   ` Jakub Kicinski

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=d951753b-2298-1d78-ee6e-fc9f207593bf@iogearbox.net \
    --to=daniel@iogearbox.net \
    --cc=ast@kernel.org \
    --cc=mauricio.vasquez@polito.it \
    --cc=netdev@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.