BPF List
 help / color / mirror / Atom feed
From: Yang Bo <yyyeer.bo@gmail.com>
To: bpf@vger.kernel.org
Cc: ast@kernel.org, Yang Bo <bo@hyper.sh>
Subject: [PATCH 2/2] mini test case.
Date: Mon,  5 Jun 2023 16:57:33 +0800	[thread overview]
Message-ID: <20230605085733.1833-3-yb203166@antfin.com> (raw)
In-Reply-To: <20230605085733.1833-1-yb203166@antfin.com>

From: Yang Bo <bo@hyper.sh>

update test example

Signed-off-by: Yang Bo <bo@hyper.sh>
---
 tools/lib/bpf/mini/Makefile |   2 +
 tools/lib/bpf/mini/main.c   | 130 ++++++++++++++++++++++++++++++++++++
 2 files changed, 132 insertions(+)
 create mode 100644 tools/lib/bpf/mini/Makefile
 create mode 100644 tools/lib/bpf/mini/main.c

diff --git a/tools/lib/bpf/mini/Makefile b/tools/lib/bpf/mini/Makefile
new file mode 100644
index 000000000000..c4f6901aebed
--- /dev/null
+++ b/tools/lib/bpf/mini/Makefile
@@ -0,0 +1,2 @@
+default:
+	gcc -o test main.c ../libbpf.a -lelf -lz
diff --git a/tools/lib/bpf/mini/main.c b/tools/lib/bpf/mini/main.c
new file mode 100644
index 000000000000..d245be004f20
--- /dev/null
+++ b/tools/lib/bpf/mini/main.c
@@ -0,0 +1,130 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+#include <asm/byteorder.h>
+
+#include "../bpf.h"
+
+int main(int argc, char *argv[]) {
+	struct member *member;
+	char *key, *value = NULL, *end;
+	bool update = false;
+	int err = 0;
+	__u64 data = 0;
+	__u32 id;
+	int size;
+	__u64 raw[2] = {};
+	bool print = true;
+	
+#if defined(__BYTE_ORDER) ? __BYTE_ORDER == __BIG_ENDIAN : defined(__BIG_ENDIAN)
+	printf("big endian\n");
+
+#else
+	printf("little endian\n");
+#endif
+	if (argc != 3 && argc != 4) {
+		printf("invalid number of params: %d\n", argc);
+		return -1;
+	}
+
+	id = strtol(argv[1], &end, 10);
+	if (errno) {
+		printf("cannot convert map id: %s\n", argv[1]);
+		return -1;
+	}
+
+	key = strdup(argv[2]);
+	if (argc == 4) {
+		update = true;
+		value = strdup(argv[3]);
+	}
+
+	member = bpf_global_query_key(id, key);
+	if (!member) {
+		printf("can not query key: %s\n", strerror(errno));
+		return -1;
+	}
+
+	// display data
+	switch (member->size) {
+		case 64:
+			data = *(__u64 *)member->data;
+			break;
+
+		case 32:
+			data = *(__u32 *)member->data;
+			break;
+
+		case 16:
+			data = *(__u16 *)member->data;
+			break;
+
+		case 8:
+			data = *(__u8 *)member->data;
+			break;
+
+		default:
+			printf("unsupported size: %d\n", member->size);
+			size = (member->size + 7) / 8;
+			memcpy(raw, member->data, size);
+			printf("as u64: %lx, %lx\n", raw[0], raw[1]);
+			print = false;
+	}
+
+	if (print) {
+		printf("data: %ld, type: %d, size: %d\n", data, member->type, member->size);
+	}
+
+	free(member->data);
+	free(member);
+
+	print = true;
+	if (update) {
+		err = bpf_global_update_key(id, key, value);
+		if (err) {
+			printf("cannot update key: %s\n", strerror(errno));
+			return -1;
+		}
+
+		member = bpf_global_query_key(id, key);
+		if (!member) {
+			printf("can not query key: %s\n", strerror(errno));
+			return -1;
+		}
+	
+		// display data
+		switch (member->size) {
+			case 64:
+				data = *(__u64 *)member->data;
+				break;
+	
+			case 32:
+				data = *(__u32 *)member->data;
+				break;
+	
+			case 16:
+				data = *(__u16 *)member->data;
+				break;
+	
+			case 8:
+				data = *(__u8 *)member->data;
+				break;
+	
+			default:
+				printf("unsupported size: %d\n", member->size);
+				size = (member->size + 7) / 8;
+				memcpy(&raw, member->data, size);
+				printf("as u64: %lx, %lx\n", raw[0], raw[1]);
+				print = false;
+		}
+
+		if (print) {
+			printf("updated data: %ld, type: %d, size: %d\n", data, member->type, member->size);
+		}
+
+		free(member->data);
+		free(member);
+	}
+	return 0;
+}
-- 
2.40.0


      parent reply	other threads:[~2023-06-05  8:58 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-06-05  8:57 [PATCH 0/2] Add api to manipulate global varaible Yang Bo
2023-06-05  8:57 ` [PATCH 1/2] Add api to manipulate global variable Yang Bo
2023-06-05 10:12   ` Greg KH
2023-06-05 21:28   ` Andrii Nakryiko
2023-06-05  8:57 ` Yang Bo [this message]

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=20230605085733.1833-3-yb203166@antfin.com \
    --to=yyyeer.bo@gmail.com \
    --cc=ast@kernel.org \
    --cc=bo@hyper.sh \
    --cc=bpf@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox