Reset pdr_missing early in port_nrate_calculate(), implement ratio_valid flag

[ RC: the point is that a port may not be considered capable until
  enough messages to compute the ratio have been received. ]

Signed-off-by: Delio Brignoli <dbrignoli@audioscience.com>
Reviewed-by: Richard Cochran <richardcochran@gmail.com>
master
Delio Brignoli 2013-11-19 14:42:41 +01:00 committed by Richard Cochran
parent a0171b035e
commit 7f7012eab5
1 changed files with 16 additions and 5 deletions

21
port.c
View File

@ -57,6 +57,7 @@ struct nrate_estimator {
tmv_t ingress1; tmv_t ingress1;
unsigned int max_count; unsigned int max_count;
unsigned int count; unsigned int count;
int ratio_valid;
}; };
struct port { struct port {
@ -474,6 +475,13 @@ static int port_capable(struct port *p)
goto not_capable; goto not_capable;
} }
if (!p->nrate.ratio_valid) {
if (p->asCapable)
pr_debug("port %hu: invalid nrate, "
"resetting asCapable", portnum(p));
goto not_capable;
}
capable: capable:
if (!p->asCapable) if (!p->asCapable)
pr_debug("port %hu: setting asCapable", portnum(p)); pr_debug("port %hu: setting asCapable", portnum(p));
@ -733,6 +741,12 @@ static void port_nrate_calculate(struct port *p, tmv_t t3, tmv_t t4, tmv_t c)
tmv_t origin2; tmv_t origin2;
struct nrate_estimator *n = &p->nrate; struct nrate_estimator *n = &p->nrate;
/*
* We experienced a successful exchanges of peer delay request
* and response, reset pdr_missing for this port.
*/
p->pdr_missing = 0;
if (!n->ingress1) { if (!n->ingress1) {
n->ingress1 = t4; n->ingress1 = t4;
n->origin1 = tmv_add(t3, c); n->origin1 = tmv_add(t3, c);
@ -753,11 +767,7 @@ static void port_nrate_calculate(struct port *p, tmv_t t3, tmv_t t4, tmv_t c)
n->ingress1 = t4; n->ingress1 = t4;
n->origin1 = origin2; n->origin1 = origin2;
n->count = 0; n->count = 0;
/* n->ratio_valid = 1;
* We experienced a successful series of exchanges of peer
* delay request and response, and so the port is now capable.
*/
p->pdr_missing = 0;
} }
static void port_nrate_initialize(struct port *p) static void port_nrate_initialize(struct port *p)
@ -781,6 +791,7 @@ static void port_nrate_initialize(struct port *p)
p->nrate.ingress1 = tmv_zero(); p->nrate.ingress1 = tmv_zero();
p->nrate.max_count = (1 << shift); p->nrate.max_count = (1 << shift);
p->nrate.count = 0; p->nrate.count = 0;
p->nrate.ratio_valid = 0;
} }
static int port_set_announce_tmo(struct port *p) static int port_set_announce_tmo(struct port *p)