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
prev 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