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