aboutsummaryrefslogtreecommitdiff
path: root/contrib/bind9/bin/named/server.c
diff options
context:
space:
mode:
authorDoug Barton <dougb@FreeBSD.org>2008-09-01 22:54:49 +0000
committerDoug Barton <dougb@FreeBSD.org>2008-09-01 22:54:49 +0000
commitac9a011f43b8b002871343d24dad700147836450 (patch)
tree76dd11ff82e0b16f834088d4e670d19e3c291dfe /contrib/bind9/bin/named/server.c
parent1b34d5982bbdfe720e2df9b4f0c75fd489077444 (diff)
parentca732c8b83a6bb3115b1bebf77d19d83b2cf0dc9 (diff)
Merge from vendor/bind9/dist as of the 9.4.2-P2 import
Notes
Notes: svn path=/head/; revision=182645
Diffstat (limited to 'contrib/bind9/bin/named/server.c')
-rw-r--r--contrib/bind9/bin/named/server.c69
1 files changed, 54 insertions, 15 deletions
diff --git a/contrib/bind9/bin/named/server.c b/contrib/bind9/bin/named/server.c
index 8e0c66cca4d9..79bd125c5498 100644
--- a/contrib/bind9/bin/named/server.c
+++ b/contrib/bind9/bin/named/server.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2007 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2008 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1999-2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: server.c,v 1.419.18.57.10.1 2008/05/22 21:28:04 each Exp $ */
+/* $Id: server.c,v 1.419.18.57.10.3 2008/07/23 12:04:32 marka Exp $ */
/*! \file */
@@ -2696,27 +2696,29 @@ static isc_result_t
load_configuration(const char *filename, ns_server_t *server,
isc_boolean_t first_time)
{
- isc_result_t result;
- isc_interval_t interval;
- cfg_parser_t *parser = NULL;
+ cfg_aclconfctx_t aclconfctx;
cfg_obj_t *config;
- const cfg_obj_t *options;
- const cfg_obj_t *views;
+ cfg_parser_t *parser = NULL;
+ const cfg_listelt_t *element;
+ const cfg_obj_t *builtin_views;
+ const cfg_obj_t *maps[3];
const cfg_obj_t *obj;
+ const cfg_obj_t *options;
const cfg_obj_t *v4ports, *v6ports;
- const cfg_obj_t *maps[3];
- const cfg_obj_t *builtin_views;
- const cfg_listelt_t *element;
+ const cfg_obj_t *views;
dns_view_t *view = NULL;
dns_view_t *view_next;
- dns_viewlist_t viewlist;
dns_viewlist_t tmpviewlist;
- cfg_aclconfctx_t aclconfctx;
- isc_uint32_t interface_interval;
- isc_uint32_t heartbeat_interval;
- isc_uint32_t udpsize;
+ dns_viewlist_t viewlist;
in_port_t listen_port;
int i;
+ isc_interval_t interval;
+ isc_resourcevalue_t files;
+ isc_result_t result;
+ isc_uint32_t heartbeat_interval;
+ isc_uint32_t interface_interval;
+ isc_uint32_t reserved;
+ isc_uint32_t udpsize;
cfg_aclconfctx_init(&aclconfctx);
ISC_LIST_INIT(viewlist);
@@ -2797,6 +2799,43 @@ load_configuration(const char *filename, ns_server_t *server,
set_limits(maps);
/*
+ * Sanity check on "files" limit.
+ */
+ result = isc_resource_curlimit(isc_resource_openfiles, &files);
+ if (result == ISC_R_SUCCESS && files < FD_SETSIZE) {
+ isc_log_write(ns_g_lctx, NS_LOGCATEGORY_GENERAL,
+ NS_LOGMODULE_SERVER, ISC_LOG_WARNING,
+ "the 'files' limit (%" ISC_PRINT_QUADFORMAT "u) "
+ "is less than FD_SETSIZE (%d), increase "
+ "'files' in named.conf or recompile with a "
+ "smaller FD_SETSIZE.", files, FD_SETSIZE);
+ if (files > FD_SETSIZE)
+ files = FD_SETSIZE;
+ } else
+ files = FD_SETSIZE;
+
+ /*
+ * Set the number of socket reserved for TCP, stdio etc.
+ */
+ obj = NULL;
+ result = ns_config_get(maps, "reserved-sockets", &obj);
+ INSIST(result == ISC_R_SUCCESS);
+ reserved = cfg_obj_asuint32(obj);
+ if (files < 128U) /* Prevent underflow. */
+ reserved = 0;
+ else if (reserved > files - 128U) /* Mimimum UDP space. */
+ reserved = files - 128;
+ if (reserved < 128U) /* Mimimum TCP/stdio space. */
+ reserved = 128;
+ if (reserved + 128U > files) {
+ isc_log_write(ns_g_lctx, NS_LOGCATEGORY_GENERAL,
+ NS_LOGMODULE_SERVER, ISC_LOG_WARNING,
+ "less than 128 UDP sockets available after "
+ "applying 'reserved-sockets' and 'files'");
+ }
+ isc__socketmgr_setreserved(ns_g_socketmgr, reserved);
+
+ /*
* Configure various server options.
*/
configure_server_quota(maps, "transfers-out", &server->xfroutquota);