projects
/
tinc
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge branch 'master' of git://tinc-vpn.org/tinc into 1.1
[tinc]
/
src
/
mingw
/
device.c
diff --git
a/src/mingw/device.c
b/src/mingw/device.c
index
c0f5d29
..
e468338
100644
(file)
--- a/
src/mingw/device.c
+++ b/
src/mingw/device.c
@@
-1,7
+1,7
@@
/*
device.c -- Interaction with Windows tap driver in a MinGW environment
Copyright (C) 2002-2005 Ivo Timmermans,
/*
device.c -- Interaction with Windows tap driver in a MinGW environment
Copyright (C) 2002-2005 Ivo Timmermans,
- 2002-20
09
Guus Sliepen <guus@tinc-vpn.org>
+ 2002-20
11
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
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
@@
-24,6
+24,7
@@
#include <winioctl.h>
#include "conf.h"
#include <winioctl.h>
#include "conf.h"
+#include "device.h"
#include "logger.h"
#include "net.h"
#include "route.h"
#include "logger.h"
#include "net.h"
#include "route.h"
@@
-38,8
+39,8
@@
char *device = NULL;
char *iface = NULL;
static char *device_info = NULL;
char *iface = NULL;
static char *device_info = NULL;
-static
in
t device_total_in = 0;
-static
in
t device_total_out = 0;
+static
uint64_
t device_total_in = 0;
+static
uint64_
t device_total_out = 0;
extern char *myport;
extern char *myport;
@@
-82,7
+83,7
@@
static DWORD WINAPI tapreader(void *bla) {
}
}
}
}
-bool setup_device(void) {
+
static
bool setup_device(void) {
HKEY key, key2;
int i;
HKEY key, key2;
int i;
@@
-95,17
+96,9
@@
bool setup_device(void) {
bool found = false;
bool found = false;
- int
sock,
err;
+ int err;
HANDLE thread;
HANDLE thread;
- struct addrinfo *ai;
- struct addrinfo hint = {
- .ai_family = AF_UNSPEC,
- .ai_socktype = SOCK_STREAM,
- .ai_protocol = IPPROTO_TCP,
- .ai_flags = 0,
- };
-
get_config_string(lookup_config(config_tree, "Device"), &device);
get_config_string(lookup_config(config_tree, "Interface"), &iface);
get_config_string(lookup_config(config_tree, "Device"), &device);
get_config_string(lookup_config(config_tree, "Interface"), &iface);
@@
-117,18
+110,18
@@
bool setup_device(void) {
}
for (i = 0; ; i++) {
}
for (i = 0; ; i++) {
- len = sizeof
(adapterid)
;
+ len = sizeof
adapterid
;
if(RegEnumKeyEx(key, i, adapterid, &len, 0, 0, 0, NULL))
break;
/* Find out more about this adapter */
if(RegEnumKeyEx(key, i, adapterid, &len, 0, 0, 0, NULL))
break;
/* Find out more about this adapter */
- snprintf(regpath, sizeof
(regpath)
, "%s\\%s\\Connection", NETWORK_CONNECTIONS_KEY, adapterid);
+ snprintf(regpath, sizeof
regpath
, "%s\\%s\\Connection", NETWORK_CONNECTIONS_KEY, adapterid);
if(RegOpenKeyEx(HKEY_LOCAL_MACHINE, regpath, 0, KEY_READ, &key2))
continue;
if(RegOpenKeyEx(HKEY_LOCAL_MACHINE, regpath, 0, KEY_READ, &key2))
continue;
- len = sizeof
(adaptername)
;
+ len = sizeof
adaptername
;
err = RegQueryValueEx(key2, "Name", 0, 0, adaptername, &len);
RegCloseKey(key2);
err = RegQueryValueEx(key2, "Name", 0, 0, adaptername, &len);
RegCloseKey(key2);
@@
-152,7
+145,7
@@
bool setup_device(void) {
continue;
}
continue;
}
- snprintf(tapname, sizeof
(tapname)
, USERMODEDEVICEDIR "%s" TAPSUFFIX, adapterid);
+ snprintf(tapname, sizeof
tapname
, USERMODEDEVICEDIR "%s" TAPSUFFIX, adapterid);
device_handle = CreateFile(tapname, GENERIC_WRITE | GENERIC_READ, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_SYSTEM | FILE_FLAG_OVERLAPPED, 0);
if(device_handle != INVALID_HANDLE_VALUE) {
found = true;
device_handle = CreateFile(tapname, GENERIC_WRITE | GENERIC_READ, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_SYSTEM | FILE_FLAG_OVERLAPPED, 0);
if(device_handle != INVALID_HANDLE_VALUE) {
found = true;
@@
-176,7
+169,7
@@
bool setup_device(void) {
/* Try to open the corresponding tap device */
if(device_handle == INVALID_HANDLE_VALUE) {
/* Try to open the corresponding tap device */
if(device_handle == INVALID_HANDLE_VALUE) {
- snprintf(tapname, sizeof
(tapname)
, USERMODEDEVICEDIR "%s" TAPSUFFIX, device);
+ snprintf(tapname, sizeof
tapname
, USERMODEDEVICEDIR "%s" TAPSUFFIX, device);
device_handle = CreateFile(tapname, GENERIC_WRITE | GENERIC_READ, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_SYSTEM | FILE_FLAG_OVERLAPPED, 0);
}
device_handle = CreateFile(tapname, GENERIC_WRITE | GENERIC_READ, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_SYSTEM | FILE_FLAG_OVERLAPPED, 0);
}
@@
-187,7
+180,7
@@
bool setup_device(void) {
/* Get MAC address from tap device */
/* Get MAC address from tap device */
- if(!DeviceIoControl(device_handle, TAP_IOCTL_GET_MAC, mymac.x, sizeof
(mymac.x), mymac.x, sizeof(mymac.x)
, &len, 0)) {
+ if(!DeviceIoControl(device_handle, TAP_IOCTL_GET_MAC, mymac.x, sizeof
mymac.x, mymac.x, sizeof mymac.x
, &len, 0)) {
logger(LOG_ERR, "Could not get MAC address from Windows tap device %s (%s): %s", device, iface, winerror(GetLastError()));
return false;
}
logger(LOG_ERR, "Could not get MAC address from Windows tap device %s (%s): %s", device, iface, winerror(GetLastError()));
return false;
}
@@
-208,7
+201,7
@@
bool setup_device(void) {
/* Set media status for newer TAP-Win32 devices */
status = true;
/* Set media status for newer TAP-Win32 devices */
status = true;
- DeviceIoControl(device_handle, TAP_IOCTL_SET_MEDIA_STATUS, &status, sizeof
(status), &status, sizeof(status)
, &len, NULL);
+ DeviceIoControl(device_handle, TAP_IOCTL_SET_MEDIA_STATUS, &status, sizeof
status, &status, sizeof status
, &len, NULL);
device_info = "Windows tap device";
device_info = "Windows tap device";
@@
-217,25
+210,25
@@
bool setup_device(void) {
return true;
}
return true;
}
-void close_device(void) {
+
static
void close_device(void) {
CloseHandle(device_handle);
free(device);
free(iface);
}
CloseHandle(device_handle);
free(device);
free(iface);
}
-bool read_packet(vpn_packet_t *packet) {
+
static
bool read_packet(vpn_packet_t *packet) {
return false;
}
return false;
}
-bool write_packet(vpn_packet_t *packet) {
- long
lenout
;
+
static
bool write_packet(vpn_packet_t *packet) {
+ long
outlen
;
OVERLAPPED overlapped = {0};
ifdebug(TRAFFIC) logger(LOG_DEBUG, "Writing packet of %d bytes to %s",
packet->len, device_info);
OVERLAPPED overlapped = {0};
ifdebug(TRAFFIC) logger(LOG_DEBUG, "Writing packet of %d bytes to %s",
packet->len, device_info);
- if(!WriteFile(device_handle, packet->data, packet->len, &
lenout
, &overlapped)) {
+ if(!WriteFile(device_handle, packet->data, packet->len, &
outlen
, &overlapped)) {
logger(LOG_ERR, "Error while writing to %s %s: %s", device_info, device, winerror(GetLastError()));
return false;
}
logger(LOG_ERR, "Error while writing to %s %s: %s", device_info, device, winerror(GetLastError()));
return false;
}
@@
-245,8
+238,16
@@
bool write_packet(vpn_packet_t *packet) {
return true;
}
return true;
}
-void dump_device_stats(void) {
+
static
void dump_device_stats(void) {
logger(LOG_DEBUG, "Statistics for %s %s:", device_info, device);
logger(LOG_DEBUG, "Statistics for %s %s:", device_info, device);
- logger(LOG_DEBUG, " total bytes in: %10
d"
, device_total_in);
- logger(LOG_DEBUG, " total bytes out: %10
d"
, device_total_out);
+ logger(LOG_DEBUG, " total bytes in: %10
"PRIu64
, device_total_in);
+ logger(LOG_DEBUG, " total bytes out: %10
"PRIu64
, device_total_out);
}
}
+
+const devops_t os_devops = {
+ .setup = setup_device,
+ .close = close_device,
+ .read = read_packet,
+ .write = write_packet,
+ .dump_stats = dump_device_stats,
+};