implemented the 'transfers-in' option

This commit is contained in:
Andreas Gustafsson
2000-02-25 17:34:05 +00:00
parent e0768b64e8
commit cfab2f4e03
4 changed files with 27 additions and 26 deletions

View File

@@ -805,6 +805,11 @@ load_configuration(const char *filename, ns_server_t *server,
/*
* Configure the zone manager.
*/
{
isc_int32_t transfersin = 10;
(void) dns_c_ctx_gettransfersin(configctx, &transfersin);
dns_zonemgr_settransfersin(server->zonemgr, transfersin);
}
{
isc_int32_t transfersperns = 2;
(void) dns_c_ctx_gettransfersperns(configctx, &transfersperns);

View File

@@ -69,7 +69,7 @@ options {
[ min-roots number; ] No
[ serial-queries number; ] No
[ transfer-format ( one-answer | many-answers ); ] Yes
[ transfers-in number; ] No
[ transfers-in number; ] Yes
[ transfers-out number; ] Yes
[ transfers-per-ns number; ] Yes
[ transfer-source ip_addr; ] Yes

View File

@@ -15,7 +15,7 @@
* SOFTWARE.
*/
/* $Id: xfrin.c,v 1.50 2000/02/25 00:50:36 gson Exp $ */
/* $Id: xfrin.c,v 1.51 2000/02/25 17:34:04 gson Exp $ */
#include <config.h>
@@ -508,9 +508,9 @@ dns_xfrin_create(dns_zone_t *zone, isc_sockaddr_t *masteraddr,
dns_tsigkey_t *key = NULL;
isc_netaddr_t masterip;
dns_peer_t *peer = NULL;
int maxtransfers;
int maxtransfersin, maxtransfersperns;
int nxfrsin, nxfrsperns;
dns_xfrinlist_t *transferlist;
int nxfrs;
REQUIRE(xfrp != NULL && *xfrp == NULL);
@@ -573,25 +573,29 @@ dns_xfrin_create(dns_zone_t *zone, isc_sockaddr_t *masteraddr,
* and we don't want to create the transfer object until we
* know there is quota available.
*/
maxtransfers = dns_zonemgr_getttransfersperns(dns_zone_getmgr(zone));
maxtransfersin =
dns_zonemgr_getttransfersin(dns_zone_getmgr(zone));
maxtransfersperns =
dns_zonemgr_getttransfersperns(dns_zone_getmgr(zone));
if (peer != NULL) {
(void) dns_peer_gettransfers(peer, &maxtransfers);
(void) dns_peer_gettransfers(peer, &maxtransfersperns);
}
transferlist = dns_zonemgr_gettransferlist(dns_zone_getmgr(zone));
LOCK(&transferlist->lock);
nxfrs = 0;
nxfrsin = nxfrsperns = 0;
for (x = ISC_LIST_HEAD(transferlist->transfers);
x != NULL;
x = ISC_LIST_NEXT(x, link))
{
isc_netaddr_t xip;
isc_netaddr_fromsockaddr(&xip, &x->masteraddr);
nxfrsin++;
if (isc_netaddr_equal(&xip, &masterip))
nxfrs++;
nxfrsperns++;
}
if (nxfrs >= maxtransfers) {
if (nxfrsin >= maxtransfersin || nxfrsperns >= maxtransfersperns) {
result = ISC_R_QUOTA;
xfrin_log1(ISC_LOG_INFO, zonename, masteraddr,
"deferred: %s", isc_result_totext(result));

View File

@@ -15,7 +15,7 @@
* SOFTWARE.
*/
/* $Id: zone.c,v 1.83 2000/02/25 00:50:38 gson Exp $ */
/* $Id: zone.c,v 1.84 2000/02/25 17:34:05 gson Exp $ */
#include <config.h>
@@ -26,7 +26,6 @@
#include <isc/magic.h>
#include <isc/mktemplate.h>
#include <isc/print.h>
#include <isc/quota.h>
#include <isc/serial.h>
#include <isc/taskpool.h>
#include <isc/timer.h>
@@ -199,9 +198,10 @@ struct dns_zonemgr {
isc_rwlock_t conflock;
/* Locked by rwlock. */
ISC_LIST(dns_zone_t) zones;
/* Maximum locked by conflock. */
isc_quota_t transfersin;
/* Locked by conflock. */
int transfersin;
int transfersperns;
/* Contains its own lock. */
dns_xfrinlist_t transferlist;
};
@@ -3147,22 +3147,16 @@ dns_zonemgr_create(isc_mem_t *mctx, isc_taskmgr_t *taskmgr,
goto free_rwlock;
}
result = isc_quota_init(&zmgr->transfersin, 10);
if (result != ISC_R_SUCCESS) {
UNEXPECTED_ERROR(__FILE__, __LINE__,
"isc_quota_init() failed: %s",
isc_result_totext(result));
result = DNS_R_UNEXPECTED;
goto free_conflock;
}
zmgr->transfersin = 10;
zmgr->transfersperns = 2;
result = dns_xfrinlist_init(&zmgr->transferlist);
if (result != ISC_R_SUCCESS) {
UNEXPECTED_ERROR(__FILE__, __LINE__,
"dns_transferlist_init() failed: %s",
isc_result_totext(result));
result = DNS_R_UNEXPECTED;
goto free_transfersin;
goto free_conflock;
}
/* Create the zone task pool. */
@@ -3184,8 +3178,6 @@ dns_zonemgr_create(isc_mem_t *mctx, isc_taskmgr_t *taskmgr,
dns_xfrinlist_destroy(&zmgr->transferlist);
free_taskpool:
isc_taskpool_destroy(&zmgr->zonetasks);
free_transfersin:
isc_quota_destroy(&zmgr->transfersin);
free_conflock:
isc_rwlock_destroy(&zmgr->conflock);
free_rwlock:
@@ -3313,12 +3305,12 @@ dns_zonemgr_unlockconf(dns_zonemgr_t *zmgr, isc_rwlocktype_t type) {
void
dns_zonemgr_settransfersin(dns_zonemgr_t *zmgr, int value) {
zmgr->transfersin.max = value;
zmgr->transfersin = value;
}
int
dns_zonemgr_getttransfersin(dns_zonemgr_t *zmgr) {
return (zmgr->transfersin.max);
return (zmgr->transfersin);
}
void