client: add ntpdata command
This commit is contained in:
parent
535ca64bba
commit
64f9205189
2 changed files with 166 additions and 0 deletions
81
client.c
81
client.c
|
@ -1193,6 +1193,7 @@ give_help(void)
|
||||||
"\0\0"
|
"\0\0"
|
||||||
"NTP sources:\0\0"
|
"NTP sources:\0\0"
|
||||||
"activity\0Check how many NTP sources are online/offline\0"
|
"activity\0Check how many NTP sources are online/offline\0"
|
||||||
|
"ntpdata <address>\0Display information about last valid measurement\0"
|
||||||
"add server <address> [options]\0Add new NTP server\0"
|
"add server <address> [options]\0Add new NTP server\0"
|
||||||
"add peer <address> [options]\0Add new NTP peer\0"
|
"add peer <address> [options]\0Add new NTP peer\0"
|
||||||
"delete <address>\0Remove server or peer\0"
|
"delete <address>\0Remove server or peer\0"
|
||||||
|
@ -2193,6 +2194,83 @@ process_cmd_tracking(char *line)
|
||||||
|
|
||||||
/* ================================================== */
|
/* ================================================== */
|
||||||
|
|
||||||
|
static int
|
||||||
|
process_cmd_ntpdata(char *line)
|
||||||
|
{
|
||||||
|
CMD_Request request;
|
||||||
|
CMD_Reply reply;
|
||||||
|
IPAddr remote_addr, local_addr;
|
||||||
|
struct timespec ref_time;
|
||||||
|
|
||||||
|
if (DNS_Name2IPAddress(line, &remote_addr, 1) != DNS_Success) {
|
||||||
|
LOG(LOGS_ERR, LOGF_Client, "Could not get address for hostname");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
request.command = htons(REQ_NTP_DATA);
|
||||||
|
UTI_IPHostToNetwork(&remote_addr, &request.data.ntp_data.ip_addr);
|
||||||
|
if (!request_reply(&request, &reply, RPY_NTP_DATA, 0))
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
UTI_IPNetworkToHost(&reply.data.ntp_data.remote_addr, &remote_addr);
|
||||||
|
UTI_IPNetworkToHost(&reply.data.ntp_data.local_addr, &local_addr);
|
||||||
|
UTI_TimespecNetworkToHost(&reply.data.ntp_data.ref_time, &ref_time);
|
||||||
|
|
||||||
|
print_report("Remote address : %s\n"
|
||||||
|
"Remote port : %u\n"
|
||||||
|
"Local address : %s\n"
|
||||||
|
"Leap status : %L\n"
|
||||||
|
"Version : %u\n"
|
||||||
|
"Mode : %M\n"
|
||||||
|
"Stratum : %u\n"
|
||||||
|
"Poll : %u\n"
|
||||||
|
"Precision : %.9f seconds\n"
|
||||||
|
"Root delay : %.6f seconds\n"
|
||||||
|
"Root dispersion : %.6f seconds\n"
|
||||||
|
"Reference ID : %R\n"
|
||||||
|
"Reference time : %T\n"
|
||||||
|
"Offset : %+.9f seconds\n"
|
||||||
|
"Peer delay : %.9f seconds\n"
|
||||||
|
"Peer dispersion : %.9f seconds\n"
|
||||||
|
"Response time : %.9f seconds\n"
|
||||||
|
"Jitter asymmetry: %+.2f\n"
|
||||||
|
"NTP tests : %.3b %.3b %.4b\n"
|
||||||
|
"Interleaved : %B\n"
|
||||||
|
"Authenticated : %B\n"
|
||||||
|
"TX timestamping : %N\n"
|
||||||
|
"RX timestamping : %N\n"
|
||||||
|
"Total TX : %U\n"
|
||||||
|
"Total RX : %U\n"
|
||||||
|
"Total valid RX : %U\n",
|
||||||
|
UTI_IPToString(&remote_addr), ntohs(reply.data.ntp_data.remote_port),
|
||||||
|
UTI_IPToString(&local_addr),
|
||||||
|
reply.data.ntp_data.leap, reply.data.ntp_data.version,
|
||||||
|
reply.data.ntp_data.mode, reply.data.ntp_data.stratum,
|
||||||
|
reply.data.ntp_data.poll, UTI_Log2ToDouble(reply.data.ntp_data.precision),
|
||||||
|
UTI_FloatNetworkToHost(reply.data.ntp_data.root_delay),
|
||||||
|
UTI_FloatNetworkToHost(reply.data.ntp_data.root_dispersion),
|
||||||
|
(unsigned long)ntohl(reply.data.ntp_data.ref_id), &ref_time,
|
||||||
|
UTI_FloatNetworkToHost(reply.data.ntp_data.offset),
|
||||||
|
UTI_FloatNetworkToHost(reply.data.ntp_data.peer_delay),
|
||||||
|
UTI_FloatNetworkToHost(reply.data.ntp_data.peer_dispersion),
|
||||||
|
UTI_FloatNetworkToHost(reply.data.ntp_data.response_time),
|
||||||
|
UTI_FloatNetworkToHost(reply.data.ntp_data.jitter_asymmetry),
|
||||||
|
ntohs(reply.data.ntp_data.flags) >> 7,
|
||||||
|
ntohs(reply.data.ntp_data.flags) >> 4,
|
||||||
|
ntohs(reply.data.ntp_data.flags),
|
||||||
|
ntohs(reply.data.ntp_data.flags) & RPY_NTP_FLAG_INTERLEAVED,
|
||||||
|
ntohs(reply.data.ntp_data.flags) & RPY_NTP_FLAG_AUTHENTICATED,
|
||||||
|
reply.data.ntp_data.tx_tss_char, reply.data.ntp_data.rx_tss_char,
|
||||||
|
(unsigned long)ntohl(reply.data.ntp_data.total_tx_count),
|
||||||
|
(unsigned long)ntohl(reply.data.ntp_data.total_rx_count),
|
||||||
|
(unsigned long)ntohl(reply.data.ntp_data.total_valid_count),
|
||||||
|
REPORT_END);
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ================================================== */
|
||||||
|
|
||||||
static int
|
static int
|
||||||
process_cmd_serverstats(char *line)
|
process_cmd_serverstats(char *line)
|
||||||
{
|
{
|
||||||
|
@ -2809,6 +2887,9 @@ process_line(char *line)
|
||||||
do_normal_submit = process_cmd_minpoll(&tx_message, line);
|
do_normal_submit = process_cmd_minpoll(&tx_message, line);
|
||||||
} else if (!strcmp(command, "minstratum")) {
|
} else if (!strcmp(command, "minstratum")) {
|
||||||
do_normal_submit = process_cmd_minstratum(&tx_message, line);
|
do_normal_submit = process_cmd_minstratum(&tx_message, line);
|
||||||
|
} else if (!strcmp(command, "ntpdata")) {
|
||||||
|
do_normal_submit = 0;
|
||||||
|
ret = process_cmd_ntpdata(line);
|
||||||
} else if (!strcmp(command, "offline")) {
|
} else if (!strcmp(command, "offline")) {
|
||||||
do_normal_submit = process_cmd_offline(&tx_message, line);
|
do_normal_submit = process_cmd_offline(&tx_message, line);
|
||||||
} else if (!strcmp(command, "online")) {
|
} else if (!strcmp(command, "online")) {
|
||||||
|
|
|
@ -441,6 +441,91 @@ the offline state.
|
||||||
the name of the server or peer was not resolved to an address yet; this source is
|
the name of the server or peer was not resolved to an address yet; this source is
|
||||||
not visible in the *sources* and *sourcestats* reports.
|
not visible in the *sources* and *sourcestats* reports.
|
||||||
|
|
||||||
|
[[ntpdata]]*ntpdata* _address_::
|
||||||
|
The *ntpdata* command displays the last valid measurement and other
|
||||||
|
NTP-specific information about the NTP source. An example of the output is
|
||||||
|
shown below.
|
||||||
|
+
|
||||||
|
----
|
||||||
|
Remote address : 203.0.113.15
|
||||||
|
Remote port : 123
|
||||||
|
Local address : 203.0.113.74
|
||||||
|
Leap status : Normal
|
||||||
|
Version : 4
|
||||||
|
Mode : Server
|
||||||
|
Stratum : 1
|
||||||
|
Poll : 10
|
||||||
|
Precision : 0.000000060 seconds
|
||||||
|
Root delay : 0.000015 seconds
|
||||||
|
Root dispersion : 0.000015 seconds
|
||||||
|
Reference ID : 50505331
|
||||||
|
Reference time : Fri Nov 25 15:22:12 2016
|
||||||
|
Offset : -0.000060878 seconds
|
||||||
|
Peer delay : 0.000175634 seconds
|
||||||
|
Peer dispersion : 0.000000681 seconds
|
||||||
|
Response time : 0.000053050 seconds
|
||||||
|
Jitter asymmetry: +0.00
|
||||||
|
NTP tests : 111 111 1111
|
||||||
|
Interleaved : No
|
||||||
|
Authenticated : No
|
||||||
|
TX timestamping : Kernel
|
||||||
|
RX timestamping : Kernel
|
||||||
|
Total TX : 24
|
||||||
|
Total RX : 24
|
||||||
|
Total valid RX : 24
|
||||||
|
----
|
||||||
|
+
|
||||||
|
The fields are explained as follows:
|
||||||
|
+
|
||||||
|
*Remote address*:::
|
||||||
|
The IP address of the NTP server or peer.
|
||||||
|
*Remote port*:::
|
||||||
|
The UDP port number to which the request was sent. The standard NTP port is
|
||||||
|
123.
|
||||||
|
*Local address*:::
|
||||||
|
The local IP address which received the response.
|
||||||
|
*Leap status*:::
|
||||||
|
*Version*:::
|
||||||
|
*Mode*:::
|
||||||
|
*Stratum*:::
|
||||||
|
*Poll*:::
|
||||||
|
*Precision*:::
|
||||||
|
*Root delay*:::
|
||||||
|
*Root dispersion*:::
|
||||||
|
*Reference ID*:::
|
||||||
|
*Reference time*:::
|
||||||
|
The NTP values from the last valid response.
|
||||||
|
*Offset*:::
|
||||||
|
*Peer delay*:::
|
||||||
|
*Peer dispersion*:::
|
||||||
|
The measured values.
|
||||||
|
*Response time*:::
|
||||||
|
The time the server or peer spent in processing of the request and waiting
|
||||||
|
before sending the response.
|
||||||
|
*Jitter asymmetry*:::
|
||||||
|
The estimated asymmetry of network jitter on the path to the source. The
|
||||||
|
asymmetry can be between -0.5 and 0.5. A negative value means the delay of
|
||||||
|
packets sent to the source is more variable than the delay of packets sent
|
||||||
|
from the source back.
|
||||||
|
*NTP tests*:::
|
||||||
|
Results of RFC 5905 tests 1 through 3, 5 through 7, and tests for maximum
|
||||||
|
delay, delay ratio, delay dev ratio, and synchronisation loop.
|
||||||
|
*Interleaved*:::
|
||||||
|
This shows if the response was in the interleaved mode.
|
||||||
|
*Authenticated*:::
|
||||||
|
This shows if the response was authenticated.
|
||||||
|
*TX timestamping*:::
|
||||||
|
The source of the local transmit timestamp. Valid values are _Daemon_,
|
||||||
|
_Kernel_, and _Hardware_.
|
||||||
|
*RX timestamping*:::
|
||||||
|
The source of the local receive timestamp.
|
||||||
|
*Total TX*:::
|
||||||
|
The number of packets sent to the source.
|
||||||
|
*Total RX*:::
|
||||||
|
The number of all packets received from the source.
|
||||||
|
*Total valid RX*:::
|
||||||
|
The number of valid packets received from the source.
|
||||||
|
|
||||||
[[add_peer]]*add peer* _address_ [_option_]...::
|
[[add_peer]]*add peer* _address_ [_option_]...::
|
||||||
The *add peer* command allows a new NTP peer to be added whilst
|
The *add peer* command allows a new NTP peer to be added whilst
|
||||||
*chronyd* is running.
|
*chronyd* is running.
|
||||||
|
|
Loading…
Reference in a new issue