brintos

brintos / linux-shallow public Read only

0
0
Text · 1.1 KiB · 8159a0b Raw
48 lines · c
1// SPDX-License-Identifier: GPL-2.02#include <linux/bpf.h>3 4#include <bpf/bpf_helpers.h>5 6struct {7	__uint(type, BPF_MAP_TYPE_PROG_ARRAY);8	__uint(max_entries, 3);9	__uint(key_size, sizeof(__u32));10	__uint(value_size, sizeof(__u32));11} jmp_table SEC(".maps");12 13#define TAIL_FUNC(x) 				\14	SEC("tc")				\15	int classifier_##x(struct __sk_buff *skb)	\16	{					\17		return x;			\18	}19TAIL_FUNC(0)20TAIL_FUNC(1)21TAIL_FUNC(2)22 23SEC("tc")24int entry(struct __sk_buff *skb)25{26	/* Multiple locations to make sure we patch27	 * all of them.28	 */29	bpf_tail_call_static(skb, &jmp_table, 0);30	bpf_tail_call_static(skb, &jmp_table, 0);31	bpf_tail_call_static(skb, &jmp_table, 0);32	bpf_tail_call_static(skb, &jmp_table, 0);33 34	bpf_tail_call_static(skb, &jmp_table, 1);35	bpf_tail_call_static(skb, &jmp_table, 1);36	bpf_tail_call_static(skb, &jmp_table, 1);37	bpf_tail_call_static(skb, &jmp_table, 1);38 39	bpf_tail_call_static(skb, &jmp_table, 2);40	bpf_tail_call_static(skb, &jmp_table, 2);41	bpf_tail_call_static(skb, &jmp_table, 2);42	bpf_tail_call_static(skb, &jmp_table, 2);43 44	return 3;45}46 47char __license[] SEC("license") = "GPL";48