From f9299bb123959d1a6b902334a3e6b5653fb12ec9 Mon Sep 17 00:00:00 2001 From: dtucker <> Date: Tue, 5 Jul 2005 10:09:12 +0000 Subject: [PATCH] Save transmit time for each peer for later use as refid for SNTPv4 replies. ok henning@ --- src/usr.sbin/ntpd/client.c | 3 ++- src/usr.sbin/ntpd/ntp.c | 6 +++++- src/usr.sbin/ntpd/ntpd.h | 3 ++- src/usr.sbin/ntpd/server.c | 4 ++-- 4 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/usr.sbin/ntpd/client.c b/src/usr.sbin/ntpd/client.c index 9e1cf68d..336099a1 100644 --- a/src/usr.sbin/ntpd/client.c +++ b/src/usr.sbin/ntpd/client.c @@ -1,4 +1,4 @@ -/* $OpenBSD: client.c,v 1.61 2005/06/19 16:42:57 henning Exp $ */ +/* $OpenBSD: client.c,v 1.62 2005/07/05 10:09:12 dtucker Exp $ */ /* * Copyright (c) 2003, 2004 Henning Brauer @@ -251,6 +251,7 @@ client_dispatch(struct ntp_peer *p, u_int8_t settime) p->reply[p->shift].status.rootdelay = sfp_to_d(msg.rootdelay); p->reply[p->shift].status.rootdispersion = sfp_to_d(msg.dispersion); p->reply[p->shift].status.refid = ntohl(msg.refid); + p->reply[p->shift].status.refid4 = msg.xmttime.fractionl; p->reply[p->shift].status.reftime = lfp_to_d(msg.reftime); p->reply[p->shift].status.poll = msg.ppoll; p->reply[p->shift].status.stratum = msg.stratum; diff --git a/src/usr.sbin/ntpd/ntp.c b/src/usr.sbin/ntpd/ntp.c index 59f3284b..c3717b8f 100644 --- a/src/usr.sbin/ntpd/ntp.c +++ b/src/usr.sbin/ntpd/ntp.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ntp.c,v 1.61 2005/06/19 16:42:57 henning Exp $ */ +/* $OpenBSD: ntp.c,v 1.62 2005/07/05 10:09:12 dtucker Exp $ */ /* * Copyright (c) 2003, 2004 Henning Brauer @@ -440,9 +440,13 @@ priv_adjtime(void) conf->status.stratum++; /* one more than selected peer */ update_scale(offset_median); + conf->status.refid4 = + peers[offset_cnt / 2]->update.status.refid4; if (peers[offset_cnt / 2]->addr->ss.ss_family == AF_INET) conf->status.refid = ((struct sockaddr_in *) &peers[offset_cnt / 2]->addr->ss)->sin_addr.s_addr; + else + conf->status.refid = conf->status.refid4; } free(peers); diff --git a/src/usr.sbin/ntpd/ntpd.h b/src/usr.sbin/ntpd/ntpd.h index fe6598a7..b2ca5c65 100644 --- a/src/usr.sbin/ntpd/ntpd.h +++ b/src/usr.sbin/ntpd/ntpd.h @@ -1,4 +1,4 @@ -/* $OpenBSD: ntpd.h,v 1.57 2005/06/19 17:11:13 henning Exp $ */ +/* $OpenBSD: ntpd.h,v 1.58 2005/07/05 10:09:12 dtucker Exp $ */ /* * Copyright (c) 2003, 2004 Henning Brauer @@ -89,6 +89,7 @@ struct ntp_status { double rootdispersion; double reftime; u_int32_t refid; + u_int32_t refid4; u_int8_t leap; int8_t precision; u_int8_t poll; diff --git a/src/usr.sbin/ntpd/server.c b/src/usr.sbin/ntpd/server.c index 27668c92..1fdd3991 100644 --- a/src/usr.sbin/ntpd/server.c +++ b/src/usr.sbin/ntpd/server.c @@ -1,4 +1,4 @@ -/* $OpenBSD: server.c,v 1.22 2005/05/24 20:10:50 henning Exp $ */ +/* $OpenBSD: server.c,v 1.23 2005/07/05 10:09:12 dtucker Exp $ */ /* * Copyright (c) 2003, 2004 Henning Brauer @@ -145,7 +145,7 @@ server_dispatch(int fd, struct ntpd_conf *conf) reply.rootdelay = d_to_sfp(conf->status.rootdelay); if (version > 3) - reply.refid = reply.xmttime.fractionl; + reply.refid = conf->status.refid4; else reply.refid = conf->status.refid;