From patchwork Wed Apr 22 16:47:29 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: [macnocker] Only send data if interface is running From: Fabian Blaese X-Patchwork-Id: 1361 Message-Id: <20200422164729.1146104-1-fabian@blaese.de> To: franken-dev@freifunk.net Date: Wed, 22 Apr 2020 18:47:29 +0200 If the macnocker client tries to send data, but the interface is not running, this will result in error messages. However, an interface being down is a valid state and should not result in error messages. So first check the current state of the interface before trying to send data. Fixes: #104 Signed-off-by: Fabian Bläse Acked-by: Adrian Schmutzler --- macnockclient.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/macnockclient.c b/macnockclient.c index 0ef19a2..cdfba53 100644 --- a/macnockclient.c +++ b/macnockclient.c @@ -86,6 +86,19 @@ void macNockClient_run() { log_trace("[c] sending\n"); + // check if bound interface is down, trying to send data would result in an error + if (!(ioctl(fd, SIOCGIFFLAGS, &ifr) == 0)) + { + perror("[c] ERROR: Can't read Interface information"); + goto retry; + } + if (!(ifr.ifr_flags & IFF_RUNNING)) + { + // interface is not running, silently ignore + log_debug("[c] interface is not running\n"); + goto retry; + } + int sent = sendto(fd, nock, len, 0, (struct sockaddr *)&servaddr, sizeof(servaddr)); if (sent == -1) { @@ -96,6 +109,7 @@ void macNockClient_run() perror("[c] ERROR: Can't send all data"); } +retry: usleep(1 * 1000 * 1000); // sleep 1 s }