Reintroduce failover (and make it a little faster)

Signed-off-by: Adrien Gallouët <adrien@gallouet.fr>
This commit is contained in:
Adrien Gallouët
2019-12-26 13:26:53 +00:00
parent dc22121739
commit 97407b2527

16
mud.c
View File

@@ -1466,6 +1466,9 @@ mud_update(struct mud *mud)
for (unsigned i = 0; i < mud->count; i++) { for (unsigned i = 0; i < mud->count; i++) {
struct mud_path *path = &mud->paths[i]; struct mud_path *path = &mud->paths[i];
if (path->state < MUD_DOWN)
continue;
if ((path->state == MUD_DOWN || !mud->peer.set) && if ((path->state == MUD_DOWN || !mud->peer.set) &&
(mud_timeout(now, path->rx.time, 10 * MUD_ONE_SEC))) { (mud_timeout(now, path->rx.time, 10 * MUD_ONE_SEC))) {
mud_remove_path(path); mud_remove_path(path);
@@ -1475,6 +1478,8 @@ mud_update(struct mud *mud)
if (path->state <= MUD_DOWN) if (path->state <= MUD_DOWN)
continue; continue;
path->ok = 0;
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);
@@ -1482,16 +1487,13 @@ mud_update(struct mud *mud)
} else { } else {
path->msg.sent = MUD_MSG_SENT_MAX; path->msg.sent = MUD_MSG_SENT_MAX;
} }
} } else if (!path->mtu.probe && path->mtu.ok && (mud->peer.set ||
!mud_timeout(mud->last_recv_time, path->rx.time,
if ((path->mtu.ok && !path->mtu.probe) && MUD_MSG_SENT_MAX * MUD_MSG_TIMEOUT))) {
(path->msg.sent < MUD_MSG_SENT_MAX)) {
if (!mtu || mtu > path->mtu.ok) if (!mtu || mtu > path->mtu.ok)
mtu = path->mtu.ok; mtu = path->mtu.ok;
path->ok = 1;
rate += path->tx.rate; rate += path->tx.rate;
} else { path->ok = 1;
path->ok = 0;
} }
if (mud->peer.set) { if (mud->peer.set) {