]> git.meshlink.io Git - meshlink/blobdiff - src/cygwin/device.c
Merge branch 'master' of git://tinc-vpn.org/tinc into 1.1
[meshlink] / src / cygwin / device.c
index 42016cb5a6e5e85fdd37bb26e6574fcaa2203a0b..cf9f1b579c497338eda1dfcfd60837110d017e20 100644 (file)
@@ -1,7 +1,7 @@
 /*
     device.c -- Interaction with Windows tap driver in a Cygwin environment
     Copyright (C) 2002-2005 Ivo Timmermans,
-                  2002-2009 Guus Sliepen <guus@tinc-vpn.org>
+                  2002-2011 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
@@ -45,7 +45,7 @@ static uint64_t device_total_out = 0;
 static pid_t reader_pid;
 static int sp[2];
 
-bool setup_device(void) {
+static bool setup_device(void) {
        HKEY key, key2;
        int i, err;
 
@@ -69,18 +69,18 @@ bool setup_device(void) {
        }
 
        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 */
 
-               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;
 
-               len = sizeof(adaptername);
+               len = sizeof adaptername;
                err = RegQueryValueEx(key2, "Name", 0, 0, adaptername, &len);
 
                RegCloseKey(key2);
@@ -104,7 +104,7 @@ bool setup_device(void) {
                                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, 0);
                if(device_handle != INVALID_HANDLE_VALUE) {
                        CloseHandle(device_handle);
@@ -126,7 +126,7 @@ bool setup_device(void) {
        if(!iface)
                iface = xstrdup(adaptername);
 
-       snprintf(tapname, sizeof(tapname), USERMODEDEVICEDIR "%s" TAPSUFFIX, device);
+       snprintf(tapname, sizeof tapname, USERMODEDEVICEDIR "%s" TAPSUFFIX, device);
        
        /* Now we are going to open this device twice: once for reading and once for writing.
           We do this because apparently it isn't possible to check for activity in the select() loop.
@@ -150,7 +150,7 @@ bool setup_device(void) {
 
        /* 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;
        }
@@ -173,7 +173,7 @@ bool setup_device(void) {
                   It passes everything it reads to the socket. */
        
                char buf[MTU];
-               long lenin;
+               long inlen;
 
                CloseHandle(device_handle);
 
@@ -196,8 +196,8 @@ bool setup_device(void) {
                /* Pass packets */
 
                for(;;) {
-                       ReadFile(device_handle, buf, MTU, &lenin, NULL);
-                       write(sp[1], buf, lenin);
+                       ReadFile(device_handle, buf, MTU, &inlen, NULL);
+                       write(sp[1], buf, inlen);
                }
        }
 
@@ -214,7 +214,7 @@ bool setup_device(void) {
        return true;
 }
 
-void close_device(void) {
+static void close_device(void) {
        close(sp[0]);
        close(sp[1]);
        CloseHandle(device_handle);
@@ -225,16 +225,16 @@ void close_device(void) {
        free(iface);
 }
 
-bool read_packet(vpn_packet_t *packet) {
-       int lenin;
+static bool read_packet(vpn_packet_t *packet) {
+       int inlen;
 
-       if((lenin = read(sp[0], packet->data, MTU)) <= 0) {
+       if((inlen = read(sp[0], packet->data, MTU)) <= 0) {
                logger(LOG_ERR, "Error while reading from %s %s: %s", device_info,
                           device, strerror(errno));
                return false;
        }
        
-       packet->len = lenin;
+       packet->len = inlen;
 
        device_total_in += packet->len;
 
@@ -244,13 +244,13 @@ bool read_packet(vpn_packet_t *packet) {
        return true;
 }
 
-bool write_packet(vpn_packet_t *packet) {
-       long lenout;
+static bool write_packet(vpn_packet_t *packet) {
+       long outlen;
 
        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, NULL)) {
+       if(!WriteFile (device_handle, packet->data, packet->len, &outlen, NULL)) {
                logger(LOG_ERR, "Error while writing to %s %s: %s", device_info, device, winerror(GetLastError()));
                return false;
        }
@@ -260,8 +260,16 @@ bool write_packet(vpn_packet_t *packet) {
        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, " 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,
+};