Changeset 8fc8ce


Ignore:
Timestamp:
06/14/09 22:12:35 (3 years ago)
Author:
Erik Ekman <yarrick@…>
Branches:
master
Children:
16e152
Parents:
e59aaa
git-author:
Erik Ekman <yarrick@…> (06/14/09 22:12:35)
git-committer:
Erik Ekman <erik@…> (02/04/12 20:34:02)
Message:

Any number of TAP32 interfaces supported, use -d to choose. #46

Files:
3 edited

Legend:

Unmodified
Added
Removed
  • CHANGELOG

    re59aaa r8fc8ce  
    99        - Fixed tunnel not working on Windows. 
    1010        - Any device name is now supported on Windows, fixes #47. 
     11        - Multiple installed TAP32 interfaces are now supported, fixes #46. 
    1112 
    12132009-06-01: 0.5.2 "WifiFree" 
  • README-win32.txt

    re59aaa r8fc8ce  
    1414 select to install only the TAP driver. 
    1515 
    16 2. Have one TAP32 interface installed 
     162. Make sure the interface you want to use does not have a default gateway set. 
     17   Use -d to specify the interface, use double quotes to include spaces, example 
     18   iodine.exe -d "Local Area Connection 4" abc.ab 
    1719 
    18 3. Make sure the interface does not have a default gateway set 
    19  
    20 4. Run iodine/iodined as normal (see the main README file). 
     203. Run iodine/iodined as normal (see the main README file). 
    2121   You may have to run it as administrator depending on user privileges. 
    2222 
    23 5. Enjoy! 
     234. Enjoy! 
    2424 
    2525 
     
    4848== Results of crappy Win32 API: 
    4949The following fixable limitations apply: 
    50 - Exactly one TAP32 interface must be installed 
    5150- Server cannot read packet destination address 
    5251 
  • src/tun.c

    re59aaa r8fc8ce  
    3333struct tun_data data; 
    3434 
     35static void get_name(char *ifname, int namelen, char *dev_name); 
     36 
    3537#define TAP_CONTROL_CODE(request,method) CTL_CODE(FILE_DEVICE_UNKNOWN, request, method, FILE_ANY_ACCESS) 
    3638#define TAP_IOCTL_CONFIG_TUN       TAP_CONTROL_CODE(10, METHOD_BUFFERED) 
     
    161163#else /* WINDOWS32 */ 
    162164static void 
    163 get_device(char *device, int device_len) 
     165get_device(char *device, int device_len, const char *wanted_dev) 
    164166{ 
    165167        LONG status; 
     
    217219                                warnx("Error reading registry key %s\\%s on TAP device", unit, iid_string); 
    218220                        } else { 
    219                                 /* Done getting name of TAP device */ 
     221                                /* Done getting GUID of TAP device, 
     222                                 * now check if the name is the requested one */ 
     223                                if (wanted_dev) { 
     224                                        char name[250]; 
     225                                        get_name(name, sizeof(name), device); 
     226                                        if (strncmp(name, wanted_dev, strlen(wanted_dev))) { 
     227                                                /* Skip if name mismatch */ 
     228                                                goto next; 
     229                                        } 
     230                                } 
     231                                /* Get the if name */ 
     232                                get_name(if_name, sizeof(if_name), device); 
    220233                                RegCloseKey(device_key); 
    221234                                return; 
     
    230243 
    231244static void 
    232 get_name(char *dev_name) 
     245get_name(char *ifname, int namelen, char *dev_name) 
    233246{ 
    234247        char path[256]; 
     
    239252        DWORD datatype; 
    240253 
    241         memset(if_name, 0, sizeof(if_name)); 
     254        memset(ifname, 0, namelen); 
    242255 
    243256        snprintf(path, sizeof(path), NETWORK_KEY "\\%s\\Connection", dev_name); 
    244257        status = RegOpenKeyEx(HKEY_LOCAL_MACHINE, path, 0, KEY_READ, &conn_key); 
    245         printf("%s ?? %s\n", path, dev_name); 
    246258        if (status != ERROR_SUCCESS) { 
    247259                fprintf(stderr, "Could not look up name of interface %s: error opening key\n", dev_name); 
     
    249261                return; 
    250262        } 
    251         len = sizeof(if_name); 
    252         status = RegQueryValueEx(conn_key, name_str, NULL, &datatype, (LPBYTE)if_name, &len); 
     263        len = namelen; 
     264        status = RegQueryValueEx(conn_key, name_str, NULL, &datatype, (LPBYTE)ifname, &len); 
    253265        if (status != ERROR_SUCCESS || datatype != REG_SZ) { 
    254266                fprintf(stderr, "Could not look up name of interface %s: error reading value\n", dev_name); 
     
    296308 
    297309        memset(adapter, 0, sizeof(adapter)); 
    298         get_device(adapter, sizeof(adapter)); 
    299         get_name(adapter); /* Copies interface 'human name' to if_name */ 
     310        get_device(adapter, sizeof(adapter), tun_device); 
     311        get_name(if_name, sizeof(if_name), adapter); 
    300312 
    301313        if (strlen(adapter) == 0 || strlen(if_name) == 0) { 
     
    305317         
    306318        snprintf(tapfile, sizeof(tapfile), "%s%s.tap", TAP_DEVICE_SPACE, adapter); 
    307         fprintf(stderr, "Opening device %s\n", tapfile); 
     319        fprintf(stderr, "Opening device %s\n", if_name); 
    308320        dev_handle = CreateFile(tapfile, GENERIC_WRITE | GENERIC_READ, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_SYSTEM | FILE_FLAG_OVERLAPPED, NULL); 
    309321        if (dev_handle == INVALID_HANDLE_VALUE) { 
Note: See TracChangeset for help on using the changeset viewer.