2016-02-05 15:58:32 +00:00
|
|
|
// VpnCloud - Peer-to-Peer VPN
|
2019-02-19 21:04:21 +00:00
|
|
|
// Copyright (C) 2015-2019 Dennis Schwerdel
|
2016-02-05 15:58:32 +00:00
|
|
|
// This software is licensed under GPL-3 or newer (see LICENSE.md)
|
|
|
|
|
2015-11-19 15:34:20 +00:00
|
|
|
#include <stdint.h>
|
|
|
|
#include <net/if.h>
|
|
|
|
#include <linux/if_tun.h>
|
|
|
|
#include <string.h>
|
|
|
|
#include <sys/ioctl.h>
|
|
|
|
|
2015-11-21 16:06:57 +00:00
|
|
|
int32_t setup_device(int32_t fd, char *ifname, int32_t flags) {
|
2015-11-19 15:34:20 +00:00
|
|
|
struct ifreq ifr;
|
|
|
|
memset(&ifr, 0, sizeof(ifr));
|
2015-11-21 16:06:57 +00:00
|
|
|
ifr.ifr_flags = flags;
|
2015-11-19 15:34:20 +00:00
|
|
|
strncpy(ifr.ifr_name, ifname, IFNAMSIZ);
|
|
|
|
if (ioctl(fd, TUNSETIFF, (void *)&ifr) < 0) return 1;
|
|
|
|
strncpy(ifname, ifr.ifr_name, IFNAMSIZ);
|
|
|
|
return 0;
|
2015-11-21 16:06:57 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
int32_t setup_tap_device(int32_t fd, char *ifname) {
|
|
|
|
return setup_device(fd, ifname, IFF_TAP | IFF_NO_PI);
|
|
|
|
}
|
|
|
|
|
|
|
|
int32_t setup_tun_device(int32_t fd, char *ifname) {
|
|
|
|
return setup_device(fd, ifname, IFF_TUN | IFF_NO_PI);
|
|
|
|
}
|