]> granicus.if.org Git - strace/commitdiff
bpf: implement decoding of BPF_MAP_LOOKUP_AND_DELETE_ELEM command
authorDmitry V. Levin <ldv@altlinux.org>
Wed, 13 Mar 2019 18:38:51 +0000 (18:38 +0000)
committerDmitry V. Levin <ldv@altlinux.org>
Wed, 13 Mar 2019 18:38:51 +0000 (18:38 +0000)
BPF_MAP_LOOKUP_AND_DELETE_ELEM command was introduced by Linux commit
v4.20-rc1~151^2~32^2~11^2~2.

* bpf.c (decode_BPF_MAP_LOOKUP_AND_DELETE_ELEM): Alias
to decode_BPF_MAP_LOOKUP_ELEM.
(SYS_FUNC(bpf)) <bpf_cmd_decoders[]>: Add
BPF_CMD_ENTRY(BPF_MAP_LOOKUP_AND_DELETE_ELEM).
* tests/bpf.c (BPF_MAP_LOOKUP_AND_DELETE_ELEM_checks): Alias
to BPF_MAP_LOOKUP_ELEM_checks.
(main) <checks>: Add CHK(BPF_MAP_LOOKUP_AND_DELETE_ELEM).

bpf.c
tests/bpf.c

diff --git a/bpf.c b/bpf.c
index 69c9a4f5591df30b2c3417d0bd807f7a10dd2ed0..0bb0227974ed070dce8018e027e1a0eddbee9e28 100644 (file)
--- a/bpf.c
+++ b/bpf.c
@@ -233,6 +233,8 @@ BEGIN_BPF_CMD_DECODER(BPF_MAP_LOOKUP_ELEM)
 }
 END_BPF_CMD_DECODER(RVAL_DECODED)
 
+#define decode_BPF_MAP_LOOKUP_AND_DELETE_ELEM decode_BPF_MAP_LOOKUP_ELEM
+
 BEGIN_BPF_CMD_DECODER(BPF_MAP_UPDATE_ELEM)
 {
        PRINT_FIELD_FD("{", attr, map_fd, tcp);
@@ -866,6 +868,7 @@ SYS_FUNC(bpf)
                BPF_CMD_ENTRY(BPF_RAW_TRACEPOINT_OPEN),
                BPF_CMD_ENTRY(BPF_BTF_LOAD),
                BPF_CMD_ENTRY(BPF_BTF_GET_FD_BY_ID),
+               BPF_CMD_ENTRY(BPF_MAP_LOOKUP_AND_DELETE_ELEM),
        };
 
        const unsigned int cmd = tcp->u_arg[0];
index 8f887fb04654cd89eef6a4b7f3ecb21349f63bf0..5c04a8253b68150cf6c5e8c45ae0be1995039d6a 100644 (file)
@@ -441,6 +441,8 @@ static const struct bpf_attr_check BPF_MAP_LOOKUP_ELEM_checks[] = {
        }
 };
 
+#define BPF_MAP_LOOKUP_AND_DELETE_ELEM_checks BPF_MAP_LOOKUP_ELEM_checks
+
 static const struct bpf_attr_check BPF_MAP_UPDATE_ELEM_checks[] = {
        {
                .data = { .BPF_MAP_UPDATE_ELEM_data = { .map_fd = -1 } },
@@ -1158,6 +1160,7 @@ main(void)
                CHK(BPF_RAW_TRACEPOINT_OPEN),
                CHK(BPF_BTF_LOAD),
                CHK(BPF_BTF_GET_FD_BY_ID),
+               CHK(BPF_MAP_LOOKUP_AND_DELETE_ELEM),
        };
 
        page_size = get_page_size();