1145170Sdas// SPDX-License-Identifier: GPL-2.0 2130767Sdas#include <linux/bpf.h> 3130767Sdas 4130767Sdas#include <bpf/bpf_helpers.h> 5130767Sdas 6130767Sdasstruct { 7130767Sdas __uint(type, BPF_MAP_TYPE_PROG_ARRAY); 8130767Sdas __uint(max_entries, 3); 9130767Sdas __uint(key_size, sizeof(__u32)); 10130767Sdas __uint(value_size, sizeof(__u32)); 11130767Sdas} jmp_table SEC(".maps"); 12130767Sdas 13130767Sdasint selector = 0; 14130767Sdas 15130767Sdas#define TAIL_FUNC(x) \ 16130767Sdas SEC("tc") \ 17130767Sdas int classifier_##x(struct __sk_buff *skb) \ 18130767Sdas { \ 19130767Sdas return x; \ 20130767Sdas } 21130767SdasTAIL_FUNC(0) 22130767SdasTAIL_FUNC(1) 23130767SdasTAIL_FUNC(2) 24130767Sdas 25130767SdasSEC("tc") 26130767Sdasint entry(struct __sk_buff *skb) 27145170Sdas{ 28130767Sdas bpf_tail_call(skb, &jmp_table, selector); 29130767Sdas return 3; 30130767Sdas} 31130767Sdas 32145170Sdaschar __license[] SEC("license") = "GPL"; 33145170Sdas