// 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;

static volatile const __u32 print_len;
static 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;
}
