cmdmon: switch serverstats to 64-bit integers

Update the serverstats response to use the new 64-bit integers.

Don't define a new value for the response as it already had an
incompatible change since the latest release (new fields added for
timestamp counters).
This commit is contained in:
Miroslav Lichvar 2023-03-23 12:42:30 +01:00
parent 907accec87
commit 5508b01bd8
4 changed files with 84 additions and 73 deletions

36
candm.h
View file

@ -672,24 +672,24 @@ typedef struct {
} RPY_ClientAccessesByIndex; } RPY_ClientAccessesByIndex;
typedef struct { typedef struct {
uint32_t ntp_hits; Integer64 ntp_hits;
uint32_t nke_hits; Integer64 nke_hits;
uint32_t cmd_hits; Integer64 cmd_hits;
uint32_t ntp_drops; Integer64 ntp_drops;
uint32_t nke_drops; Integer64 nke_drops;
uint32_t cmd_drops; Integer64 cmd_drops;
uint32_t log_drops; Integer64 log_drops;
uint32_t ntp_auth_hits; Integer64 ntp_auth_hits;
uint32_t ntp_interleaved_hits; Integer64 ntp_interleaved_hits;
uint32_t ntp_timestamps; Integer64 ntp_timestamps;
uint32_t ntp_span_seconds; Integer64 ntp_span_seconds;
uint32_t ntp_daemon_rx_timestamps; Integer64 ntp_daemon_rx_timestamps;
uint32_t ntp_daemon_tx_timestamps; Integer64 ntp_daemon_tx_timestamps;
uint32_t ntp_kernel_rx_timestamps; Integer64 ntp_kernel_rx_timestamps;
uint32_t ntp_kernel_tx_timestamps; Integer64 ntp_kernel_tx_timestamps;
uint32_t ntp_hw_rx_timestamps; Integer64 ntp_hw_rx_timestamps;
uint32_t ntp_hw_tx_timestamps; Integer64 ntp_hw_tx_timestamps;
uint32_t reserved[4]; Integer64 reserved[4];
int32_t EOR; int32_t EOR;
} RPY_ServerStats; } RPY_ServerStats;

View file

@ -1623,6 +1623,7 @@ print_report(const char *format, ...)
const char *string; const char *string;
unsigned long long_uinteger; unsigned long long_uinteger;
unsigned int uinteger; unsigned int uinteger;
uint64_t uinteger64;
int integer; int integer;
struct timespec *ts; struct timespec *ts;
struct tm *tm; struct tm *tm;
@ -1815,6 +1816,10 @@ print_report(const char *format, ...)
ts = va_arg(ap, struct timespec *); ts = va_arg(ap, struct timespec *);
printf("%s", UTI_TimespecToString(ts)); printf("%s", UTI_TimespecToString(ts));
break; break;
case 'Q': /* uint64_t in decimal */
uinteger64 = va_arg(ap, uint64_t);
printf("%*"PRIu64, width, uinteger64);
break;
case 'b': /* unsigned int in binary */ case 'b': /* unsigned int in binary */
uinteger = va_arg(ap, unsigned int); uinteger = va_arg(ap, unsigned int);
for (i = prec - 1; i >= 0; i--) for (i = prec - 1; i >= 0; i--)
@ -2481,40 +2486,40 @@ process_cmd_serverstats(char *line)
if (!request_reply(&request, &reply, RPY_SERVER_STATS4, 0)) if (!request_reply(&request, &reply, RPY_SERVER_STATS4, 0))
return 0; return 0;
print_report("NTP packets received : %U\n" print_report("NTP packets received : %Q\n"
"NTP packets dropped : %U\n" "NTP packets dropped : %Q\n"
"Command packets received : %U\n" "Command packets received : %Q\n"
"Command packets dropped : %U\n" "Command packets dropped : %Q\n"
"Client log records dropped : %U\n" "Client log records dropped : %Q\n"
"NTS-KE connections accepted: %U\n" "NTS-KE connections accepted: %Q\n"
"NTS-KE connections dropped : %U\n" "NTS-KE connections dropped : %Q\n"
"Authenticated NTP packets : %U\n" "Authenticated NTP packets : %Q\n"
"Interleaved NTP packets : %U\n" "Interleaved NTP packets : %Q\n"
"NTP timestamps held : %U\n" "NTP timestamps held : %Q\n"
"NTP timestamp span : %U\n" "NTP timestamp span : %Q\n"
"NTP daemon RX timestamps : %U\n" "NTP daemon RX timestamps : %Q\n"
"NTP daemon TX timestamps : %U\n" "NTP daemon TX timestamps : %Q\n"
"NTP kernel RX timestamps : %U\n" "NTP kernel RX timestamps : %Q\n"
"NTP kernel TX timestamps : %U\n" "NTP kernel TX timestamps : %Q\n"
"NTP hardware RX timestamps : %U\n" "NTP hardware RX timestamps : %Q\n"
"NTP hardware TX timestamps : %U\n", "NTP hardware TX timestamps : %Q\n",
(unsigned long)ntohl(reply.data.server_stats.ntp_hits), UTI_Integer64NetworkToHost(reply.data.server_stats.ntp_hits),
(unsigned long)ntohl(reply.data.server_stats.ntp_drops), UTI_Integer64NetworkToHost(reply.data.server_stats.ntp_drops),
(unsigned long)ntohl(reply.data.server_stats.cmd_hits), UTI_Integer64NetworkToHost(reply.data.server_stats.cmd_hits),
(unsigned long)ntohl(reply.data.server_stats.cmd_drops), UTI_Integer64NetworkToHost(reply.data.server_stats.cmd_drops),
(unsigned long)ntohl(reply.data.server_stats.log_drops), UTI_Integer64NetworkToHost(reply.data.server_stats.log_drops),
(unsigned long)ntohl(reply.data.server_stats.nke_hits), UTI_Integer64NetworkToHost(reply.data.server_stats.nke_hits),
(unsigned long)ntohl(reply.data.server_stats.nke_drops), UTI_Integer64NetworkToHost(reply.data.server_stats.nke_drops),
(unsigned long)ntohl(reply.data.server_stats.ntp_auth_hits), UTI_Integer64NetworkToHost(reply.data.server_stats.ntp_auth_hits),
(unsigned long)ntohl(reply.data.server_stats.ntp_interleaved_hits), UTI_Integer64NetworkToHost(reply.data.server_stats.ntp_interleaved_hits),
(unsigned long)ntohl(reply.data.server_stats.ntp_timestamps), UTI_Integer64NetworkToHost(reply.data.server_stats.ntp_timestamps),
(unsigned long)ntohl(reply.data.server_stats.ntp_span_seconds), UTI_Integer64NetworkToHost(reply.data.server_stats.ntp_span_seconds),
(unsigned long)ntohl(reply.data.server_stats.ntp_daemon_rx_timestamps), UTI_Integer64NetworkToHost(reply.data.server_stats.ntp_daemon_rx_timestamps),
(unsigned long)ntohl(reply.data.server_stats.ntp_daemon_tx_timestamps), UTI_Integer64NetworkToHost(reply.data.server_stats.ntp_daemon_tx_timestamps),
(unsigned long)ntohl(reply.data.server_stats.ntp_kernel_rx_timestamps), UTI_Integer64NetworkToHost(reply.data.server_stats.ntp_kernel_rx_timestamps),
(unsigned long)ntohl(reply.data.server_stats.ntp_kernel_tx_timestamps), UTI_Integer64NetworkToHost(reply.data.server_stats.ntp_kernel_tx_timestamps),
(unsigned long)ntohl(reply.data.server_stats.ntp_hw_rx_timestamps), UTI_Integer64NetworkToHost(reply.data.server_stats.ntp_hw_rx_timestamps),
(unsigned long)ntohl(reply.data.server_stats.ntp_hw_tx_timestamps), UTI_Integer64NetworkToHost(reply.data.server_stats.ntp_hw_tx_timestamps),
REPORT_END); REPORT_END);
return 1; return 1;

View file

@ -1178,23 +1178,33 @@ handle_server_stats(CMD_Request *rx_message, CMD_Reply *tx_message)
CLG_GetServerStatsReport(&report); CLG_GetServerStatsReport(&report);
tx_message->reply = htons(RPY_SERVER_STATS4); tx_message->reply = htons(RPY_SERVER_STATS4);
tx_message->data.server_stats.ntp_hits = htonl(report.ntp_hits); tx_message->data.server_stats.ntp_hits = UTI_Integer64HostToNetwork(report.ntp_hits);
tx_message->data.server_stats.nke_hits = htonl(report.nke_hits); tx_message->data.server_stats.nke_hits = UTI_Integer64HostToNetwork(report.nke_hits);
tx_message->data.server_stats.cmd_hits = htonl(report.cmd_hits); tx_message->data.server_stats.cmd_hits = UTI_Integer64HostToNetwork(report.cmd_hits);
tx_message->data.server_stats.ntp_drops = htonl(report.ntp_drops); tx_message->data.server_stats.ntp_drops = UTI_Integer64HostToNetwork(report.ntp_drops);
tx_message->data.server_stats.nke_drops = htonl(report.nke_drops); tx_message->data.server_stats.nke_drops = UTI_Integer64HostToNetwork(report.nke_drops);
tx_message->data.server_stats.cmd_drops = htonl(report.cmd_drops); tx_message->data.server_stats.cmd_drops = UTI_Integer64HostToNetwork(report.cmd_drops);
tx_message->data.server_stats.log_drops = htonl(report.log_drops); tx_message->data.server_stats.log_drops = UTI_Integer64HostToNetwork(report.log_drops);
tx_message->data.server_stats.ntp_auth_hits = htonl(report.ntp_auth_hits); tx_message->data.server_stats.ntp_auth_hits =
tx_message->data.server_stats.ntp_interleaved_hits = htonl(report.ntp_interleaved_hits); UTI_Integer64HostToNetwork(report.ntp_auth_hits);
tx_message->data.server_stats.ntp_timestamps = htonl(report.ntp_timestamps); tx_message->data.server_stats.ntp_interleaved_hits =
tx_message->data.server_stats.ntp_span_seconds = htonl(report.ntp_span_seconds); UTI_Integer64HostToNetwork(report.ntp_interleaved_hits);
tx_message->data.server_stats.ntp_daemon_rx_timestamps = htonl(report.ntp_daemon_rx_timestamps); tx_message->data.server_stats.ntp_timestamps =
tx_message->data.server_stats.ntp_daemon_tx_timestamps = htonl(report.ntp_daemon_tx_timestamps); UTI_Integer64HostToNetwork(report.ntp_timestamps);
tx_message->data.server_stats.ntp_kernel_rx_timestamps = htonl(report.ntp_kernel_rx_timestamps); tx_message->data.server_stats.ntp_span_seconds =
tx_message->data.server_stats.ntp_kernel_tx_timestamps = htonl(report.ntp_kernel_tx_timestamps); UTI_Integer64HostToNetwork(report.ntp_span_seconds);
tx_message->data.server_stats.ntp_hw_rx_timestamps = htonl(report.ntp_hw_rx_timestamps); tx_message->data.server_stats.ntp_daemon_rx_timestamps =
tx_message->data.server_stats.ntp_hw_tx_timestamps = htonl(report.ntp_hw_tx_timestamps); UTI_Integer64HostToNetwork(report.ntp_daemon_rx_timestamps);
tx_message->data.server_stats.ntp_daemon_tx_timestamps =
UTI_Integer64HostToNetwork(report.ntp_daemon_tx_timestamps);
tx_message->data.server_stats.ntp_kernel_rx_timestamps =
UTI_Integer64HostToNetwork(report.ntp_kernel_rx_timestamps);
tx_message->data.server_stats.ntp_kernel_tx_timestamps =
UTI_Integer64HostToNetwork(report.ntp_kernel_tx_timestamps);
tx_message->data.server_stats.ntp_hw_rx_timestamps =
UTI_Integer64HostToNetwork(report.ntp_hw_rx_timestamps);
tx_message->data.server_stats.ntp_hw_tx_timestamps =
UTI_Integer64HostToNetwork(report.ntp_hw_tx_timestamps);
memset(tx_message->data.server_stats.reserved, 0xff, memset(tx_message->data.server_stats.reserved, 0xff,
sizeof (tx_message->data.server_stats.reserved)); sizeof (tx_message->data.server_stats.reserved));
} }

View file

@ -1216,10 +1216,6 @@ NIC.
*NTP hardware TX timestamps*::: *NTP hardware TX timestamps*:::
The number of NTP responses (in the interleaved mode) which included a transmit The number of NTP responses (in the interleaved mode) which included a transmit
timestamp captured by the NIC. timestamp captured by the NIC.
{blank}::
+
Note that the numbers reported by this command overflow to zero after
4294967295, i.e. they are 32-bit values.
[[allow]]*allow* [*all*] [_subnet_]:: [[allow]]*allow* [*all*] [_subnet_]::
The effect of the allow command is identical to the The effect of the allow command is identical to the