Compute a pseudo ratevar to help bw probing

Signed-off-by: Adrien Gallouët <adrien@gallouet.fr>
This commit is contained in:
Adrien Gallouët
2018-04-25 09:10:01 +00:00
parent ba9bef6268
commit 9f38b7b6e0
2 changed files with 20 additions and 8 deletions

17
mud.c
View File

@@ -553,6 +553,8 @@ mud_get_path(struct mud *mud, struct sockaddr_storage *local_addr,
path->mtu.ok = MUD_MTU; path->mtu.ok = MUD_MTU;
path->mtu.probe = mud->mtu; path->mtu.probe = mud->mtu;
path->ratevar = 10000000;
return path; return path;
} }
@@ -624,7 +626,7 @@ mud_update_map(struct mud *mud)
if (path->state <= MUD_DOWN) if (path->state <= MUD_DOWN)
continue; continue;
n += mud->paths[i].r_ratemax; n += mud->paths[i].r_ratemax + mud->paths[i].ratevar;
} }
mud->ratemax = n; mud->ratemax = n;
@@ -638,7 +640,7 @@ mud_update_map(struct mud *mud)
if (w < sizeof(mud->map)) if (w < sizeof(mud->map))
memset(&mud->map[w], i, sizeof(mud->map) - w); memset(&mud->map[w], i, sizeof(mud->map) - w);
w += ((mud->paths[i].r_ratemax << 10) + (n >> 1)) / n; w += (((mud->paths[i].r_ratemax + mud->paths[i].ratevar) << 10) + (n >> 1)) / n;
} }
return 0; return 0;
@@ -1291,12 +1293,21 @@ mud_packet_recv(struct mud *mud, struct mud_path *path,
} }
break; break;
case mud_stat: case mud_stat:
{
path->r_rms = mud_read48(packet->data.stat.rms); path->r_rms = mud_read48(packet->data.stat.rms);
path->r_rmt = mud_read48(packet->data.stat.rmt); path->r_rmt = mud_read48(packet->data.stat.rmt);
path->r_rate = mud_read48(packet->data.stat.rate); path->r_rate = mud_read48(packet->data.stat.rate);
path->r_ratemax = mud_read48(packet->data.stat.ratemax);
const uint64_t ratemax = mud_read48(packet->data.stat.ratemax);
path->ratevar = ((path->ratevar << 1) + path->ratevar +
mud_abs_diff(path->r_ratemax, ratemax)) >> 2;
path->r_ratemax = ratemax;
if (path->mtu.ok < path->r_rms) if (path->mtu.ok < path->r_rms)
path->mtu.ok = path->r_rms; path->mtu.ok = path->r_rms;
}
break; break;
default: default:
break; break;

1
mud.h
View File

@@ -32,6 +32,7 @@ struct mud_path {
uint64_t latmin; uint64_t latmin;
uint64_t latmax; uint64_t latmax;
uint64_t rst; uint64_t rst;
uint64_t ratevar;
uint64_t r_rate; uint64_t r_rate;
uint64_t r_ratemax; uint64_t r_ratemax;
uint64_t r_rst; uint64_t r_rst;