Linux kernel mirror (for testing)
git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel
os
linux
1// SPDX-License-Identifier: GPL-2.0-only
2/* Copyright (c) 2020 Facebook */
3#include <stddef.h>
4#include <linux/bpf.h>
5#include <bpf/bpf_helpers.h>
6
7__attribute__ ((noinline))
8int f1(struct __sk_buff *skb)
9{
10 return skb->len;
11}
12
13__attribute__ ((noinline))
14int f2(int val, struct __sk_buff *skb)
15{
16 return f1(skb) + val;
17}
18
19__attribute__ ((noinline))
20int f3(int val, struct __sk_buff *skb, int var)
21{
22 return f2(var, skb) + val;
23}
24
25__attribute__ ((noinline))
26int f4(struct __sk_buff *skb)
27{
28 return f3(1, skb, 2);
29}
30
31__attribute__ ((noinline))
32int f5(struct __sk_buff *skb)
33{
34 return f4(skb);
35}
36
37__attribute__ ((noinline))
38int f6(struct __sk_buff *skb)
39{
40 return f5(skb);
41}
42
43__attribute__ ((noinline))
44int f7(struct __sk_buff *skb)
45{
46 return f6(skb);
47}
48
49#ifndef NO_FN8
50__attribute__ ((noinline))
51int f8(struct __sk_buff *skb)
52{
53 return f7(skb);
54}
55#endif
56
57SEC("classifier/test")
58int test_cls(struct __sk_buff *skb)
59{
60#ifndef NO_FN8
61 return f8(skb);
62#else
63 return f7(skb);
64#endif
65}