mirror of
https://github.com/yarrick/iodine.git
synced 2024-11-26 16:01:28 +00:00
Prepare for choosing device name
This commit is contained in:
parent
57c30612a7
commit
9a6ad85240
2
iodine.c
2
iodine.c
|
@ -247,7 +247,7 @@ main(int argc, char **argv)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((tun_fd = open_tun()) == -1)
|
if ((tun_fd = open_tun(NULL)) == -1)
|
||||||
goto cleanup1;
|
goto cleanup1;
|
||||||
if ((dns_fd = open_dns(argv[1], 0)) == -1)
|
if ((dns_fd = open_dns(argv[1], 0)) == -1)
|
||||||
goto cleanup2;
|
goto cleanup2;
|
||||||
|
|
|
@ -263,7 +263,7 @@ main(int argc, char **argv)
|
||||||
usage();
|
usage();
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((tun_fd = open_tun()) == -1)
|
if ((tun_fd = open_tun(NULL)) == -1)
|
||||||
goto cleanup0;
|
goto cleanup0;
|
||||||
if (tun_setip(argv[0]) != 0 || tun_setmtu(mtu) != 0)
|
if (tun_setip(argv[0]) != 0 || tun_setmtu(mtu) != 0)
|
||||||
goto cleanup1;
|
goto cleanup1;
|
||||||
|
|
53
tun.c
53
tun.c
|
@ -31,7 +31,6 @@
|
||||||
|
|
||||||
#define TUN_MAX_TRY 50
|
#define TUN_MAX_TRY 50
|
||||||
|
|
||||||
char *tun_device = NULL;
|
|
||||||
char if_name[50];
|
char if_name[50];
|
||||||
|
|
||||||
#ifdef LINUX
|
#ifdef LINUX
|
||||||
|
@ -41,17 +40,15 @@ char if_name[50];
|
||||||
#include <linux/if_tun.h>
|
#include <linux/if_tun.h>
|
||||||
|
|
||||||
int
|
int
|
||||||
open_tun()
|
open_tun(const char *tun_device)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
int tun_fd;
|
int tun_fd;
|
||||||
struct ifreq ifreq;
|
struct ifreq ifreq;
|
||||||
|
char *tunnel = "/dev/net/tun";
|
||||||
|
|
||||||
if (tun_device == NULL)
|
if ((tun_fd = open(tunnel, O_RDWR)) < 0) {
|
||||||
tun_device = "/dev/net/tun";
|
warn("open_tun: %s: %s", tunnel, strerror(errno));
|
||||||
|
|
||||||
if ((tun_fd = open(tun_device, O_RDWR)) < 0) {
|
|
||||||
warn("open_tun: %s: %s", tun_device, strerror(errno));
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -59,30 +56,44 @@ open_tun()
|
||||||
|
|
||||||
ifreq.ifr_flags = IFF_TUN;
|
ifreq.ifr_flags = IFF_TUN;
|
||||||
|
|
||||||
for (i = 0; i < TUN_MAX_TRY; i++) {
|
if (tun_device != NULL) {
|
||||||
snprintf(ifreq.ifr_name, IFNAMSIZ, "dns%d", i);
|
strncpy(ifreq.ifr_name, tun_device, IFNAMSIZ);
|
||||||
|
|
||||||
if (ioctl(tun_fd, TUNSETIFF, (void *) &ifreq) != -1) {
|
if (ioctl(tun_fd, TUNSETIFF, (void *) &ifreq) != -1) {
|
||||||
printf("Opened %s\n", ifreq.ifr_name);
|
printf("Opened %s\n", ifreq.ifr_name);
|
||||||
snprintf(if_name, sizeof(if_name), "dns%d", i);
|
snprintf(if_name, sizeof(if_name), "dns%d", i);
|
||||||
return tun_fd;
|
return tun_fd;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (errno != EBUSY) {
|
||||||
|
warn("open_tun: ioctl[TUNSETIFF]: %s", strerror(errno));
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
for (i = 0; i < TUN_MAX_TRY; i++) {
|
||||||
|
snprintf(ifreq.ifr_name, IFNAMSIZ, "dns%d", i);
|
||||||
|
|
||||||
|
if (ioctl(tun_fd, TUNSETIFF, (void *) &ifreq) != -1) {
|
||||||
|
printf("Opened %s\n", ifreq.ifr_name);
|
||||||
|
snprintf(if_name, sizeof(if_name), "dns%d", i);
|
||||||
|
return tun_fd;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (errno != EBUSY) {
|
||||||
|
warn("open_tun: ioctl[TUNSETIFF]: %s", strerror(errno));
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (errno != EBUSY) {
|
warn("open_tun: Couldn't set interface name.\n");
|
||||||
warn("open_tun: ioctl[TUNSETIFF]: %s", strerror(errno));
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
warn("open_tun: Couldn't set interface name.\n");
|
|
||||||
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
#else /* BSD */
|
#else /* BSD */
|
||||||
|
|
||||||
int
|
int
|
||||||
open_tun()
|
open_tun(const char *tun_device)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
int tun_fd;
|
int tun_fd;
|
||||||
|
|
2
tun.h
2
tun.h
|
@ -19,7 +19,7 @@
|
||||||
#ifndef _TUN_H_
|
#ifndef _TUN_H_
|
||||||
#define _TUN_H_
|
#define _TUN_H_
|
||||||
|
|
||||||
int open_tun();
|
int open_tun(const char *);
|
||||||
void close_tun(int);
|
void close_tun(int);
|
||||||
int write_tun(int, char *, int);
|
int write_tun(int, char *, int);
|
||||||
int read_tun(int, char *, int);
|
int read_tun(int, char *, int);
|
||||||
|
|
Loading…
Reference in a new issue