mirror of
https://gitlab.isc.org/isc-projects/bind9
synced 2025-08-29 13:38:26 +00:00
Merge branch '3064-avoid-periodic-interface-rescans' into 'main'
Disable periodic interface re-scans on Linux Closes #3064 See merge request isc-projects/bind9!6111
This commit is contained in:
commit
d50cb13d4d
5
CHANGES
5
CHANGES
@ -1,3 +1,8 @@
|
|||||||
|
5894. [func] Avoid periodic interface re-scans on Linux by
|
||||||
|
default, where a reliable event-based mechanism for
|
||||||
|
detecting interface state changes is available.
|
||||||
|
[GL #3064]
|
||||||
|
|
||||||
5893. [func] Add TLS session resumption support to the client-side
|
5893. [func] Add TLS session resumption support to the client-side
|
||||||
TLS code. [GL !6274]
|
TLS code. [GL !6274]
|
||||||
|
|
||||||
|
@ -8981,13 +8981,18 @@ load_configuration(const char *filename, named_server_t *server,
|
|||||||
result = named_config_get(maps, "interface-interval", &obj);
|
result = named_config_get(maps, "interface-interval", &obj);
|
||||||
INSIST(result == ISC_R_SUCCESS);
|
INSIST(result == ISC_R_SUCCESS);
|
||||||
interface_interval = cfg_obj_asduration(obj);
|
interface_interval = cfg_obj_asduration(obj);
|
||||||
if (interface_interval == 0) {
|
|
||||||
CHECK(isc_timer_reset(server->interface_timer,
|
if (server->interface_timer != NULL) {
|
||||||
isc_timertype_inactive, NULL, true));
|
if (interface_interval == 0) {
|
||||||
} else if (server->interface_interval != interface_interval) {
|
CHECK(isc_timer_reset(server->interface_timer,
|
||||||
isc_interval_set(&interval, interface_interval, 0);
|
isc_timertype_inactive, NULL,
|
||||||
CHECK(isc_timer_reset(server->interface_timer,
|
true));
|
||||||
isc_timertype_ticker, &interval, false));
|
} else if (server->interface_interval != interface_interval) {
|
||||||
|
isc_interval_set(&interval, interface_interval, 0);
|
||||||
|
CHECK(isc_timer_reset(server->interface_timer,
|
||||||
|
isc_timertype_ticker, &interval,
|
||||||
|
false));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
server->interface_interval = interface_interval;
|
server->interface_interval = interface_interval;
|
||||||
|
|
||||||
@ -9824,8 +9829,23 @@ run_server(isc_task_t *task, isc_event_t *event) {
|
|||||||
&server->interfacemgr),
|
&server->interfacemgr),
|
||||||
"creating interface manager");
|
"creating interface manager");
|
||||||
|
|
||||||
isc_timer_create(named_g_timermgr, server->task, interface_timer_tick,
|
/*
|
||||||
server, &server->interface_timer);
|
* In some cases the user might expect a certain behaviour from
|
||||||
|
* the rescan timer, let's try to deduce that from the
|
||||||
|
* configuration options.
|
||||||
|
*/
|
||||||
|
if ((ns_interfacemgr_dynamic_updates_are_reliable() &&
|
||||||
|
server->interface_auto) ||
|
||||||
|
(server->interface_interval == 0))
|
||||||
|
{
|
||||||
|
isc_log_write(named_g_lctx, NAMED_LOGCATEGORY_GENERAL,
|
||||||
|
NAMED_LOGMODULE_SERVER, ISC_LOG_INFO,
|
||||||
|
"Disabling periodic interface re-scans timer");
|
||||||
|
} else {
|
||||||
|
isc_timer_create(named_g_timermgr, server->task,
|
||||||
|
interface_timer_tick, server,
|
||||||
|
&server->interface_timer);
|
||||||
|
}
|
||||||
|
|
||||||
isc_timer_create(named_g_timermgr, server->task, heartbeat_timer_tick,
|
isc_timer_create(named_g_timermgr, server->task, heartbeat_timer_tick,
|
||||||
server, &server->heartbeat_timer);
|
server, &server->heartbeat_timer);
|
||||||
@ -9926,7 +9946,9 @@ shutdown_server(isc_task_t *task, isc_event_t *event) {
|
|||||||
isc_mem_put(server->mctx, nsc, sizeof(*nsc));
|
isc_mem_put(server->mctx, nsc, sizeof(*nsc));
|
||||||
}
|
}
|
||||||
|
|
||||||
isc_timer_destroy(&server->interface_timer);
|
if (server->interface_timer != NULL) {
|
||||||
|
isc_timer_destroy(&server->interface_timer);
|
||||||
|
}
|
||||||
isc_timer_destroy(&server->heartbeat_timer);
|
isc_timer_destroy(&server->heartbeat_timer);
|
||||||
isc_timer_destroy(&server->pps_timer);
|
isc_timer_destroy(&server->pps_timer);
|
||||||
isc_timer_destroy(&server->tat_timer);
|
isc_timer_destroy(&server->tat_timer);
|
||||||
|
@ -190,3 +190,11 @@ ns_interfacemgr_getclientmgr(ns_interfacemgr_t *mgr);
|
|||||||
* Returns the client manager for the current worker thread.
|
* Returns the client manager for the current worker thread.
|
||||||
* (This cannot be run from outside a network manager thread.)
|
* (This cannot be run from outside a network manager thread.)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
bool
|
||||||
|
ns_interfacemgr_dynamic_updates_are_reliable(void);
|
||||||
|
/*%<
|
||||||
|
* Returns 'true' if periodic interface re-scans timer should be
|
||||||
|
* disabled. That is the case on the platforms where kernel-based
|
||||||
|
* mechanisms for tracking networking interface states is reliable enough.
|
||||||
|
*/
|
||||||
|
@ -1379,3 +1379,17 @@ ns_interfacemgr_getclientmgr(ns_interfacemgr_t *mgr) {
|
|||||||
|
|
||||||
return (mgr->clientmgrs[tid]);
|
return (mgr->clientmgrs[tid]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
ns_interfacemgr_dynamic_updates_are_reliable(void) {
|
||||||
|
#if defined(LINUX_NETLINK_AVAILABLE)
|
||||||
|
/*
|
||||||
|
* Let's disable periodic interface rescans on Linux, as there a
|
||||||
|
* reliable kernel-based mechanism for tracking interface state
|
||||||
|
* changes is available.
|
||||||
|
*/
|
||||||
|
return (true);
|
||||||
|
#else
|
||||||
|
return (false);
|
||||||
|
#endif /* LINUX_NETLINK_AVAILABLE */
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user