Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v6.12-rc2 62 lines 1.1 kB view raw
1// SPDX-License-Identifier: GPL-2.0 2#include <linux/bpf.h> 3#include <bpf/bpf_helpers.h> 4#include "bpf_misc.h" 5 6int classifier_0(struct __sk_buff *skb); 7 8struct { 9 __uint(type, BPF_MAP_TYPE_PROG_ARRAY); 10 __uint(max_entries, 1); 11 __uint(key_size, sizeof(__u32)); 12 __array(values, void (void)); 13} jmp_table0 SEC(".maps") = { 14 .values = { 15 [0] = (void *) &classifier_0, 16 }, 17}; 18 19struct { 20 __uint(type, BPF_MAP_TYPE_PROG_ARRAY); 21 __uint(max_entries, 1); 22 __uint(key_size, sizeof(__u32)); 23 __array(values, void (void)); 24} jmp_table1 SEC(".maps") = { 25 .values = { 26 [0] = (void *) &classifier_0, 27 }, 28}; 29 30int count = 0; 31 32static __noinline 33int subprog_tail(struct __sk_buff *skb, void *jmp_table) 34{ 35 bpf_tail_call_static(skb, jmp_table, 0); 36 return 0; 37} 38 39__auxiliary 40SEC("tc") 41int classifier_0(struct __sk_buff *skb) 42{ 43 count++; 44 subprog_tail(skb, &jmp_table0); 45 subprog_tail(skb, &jmp_table1); 46 return count; 47} 48 49__success 50__retval(33) 51SEC("tc") 52int tailcall_bpf2bpf_hierarchy_3(struct __sk_buff *skb) 53{ 54 int ret = 0; 55 56 bpf_tail_call_static(skb, &jmp_table0, 0); 57 58 __sink(ret); 59 return ret; 60} 61 62char __license[] SEC("license") = "GPL";