Remove old icmp/auto mtu code

Signed-off-by: Adrien Gallouët <adrien@gallouet.fr>
This commit is contained in:
Adrien Gallouët
2018-03-04 15:16:24 +00:00
parent b4ec962a3b
commit 4fab60ea87
6 changed files with 24 additions and 61 deletions

2
mud

Submodule mud updated: 5aeb0a3cb2...b809bf0785

View File

@@ -6,7 +6,6 @@
#include "tun.h" #include "tun.h"
#include <fcntl.h> #include <fcntl.h>
#include <netinet/in.h>
#include <stdio.h> #include <stdio.h>
#include <sys/select.h> #include <sys/select.h>
@@ -17,8 +16,6 @@
#define O_CLOEXEC 0 #define O_CLOEXEC 0
#endif #endif
#define GT_MTU(X) ((X)-28)
static void static void
fd_set_nonblock(int fd) fd_set_nonblock(int fd)
{ {
@@ -91,13 +88,19 @@ gt_setup_secretkey(struct mud *mud, const char *keyfile)
static size_t static size_t
gt_setup_mtu(struct mud *mud, const char *tun_name) gt_setup_mtu(struct mud *mud, const char *tun_name)
{ {
static size_t oldmtu = 0;
size_t mtu = mud_get_mtu(mud); size_t mtu = mud_get_mtu(mud);
if (mtu == oldmtu)
return mtu;
gt_log("setup MTU to %zu on interface %s\n", mtu, tun_name); gt_log("setup MTU to %zu on interface %s\n", mtu, tun_name);
if (iface_set_mtu(tun_name, mtu) == -1) if (iface_set_mtu(tun_name, mtu) == -1)
perror("tun_set_mtu"); perror("tun_set_mtu");
oldmtu = mtu;
return mtu; return mtu;
} }
@@ -111,12 +114,7 @@ gt_bind(int argc, char **argv)
const char *dev = NULL; const char *dev = NULL;
const char *keyfile = NULL; const char *keyfile = NULL;
size_t bufsize = 64 * 1024 * 1024; size_t bufsize = 64 * 1024 * 1024;
size_t mtu = 1500; size_t mtu = 1330;
struct argz mtuz[] = {
{"auto", NULL, NULL, argz_option},
{NULL, "BYTES", &mtu, argz_bytes},
{NULL}};
struct argz toz[] = { struct argz toz[] = {
{NULL, "IPADDR", &peer_addr, argz_addr}, {NULL, "IPADDR", &peer_addr, argz_addr},
@@ -128,7 +126,7 @@ gt_bind(int argc, char **argv)
{NULL, "PORT", &bind_port, argz_ushort}, {NULL, "PORT", &bind_port, argz_ushort},
{"to", NULL, &toz, argz_option}, {"to", NULL, &toz, argz_option},
{"dev", "NAME", &dev, argz_str}, {"dev", "NAME", &dev, argz_str},
{"mtu", NULL, &mtuz, argz_option}, {"mtu", "BYTES", &mtu, argz_option},
{"keyfile", "FILE", &keyfile, argz_str}, {"keyfile", "FILE", &keyfile, argz_str},
{"chacha", NULL, NULL, argz_option}, {"chacha", NULL, NULL, argz_option},
{"persist", NULL, NULL, argz_option}, {"persist", NULL, NULL, argz_option},
@@ -148,19 +146,9 @@ gt_bind(int argc, char **argv)
return 1; return 1;
} }
int mtu_auto = argz_is_set(mtuz, "auto");
int chacha = argz_is_set(bindz, "chacha"); int chacha = argz_is_set(bindz, "chacha");
int persist = argz_is_set(bindz, "persist"); int persist = argz_is_set(bindz, "persist");
int icmp_fd = -1;
if (mtu_auto && (peer_addr.ss_family == AF_INET)) {
icmp_fd = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP);
if (icmp_fd == -1)
gt_log("couldn't create ICMP socket\n");
}
struct mud *mud = mud_create((struct sockaddr *)&bind_addr); struct mud *mud = mud_create((struct sockaddr *)&bind_addr);
if (!mud) { if (!mud) {
@@ -183,8 +171,6 @@ gt_bind(int argc, char **argv)
chacha = 1; chacha = 1;
} }
mud_set_mtu(mud, GT_MTU(mtu));
char tun_name[64]; char tun_name[64];
int tun_fd = tun_create(tun_name, sizeof(tun_name) - 1, dev); int tun_fd = tun_create(tun_name, sizeof(tun_name) - 1, dev);
@@ -193,6 +179,9 @@ gt_bind(int argc, char **argv)
return 1; return 1;
} }
mud_set_mtu(mud, mtu);
mtu = gt_setup_mtu(mud, tun_name);
if (tun_set_persist(tun_fd, persist) == -1) if (tun_set_persist(tun_fd, persist) == -1)
perror("tun_set_persist"); perror("tun_set_persist");
@@ -203,8 +192,6 @@ gt_bind(int argc, char **argv)
} }
} }
mtu = gt_setup_mtu(mud, tun_name);
int ctl_fd = ctl_create("/run/" PACKAGE_NAME, tun_name); int ctl_fd = ctl_create("/run/" PACKAGE_NAME, tun_name);
if (ctl_fd == -1) { if (ctl_fd == -1) {
@@ -216,7 +203,6 @@ gt_bind(int argc, char **argv)
fd_set_nonblock(tun_fd); fd_set_nonblock(tun_fd);
fd_set_nonblock(mud_fd); fd_set_nonblock(mud_fd);
fd_set_nonblock(icmp_fd);
fd_set_nonblock(ctl_fd); fd_set_nonblock(ctl_fd);
gt_log("running...\n"); gt_log("running...\n");
@@ -224,16 +210,13 @@ gt_bind(int argc, char **argv)
fd_set rfds; fd_set rfds;
FD_ZERO(&rfds); FD_ZERO(&rfds);
int last_fd = 1 + MAX(tun_fd, MAX(mud_fd, MAX(ctl_fd, icmp_fd))); int last_fd = 1 + MAX(tun_fd, MAX(mud_fd, ctl_fd));
while (!gt_quit) { while (!gt_quit) {
FD_SET(tun_fd, &rfds); FD_SET(tun_fd, &rfds);
FD_SET(mud_fd, &rfds); FD_SET(mud_fd, &rfds);
FD_SET(ctl_fd, &rfds); FD_SET(ctl_fd, &rfds);
if (icmp_fd != -1)
FD_SET(icmp_fd, &rfds);
if (select(last_fd, &rfds, NULL, NULL, NULL) == -1) { if (select(last_fd, &rfds, NULL, NULL, NULL) == -1) {
if (errno != EBADF) if (errno != EBADF)
continue; continue;
@@ -241,22 +224,7 @@ gt_bind(int argc, char **argv)
return 1; return 1;
} }
if (icmp_fd != -1 && FD_ISSET(icmp_fd, &rfds)) { mtu = gt_setup_mtu(mud, tun_name);
struct ip_common ic;
struct sockaddr_storage ss;
socklen_t sl = sizeof(ss);
ssize_t r = recvfrom(icmp_fd, buf, bufsize, 0,
(struct sockaddr *)&ss, &sl);
if (!ip_get_common(&ic, buf, r)) {
size_t mtu = ip_get_mtu(&ic, buf, r);
if (mtu > 0) {
gt_log("received MTU from ICMP: %zu\n", mtu);
mud_set_mtu(mud, GT_MTU(mtu));
}
}
}
if (FD_ISSET(ctl_fd, &rfds)) { if (FD_ISSET(ctl_fd, &rfds)) {
struct ctl_msg req, res = {.reply = 1}; struct ctl_msg req, res = {.reply = 1};
@@ -299,9 +267,9 @@ gt_bind(int argc, char **argv)
} }
break; break;
case CTL_MTU: case CTL_MTU:
mud_set_mtu(mud, GT_MTU((size_t)req.mtu)); mud_set_mtu(mud, (size_t)req.mtu);
res.mtu = gt_setup_mtu(mud, tun_name); mtu = gt_setup_mtu(mud, tun_name);
mtu = res.mtu; res.mtu = mtu;
break; break;
case CTL_TC: case CTL_TC:
if (mud_set_tc(mud, req.tc)) if (mud_set_tc(mud, req.tc))
@@ -317,7 +285,6 @@ gt_bind(int argc, char **argv)
break; break;
case CTL_STATUS: case CTL_STATUS:
res.status.mtu = mtu; res.status.mtu = mtu;
res.status.mtu_auto = (icmp_fd != -1);
res.status.chacha = chacha; res.status.chacha = chacha;
res.status.bind = bind_addr; res.status.bind = bind_addr;
res.status.peer = peer_addr; res.status.peer = peer_addr;
@@ -375,11 +342,12 @@ gt_bind(int argc, char **argv)
int r = mud_send(mud, &buf[p], q - p, tc); int r = mud_send(mud, &buf[p], q - p, tc);
if (r == -1 && errno == EMSGSIZE) { if (r == -1) {
mtu = gt_setup_mtu(mud, tun_name); if (errno == EMSGSIZE) {
} else { mtu = gt_setup_mtu(mud, tun_name);
if (r == -1 && errno != EAGAIN) } else if (errno != EAGAIN) {
perror("mud_send"); perror("mud_send");
}
} }
p = q; p = q;

View File

@@ -26,7 +26,6 @@ struct ctl_msg {
struct mud_path path_status; struct mud_path path_status;
struct { struct {
size_t mtu; size_t mtu;
int mtu_auto;
int chacha; int chacha;
struct sockaddr_storage bind; struct sockaddr_storage bind;
struct sockaddr_storage peer; struct sockaddr_storage peer;

View File

@@ -32,25 +32,21 @@ gt_show_dev_status(int fd, const char *dev)
printf("server %s:\n" printf("server %s:\n"
" bind: %s port %"PRIu16"\n" " bind: %s port %"PRIu16"\n"
" mtu: %zu\n" " mtu: %zu\n"
" auto mtu: %s\n"
" cipher: %s\n", " cipher: %s\n",
dev, dev,
bindstr, gt_get_port((struct sockaddr *)&res.status.bind), bindstr, gt_get_port((struct sockaddr *)&res.status.bind),
res.status.mtu, res.status.mtu,
res.status.mtu_auto ? "enabled" : "disabled",
res.status.chacha ? "chacha20poly1305" : "aes256gcm"); res.status.chacha ? "chacha20poly1305" : "aes256gcm");
} else { } else {
printf("client %s:\n" printf("client %s:\n"
" bind: %s port %"PRIu16"\n" " bind: %s port %"PRIu16"\n"
" peer: %s port %"PRIu16"\n" " peer: %s port %"PRIu16"\n"
" mtu: %zu\n" " mtu: %zu\n"
" auto mtu: %s\n"
" cipher: %s\n", " cipher: %s\n",
dev, dev,
bindstr, gt_get_port((struct sockaddr *)&res.status.bind), bindstr, gt_get_port((struct sockaddr *)&res.status.bind),
peerstr, gt_get_port((struct sockaddr *)&res.status.peer), peerstr, gt_get_port((struct sockaddr *)&res.status.peer),
res.status.mtu, res.status.mtu,
res.status.mtu_auto ? "enabled" : "disabled",
res.status.chacha ? "chacha20poly1305" : "aes256gcm"); res.status.chacha ? "chacha20poly1305" : "aes256gcm");
} }

View File

@@ -45,7 +45,7 @@ HOST=$HOST
PORT=$PORT PORT=$PORT
BIND=$BIND BIND=$BIND
BIND_PORT=$BIND_PORT BIND_PORT=$BIND_PORT
OPTIONS="mtu auto" OPTIONS=
EOF EOF
( umask 077; echo "$KEY" > "$DIR/key" ) ( umask 077; echo "$KEY" > "$DIR/key" )

View File

@@ -8,7 +8,7 @@ Restart=always
EnvironmentFile=/etc/glorytun/%i/env EnvironmentFile=/etc/glorytun/%i/env
ExecStart=@bindir@/glorytun-run keyfile /etc/glorytun/%i/key $OPTIONS ExecStart=@bindir@/glorytun-run keyfile /etc/glorytun/%i/key $OPTIONS
ExecStartPost=-/etc/glorytun/%i/post.sh ExecStartPost=-/etc/glorytun/%i/post.sh
CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_RAW CapabilityBoundingSet=CAP_NET_ADMIN
[Install] [Install]
WantedBy=multi-user.target WantedBy=multi-user.target