mirror of
https://gitlab.com/chrony/chrony.git
synced 2025-12-05 18:35:06 -05:00
ntp: add server support for KoD RATE
Add "kod" option to the ratelimit directive to respond with the KoD RATE code to randomly selected requests exceeding the configured limit. This complements the client support of KoD RATE. It's disabled by default. There can be only one KoD code in one response. If both NTS NAK and RATE codes are triggered, drop the response. The KoD RATE code can be set in an NTS-authenticated response.
This commit is contained in:
16
conf.c
16
conf.c
@@ -79,7 +79,7 @@ static void parse_maxchange(char *);
|
||||
static void parse_ntsserver(char *, ARR_Instance files);
|
||||
static void parse_ntstrustedcerts(char *);
|
||||
static void parse_ratelimit(char *line, int *enabled, int *interval,
|
||||
int *burst, int *leak);
|
||||
int *burst, int *leak, int *kod);
|
||||
static void parse_refclock(char *);
|
||||
static void parse_smoothtime(char *);
|
||||
static void parse_source(char *line, char *type, int fatal);
|
||||
@@ -220,6 +220,7 @@ static int ntp_ratelimit_enabled = 0;
|
||||
static int ntp_ratelimit_interval = 3;
|
||||
static int ntp_ratelimit_burst = 8;
|
||||
static int ntp_ratelimit_leak = 2;
|
||||
static int ntp_ratelimit_kod = 0;
|
||||
static int nts_ratelimit_enabled = 0;
|
||||
static int nts_ratelimit_interval = 6;
|
||||
static int nts_ratelimit_burst = 8;
|
||||
@@ -591,7 +592,7 @@ CNF_ParseLine(const char *filename, int number, char *line)
|
||||
parse_int(p, &cmd_port);
|
||||
} else if (!strcasecmp(command, "cmdratelimit")) {
|
||||
parse_ratelimit(p, &cmd_ratelimit_enabled, &cmd_ratelimit_interval,
|
||||
&cmd_ratelimit_burst, &cmd_ratelimit_leak);
|
||||
&cmd_ratelimit_burst, &cmd_ratelimit_leak, NULL);
|
||||
} else if (!strcasecmp(command, "combinelimit")) {
|
||||
parse_double(p, &combine_limit);
|
||||
} else if (!strcasecmp(command, "confdir")) {
|
||||
@@ -678,7 +679,7 @@ CNF_ParseLine(const char *filename, int number, char *line)
|
||||
parse_string(p, &ntp_signd_socket);
|
||||
} else if (!strcasecmp(command, "ntsratelimit")) {
|
||||
parse_ratelimit(p, &nts_ratelimit_enabled, &nts_ratelimit_interval,
|
||||
&nts_ratelimit_burst, &nts_ratelimit_leak);
|
||||
&nts_ratelimit_burst, &nts_ratelimit_leak, NULL);
|
||||
} else if (!strcasecmp(command, "ntscachedir") ||
|
||||
!strcasecmp(command, "ntsdumpdir")) {
|
||||
parse_string(p, &nts_dump_dir);
|
||||
@@ -710,7 +711,7 @@ CNF_ParseLine(const char *filename, int number, char *line)
|
||||
parse_int(p, &ptp_port);
|
||||
} else if (!strcasecmp(command, "ratelimit")) {
|
||||
parse_ratelimit(p, &ntp_ratelimit_enabled, &ntp_ratelimit_interval,
|
||||
&ntp_ratelimit_burst, &ntp_ratelimit_leak);
|
||||
&ntp_ratelimit_burst, &ntp_ratelimit_leak, &ntp_ratelimit_kod);
|
||||
} else if (!strcasecmp(command, "refclock")) {
|
||||
parse_refclock(p);
|
||||
} else if (!strcasecmp(command, "refresh")) {
|
||||
@@ -848,7 +849,7 @@ parse_sourcedir(char *line)
|
||||
/* ================================================== */
|
||||
|
||||
static void
|
||||
parse_ratelimit(char *line, int *enabled, int *interval, int *burst, int *leak)
|
||||
parse_ratelimit(char *line, int *enabled, int *interval, int *burst, int *leak, int *kod)
|
||||
{
|
||||
int n, val;
|
||||
char *opt;
|
||||
@@ -869,6 +870,8 @@ parse_ratelimit(char *line, int *enabled, int *interval, int *burst, int *leak)
|
||||
*burst = val;
|
||||
else if (!strcasecmp(opt, "leak"))
|
||||
*leak = val;
|
||||
else if (!strcasecmp(opt, "kod") && kod)
|
||||
*kod = val;
|
||||
else
|
||||
command_parse_error();
|
||||
}
|
||||
@@ -2428,11 +2431,12 @@ CNF_GetLockMemory(void)
|
||||
|
||||
/* ================================================== */
|
||||
|
||||
int CNF_GetNTPRateLimit(int *interval, int *burst, int *leak)
|
||||
int CNF_GetNTPRateLimit(int *interval, int *burst, int *leak, int *kod)
|
||||
{
|
||||
*interval = ntp_ratelimit_interval;
|
||||
*burst = ntp_ratelimit_burst;
|
||||
*leak = ntp_ratelimit_leak;
|
||||
*kod = ntp_ratelimit_kod;
|
||||
return ntp_ratelimit_enabled;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user