xref: /linux/tools/testing/selftests/net/lib/ksft.h (revision 1b98f357dadd6ea613a435fbaef1a5dd7b35fd21)
1 /* SPDX-License-Identifier: GPL-2.0 */
2 #if !defined(__NET_KSFT_H__)
3 #define __NET_KSFT_H__
4 
5 #include <stdio.h>
6 #include <stdlib.h>
7 #include <unistd.h>
8 
9 static inline void ksft_ready(void)
10 {
11 	const char msg[7] = "ready\n";
12 	char *env_str;
13 	int fd;
14 
15 	env_str = getenv("KSFT_READY_FD");
16 	if (env_str) {
17 		fd = atoi(env_str);
18 		if (!fd) {
19 			fprintf(stderr, "invalid KSFT_READY_FD = '%s'\n",
20 				env_str);
21 			return;
22 		}
23 	} else {
24 		fd = STDOUT_FILENO;
25 	}
26 
27 	write(fd, msg, sizeof(msg));
28 	if (fd != STDOUT_FILENO)
29 		close(fd);
30 }
31 
32 static inline void ksft_wait(void)
33 {
34 	char *env_str;
35 	char byte;
36 	int fd;
37 
38 	env_str = getenv("KSFT_WAIT_FD");
39 	if (env_str) {
40 		fd = atoi(env_str);
41 		if (!fd) {
42 			fprintf(stderr, "invalid KSFT_WAIT_FD = '%s'\n",
43 				env_str);
44 			return;
45 		}
46 	} else {
47 		/* Not running in KSFT env, wait for input from STDIN instead */
48 		fd = STDIN_FILENO;
49 	}
50 
51 	read(fd, &byte, sizeof(byte));
52 	if (fd != STDIN_FILENO)
53 		close(fd);
54 }
55 
56 #endif
57