[PATCH macnocker] Only send data if interface is running
Fabian Bläse
fabian at blaese.de
Mi Apr 22 18:47:29 CEST 2020
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 <fabian at blaese.de>
---
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
}
--
2.26.2
Mehr Informationen über die Mailingliste franken-dev