/*
device.c -- Interaction with Windows tap driver in a Cygwin environment
Copyright (C) 2002-2005 Ivo Timmermans,
- 2002-2013 Guus Sliepen <guus@tinc-vpn.org>
+ 2002-2014 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
*/
#include "../system.h"
+#include "../net.h"
#include <w32api/windows.h>
#include <w32api/winioctl.h>
#include "../device.h"
#include "../logger.h"
#include "../names.h"
-#include "../net.h"
#include "../route.h"
#include "../utils.h"
#include "../xalloc.h"
get_config_string(lookup_config(config_tree, "Device"), &device);
get_config_string(lookup_config(config_tree, "Interface"), &iface);
+ if(device && iface)
+ logger(LOG_WARNING, "Warning: both Device and Interface specified, results may not be as expected");
+
/* Open registry and look for network adapters */
if(RegOpenKeyEx(HKEY_LOCAL_MACHINE, NETWORK_CONNECTIONS_KEY, 0, KEY_READ, &key)) {
static void close_device(void) {
close(sp[0]);
close(sp[1]);
- CloseHandle(device_handle);
+ CloseHandle(device_handle); device_handle = INVALID_HANDLE_VALUE;
kill(reader_pid, SIGKILL);
- free(device);
- free(iface);
+ free(device); device = NULL;
+ free(iface); iface = NULL;
+ device_info = NULL;
}
static bool read_packet(vpn_packet_t *packet) {
int inlen;
- if((inlen = read(sp[0], packet->data, MTU)) <= 0) {
+ if((inlen = read(sp[0], DATA(packet), MTU)) <= 0) {
logger(DEBUG_ALWAYS, LOG_ERR, "Error while reading from %s %s: %s", device_info,
device, strerror(errno));
return false;
logger(DEBUG_TRAFFIC, LOG_DEBUG, "Writing packet of %d bytes to %s",
packet->len, device_info);
- if(!WriteFile (device_handle, packet->data, packet->len, &outlen, NULL)) {
+ if(!WriteFile (device_handle, DATA(packet), packet->len, &outlen, NULL)) {
logger(DEBUG_ALWAYS, LOG_ERR, "Error while writing to %s %s: %s", device_info, device, winerror(GetLastError()));
return false;
}