1 #ifndef __SOCKMAP_HELPERS__
2 #define __SOCKMAP_HELPERS__
3
4 #include "socket_helpers.h"
5
6 #define MAX_TEST_NAME 80
7
8 #define u32(v) ((u32){(v)})
9 #define u64(v) ((u64){(v)})
10
11 #define __always_unused __attribute__((__unused__))
12
13 #define xbpf_map_delete_elem(fd, key) \
14 ({ \
15 int __ret = bpf_map_delete_elem((fd), (key)); \
16 if (__ret < 0) \
17 FAIL_ERRNO("map_delete"); \
18 __ret; \
19 })
20
21 #define xbpf_map_lookup_elem(fd, key, val) \
22 ({ \
23 int __ret = bpf_map_lookup_elem((fd), (key), (val)); \
24 if (__ret < 0) \
25 FAIL_ERRNO("map_lookup"); \
26 __ret; \
27 })
28
29 #define xbpf_map_update_elem(fd, key, val, flags) \
30 ({ \
31 int __ret = bpf_map_update_elem((fd), (key), (val), (flags)); \
32 if (__ret < 0) \
33 FAIL_ERRNO("map_update"); \
34 __ret; \
35 })
36
37 #define xbpf_prog_attach(prog, target, type, flags) \
38 ({ \
39 int __ret = \
40 bpf_prog_attach((prog), (target), (type), (flags)); \
41 if (__ret < 0) \
42 FAIL_ERRNO("prog_attach(" #type ")"); \
43 __ret; \
44 })
45
46 #define xbpf_prog_detach2(prog, target, type) \
47 ({ \
48 int __ret = bpf_prog_detach2((prog), (target), (type)); \
49 if (__ret < 0) \
50 FAIL_ERRNO("prog_detach2(" #type ")"); \
51 __ret; \
52 })
53
54 #define xpthread_create(thread, attr, func, arg) \
55 ({ \
56 int __ret = pthread_create((thread), (attr), (func), (arg)); \
57 errno = __ret; \
58 if (__ret) \
59 FAIL_ERRNO("pthread_create"); \
60 __ret; \
61 })
62
63 #define xpthread_join(thread, retval) \
64 ({ \
65 int __ret = pthread_join((thread), (retval)); \
66 errno = __ret; \
67 if (__ret) \
68 FAIL_ERRNO("pthread_join"); \
69 __ret; \
70 })
71
add_to_sockmap(int mapfd,int fd1,int fd2)72 static inline int add_to_sockmap(int mapfd, int fd1, int fd2)
73 {
74 int err;
75
76 err = xbpf_map_update_elem(mapfd, &u32(0), &u64(fd1), BPF_NOEXIST);
77 if (err)
78 return err;
79
80 return xbpf_map_update_elem(mapfd, &u32(1), &u64(fd2), BPF_NOEXIST);
81 }
82
83 #endif // __SOCKMAP_HELPERS__
84