xref: /linux/tools/testing/selftests/bpf/progs/test_global_func5.c (revision e65e175b07bef5974045cc42238de99057669ca7)
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))
8 int f1(struct __sk_buff *skb)
9 {
10 	return skb->len;
11 }
12 
13 int f3(int, struct __sk_buff *skb);
14 
15 __attribute__ ((noinline))
16 int f2(int val, struct __sk_buff *skb)
17 {
18 	return f1(skb) + f3(val, (void *)&val); /* type mismatch */
19 }
20 
21 __attribute__ ((noinline))
22 int f3(int val, struct __sk_buff *skb)
23 {
24 	return skb->ifindex * val;
25 }
26 
27 SEC("tc")
28 int test_cls(struct __sk_buff *skb)
29 {
30 	return f1(skb) + f2(2, skb) + f3(3, skb);
31 }
32