1 // SPDX-License-Identifier: GPL-2.0 2 /* Copyright (c) 2021 Facebook */ 3 #include <linux/bpf.h> 4 #include <bpf/bpf_helpers.h> 5 #include "bpf_tcp_helpers.h" 6 7 extern int bpf_kfunc_call_test2(struct sock *sk, __u32 a, __u32 b) __ksym; 8 extern __u64 bpf_kfunc_call_test1(struct sock *sk, __u32 a, __u64 b, 9 __u32 c, __u64 d) __ksym; 10 11 SEC("classifier") 12 int kfunc_call_test2(struct __sk_buff *skb) 13 { 14 struct bpf_sock *sk = skb->sk; 15 16 if (!sk) 17 return -1; 18 19 sk = bpf_sk_fullsock(sk); 20 if (!sk) 21 return -1; 22 23 return bpf_kfunc_call_test2((struct sock *)sk, 1, 2); 24 } 25 26 SEC("classifier") 27 int kfunc_call_test1(struct __sk_buff *skb) 28 { 29 struct bpf_sock *sk = skb->sk; 30 __u64 a = 1ULL << 32; 31 __u32 ret; 32 33 if (!sk) 34 return -1; 35 36 sk = bpf_sk_fullsock(sk); 37 if (!sk) 38 return -1; 39 40 a = bpf_kfunc_call_test1((struct sock *)sk, 1, a | 2, 3, a | 4); 41 ret = a >> 32; /* ret should be 2 */ 42 ret += (__u32)a; /* ret should be 12 */ 43 44 return ret; 45 } 46 47 char _license[] SEC("license") = "GPL"; 48