1dbd7eb14SDaniel Borkmann // SPDX-License-Identifier: GPL-2.0 2dbd7eb14SDaniel Borkmann #include <linux/bpf.h> 3dbd7eb14SDaniel Borkmann 4dbd7eb14SDaniel Borkmann #include <bpf/bpf_helpers.h> 5dbd7eb14SDaniel Borkmann 6dbd7eb14SDaniel Borkmann struct { 7dbd7eb14SDaniel Borkmann __uint(type, BPF_MAP_TYPE_PROG_ARRAY); 8dbd7eb14SDaniel Borkmann __uint(max_entries, 1); 9dbd7eb14SDaniel Borkmann __uint(key_size, sizeof(__u32)); 10dbd7eb14SDaniel Borkmann __uint(value_size, sizeof(__u32)); 11dbd7eb14SDaniel Borkmann } jmp_table SEC(".maps"); 12dbd7eb14SDaniel Borkmann 13dbd7eb14SDaniel Borkmann int count, which; 14dbd7eb14SDaniel Borkmann 15*c22bdd28SAndrii Nakryiko SEC("tc") classifier_0(struct __sk_buff * skb)16*c22bdd28SAndrii Nakryikoint classifier_0(struct __sk_buff *skb) 17dbd7eb14SDaniel Borkmann { 18dbd7eb14SDaniel Borkmann count++; 19dbd7eb14SDaniel Borkmann if (__builtin_constant_p(which)) 20dbd7eb14SDaniel Borkmann __bpf_unreachable(); 21dbd7eb14SDaniel Borkmann bpf_tail_call(skb, &jmp_table, which); 22dbd7eb14SDaniel Borkmann return 1; 23dbd7eb14SDaniel Borkmann } 24dbd7eb14SDaniel Borkmann 25*c22bdd28SAndrii Nakryiko SEC("tc") entry(struct __sk_buff * skb)26dbd7eb14SDaniel Borkmannint entry(struct __sk_buff *skb) 27dbd7eb14SDaniel Borkmann { 28dbd7eb14SDaniel Borkmann if (__builtin_constant_p(which)) 29dbd7eb14SDaniel Borkmann __bpf_unreachable(); 30dbd7eb14SDaniel Borkmann bpf_tail_call(skb, &jmp_table, which); 31dbd7eb14SDaniel Borkmann return 0; 32dbd7eb14SDaniel Borkmann } 33dbd7eb14SDaniel Borkmann 34dbd7eb14SDaniel Borkmann char __license[] SEC("license") = "GPL"; 35