static uint32_t total_ntp_auth_hits;
static uint32_t total_ntp_interleaved_hits;
static uint32_t total_record_drops;
+static uint32_t total_ntp_rx_timestamps[MAX_NTP_TS + 1];
+static uint32_t total_ntp_tx_timestamps[MAX_NTP_TS + 1];
#define NSEC_PER_SEC 1000000000U
/* ================================================== */
void
-CLG_LogAuthNtpRequest(void)
+CLG_UpdateNtpStats(int auth, NTP_Timestamp_Source rx_ts_src, NTP_Timestamp_Source tx_ts_src)
{
- total_ntp_auth_hits++;
+ if (auth)
+ total_ntp_auth_hits++;
+ if (rx_ts_src >= 0 && rx_ts_src <= MAX_NTP_TS)
+ total_ntp_rx_timestamps[rx_ts_src]++;
+ if (tx_ts_src >= 0 && tx_ts_src <= MAX_NTP_TS)
+ total_ntp_tx_timestamps[tx_ts_src]++;
}
/* ================================================== */
report->ntp_span_seconds = ntp_ts_map.size > 1 ?
(get_ntp_tss(ntp_ts_map.size - 1)->rx_ts -
get_ntp_tss(0)->rx_ts) >> 32 : 0;
+ report->ntp_daemon_rx_timestamps = total_ntp_rx_timestamps[NTP_TS_DAEMON];
+ report->ntp_daemon_tx_timestamps = total_ntp_tx_timestamps[NTP_TS_DAEMON];
+ report->ntp_kernel_rx_timestamps = total_ntp_rx_timestamps[NTP_TS_KERNEL];
+ report->ntp_kernel_tx_timestamps = total_ntp_tx_timestamps[NTP_TS_KERNEL];
+ report->ntp_hw_rx_timestamps = total_ntp_rx_timestamps[NTP_TS_HARDWARE];
+ report->ntp_hw_tx_timestamps = total_ntp_tx_timestamps[NTP_TS_HARDWARE];
}
extern int CLG_GetClientIndex(IPAddr *client);
extern int CLG_LogServiceAccess(CLG_Service service, IPAddr *client, struct timespec *now);
extern int CLG_LimitServiceRate(CLG_Service service, int index);
-extern void CLG_LogAuthNtpRequest(void);
+extern void CLG_UpdateNtpStats(int auth, NTP_Timestamp_Source rx_ts_src,
+ NTP_Timestamp_Source tx_ts_src);
extern int CLG_GetNtpMinPoll(void);
/* Functions to save and retrieve timestamps for server interleaved mode */
/* Don't respond unless a non-zero KoD was returned */
if (kod == 0)
return;
- } else if (info.auth.mode != NTP_AUTH_NONE && info.auth.mode != NTP_AUTH_MSSNTP) {
- CLG_LogAuthNtpRequest();
}
local_ntp_rx = NULL;
CLG_DisableNtpTimestamps(&ntp_rx);
}
+ CLG_UpdateNtpStats(kod != 0 && info.auth.mode != NTP_AUTH_NONE &&
+ info.auth.mode != NTP_AUTH_MSSNTP,
+ rx_ts->source, interleaved ? tx_ts->source : NTP_TS_DAEMON);
+
/* Suggest the client to increase its polling interval if it indicates
the interval is shorter than the rate limiting interval */
poll = CLG_GetNtpMinPoll();
uint32_t ntp_interleaved_hits;
uint32_t ntp_timestamps;
uint32_t ntp_span_seconds;
+ uint32_t ntp_daemon_rx_timestamps;
+ uint32_t ntp_daemon_tx_timestamps;
+ uint32_t ntp_kernel_rx_timestamps;
+ uint32_t ntp_kernel_tx_timestamps;
+ uint32_t ntp_hw_rx_timestamps;
+ uint32_t ntp_hw_tx_timestamps;
} RPT_ServerStatsReport;
typedef struct {