17bd1590dSMartin KaFai Lau // SPDX-License-Identifier: GPL-2.0
27bd1590dSMartin KaFai Lau /* Copyright (c) 2021 Facebook */
3*8e9af821SJiri Olsa #include "../bpf_testmod/bpf_testmod_kfunc.h"
47bd1590dSMartin KaFai Lau 
57bd1590dSMartin KaFai Lau extern const int bpf_prog_active __ksym;
67bd1590dSMartin KaFai Lau int active_res = -1;
7700dcf0fSMartin KaFai Lau int sk_state_res = -1;
87bd1590dSMartin KaFai Lau 
f1(struct __sk_buff * skb)97bd1590dSMartin KaFai Lau int __noinline f1(struct __sk_buff *skb)
107bd1590dSMartin KaFai Lau {
117bd1590dSMartin KaFai Lau 	struct bpf_sock *sk = skb->sk;
127bd1590dSMartin KaFai Lau 	int *active;
137bd1590dSMartin KaFai Lau 
147bd1590dSMartin KaFai Lau 	if (!sk)
157bd1590dSMartin KaFai Lau 		return -1;
167bd1590dSMartin KaFai Lau 
177bd1590dSMartin KaFai Lau 	sk = bpf_sk_fullsock(sk);
187bd1590dSMartin KaFai Lau 	if (!sk)
197bd1590dSMartin KaFai Lau 		return -1;
207bd1590dSMartin KaFai Lau 
217bd1590dSMartin KaFai Lau 	active = (int *)bpf_per_cpu_ptr(&bpf_prog_active,
227bd1590dSMartin KaFai Lau 					bpf_get_smp_processor_id());
237bd1590dSMartin KaFai Lau 	if (active)
247bd1590dSMartin KaFai Lau 		active_res = *active;
257bd1590dSMartin KaFai Lau 
26*8e9af821SJiri Olsa 	sk_state_res = bpf_kfunc_call_test3((struct sock *)sk)->__sk_common.skc_state;
277bd1590dSMartin KaFai Lau 
287bd1590dSMartin KaFai Lau 	return (__u32)bpf_kfunc_call_test1((struct sock *)sk, 1, 2, 3, 4);
297bd1590dSMartin KaFai Lau }
307bd1590dSMartin KaFai Lau 
31c22bdd28SAndrii Nakryiko SEC("tc")
kfunc_call_test1(struct __sk_buff * skb)327bd1590dSMartin KaFai Lau int kfunc_call_test1(struct __sk_buff *skb)
337bd1590dSMartin KaFai Lau {
347bd1590dSMartin KaFai Lau 	return f1(skb);
357bd1590dSMartin KaFai Lau }
367bd1590dSMartin KaFai Lau 
377bd1590dSMartin KaFai Lau char _license[] SEC("license") = "GPL";
38