// SPDX-License-Identifier: GPL-2.0
#include <linux/bpf.h>
#include <bpf/bpf_helpers.h>
#include <bpf/bpf_endian.h>
int verdict_max_size = 10000;
struct {
	__uint(type, BPF_MAP_TYPE_SOCKMAP);
	__uint(max_entries, 20);
	__type(key, int);
	__type(value, int);
} sock_map SEC(".maps");

SEC("sk_skb/stream_verdict")
int prog_skb_verdict(struct __sk_buff *skb)
{
	__u32 one = 1;

	if (skb->len > verdict_max_size)
		return SK_PASS;

	return bpf_sk_redirect_map(skb, &sock_map, one, 0);
}

SEC("sk_skb/stream_verdict")
int prog_skb_verdict_pass(struct __sk_buff *skb)
{
	return SK_PASS;
}

SEC("sk_skb/stream_parser")
int prog_skb_parser(struct __sk_buff *skb)
{
	return skb->len;
}

SEC("sk_skb/stream_parser")
int prog_skb_parser_partial(struct __sk_buff *skb)
{
	/* agreement with the test program on a 4-byte size header
	 * and 6-byte body.
	 */
	if (skb->len < 4) {
		/* need more header to determine full length */
		return 0;
	}
	/* return full length decoded from header.
	 * the return value may be larger than skb->len which
	 * means framework must wait body coming.
	 */
	return 10;
}

SEC("sk_skb/stream_parser")
int prog_skb_parser_resize(struct __sk_buff *skb)
{
	bpf_skb_change_tail(skb, skb->len, 0);
	return skb->len;
}

char _license[] SEC("license") = "GPL";
