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