[Linuxptp-devel] [PATCH RFC 1/6] clock: save delay timestamps and correction.
PTP IEEE 1588 stack for Linux
Brought to you by:
rcochran
From: Miroslav L. <mli...@re...> - 2015-02-13 12:56:29
|
Signed-off-by: Miroslav Lichvar <mli...@re...> --- clock.c | 22 ++++++++++++++++++---- clock.h | 5 ++++- port.c | 3 ++- 3 files changed, 24 insertions(+), 6 deletions(-) diff --git a/clock.c b/clock.c index b841e81..9bc0352 100644 --- a/clock.c +++ b/clock.c @@ -108,8 +108,11 @@ struct clock { double nrr; tmv_t c1; tmv_t c2; + tmv_t c3; tmv_t t1; tmv_t t2; + tmv_t t3; + tmv_t t4; struct clock_description desc; struct clock_stats stats; int stats_interval; @@ -1295,16 +1298,20 @@ void clock_path_delay(struct clock *c, struct timespec req, struct timestamp rx, tmv_t c1, c2, c3, pd, t1, t2, t3, t4; double rr; + c->t3 = timespec_to_tmv(req); + c->t4 = timestamp_to_tmv(rx); + c->c3 = correction_to_tmv(correction); + if (tmv_is_zero(c->t1)) return; c1 = c->c1; c2 = c->c2; - c3 = correction_to_tmv(correction); + c3 = c->c3; t1 = c->t1; t2 = c->t2; - t3 = timespec_to_tmv(req); - t4 = timestamp_to_tmv(rx); + t3 = c->t3; + t4 = c->t4; rr = clock_rate_ratio(c); /* @@ -1341,10 +1348,13 @@ void clock_path_delay(struct clock *c, struct timespec req, struct timestamp rx, stats_add_value(c->stats.delay, tmv_to_nanoseconds(pd)); } -void clock_peer_delay(struct clock *c, tmv_t ppd, double nrr) +void clock_peer_delay(struct clock *c, tmv_t ppd, tmv_t req, tmv_t rx, + double nrr) { c->path_delay = ppd; c->nrr = nrr; + c->t3 = req; + c->t4 = rx; if (c->stats.delay) stats_add_value(c->stats.delay, tmv_to_nanoseconds(ppd)); @@ -1453,6 +1463,8 @@ enum servo_state clock_synchronize(struct clock *c, clockadj_step(c->clkid, -tmv_to_nanoseconds(c->master_offset)); c->t1 = tmv_zero(); c->t2 = tmv_zero(); + c->t3 = tmv_zero(); + c->t4 = tmv_zero(); if (c->sanity_check) { clockcheck_set_freq(c->sanity_check, -adj); clockcheck_step(c->sanity_check, @@ -1534,6 +1546,8 @@ static void handle_state_decision_event(struct clock *c) filter_reset(c->delay_filter); c->t1 = tmv_zero(); c->t2 = tmv_zero(); + c->t3 = tmv_zero(); + c->t4 = tmv_zero(); c->path_delay = 0; c->nrr = 1.0; fresh_best = 1; diff --git a/clock.h b/clock.h index 4834464..b3a5c9f 100644 --- a/clock.h +++ b/clock.h @@ -179,9 +179,12 @@ void clock_path_delay(struct clock *c, struct timespec req, struct timestamp rx, * Provide the estimated peer delay from a slave port. * @param c The clock instance. * @param ppd The peer delay as measured on a slave port. + * @param req The transmission time of the pdelay request message. + * @param rx The reception time of the pdelay request message. * @param nrr The neighbor rate ratio as measured on a slave port. */ -void clock_peer_delay(struct clock *c, tmv_t ppd, double nrr); +void clock_peer_delay(struct clock *c, tmv_t ppd, tmv_t req, tmv_t rx, + double nrr); /** * Poll for events and dispatch them. diff --git a/port.c b/port.c index 18a956d..7f9aa3d 100644 --- a/port.c +++ b/port.c @@ -1854,7 +1854,8 @@ calc: port_nrate_calculate(p, t3, t4, tmv_add(c1, c2)); if (p->state == PS_UNCALIBRATED || p->state == PS_SLAVE) { - clock_peer_delay(p->clock, p->peer_delay, p->nrate.ratio); + clock_peer_delay(p->clock, p->peer_delay, t1, t2, + p->nrate.ratio); } msg_put(p->peer_delay_req); -- 2.1.0 |