Code cleanup

This commit is contained in:
Adrien Gallouët
2016-06-22 06:53:45 +00:00
parent 9474ea9d9d
commit bb307f26dc

37
mud.c
View File

@@ -27,6 +27,12 @@
#include <sodium.h> #include <sodium.h>
#if defined IP_PKTINFO
#define MUD_PKTINFO IP_PKTINFO
#elif defined IP_RECVDSTADDR
#define MUD_PKTINFO IP_RECVDSTADDR
#endif
#define MUD_COUNT(X) (sizeof(X)/sizeof(X[0])) #define MUD_COUNT(X) (sizeof(X)/sizeof(X[0]))
#define MUD_TIME_SIZE (6U) #define MUD_TIME_SIZE (6U)
@@ -177,7 +183,7 @@ uint64_t mud_now (struct mud *mud)
static static
uint64_t mud_dt (uint64_t a, uint64_t b) uint64_t mud_dt (uint64_t a, uint64_t b)
{ {
return (a >= b)?a-b:b-a; return (a >= b) ? a-b : b-a;
} }
static static
@@ -347,16 +353,15 @@ void mud_set_path (struct path *path, unsigned index,
path->index = index; path->index = index;
if (addr->sa_family == AF_INET) { if (addr->sa_family == AF_INET) {
if (addr != (struct sockaddr *)&path->addr) memmove(&path->addr, addr, sizeof(struct sockaddr_in));
memcpy(&path->addr, addr, sizeof(struct sockaddr_in));
memcpy(&path->ifa_in_addr, memcpy(&path->ifa_in_addr,
&((struct sockaddr_in *)ifa_addr)->sin_addr, &((struct sockaddr_in *)ifa_addr)->sin_addr,
sizeof(struct in_addr)); sizeof(struct in_addr));
cmsg->cmsg_level = IPPROTO_IP; cmsg->cmsg_level = IPPROTO_IP;
cmsg->cmsg_type = MUD_PKTINFO;
#if defined IP_PKTINFO #if defined IP_PKTINFO
cmsg->cmsg_type = IP_PKTINFO;
cmsg->cmsg_len = CMSG_LEN(sizeof(struct in_pktinfo)); cmsg->cmsg_len = CMSG_LEN(sizeof(struct in_pktinfo));
memcpy(&((struct in_pktinfo *)CMSG_DATA(cmsg))->ipi_ifindex, memcpy(&((struct in_pktinfo *)CMSG_DATA(cmsg))->ipi_ifindex,
@@ -368,10 +373,9 @@ void mud_set_path (struct path *path, unsigned index,
path->ctrl.size = CMSG_SPACE(sizeof(struct in_pktinfo)); path->ctrl.size = CMSG_SPACE(sizeof(struct in_pktinfo));
#elif defined IP_RECVDSTADDR #elif defined IP_RECVDSTADDR
cmsg->cmsg_type = IP_RECVDSTADDR;
cmsg->cmsg_len = CMSG_LEN(sizeof(struct in_addr)); cmsg->cmsg_len = CMSG_LEN(sizeof(struct in_addr));
memcpy((struct in_addr *)CMSG_DATA(cmsg), memcpy(CMSG_DATA(cmsg),
&((struct sockaddr_in *)ifa_addr)->sin_addr, &((struct sockaddr_in *)ifa_addr)->sin_addr,
sizeof(struct in_addr)); sizeof(struct in_addr));
@@ -380,8 +384,7 @@ void mud_set_path (struct path *path, unsigned index,
} }
if (addr->sa_family == AF_INET6) { if (addr->sa_family == AF_INET6) {
if (addr != (struct sockaddr *)&path->addr) memmove(&path->addr, addr, sizeof(struct sockaddr_in6));
memcpy(&path->addr, addr, sizeof(struct sockaddr_in6));
cmsg->cmsg_level = IPPROTO_IPV6; cmsg->cmsg_level = IPPROTO_IPV6;
cmsg->cmsg_type = IPV6_PKTINFO; cmsg->cmsg_type = IPV6_PKTINFO;
@@ -424,7 +427,6 @@ void mud_reset_path (struct path *path, unsigned index, struct sockaddr *addr)
continue; continue;
mud_set_path(path, index, addr, ifa_addr); mud_set_path(path, index, addr, ifa_addr);
break; break;
} }
@@ -549,15 +551,11 @@ int mud_set_time_tolerance_sec (struct mud *mud, unsigned sec)
static static
int mud_setup_socket (int fd, int v4, int v6) int mud_setup_socket (int fd, int v4, int v6)
{ {
if (mud_sso_int(fd, SOL_SOCKET, SO_REUSEADDR, 1) || if ((mud_sso_int(fd, SOL_SOCKET, SO_REUSEADDR, 1)) ||
#if defined IP_PKTINFO (v4 && mud_sso_int(fd, IPPROTO_IP, MUD_PKTINFO, 1)) ||
(v4 && mud_sso_int(fd, IPPROTO_IP, IP_PKTINFO, 1)) ||
#elif defined IP_RECVDSTADDR
(v4 && mud_sso_int(fd, IPPROTO_IP, IP_RECVDSTADDR, 1)) ||
#endif
(v6 && mud_sso_int(fd, IPPROTO_IPV6, IPV6_RECVPKTINFO, 1)) || (v6 && mud_sso_int(fd, IPPROTO_IPV6, IPV6_RECVPKTINFO, 1)) ||
(v6 && mud_sso_int(fd, IPPROTO_IPV6, IPV6_V6ONLY, !v4)) || (v6 && mud_sso_int(fd, IPPROTO_IPV6, IPV6_V6ONLY, !v4)) ||
mud_set_nonblock(fd)) (mud_set_nonblock(fd)))
return -1; return -1;
mud_sso_int(fd, SOL_SOCKET, SO_RCVBUF, 1<<24); mud_sso_int(fd, SOL_SOCKET, SO_RCVBUF, 1<<24);
@@ -767,12 +765,7 @@ static
struct cmsghdr *mud_get_pktinfo (struct msghdr *msg, int family) struct cmsghdr *mud_get_pktinfo (struct msghdr *msg, int family)
{ {
int cmsg_level = IPPROTO_IP; int cmsg_level = IPPROTO_IP;
int cmsg_type = MUD_PKTINFO;
#if defined IP_PKTINFO
int cmsg_type = IP_PKTINFO;
#elif defined IP_RECVDSTADDR
int cmsg_type = IP_RECVDSTADDR;
#endif
if (family == AF_INET6) { if (family == AF_INET6) {
cmsg_level = IPPROTO_IPV6; cmsg_level = IPPROTO_IPV6;