/*
fd_device.c -- Interaction with Android tun fd
Copyright (C) 2001-2005 Ivo Timmermans,
- 2001-2021 Guus Sliepen <guus@tinc-vpn.org>
+ 2001-2022 Guus Sliepen <guus@tinc-vpn.org>
2009 Grzegorz Dymarek <gregd72002@googlemail.com>
2016-2020 Pacien TRAN-GIRARD <pacien@pacien.net>
#include "system.h"
-#ifdef HAVE_SYS_UN_H
#include <sys/un.h>
#include "conf.h"
#include "logger.h"
#include "net.h"
#include "route.h"
-#include "utils.h"
struct unix_socket_addr {
size_t size;
struct iovec iov = {0};
char cmsgbuf[CMSG_SPACE(sizeof(device_fd))];
struct msghdr msg = {0};
- int ret;
+ ssize_t ret;
struct cmsghdr *cmsgptr;
iov.iov_base = &iobuf;
msg.msg_controllen = sizeof(cmsgbuf);
if((ret = recvmsg(socket, &msg, 0)) < 1) {
- logger(DEBUG_ALWAYS, LOG_ERR, "Could not read from unix socket (error %d)!", ret);
+ logger(DEBUG_ALWAYS, LOG_ERR, "Could not read from unix socket (error %ld)!", (long)ret);
return -1;
}
}
static struct unix_socket_addr parse_socket_addr(const char *path) {
- struct sockaddr_un socket_addr;
+ struct sockaddr_un socket_addr = {
+ .sun_family = AF_UNIX,
+ };
size_t path_length;
if(strlen(path) >= sizeof(socket_addr.sun_path)) {
};
}
- socket_addr.sun_family = AF_UNIX;
strncpy(socket_addr.sun_path, path, sizeof(socket_addr.sun_path));
if(path[0] == '@') {
return false;
}
- if(!get_config_string(lookup_config(config_tree, "Device"), &device)) {
+ if(!get_config_string(lookup_config(&config_tree, "Device"), &device)) {
logger(DEBUG_ALWAYS, LOG_ERR, "Could not read device from configuration!");
return false;
}
static void close_device(void) {
close(device_fd);
device_fd = -1;
+ free(iface);
+ iface = NULL;
+ free(device);
+ device = NULL;
}
static inline uint16_t get_ip_ethertype(vpn_packet_t *packet) {
}
static bool read_packet(vpn_packet_t *packet) {
- int lenin = read(device_fd, DATA(packet) + ETH_HLEN, MTU - ETH_HLEN);
+ ssize_t lenin = read(device_fd, DATA(packet) + ETH_HLEN, MTU - ETH_HLEN);
if(lenin <= 0) {
logger(DEBUG_ALWAYS, LOG_ERR, "Error while reading from fd/%d: %s!", device_fd, strerror(errno));
.read = read_packet,
.write = write_packet,
};
-#endif