Fix compiling for Windows.
This commit is contained in:
parent
06a4a8c153
commit
cdda0388a8
1 changed files with 15 additions and 13 deletions
|
@ -1,7 +1,7 @@
|
||||||
/*
|
/*
|
||||||
device.c -- Interaction with Windows tap driver in a MinGW environment
|
device.c -- Interaction with Windows tap driver in a MinGW environment
|
||||||
Copyright (C) 2002-2005 Ivo Timmermans,
|
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
|
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
|
it under the terms of the GNU General Public License as published by
|
||||||
|
@ -40,6 +40,9 @@ char *device = NULL;
|
||||||
char *iface = NULL;
|
char *iface = NULL;
|
||||||
static char *device_info = NULL;
|
static char *device_info = NULL;
|
||||||
|
|
||||||
|
static uint64_t device_total_in = 0;
|
||||||
|
static uint64_t device_total_out = 0;
|
||||||
|
|
||||||
extern char *myport;
|
extern char *myport;
|
||||||
|
|
||||||
static DWORD WINAPI tapreader(void *bla) {
|
static DWORD WINAPI tapreader(void *bla) {
|
||||||
|
@ -47,7 +50,6 @@ static DWORD WINAPI tapreader(void *bla) {
|
||||||
DWORD len;
|
DWORD len;
|
||||||
OVERLAPPED overlapped;
|
OVERLAPPED overlapped;
|
||||||
vpn_packet_t packet;
|
vpn_packet_t packet;
|
||||||
int errors;
|
|
||||||
|
|
||||||
logger(DEBUG_ALWAYS, LOG_DEBUG, "Tap reader running");
|
logger(DEBUG_ALWAYS, LOG_DEBUG, "Tap reader running");
|
||||||
|
|
||||||
|
@ -70,22 +72,13 @@ static DWORD WINAPI tapreader(void *bla) {
|
||||||
} else {
|
} else {
|
||||||
logger(DEBUG_ALWAYS, LOG_ERR, "Error while reading from %s %s: %s", device_info,
|
logger(DEBUG_ALWAYS, LOG_ERR, "Error while reading from %s %s: %s", device_info,
|
||||||
device, strerror(errno));
|
device, strerror(errno));
|
||||||
errors++;
|
return -1;
|
||||||
if(errors >= 10) {
|
|
||||||
EnterCriticalSection(&mutex);
|
|
||||||
running = false;
|
|
||||||
LeaveCriticalSection(&mutex);
|
|
||||||
}
|
|
||||||
usleep(1000000);
|
|
||||||
continue;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
errors = 0;
|
EnterCriticalSection(&mutex);
|
||||||
packet.len = len;
|
packet.len = len;
|
||||||
packet.priority = 0;
|
packet.priority = 0;
|
||||||
|
|
||||||
EnterCriticalSection(&mutex);
|
|
||||||
route(myself, &packet);
|
route(myself, &packet);
|
||||||
event_flush_output();
|
event_flush_output();
|
||||||
LeaveCriticalSection(&mutex);
|
LeaveCriticalSection(&mutex);
|
||||||
|
@ -242,12 +235,21 @@ static bool write_packet(vpn_packet_t *packet) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
device_total_out += packet->len;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void dump_device_stats(void) {
|
||||||
|
logger(DEBUG_ALWAYS, LOG_DEBUG, "Statistics for %s %s:", device_info, device);
|
||||||
|
logger(DEBUG_ALWAYS, LOG_DEBUG, " total bytes in: %10"PRIu64, device_total_in);
|
||||||
|
logger(DEBUG_ALWAYS, LOG_DEBUG, " total bytes out: %10"PRIu64, device_total_out);
|
||||||
|
}
|
||||||
|
|
||||||
const devops_t os_devops = {
|
const devops_t os_devops = {
|
||||||
.setup = setup_device,
|
.setup = setup_device,
|
||||||
.close = close_device,
|
.close = close_device,
|
||||||
.read = read_packet,
|
.read = read_packet,
|
||||||
.write = write_packet,
|
.write = write_packet,
|
||||||
|
.dump_stats = dump_device_stats,
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in a new issue