diff --git a/tests/host/common/ArduinoMain.cpp b/tests/host/common/ArduinoMain.cpp index bb33c65616..dba9ab30fb 100644 --- a/tests/host/common/ArduinoMain.cpp +++ b/tests/host/common/ArduinoMain.cpp @@ -39,22 +39,43 @@ #include #include +#define MOCK_PORT_SHIFTER 9000 + bool user_exit = false; const char* host_interface = nullptr; size_t spiffs_kb = 1024; bool ignore_sigint = false; bool restore_tty = false; +bool mockdebug = false; +int mock_port_shifter = MOCK_PORT_SHIFTER; #define STDIN STDIN_FILENO static struct termios initial_settings; +int mockverbose (const char* fmt, ...) +{ + va_list ap; + va_start(ap, fmt); + if (mockdebug) + return fprintf(stderr, MOCK) + vfprintf(stderr, fmt, ap); + return 0; +} + static int mock_start_uart(void) { struct termios settings; - if (!isatty(STDIN)) return 0; - if (tcgetattr(STDIN, &initial_settings) < 0) return -1; + if (!isatty(STDIN)) + { + perror("setting tty in raw mode: isatty(STDIN)"); + return -1; + } + if (tcgetattr(STDIN, &initial_settings) < 0) + { + perror("setting tty in raw mode: tcgetattr(STDIN)"); + return -1; + } settings = initial_settings; settings.c_lflag &= ~(ignore_sigint ? ISIG : 0); settings.c_lflag &= ~(ECHO | ICANON); @@ -62,7 +83,11 @@ static int mock_start_uart(void) settings.c_oflag |= (ONLCR); settings.c_cc[VMIN] = 0; settings.c_cc[VTIME] = 0; - if (tcsetattr(STDIN, TCSANOW, &settings) < 0) return -2; + if (tcsetattr(STDIN, TCSANOW, &settings) < 0) + { + perror("setting tty in raw mode: tcsetattr(STDIN)"); + return -1; + } restore_tty = true; return 0; } @@ -71,11 +96,14 @@ static int mock_stop_uart(void) { if (!restore_tty) return 0; if (!isatty(STDIN)) { - perror("isatty(STDIN)"); - //system("stty sane"); <- same error message "Inappropriate ioctl for device" - return 0; + perror("restoring tty: isatty(STDIN)"); + return -1; + } + if (tcsetattr(STDIN, TCSANOW, &initial_settings) < 0) + { + perror("restoring tty: tcsetattr(STDIN)"); + return -1; } - if (tcsetattr(STDIN, TCSANOW, &initial_settings) < 0) return -1; printf("\e[?25h"); // show cursor return (0); } @@ -94,11 +122,14 @@ void help (const char* argv0, int exitcode) " -h\n" " -i - use this interface for IP address\n" " -l - bind tcp/udp servers to interface only (not 0.0.0.0)\n" + " -s - port shifter (default: %d, when root: 0)\n" " -c - ignore CTRL-C (send it via Serial)\n" " -f - no throttle (possibly 100%%CPU)\n" + " -b - blocking tty/mocked-uart (default: not blocking tty)\n" " -S - spiffs size in KBytes (default: %zd)\n" + " -v - mock verbose\n" " (negative value will force mismatched size)\n" - , argv0, spiffs_kb); + , argv0, MOCK_PORT_SHIFTER, spiffs_kb); exit(exitcode); } @@ -108,8 +139,11 @@ static struct option options[] = { "fast", no_argument, NULL, 'f' }, { "local", no_argument, NULL, 'l' }, { "sigint", no_argument, NULL, 'c' }, + { "blockinguart", no_argument, NULL, 'b' }, + { "verbose", no_argument, NULL, 'v' }, { "interface", required_argument, NULL, 'i' }, { "spiffskb", required_argument, NULL, 'S' }, + { "portshifter", required_argument, NULL, 's' }, }; void cleanup () @@ -133,13 +167,18 @@ void control_c (int sig) int main (int argc, char* const argv []) { - signal(SIGINT, control_c); - bool fast = false; + bool blocking_uart = false; + + signal(SIGINT, control_c); + if (geteuid() == 0) + mock_port_shifter = 0; + else + mock_port_shifter = MOCK_PORT_SHIFTER; for (;;) { - int n = getopt_long(argc, argv, "hlcfi:S:", options, NULL); + int n = getopt_long(argc, argv, "hlcfbvi:S:s:", options, NULL); if (n < 0) break; switch (n) @@ -153,6 +192,9 @@ int main (int argc, char* const argv []) case 'l': global_ipv4_netfmt = NO_GLOBAL_BINDING; break; + case 's': + mock_port_shifter = atoi(optarg); + break; case 'c': ignore_sigint = true; break; @@ -162,12 +204,19 @@ int main (int argc, char* const argv []) case 'S': spiffs_kb = atoi(optarg); break; + case 'b': + blocking_uart = true; + break; + case 'v': + mockdebug = true; + break; default: - fprintf(stderr, MOCK "bad option '%c'\n", n); - exit(EXIT_FAILURE); + help(argv[0], EXIT_FAILURE); } } + mockverbose("server port shifter: %d\n", mock_port_shifter); + if (spiffs_kb) { String name = argv[0]; @@ -180,8 +229,11 @@ int main (int argc, char* const argv []) // setup global global_ipv4_netfmt wifi_get_ip_info(0, nullptr); - // set stdin to non blocking mode - mock_start_uart(); + if (!blocking_uart) + { + // set stdin to non blocking mode + mock_start_uart(); + } // install exit handler in case Esp.restart() is called atexit(cleanup); diff --git a/tests/host/common/ArduinoMainUdp.cpp b/tests/host/common/ArduinoMainUdp.cpp index 99f567fe50..2962f4a483 100644 --- a/tests/host/common/ArduinoMainUdp.cpp +++ b/tests/host/common/ArduinoMainUdp.cpp @@ -58,7 +58,7 @@ void check_incoming_udp () p.events = POLLIN; if (poll(&p, 1, 0) && p.revents == POLLIN) { - fprintf(stderr, MOCK "UDP poll(%d) -> cb\r", p.fd); + mockverbose("UDP poll(%d) -> cb\r", p.fd); udp.second->mock_cb(); } } diff --git a/tests/host/common/ClientContextSocket.cpp b/tests/host/common/ClientContextSocket.cpp index 2bee9fa1cf..30ba390385 100644 --- a/tests/host/common/ClientContextSocket.cpp +++ b/tests/host/common/ClientContextSocket.cpp @@ -43,7 +43,7 @@ int mockSockSetup (int sock) { if (fcntl(sock, F_SETFL, O_NONBLOCK) == -1) { - fprintf(stderr, MOCK "socket fcntl(O_NONBLOCK): %s\n", strerror(errno)); + perror("socket fcntl(O_NONBLOCK)"); close(sock); return -1; } @@ -52,7 +52,8 @@ int mockSockSetup (int sock) int i = 1; if (setsockopt(sock, SOL_SOCKET, SO_NOSIGPIPE, &i, sizeof i) == -1) { - fprintf(stderr, MOCK "sockopt( SO_NOSIGPIPE)(macOS): %s\n", strerror(errno)); + perror("sockopt(SO_NOSIGPIPE)(macOS)"); + close(sock); return -1; } #endif @@ -84,6 +85,13 @@ ssize_t mockFillInBuf (int sock, char* ccinbuf, size_t& ccinbufsize) { size_t maxread = CCBUFSIZE - ccinbufsize; ssize_t ret = ::read(sock, ccinbuf + ccinbufsize, maxread); + + if (ret == 0) + { + // connection closed + return -1; + } + if (ret == -1) { if (errno != EAGAIN) @@ -100,7 +108,7 @@ ssize_t mockFillInBuf (int sock, char* ccinbuf, size_t& ccinbufsize) ssize_t mockPeekBytes (int sock, char* dst, size_t usersize, int timeout_ms, char* ccinbuf, size_t& ccinbufsize) { if (usersize > CCBUFSIZE) - fprintf(stderr, MOCK "CCBUFSIZE(%d) should be increased by %zd bytes (-> %zd)\n", CCBUFSIZE, usersize - CCBUFSIZE, usersize); + mockverbose("CCBUFSIZE(%d) should be increased by %zd bytes (-> %zd)\n", CCBUFSIZE, usersize - CCBUFSIZE, usersize); struct pollfd p; size_t retsize = 0; @@ -163,12 +171,12 @@ ssize_t mockWrite (int sock, const uint8_t* data, size_t size, int timeout_ms) #endif if (ret == -1) { - fprintf(stderr, MOCK "ClientContext::read: write(%d): %s\n", sock, strerror(errno)); + fprintf(stderr, MOCK "ClientContext::write(%d): %s\n", sock, strerror(errno)); return -1; } if (ret != (int)size) { - fprintf(stderr, MOCK "ClientContext::write: short write (%d < %zd) (TODO)\n", ret, size); + fprintf(stderr, MOCK "ClientContext::write: short write (%d < %zd) (FIXME poll loop TODO)\n", ret, size); exit(EXIT_FAILURE); } } diff --git a/tests/host/common/HostWiring.cpp b/tests/host/common/HostWiring.cpp index d08733a527..765d4297b6 100644 --- a/tests/host/common/HostWiring.cpp +++ b/tests/host/common/HostWiring.cpp @@ -31,6 +31,12 @@ #include +#ifdef DEBUG_ESP_CORE +#define VERBOSE(x...) fprintf(stderr, MOCK x) +#else +#define VERBOSE(x...) mockverbose(x) +#endif + void pinMode (uint8_t pin, uint8_t mode) { #define xxx(mode) case mode: m=STRHELPER(mode); break @@ -46,23 +52,17 @@ void pinMode (uint8_t pin, uint8_t mode) case WAKEUP_PULLDOWN: m="WAKEUP_PULLDOWN"; break; default: m="(special)"; } -#ifdef DEBUG_ESP_CORE - fprintf(stderr, MOCK "gpio%d: mode='%s'\n", pin, m); -#endif + VERBOSE("gpio%d: mode='%s'\n", pin, m); } void digitalWrite(uint8_t pin, uint8_t val) { -#ifdef DEBUG_ESP_CORE - fprintf(stderr, MOCK "digitalWrite(pin=%d val=%d)\n", pin, val); -#endif + VERBOSE("digitalWrite(pin=%d val=%d)\n", pin, val); } void analogWrite(uint8_t pin, int val) { -#ifdef DEBUG_ESP_CORE - fprintf(stderr, MOCK "analogWrite(pin=%d, val=%d\n", pin, val); -#endif + VERBOSE("analogWrite(pin=%d, val=%d\n", pin, val); } int analogRead(uint8_t pin) @@ -73,16 +73,12 @@ int analogRead(uint8_t pin) void analogWriteRange(uint32_t range) { -#ifdef DEBUG_ESP_CORE - fprintf(stderr, MOCK "analogWriteRange(range=%d)\n", range); -#endif + VERBOSE("analogWriteRange(range=%d)\n", range); } int digitalRead(uint8_t pin) { -#ifdef DEBUG_ESP_CORE - fprintf(stderr, MOCK "digitalRead(%d)\n", pin); -#endif + VERBOSE("digitalRead(%d)\n", pin); // pin 0 is most likely a low active input return pin ? 0 : 1; diff --git a/tests/host/common/MockEsp.cpp b/tests/host/common/MockEsp.cpp index 7410c4cbbf..244debf932 100644 --- a/tests/host/common/MockEsp.cpp +++ b/tests/host/common/MockEsp.cpp @@ -81,7 +81,7 @@ EspClass ESP; void EspClass::restart () { - fprintf(stderr, MOCK "Esp.restart(): exiting\n"); + mockverbose("Esp.restart(): exiting\n"); exit(EXIT_SUCCESS); } diff --git a/tests/host/common/MockTools.cpp b/tests/host/common/MockTools.cpp index ca257891b2..00e20b3e8f 100644 --- a/tests/host/common/MockTools.cpp +++ b/tests/host/common/MockTools.cpp @@ -59,7 +59,7 @@ extern "C" void configTime(long timezone, int daylightOffset_sec, (void)server2; (void)server3; - fprintf(stderr, MOCK "configTime: TODO (tz=%ldH offset=%dS) (time will be host's)\n", timezone, daylightOffset_sec); + mockverbose("configTime: TODO (tz=%ldH offset=%dS) (time will be host's)\n", timezone, daylightOffset_sec); } void stack_thunk_add_ref() { } diff --git a/tests/host/common/MockWiFiServer.cpp b/tests/host/common/MockWiFiServer.cpp index 1b5ef62604..6b8b7e83c5 100644 --- a/tests/host/common/MockWiFiServer.cpp +++ b/tests/host/common/MockWiFiServer.cpp @@ -47,23 +47,11 @@ extern "C" const ip_addr_t ip_addr_any = IPADDR4_INIT(IPADDR_ANY); WiFiServer::WiFiServer (const IPAddress& addr, uint16_t port) { (void)addr; - if (port < 1024) - { - int newport = port + 9000; - fprintf(stderr, MOCK "WiFiServer port: %d -> %d\n", port, newport); - port = newport; - } _port = port; } WiFiServer::WiFiServer (uint16_t port) { - if (port < 1024) - { - int newport = port + 9000; - fprintf(stderr, MOCK "WiFiServer port: %d -> %d\n", port, newport); - port = newport; - } _port = port; } diff --git a/tests/host/common/MockWiFiServerSocket.cpp b/tests/host/common/MockWiFiServerSocket.cpp index 5e83c37179..c791577d0f 100644 --- a/tests/host/common/MockWiFiServerSocket.cpp +++ b/tests/host/common/MockWiFiServerSocket.cpp @@ -67,8 +67,18 @@ void WiFiServer::begin (uint16_t port) void WiFiServer::begin () { int sock; + int mockport; struct sockaddr_in server; + mockport = _port; + if (mockport < 1024 && mock_port_shifter) + { + mockport += mock_port_shifter; + fprintf(stderr, MOCK "=====> WiFiServer port: %d shifted to %d (use option -s) <=====\n", _port, mockport); + } + else + fprintf(stderr, MOCK "=====> WiFiServer port: %d <=====\n", mockport); + if ((sock = socket(AF_INET, SOCK_STREAM, 0)) == -1) { perror(MOCK "socket()"); @@ -83,7 +93,7 @@ void WiFiServer::begin () } server.sin_family = AF_INET; - server.sin_port = htons(_port); + server.sin_port = htons(mockport); server.sin_addr.s_addr = htonl(INADDR_ANY); if (bind(sock, (struct sockaddr*)&server, sizeof(server)) == -1) { @@ -118,6 +128,7 @@ size_t WiFiServer::write (uint8_t c) size_t WiFiServer::write (const uint8_t *buf, size_t size) { fprintf(stderr, MOCK "todo: WiFiServer::write(%p, %zd)\n", buf, size); + exit(EXIT_FAILURE); return 0; } diff --git a/tests/host/common/UdpContextSocket.cpp b/tests/host/common/UdpContextSocket.cpp index a1135552c2..83d47053f7 100644 --- a/tests/host/common/UdpContextSocket.cpp +++ b/tests/host/common/UdpContextSocket.cpp @@ -52,7 +52,19 @@ int mockUDPSocket () bool mockUDPListen (int sock, uint32_t dstaddr, uint16_t port, uint32_t mcast) { - int optval = 1; + int optval; + int mockport; + + mockport = port; + if (mockport < 1024 && mock_port_shifter) + { + mockport += mock_port_shifter; + fprintf(stderr, MOCK "=====> UdpServer port: %d shifted to %d (use option -s) <=====\n", port, mockport); + } + else + fprintf(stderr, MOCK "=====> UdpServer port: %d <=====\n", mockport); + + optval = 1; if (setsockopt(sock, SOL_SOCKET, SO_REUSEPORT, &optval, sizeof(optval)) == -1) fprintf(stderr, MOCK "SO_REUSEPORT failed\n"); optval = 1; @@ -66,16 +78,16 @@ bool mockUDPListen (int sock, uint32_t dstaddr, uint16_t port, uint32_t mcast) servaddr.sin_family = AF_INET; //servaddr.sin_addr.s_addr = global_ipv4_netfmt?: dstaddr; servaddr.sin_addr.s_addr = htonl(INADDR_ANY); - servaddr.sin_port = htons(port); + servaddr.sin_port = htons(mockport); // Bind the socket with the server address if (bind(sock, (const struct sockaddr *)&servaddr, sizeof(servaddr)) < 0) { - fprintf(stderr, MOCK "UDP bind on port %d failed: %s\n", port, strerror(errno)); + fprintf(stderr, MOCK "UDP bind on port %d failed: %s\n", mockport, strerror(errno)); return false; } else - fprintf(stderr, MOCK "UDP server on port %d (sock=%d)\n", (int)port, sock); + mockverbose("UDP server on port %d (sock=%d)\n", mockport, sock); if (mcast) { diff --git a/tests/host/common/include/ClientContext.h b/tests/host/common/include/ClientContext.h index 3d212d73ec..f9e4a9e3d5 100644 --- a/tests/host/common/include/ClientContext.h +++ b/tests/host/common/include/ClientContext.h @@ -52,7 +52,10 @@ class ClientContext err_t abort() { if (_sock >= 0) + { ::close(_sock); + mockverbose("socket %d closed\n", _sock); + } _sock = -1; return ERR_ABRT; } @@ -111,12 +114,12 @@ class ClientContext void setNoDelay(bool nodelay) { - fprintf(stderr, MOCK "TODO setNoDelay(%d)\n", (int)nodelay); + mockverbose("TODO setNoDelay(%d)\n", (int)nodelay); } bool getNoDelay() const { - fprintf(stderr, MOCK "TODO getNoDelay()\n"); + mockverbose("TODO getNoDelay()\n"); return false; } @@ -132,25 +135,25 @@ class ClientContext uint32_t getRemoteAddress() const { - fprintf(stderr, MOCK "TODO getRemoteAddress()\n"); + mockverbose("TODO getRemoteAddress()\n"); return 0; } uint16_t getRemotePort() const { - fprintf(stderr, MOCK "TODO getRemotePort()\n"); + mockverbose("TODO getRemotePort()\n"); return 0; } uint32_t getLocalAddress() const { - fprintf(stderr, MOCK "TODO getLocalAddress()\n"); + mockverbose("TODO getLocalAddress()\n"); return 0; } uint16_t getLocalPort() const { - fprintf(stderr, MOCK "TODO getLocalPort()\n"); + mockverbose("TODO getLocalPort()\n"); return 0; } @@ -160,7 +163,13 @@ class ClientContext return 0; if (_inbufsize) return _inbufsize; - return mockFillInBuf(_sock, _inbuf, _inbufsize); + ssize_t ret = mockFillInBuf(_sock, _inbuf, _inbufsize); + if (ret < 0) + { + abort(); + return 0; + } + return ret; } int read() @@ -174,7 +183,7 @@ class ClientContext ssize_t ret = mockRead(_sock, dst, size, 0, _inbuf, _inbufsize); if (ret < 0) { - abort(); // close, CLOSED + abort(); return 0; } return ret; @@ -188,12 +197,18 @@ class ClientContext size_t peekBytes(char *dst, size_t size) { - return mockPeekBytes(_sock, dst, size, _timeout_ms, _inbuf, _inbufsize); + ssize_t ret = mockPeekBytes(_sock, dst, size, _timeout_ms, _inbuf, _inbufsize); + if (ret < 0) + { + abort(); + return 0; + } + return ret; } void discard_received() { - fprintf(stderr, MOCK "TODO: ClientContext::discard_received()\n"); + mockverbose("TODO: ClientContext::discard_received()\n"); } bool wait_until_sent(int max_wait_ms = WIFICLIENT_MAX_FLUSH_WAIT_MS) @@ -202,8 +217,9 @@ class ClientContext return true; } - uint8_t state() const + uint8_t state() { + (void)getSize(); // read on socket to force detect closed peer return _sock >= 0? ESTABLISHED: CLOSED; } @@ -212,7 +228,7 @@ class ClientContext ssize_t ret = mockWrite(_sock, data, size, _timeout_ms); if (ret < 0) { - abort(); // close, CLOSED + abort(); return 0; } return ret; @@ -242,42 +258,42 @@ class ClientContext void keepAlive (uint16_t idle_sec = TCP_DEFAULT_KEEPALIVE_IDLE_SEC, uint16_t intv_sec = TCP_DEFAULT_KEEPALIVE_INTERVAL_SEC, uint8_t count = TCP_DEFAULT_KEEPALIVE_COUNT) { - fprintf(stderr, MOCK "TODO ClientContext::keepAlive()\n"); + mockverbose("TODO ClientContext::keepAlive()\n"); } bool isKeepAliveEnabled () const { - fprintf(stderr, MOCK "TODO ClientContext::isKeepAliveEnabled()\n"); + mockverbose("TODO ClientContext::isKeepAliveEnabled()\n"); return false; } uint16_t getKeepAliveIdle () const { - fprintf(stderr, MOCK "TODO ClientContext::getKeepAliveIdle()\n"); + mockverbose("TODO ClientContext::getKeepAliveIdle()\n"); return 0; } uint16_t getKeepAliveInterval () const { - fprintf(stderr, MOCK "TODO ClientContext::getKeepAliveInternal()\n"); + mockverbose("TODO ClientContext::getKeepAliveInternal()\n"); return 0; } uint8_t getKeepAliveCount () const { - fprintf(stderr, MOCK "TODO ClientContext::getKeepAliveCount()\n"); + mockverbose("TODO ClientContext::getKeepAliveCount()\n"); return 0; } bool getSync () const { - fprintf(stderr, MOCK "TODO ClientContext::getSync()\n"); + mockverbose("TODO ClientContext::getSync()\n"); return _sync; } void setSync (bool sync) { - fprintf(stderr, MOCK "TODO ClientContext::setSync()\n"); + mockverbose("TODO ClientContext::setSync()\n"); _sync = sync; } diff --git a/tests/host/common/include/UdpContext.h b/tests/host/common/include/UdpContext.h index ebeedb0907..ab7c2a97d6 100644 --- a/tests/host/common/include/UdpContext.h +++ b/tests/host/common/include/UdpContext.h @@ -89,7 +89,7 @@ class UdpContext void setMulticastTTL(int ttl) { (void)ttl; - //fprintf(stderr, MOCK "TODO: UdpContext::setMulticastTTL\n"); + //mockverbose("TODO: UdpContext::setMulticastTTL\n"); } // warning: handler is called from tcp stack context @@ -112,7 +112,7 @@ class UdpContext { if (!isValidOffset(pos)) { - fprintf(stderr, MOCK "UDPContext::seek too far (%zd >= %zd)\n", pos, _inbufsize); + mockverbose("UDPContext::seek too far (%zd >= %zd)\n", pos, _inbufsize); exit(EXIT_FAILURE); } mockUDPSwallow(pos, _inbuf, _inbufsize); @@ -134,13 +134,13 @@ class UdpContext uint32_t getDestAddress() { - fprintf(stderr, MOCK "TODO: implement UDP getDestAddress\n"); + mockverbose("TODO: implement UDP getDestAddress\n"); return 0; //ip_hdr* iphdr = GET_IP_HDR(_rx_buf); } uint16_t getLocalPort() { - fprintf(stderr, MOCK "TODO: implement UDP getLocalPort\n"); + mockverbose("TODO: implement UDP getLocalPort\n"); return 0; // } @@ -175,7 +175,7 @@ class UdpContext void flush() { - //fprintf(stderr, MOCK "UdpContext::flush() does not follow arduino's flush concept\n"); + //mockverbose("UdpContext::flush() does not follow arduino's flush concept\n"); //exit(EXIT_FAILURE); // would be: _inbufsize = 0; @@ -185,7 +185,7 @@ class UdpContext { if (size + _outbufsize > sizeof _outbuf) { - fprintf(stderr, MOCK "UdpContext::append: increase CCBUFSIZE (%d -> %zd)\n", CCBUFSIZE, (size + _outbufsize)); + mockverbose("UdpContext::append: increase CCBUFSIZE (%d -> %zd)\n", CCBUFSIZE, (size + _outbufsize)); exit(EXIT_FAILURE); } @@ -225,7 +225,7 @@ class UdpContext //ip4_addr_set_u32(&ip_2_ip4(_dst), *(uint32_t*)addr); } else - fprintf(stderr, MOCK "TODO unhandled udp address of size %d\n", (int)addrsize); + mockverbose("TODO unhandled udp address of size %d\n", (int)addrsize); } int _sock = -1; diff --git a/tests/host/common/mock.h b/tests/host/common/mock.h index 6cfafc5ff7..2db914d783 100644 --- a/tests/host/common/mock.h +++ b/tests/host/common/mock.h @@ -77,8 +77,12 @@ extern "C" { int ets_printf (const char* fmt, ...) __attribute__ ((format (printf, 1, 2))); #define os_printf_plus printf +int mockverbose (const char* fmt, ...) __attribute__ ((format (printf, 1, 2))); + extern const char* host_interface; // cmdline parameter +extern int mock_port_shifter; + #define NO_GLOBAL_BINDING 0xffffffff extern uint32_t global_ipv4_netfmt; // selected interface addresse to bind to diff --git a/tests/host/common/user_interface.cpp b/tests/host/common/user_interface.cpp index 13d53ff06f..ac33e209ed 100644 --- a/tests/host/common/user_interface.cpp +++ b/tests/host/common/user_interface.cpp @@ -216,7 +216,7 @@ wifi_event_handler_cb_t wifi_event_handler_cb_emu = nullptr; void wifi_set_event_handler_cb (wifi_event_handler_cb_t cb) { wifi_event_handler_cb_emu = cb; - fprintf(stderr, MOCK "TODO: wifi_set_event_handler_cb set\n"); + mockverbose("TODO: wifi_set_event_handler_cb set\n"); } bool wifi_set_ip_info (uint8 if_index, struct ip_info *info)