| // SPDX-License-Identifier: GPL-2.0 |
| /* Copyright (c) 2020 Facebook */ |
| #include "bpf_iter.h" |
| #include <bpf/bpf_helpers.h> |
| |
| char _license[] SEC("license") = "GPL"; |
| |
| __u32 map1_id = 0, map2_id = 0; |
| __u32 map1_accessed = 0, map2_accessed = 0; |
| __u64 map1_seqnum = 0, map2_seqnum1 = 0, map2_seqnum2 = 0; |
| |
| volatile const __u32 print_len; |
| volatile const __u32 ret1; |
| |
| SEC("iter/bpf_map") |
| int dump_bpf_map(struct bpf_iter__bpf_map *ctx) |
| { |
| struct seq_file *seq = ctx->meta->seq; |
| struct bpf_map *map = ctx->map; |
| __u64 seq_num; |
| int i, ret = 0; |
| |
| if (map == (void *)0) |
| return 0; |
| |
| /* only dump map1_id and map2_id */ |
| if (map->id != map1_id && map->id != map2_id) |
| return 0; |
| |
| seq_num = ctx->meta->seq_num; |
| if (map->id == map1_id) { |
| map1_seqnum = seq_num; |
| map1_accessed++; |
| } |
| |
| if (map->id == map2_id) { |
| if (map2_accessed == 0) { |
| map2_seqnum1 = seq_num; |
| if (ret1) |
| ret = 1; |
| } else { |
| map2_seqnum2 = seq_num; |
| } |
| map2_accessed++; |
| } |
| |
| /* fill seq_file buffer */ |
| for (i = 0; i < print_len; i++) |
| bpf_seq_write(seq, &seq_num, sizeof(seq_num)); |
| |
| return ret; |
| } |