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