Reimplement backup

Signed-off-by: Adrien Gallouët <adrien@gallouet.fr>
This commit is contained in:
Adrien Gallouët
2020-01-02 19:27:57 +00:00
parent 6b1881e94c
commit e56abf5eaa

10
mud.c
View File

@@ -140,6 +140,7 @@ struct mud_keyx {
struct mud { struct mud {
int fd; int fd;
int backup;
uint64_t time_tolerance; uint64_t time_tolerance;
unsigned loss_limit; unsigned loss_limit;
struct sockaddr_storage addr; struct sockaddr_storage addr;
@@ -1415,6 +1416,9 @@ mud_update(struct mud *mud)
path->ok = 0; path->ok = 0;
if (!mud->backup && path->state == MUD_BACKUP)
continue;
if (path->msg.sent >= MUD_MSG_SENT_MAX) { if (path->msg.sent >= MUD_MSG_SENT_MAX) {
if (path->mtu.probe) { if (path->mtu.probe) {
mud_update_mtu(path, 0); mud_update_mtu(path, 0);
@@ -1427,6 +1431,8 @@ mud_update(struct mud *mud)
MUD_MSG_SENT_MAX * path->conf.msg_timeout))) { MUD_MSG_SENT_MAX * path->conf.msg_timeout))) {
if (!mtu || mtu > path->mtu.ok) if (!mtu || mtu > path->mtu.ok)
mtu = path->mtu.ok; mtu = path->mtu.ok;
if (path->state != MUD_BACKUP)
mud->backup = 0;
rate += path->tx.rate; rate += path->tx.rate;
path->ok = 1; path->ok = 1;
} }
@@ -1443,7 +1449,9 @@ mud_update(struct mud *mud)
count++; count++;
} }
if (rate && mud->window < 1500) { if (!rate) {
mud->backup = 1;
} else if (mud->window < 1500) {
uint64_t elapsed = MUD_TIME_MASK(now - mud->window_time); uint64_t elapsed = MUD_TIME_MASK(now - mud->window_time);
if (elapsed > MUD_ONE_MSEC) { if (elapsed > MUD_ONE_MSEC) {
if (elapsed > 20 * MUD_ONE_MSEC) if (elapsed > 20 * MUD_ONE_MSEC)