cmdmon: add timestamp counters to ntpdata report
This commit is contained in:
parent
8d19f49341
commit
eb26d13140
7 changed files with 49 additions and 7 deletions
9
candm.h
9
candm.h
|
@ -540,7 +540,8 @@ typedef struct {
|
||||||
#define RPY_SELECT_DATA 23
|
#define RPY_SELECT_DATA 23
|
||||||
#define RPY_SERVER_STATS3 24
|
#define RPY_SERVER_STATS3 24
|
||||||
#define RPY_SERVER_STATS4 25
|
#define RPY_SERVER_STATS4 25
|
||||||
#define N_REPLY_TYPES 26
|
#define RPY_NTP_DATA2 26
|
||||||
|
#define N_REPLY_TYPES 27
|
||||||
|
|
||||||
/* Status codes */
|
/* Status codes */
|
||||||
#define STT_SUCCESS 0
|
#define STT_SUCCESS 0
|
||||||
|
@ -763,7 +764,11 @@ typedef struct {
|
||||||
uint32_t total_rx_count;
|
uint32_t total_rx_count;
|
||||||
uint32_t total_valid_count;
|
uint32_t total_valid_count;
|
||||||
uint32_t total_good_count;
|
uint32_t total_good_count;
|
||||||
uint32_t reserved[3];
|
uint32_t total_kernel_tx_ts;
|
||||||
|
uint32_t total_kernel_rx_ts;
|
||||||
|
uint32_t total_hw_tx_ts;
|
||||||
|
uint32_t total_hw_rx_ts;
|
||||||
|
uint32_t reserved[4];
|
||||||
int32_t EOR;
|
int32_t EOR;
|
||||||
} RPY_NTPData;
|
} RPY_NTPData;
|
||||||
|
|
||||||
|
|
12
client.c
12
client.c
|
@ -2331,7 +2331,7 @@ process_cmd_ntpdata(char *line)
|
||||||
|
|
||||||
request.command = htons(REQ_NTP_DATA);
|
request.command = htons(REQ_NTP_DATA);
|
||||||
UTI_IPHostToNetwork(&remote_addr, &request.data.ntp_data.ip_addr);
|
UTI_IPHostToNetwork(&remote_addr, &request.data.ntp_data.ip_addr);
|
||||||
if (!request_reply(&request, &reply, RPY_NTP_DATA, 0))
|
if (!request_reply(&request, &reply, RPY_NTP_DATA2, 0))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
UTI_IPNetworkToHost(&reply.data.ntp_data.remote_addr, &remote_addr);
|
UTI_IPNetworkToHost(&reply.data.ntp_data.remote_addr, &remote_addr);
|
||||||
|
@ -2367,7 +2367,11 @@ process_cmd_ntpdata(char *line)
|
||||||
"Total TX : %U\n"
|
"Total TX : %U\n"
|
||||||
"Total RX : %U\n"
|
"Total RX : %U\n"
|
||||||
"Total valid RX : %U\n"
|
"Total valid RX : %U\n"
|
||||||
"Total good RX : %U\n",
|
"Total good RX : %U\n"
|
||||||
|
"Total kernel TX : %U\n"
|
||||||
|
"Total kernel RX : %U\n"
|
||||||
|
"Total HW TX : %U\n"
|
||||||
|
"Total HW RX : %U\n",
|
||||||
UTI_IPToString(&remote_addr), UTI_IPToRefid(&remote_addr),
|
UTI_IPToString(&remote_addr), UTI_IPToRefid(&remote_addr),
|
||||||
ntohs(reply.data.ntp_data.remote_port),
|
ntohs(reply.data.ntp_data.remote_port),
|
||||||
UTI_IPToString(&local_addr), UTI_IPToRefid(&local_addr),
|
UTI_IPToString(&local_addr), UTI_IPToRefid(&local_addr),
|
||||||
|
@ -2395,6 +2399,10 @@ process_cmd_ntpdata(char *line)
|
||||||
ntohl(reply.data.ntp_data.total_rx_count),
|
ntohl(reply.data.ntp_data.total_rx_count),
|
||||||
ntohl(reply.data.ntp_data.total_valid_count),
|
ntohl(reply.data.ntp_data.total_valid_count),
|
||||||
ntohl(reply.data.ntp_data.total_good_count),
|
ntohl(reply.data.ntp_data.total_good_count),
|
||||||
|
ntohl(reply.data.ntp_data.total_kernel_tx_ts),
|
||||||
|
ntohl(reply.data.ntp_data.total_kernel_rx_ts),
|
||||||
|
ntohl(reply.data.ntp_data.total_hw_tx_ts),
|
||||||
|
ntohl(reply.data.ntp_data.total_hw_rx_ts),
|
||||||
REPORT_END);
|
REPORT_END);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
6
cmdmon.c
6
cmdmon.c
|
@ -1230,7 +1230,7 @@ handle_ntp_data(CMD_Request *rx_message, CMD_Reply *tx_message)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
tx_message->reply = htons(RPY_NTP_DATA);
|
tx_message->reply = htons(RPY_NTP_DATA2);
|
||||||
UTI_IPHostToNetwork(&report.remote_addr, &tx_message->data.ntp_data.remote_addr);
|
UTI_IPHostToNetwork(&report.remote_addr, &tx_message->data.ntp_data.remote_addr);
|
||||||
UTI_IPHostToNetwork(&report.local_addr, &tx_message->data.ntp_data.local_addr);
|
UTI_IPHostToNetwork(&report.local_addr, &tx_message->data.ntp_data.local_addr);
|
||||||
tx_message->data.ntp_data.remote_port = htons(report.remote_port);
|
tx_message->data.ntp_data.remote_port = htons(report.remote_port);
|
||||||
|
@ -1258,6 +1258,10 @@ handle_ntp_data(CMD_Request *rx_message, CMD_Reply *tx_message)
|
||||||
tx_message->data.ntp_data.total_rx_count = htonl(report.total_rx_count);
|
tx_message->data.ntp_data.total_rx_count = htonl(report.total_rx_count);
|
||||||
tx_message->data.ntp_data.total_valid_count = htonl(report.total_valid_count);
|
tx_message->data.ntp_data.total_valid_count = htonl(report.total_valid_count);
|
||||||
tx_message->data.ntp_data.total_good_count = htonl(report.total_good_count);
|
tx_message->data.ntp_data.total_good_count = htonl(report.total_good_count);
|
||||||
|
tx_message->data.ntp_data.total_kernel_tx_ts = htonl(report.total_kernel_tx_ts);
|
||||||
|
tx_message->data.ntp_data.total_kernel_rx_ts = htonl(report.total_kernel_rx_ts);
|
||||||
|
tx_message->data.ntp_data.total_hw_tx_ts = htonl(report.total_hw_tx_ts);
|
||||||
|
tx_message->data.ntp_data.total_hw_rx_ts = htonl(report.total_hw_rx_ts);
|
||||||
memset(tx_message->data.ntp_data.reserved, 0xff, sizeof (tx_message->data.ntp_data.reserved));
|
memset(tx_message->data.ntp_data.reserved, 0xff, sizeof (tx_message->data.ntp_data.reserved));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -689,6 +689,10 @@ Total TX : 24
|
||||||
Total RX : 24
|
Total RX : 24
|
||||||
Total valid RX : 24
|
Total valid RX : 24
|
||||||
Total good RX : 22
|
Total good RX : 22
|
||||||
|
Total kernel TX : 24
|
||||||
|
Total kernel RX : 24
|
||||||
|
Total HW TX : 0
|
||||||
|
Total HW RX : 0
|
||||||
----
|
----
|
||||||
+
|
+
|
||||||
The fields are explained as follows:
|
The fields are explained as follows:
|
||||||
|
@ -746,6 +750,18 @@ The number of packets which passed the first two groups of NTP tests.
|
||||||
*Total good RX*:::
|
*Total good RX*:::
|
||||||
The number of packets which passed all three groups of NTP tests, i.e. the NTP
|
The number of packets which passed all three groups of NTP tests, i.e. the NTP
|
||||||
measurement was accepted.
|
measurement was accepted.
|
||||||
|
*Total kernel TX*:::
|
||||||
|
The number of packets sent to the source for which a timestamp was captured by
|
||||||
|
the kernel.
|
||||||
|
*Total kernel RX*:::
|
||||||
|
The number of packets received from the source for which a timestamp was
|
||||||
|
captured by the kernel.
|
||||||
|
*Total HW TX*:::
|
||||||
|
The number of packets sent to the source for which a timestamp was captured by
|
||||||
|
the NIC.
|
||||||
|
*Total HW RX*:::
|
||||||
|
The number of packets received from the source for which a timestamp was
|
||||||
|
captured by the NIC.
|
||||||
|
|
||||||
[[add_peer]]*add peer* _name_ [_option_]...::
|
[[add_peer]]*add peer* _name_ [_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
|
||||||
|
|
|
@ -149,7 +149,7 @@ static const uint16_t reply_lengths[] = {
|
||||||
RPY_LENGTH_ENTRY(smoothing), /* SMOOTHING */
|
RPY_LENGTH_ENTRY(smoothing), /* SMOOTHING */
|
||||||
0, /* SERVER_STATS - not supported */
|
0, /* SERVER_STATS - not supported */
|
||||||
0, /* CLIENT_ACCESSES_BY_INDEX2 - not supported */
|
0, /* CLIENT_ACCESSES_BY_INDEX2 - not supported */
|
||||||
RPY_LENGTH_ENTRY(ntp_data), /* NTP_DATA */
|
0, /* NTP_DATA - not supported */
|
||||||
RPY_LENGTH_ENTRY(manual_timestamp), /* MANUAL_TIMESTAMP2 */
|
RPY_LENGTH_ENTRY(manual_timestamp), /* MANUAL_TIMESTAMP2 */
|
||||||
RPY_LENGTH_ENTRY(manual_list), /* MANUAL_LIST2 */
|
RPY_LENGTH_ENTRY(manual_list), /* MANUAL_LIST2 */
|
||||||
RPY_LENGTH_ENTRY(ntp_source_name), /* NTP_SOURCE_NAME */
|
RPY_LENGTH_ENTRY(ntp_source_name), /* NTP_SOURCE_NAME */
|
||||||
|
@ -159,6 +159,7 @@ static const uint16_t reply_lengths[] = {
|
||||||
RPY_LENGTH_ENTRY(select_data), /* SELECT_DATA */
|
RPY_LENGTH_ENTRY(select_data), /* SELECT_DATA */
|
||||||
0, /* SERVER_STATS3 - not supported */
|
0, /* SERVER_STATS3 - not supported */
|
||||||
RPY_LENGTH_ENTRY(server_stats), /* SERVER_STATS4 */
|
RPY_LENGTH_ENTRY(server_stats), /* SERVER_STATS4 */
|
||||||
|
RPY_LENGTH_ENTRY(ntp_data), /* NTP_DATA2 */
|
||||||
};
|
};
|
||||||
|
|
||||||
/* ================================================== */
|
/* ================================================== */
|
||||||
|
|
|
@ -247,6 +247,10 @@ Total TX : 1
|
||||||
Total RX : 1
|
Total RX : 1
|
||||||
Total valid RX : 1
|
Total valid RX : 1
|
||||||
Total good RX : 0
|
Total good RX : 0
|
||||||
|
Total kernel TX : [01]
|
||||||
|
Total kernel RX : 1
|
||||||
|
Total HW TX : 0
|
||||||
|
Total HW RX : 0
|
||||||
S Name/IP Address Auth COpts EOpts Last Score Interval Leap
|
S Name/IP Address Auth COpts EOpts Last Score Interval Leap
|
||||||
=======================================================================
|
=======================================================================
|
||||||
M node1\.net1\.clk N ----- ----- 0 1\.0 \+0ns \+0ns N
|
M node1\.net1\.clk N ----- ----- 0 1\.0 \+0ns \+0ns N
|
||||||
|
|
|
@ -97,7 +97,11 @@ RX timestamping : (Daemon|Kernel)
|
||||||
Total TX : [0-9]+
|
Total TX : [0-9]+
|
||||||
Total RX : [0-9]+
|
Total RX : [0-9]+
|
||||||
Total valid RX : [0-9]+
|
Total valid RX : [0-9]+
|
||||||
Total good RX : [0-9]+$" || test_fail
|
Total good RX : [0-9]+
|
||||||
|
Total kernel TX : [0-9]+
|
||||||
|
Total kernel RX : [0-9]+
|
||||||
|
Total HW TX : 0
|
||||||
|
Total HW RX : 0$" || test_fail
|
||||||
|
|
||||||
run_chronyc "selectdata" || test_fail
|
run_chronyc "selectdata" || test_fail
|
||||||
check_chronyc_output "^S Name/IP Address Auth COpts EOpts Last Score Interval Leap
|
check_chronyc_output "^S Name/IP Address Auth COpts EOpts Last Score Interval Leap
|
||||||
|
|
Loading…
Reference in a new issue