1 | // SPDX-License-Identifier: LGPL-2.1 |
2 | #include <sys/types.h> |
3 | #include <sys/socket.h> |
4 | |
5 | #ifndef MSG_PROBE |
6 | #define MSG_PROBE 0x10 |
7 | #endif |
8 | #ifndef MSG_WAITFORONE |
9 | #define MSG_WAITFORONE 0x10000 |
10 | #endif |
11 | #ifndef MSG_BATCH |
12 | #define MSG_BATCH 0x40000 |
13 | #endif |
14 | #ifndef MSG_ZEROCOPY |
15 | #define MSG_ZEROCOPY 0x4000000 |
16 | #endif |
17 | #ifndef MSG_SPLICE_PAGES |
18 | #define MSG_SPLICE_PAGES 0x8000000 |
19 | #endif |
20 | #ifndef MSG_FASTOPEN |
21 | #define MSG_FASTOPEN 0x20000000 |
22 | #endif |
23 | #ifndef MSG_CMSG_CLOEXEC |
24 | # define MSG_CMSG_CLOEXEC 0x40000000 |
25 | #endif |
26 | |
27 | static size_t syscall_arg__scnprintf_msg_flags(char *bf, size_t size, |
28 | struct syscall_arg *arg) |
29 | { |
30 | bool show_prefix = arg->show_string_prefix; |
31 | const char *prefix = "MSG_" ; |
32 | int printed = 0, flags = arg->val; |
33 | |
34 | if (flags == 0) |
35 | return scnprintf(buf: bf, size, fmt: "NONE" ); |
36 | #define P_MSG_FLAG(n) \ |
37 | if (flags & MSG_##n) { \ |
38 | printed += scnprintf(bf + printed, size - printed, "%s%s%s", printed ? "|" : "", show_prefix ? prefix : "", #n); \ |
39 | flags &= ~MSG_##n; \ |
40 | } |
41 | |
42 | P_MSG_FLAG(OOB); |
43 | P_MSG_FLAG(PEEK); |
44 | P_MSG_FLAG(DONTROUTE); |
45 | P_MSG_FLAG(CTRUNC); |
46 | P_MSG_FLAG(PROBE); |
47 | P_MSG_FLAG(TRUNC); |
48 | P_MSG_FLAG(DONTWAIT); |
49 | P_MSG_FLAG(EOR); |
50 | P_MSG_FLAG(WAITALL); |
51 | P_MSG_FLAG(FIN); |
52 | P_MSG_FLAG(SYN); |
53 | P_MSG_FLAG(CONFIRM); |
54 | P_MSG_FLAG(RST); |
55 | P_MSG_FLAG(ERRQUEUE); |
56 | P_MSG_FLAG(NOSIGNAL); |
57 | P_MSG_FLAG(MORE); |
58 | P_MSG_FLAG(WAITFORONE); |
59 | P_MSG_FLAG(BATCH); |
60 | P_MSG_FLAG(ZEROCOPY); |
61 | P_MSG_FLAG(SPLICE_PAGES); |
62 | P_MSG_FLAG(FASTOPEN); |
63 | P_MSG_FLAG(CMSG_CLOEXEC); |
64 | #undef P_MSG_FLAG |
65 | |
66 | if (flags) |
67 | printed += scnprintf(buf: bf + printed, size: size - printed, fmt: "%s%#x" , printed ? "|" : "" , flags); |
68 | |
69 | return printed; |
70 | } |
71 | |
72 | #define SCA_MSG_FLAGS syscall_arg__scnprintf_msg_flags |
73 | |