Reintroduce failover (and make it a little faster)
Signed-off-by: Adrien Gallouët <adrien@gallouet.fr>
This commit is contained in:
16
mud.c
16
mud.c
@@ -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) {
|
||||||
|
|||||||
Reference in New Issue
Block a user