Re: [PATCH] samples/bpf: Update sockex2: get the expected output results

From: Nicolas Schier
Date: Wed Jul 26 2023 - 17:24:01 EST


On Wed, Jul 26, 2023 at 03:09:55PM +0800 George Guo wrote:
> Running "ping -4 -c5 localhost" only shows 4 times prints not 5:
>
> $ sudo ./samples/bpf/sockex2
> ip 127.0.0.1 bytes 392 packets 4
> ip 127.0.0.1 bytes 784 packets 8
> ip 127.0.0.1 bytes 1176 packets 12
> ip 127.0.0.1 bytes 1568 packets 16
>
> debug it with num prints:
> $ sudo ./samples/bpf/sockex2
> num = 1: ip 127.0.0.1 bytes 392 packets 4
> num = 2: ip 127.0.0.1 bytes 784 packets 8
> num = 3: ip 127.0.0.1 bytes 1176 packets 12
> num = 4: ip 127.0.0.1 bytes 1568 packets 16
>
> The reason is that we check it faster, just put sleep(1) before check
> while(bpf_map_get_next_key(map_fd, &key, &next_key) == 0).
> Now we get the expected results:
>
> $ sudo ./samples/bpf/sockex2
> num = 0: ip 127.0.0.1 bytes 392 packets 4
> num = 1: ip 127.0.0.1 bytes 784 packets 8
> num = 2: ip 127.0.0.1 bytes 1176 packets 12
> num = 3: ip 127.0.0.1 bytes 1568 packets 16
> num = 4: ip 127.0.0.1 bytes 1960 packets 20
>
> Signed-off-by: George Guo <guodongtai@xxxxxxxxxx>
> ---

Thanks, sounds reasonable to me (but I haven't checked it). Might you want to
minimize the diff to only contain the move of the sleep call?

Kind regards,
Nicolas


> samples/bpf/sockex2_user.c | 13 +++++++------
> 1 file changed, 7 insertions(+), 6 deletions(-)
>
> diff --git a/samples/bpf/sockex2_user.c b/samples/bpf/sockex2_user.c
> index 2c18471336f0..84bf1ab77649 100644
> --- a/samples/bpf/sockex2_user.c
> +++ b/samples/bpf/sockex2_user.c
> @@ -18,8 +18,8 @@ int main(int ac, char **argv)
> struct bpf_program *prog;
> struct bpf_object *obj;
> int map_fd, prog_fd;
> - char filename[256];
> - int i, sock, err;
> + char filename[256], command[64];
> + int i, sock, err, num = 5;
> FILE *f;
>
> snprintf(filename, sizeof(filename), "%s_kern.o", argv[0]);
> @@ -42,21 +42,22 @@ int main(int ac, char **argv)
> assert(setsockopt(sock, SOL_SOCKET, SO_ATTACH_BPF, &prog_fd,
> sizeof(prog_fd)) == 0);
>
> - f = popen("ping -4 -c5 localhost", "r");
> + snprintf(command, sizeof(command), "ping -4 -c%d localhost", num);
> + f = popen(command, "r");
> (void) f;
>
> - for (i = 0; i < 5; i++) {
> + for (i = 0; i < num; i++) {
> int key = 0, next_key;
> struct pair value;
>
> + sleep(1);
> while (bpf_map_get_next_key(map_fd, &key, &next_key) == 0) {
> bpf_map_lookup_elem(map_fd, &next_key, &value);
> - printf("ip %s bytes %lld packets %lld\n",
> + printf("num = %d: ip %s bytes %lld packets %lld\n", i,
> inet_ntoa((struct in_addr){htonl(next_key)}),
> value.bytes, value.packets);
> key = next_key;
> }
> - sleep(1);
> }
> return 0;
> }
> --
> 2.34.1

--
epost|xmpp: nicolas@xxxxxxxxx irc://oftc.net/nsc
↳ gpg: 18ed 52db e34f 860e e9fb c82b 7d97 0932 55a0 ce7f
-- frykten for herren er opphav til kunnskap --

Attachment: signature.asc
Description: PGP signature