]> git.meshlink.io Git - meshlink/blobdiff - src/mingw/device.c
Started the implementation of route_meshlink that at the moment routes packets based...
[meshlink] / src / mingw / device.c
index 0e748f85e9d965d5d5528b2129c5c610cff0d705..0642725fa5247b9440967ac788e68fd45d5ba407 100644 (file)
@@ -1,7 +1,7 @@
 /*
     device.c -- Interaction with Windows tap driver in a MinGW environment
     Copyright (C) 2002-2005 Ivo Timmermans,
-                  2002-2014 Guus Sliepen <guus@tinc-vpn.org>
+                  2002-2013 Guus Sliepen <guus@tinc-vpn.org>
 
     This program is free software; you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
@@ -40,6 +40,9 @@ char *device = NULL;
 char *iface = NULL;
 static char *device_info = NULL;
 
+static uint64_t device_total_in = 0;
+static uint64_t device_total_out = 0;
+
 extern char *myport;
 
 static DWORD WINAPI tapreader(void *bla) {
@@ -47,7 +50,6 @@ static DWORD WINAPI tapreader(void *bla) {
        DWORD len;
        OVERLAPPED overlapped;
        vpn_packet_t packet;
-       int errors;
 
        logger(DEBUG_ALWAYS, LOG_DEBUG, "Tap reader running");
 
@@ -70,22 +72,13 @@ static DWORD WINAPI tapreader(void *bla) {
                        } else {
                                logger(DEBUG_ALWAYS, LOG_ERR, "Error while reading from %s %s: %s", device_info,
                                           device, strerror(errno));
-                               errors++;
-                               if(errors >= 10) {
-                                       EnterCriticalSection(&mutex);
-                                       running = false;
-                                       LeaveCriticalSection(&mutex);
-                               }
-                               usleep(1000000);
-                               continue;
+                               return -1;
                        }
                }
 
-               errors = 0;
+               EnterCriticalSection(&mutex);
                packet.len = len;
                packet.priority = 0;
-
-               EnterCriticalSection(&mutex);
                route(myself, &packet);
                event_flush_output();
                LeaveCriticalSection(&mutex);
@@ -242,6 +235,8 @@ static bool write_packet(vpn_packet_t *packet) {
                return false;
        }
 
+       device_total_out += packet->len;
+
        return true;
 }