Nicer sizes possible in config file.

git-svn-id: file:///svn/unbound/trunk@843 be551aaa-1e26-0410-a405-d3ace91eadb9
This commit is contained in:
Wouter Wijngaards 2008-01-11 13:20:22 +00:00
parent 97f5d3d28e
commit 1315edc5e9
8 changed files with 175 additions and 70 deletions

View file

@ -3,6 +3,7 @@
- added text describing the use of stub zones for private zones.
- checkconf tests for bad hostnames (IP address), and for doubled
interface lines.
- memory sizes can be given with 'k', 'Kb', or M or G appended.
10 January 2008: Wouter
- typo in example.conf.

View file

@ -59,8 +59,8 @@ server:
# msg-buffer-size: 65552
# the amount of memory to use for the message cache.
# in bytes. default is 4 Mb
# msg-cache-size: 4194304
# plain value in bytes or you can append k, m or G. default is "4Mb".
# msg-cache-size: 4m
# the number of slabs to use for the message cache.
# the number of slabs must be a power of 2.
@ -71,8 +71,8 @@ server:
# num-queries-per-thread: 1024
# the amount of memory to use for the RRset cache.
# in bytes. default is 4 Mb
# rrset-cache-size: 4194304
# plain value in bytes or you can append k, m or G. default is "4Mb".
# rrset-cache-size: 4m
# the number of slabs to use for the RRset cache.
# the number of slabs must be a power of 2.
@ -99,7 +99,7 @@ server:
# infra-cache-numhosts: 10000
# the maximum size of the lame zones cached per host. in bytes.
# infra-cache-lame-size: 10240
# infra-cache-lame-size: 10k
# Enable IPv4, "yes" or "no".
# do-ip4: yes
@ -247,8 +247,8 @@ server:
# val-nsec3-keysize-iterations: "1024 150 2048 500 4096 2500"
# the amount of memory to use for the key cache.
# in bytes. default is 4 Mb
# key-cache-size: 4194304
# plain value in bytes or you can append k, m or G. default is "4Mb".
# key-cache-size: 4m
# the number of slabs to use for the key cache.
# the number of slabs must be a power of 2.

View file

@ -134,6 +134,8 @@ reply to the client.
.TP
.B msg\-cache\-size: \fI<number>
Number of bytes size of the message cache. Default is 4 megabytes.
A plain number is in bytes, append 'k', 'm' or 'g' for kilobytes, megabytes
or gigabytes (1024*1024 bytes in a megabyte).
.TP
.B msg\-cache\-slabs: \fI<number>
Number of slabs in the message cache. Slabs reduce lock contention by threads.
@ -148,6 +150,8 @@ the existing queries. Default 1024.
.TP
.B rrset\-cache\-size: \fI<number>
Number of bytes size of the RRset cache. Default is 4 megabytes.
A plain number is in bytes, append 'k', 'm' or 'g' for kilobytes, megabytes
or gigabytes (1024*1024 bytes in a megabyte).
.TP
.B rrset\-cache\-slabs: \fI<number>
Number of slabs in the RRset cache. Slabs reduce lock contention by threads.
@ -383,6 +387,8 @@ This table must be kept short; a very long list could cause slower operation.
.TP
.B key\-cache\-size: \fI<number>
Number of bytes size of the key cache. Default is 4 megabytes.
A plain number is in bytes, append 'k', 'm' or 'g' for kilobytes, megabytes
or gigabytes (1024*1024 bytes in a megabyte).
.TP
.B key\-cache\-slabs: \fI<number>
Number of slabs in the key cache. Slabs reduce lock contention by threads.

View file

@ -240,6 +240,44 @@ net_test()
}
}
#include "util/config_file.h"
/** test config_file: cfg_parse_memsize */
static void
config_memsize_test()
{
size_t v = 0;
if(0) {
/* these emit errors */
unit_assert( cfg_parse_memsize("", &v) == 0);
unit_assert( cfg_parse_memsize("bla", &v) == 0);
unit_assert( cfg_parse_memsize("nop", &v) == 0);
unit_assert( cfg_parse_memsize("n0b", &v) == 0);
unit_assert( cfg_parse_memsize("gb", &v) == 0);
unit_assert( cfg_parse_memsize("b", &v) == 0);
unit_assert( cfg_parse_memsize("kb", &v) == 0);
unit_assert( cfg_parse_memsize("kk kb", &v) == 0);
}
unit_assert( cfg_parse_memsize("0", &v) && v==0);
unit_assert( cfg_parse_memsize("1", &v) && v==1);
unit_assert( cfg_parse_memsize("10", &v) && v==10);
unit_assert( cfg_parse_memsize("10b", &v) && v==10);
unit_assert( cfg_parse_memsize("5b", &v) && v==5);
unit_assert( cfg_parse_memsize("1024", &v) && v==1024);
unit_assert( cfg_parse_memsize("1k", &v) && v==1024);
unit_assert( cfg_parse_memsize("1K", &v) && v==1024);
unit_assert( cfg_parse_memsize("1Kb", &v) && v==1024);
unit_assert( cfg_parse_memsize("1kb", &v) && v==1024);
unit_assert( cfg_parse_memsize("1 kb", &v) && v==1024);
unit_assert( cfg_parse_memsize("10 kb", &v) && v==10240);
unit_assert( cfg_parse_memsize("2k", &v) && v==2048);
unit_assert( cfg_parse_memsize("2m", &v) && v==2048*1024);
unit_assert( cfg_parse_memsize("3M", &v) && v==3072*1024);
unit_assert( cfg_parse_memsize("40m", &v) && v==40960*1024);
unit_assert( cfg_parse_memsize("1G", &v) && v==1024*1024*1024);
unit_assert( cfg_parse_memsize("1 Gb", &v) && v==1024*1024*1024);
unit_assert( cfg_parse_memsize("0 Gb", &v) && v==0*1024*1024);
}
#include "util/rtt.h"
/** test RTT code */
static void
@ -360,6 +398,7 @@ main(int argc, char* argv[])
rnd_test();
verify_test();
net_test();
config_memsize_test();
dname_test();
anchors_test();
rtt_test();

View file

@ -386,6 +386,60 @@ cfg_count_numbers(const char* s)
return num;
}
/** all digit number */
static int isalldigit(const char* str, size_t l)
{
size_t i;
for(i=0; i<l; i++)
if(!isdigit(str[i]))
return 0;
return 1;
}
int
cfg_parse_memsize(const char* str, size_t* res)
{
size_t len = (size_t)strlen(str);
size_t mult = 1;
if(!str || len == 0) {
log_err("not a size: '%s'", str);
return 0;
}
if(isalldigit(str, len)) {
*res = (size_t)atol(str);
return 1;
}
/* check appended num */
while(len>0 && str[len-1]==' ')
len--;
if(len > 1 && str[len-1] == 'b')
len--;
else if(len > 1 && str[len-1] == 'B')
len--;
if(len > 1 && tolower(str[len-1]) == 'g')
mult = 1024*1024*1024;
else if(len > 1 && tolower(str[len-1]) == 'm')
mult = 1024*1024;
else if(len > 1 && tolower(str[len-1]) == 'k')
mult = 1024;
else if(len > 0 && isdigit(str[len-1]))
mult = 1;
else {
log_err("unknown size specifier: '%s'", str);
return 0;
}
while(len>1 && str[len-2]==' ')
len--;
if(!isalldigit(str, len-1)) {
log_err("unknown size specifier: '%s'", str);
return 0;
}
*res = ((size_t)atol(str)) * mult;
return 1;
}
/** the MAX_TTL global */
extern uint32_t MAX_TTL;

View file

@ -313,6 +313,17 @@ uint32_t cfg_convert_timeval(const char* str);
*/
int cfg_count_numbers(const char* str);
/**
* Convert a 'nice' memory or file size into a bytecount
* From '100k' to 102400. and so on. Understands kKmMgG.
* k=1024, m=1024*1024, g=1024*1024*1024.
* @param str: string
* @param res: result is stored here, size in bytes.
* @return: true if parsed correctly, or 0 on a parse error (and an error
* is logged).
*/
int cfg_parse_memsize(const char* str, size_t* res);
/**
* Used during options parsing
*/

View file

@ -634,11 +634,11 @@ static const yytype_uint16 yyrline[] =
145, 145, 145, 147, 159, 160, 161, 161, 161, 163,
172, 181, 190, 203, 218, 227, 236, 245, 254, 263,
272, 281, 290, 304, 311, 318, 325, 333, 340, 347,
355, 363, 370, 379, 388, 395, 402, 413, 422, 435,
444, 453, 466, 475, 484, 493, 502, 515, 522, 532,
542, 552, 562, 569, 579, 592, 599, 617, 626, 635,
645, 655, 662, 671, 684, 703, 710, 717, 724, 731,
738, 745
355, 363, 370, 379, 388, 395, 402, 413, 421, 434,
443, 451, 464, 473, 482, 491, 500, 513, 520, 530,
540, 550, 560, 567, 577, 590, 597, 615, 624, 633,
643, 653, 660, 668, 681, 700, 707, 714, 721, 728,
735, 742
};
#endif
@ -2063,15 +2063,14 @@ yyreduce:
#line 414 "util/configparser.y"
{
OUTYY(("P(server_msg_cache_size:%s)\n", (yyvsp[(2) - (2)].str)));
if(atoi((yyvsp[(2) - (2)].str)) == 0)
yyerror("number expected");
else cfg_parser->cfg->msg_cache_size = atoi((yyvsp[(2) - (2)].str));
if(!cfg_parse_memsize((yyvsp[(2) - (2)].str), &cfg_parser->cfg->msg_cache_size))
yyerror("memory size expected");
free((yyvsp[(2) - (2)].str));
}
break;
case 108:
#line 423 "util/configparser.y"
#line 422 "util/configparser.y"
{
OUTYY(("P(server_msg_cache_slabs:%s)\n", (yyvsp[(2) - (2)].str)));
if(atoi((yyvsp[(2) - (2)].str)) == 0)
@ -2086,7 +2085,7 @@ yyreduce:
break;
case 109:
#line 436 "util/configparser.y"
#line 435 "util/configparser.y"
{
OUTYY(("P(server_num_queries_per_thread:%s)\n", (yyvsp[(2) - (2)].str)));
if(atoi((yyvsp[(2) - (2)].str)) == 0)
@ -2097,18 +2096,17 @@ yyreduce:
break;
case 110:
#line 445 "util/configparser.y"
#line 444 "util/configparser.y"
{
OUTYY(("P(server_rrset_cache_size:%s)\n", (yyvsp[(2) - (2)].str)));
if(atoi((yyvsp[(2) - (2)].str)) == 0)
yyerror("number expected");
else cfg_parser->cfg->rrset_cache_size = atoi((yyvsp[(2) - (2)].str));
if(!cfg_parse_memsize((yyvsp[(2) - (2)].str), &cfg_parser->cfg->rrset_cache_size))
yyerror("memory size expected");
free((yyvsp[(2) - (2)].str));
}
break;
case 111:
#line 454 "util/configparser.y"
#line 452 "util/configparser.y"
{
OUTYY(("P(server_rrset_cache_slabs:%s)\n", (yyvsp[(2) - (2)].str)));
if(atoi((yyvsp[(2) - (2)].str)) == 0)
@ -2123,7 +2121,7 @@ yyreduce:
break;
case 112:
#line 467 "util/configparser.y"
#line 465 "util/configparser.y"
{
OUTYY(("P(server_infra_host_ttl:%s)\n", (yyvsp[(2) - (2)].str)));
if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0)
@ -2134,7 +2132,7 @@ yyreduce:
break;
case 113:
#line 476 "util/configparser.y"
#line 474 "util/configparser.y"
{
OUTYY(("P(server_infra_lame_ttl:%s)\n", (yyvsp[(2) - (2)].str)));
if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0)
@ -2145,7 +2143,7 @@ yyreduce:
break;
case 114:
#line 485 "util/configparser.y"
#line 483 "util/configparser.y"
{
OUTYY(("P(server_infra_cache_numhosts:%s)\n", (yyvsp[(2) - (2)].str)));
if(atoi((yyvsp[(2) - (2)].str)) == 0)
@ -2156,18 +2154,18 @@ yyreduce:
break;
case 115:
#line 494 "util/configparser.y"
#line 492 "util/configparser.y"
{
OUTYY(("P(server_infra_cache_lame_size:%s)\n", (yyvsp[(2) - (2)].str)));
if(atoi((yyvsp[(2) - (2)].str)) == 0)
if(!cfg_parse_memsize((yyvsp[(2) - (2)].str), &cfg_parser->cfg->
infra_cache_lame_size))
yyerror("number expected");
else cfg_parser->cfg->infra_cache_lame_size = atoi((yyvsp[(2) - (2)].str));
free((yyvsp[(2) - (2)].str));
}
break;
case 116:
#line 503 "util/configparser.y"
#line 501 "util/configparser.y"
{
OUTYY(("P(server_infra_cache_slabs:%s)\n", (yyvsp[(2) - (2)].str)));
if(atoi((yyvsp[(2) - (2)].str)) == 0)
@ -2182,7 +2180,7 @@ yyreduce:
break;
case 117:
#line 516 "util/configparser.y"
#line 514 "util/configparser.y"
{
OUTYY(("P(server_target_fetch_policy:%s)\n", (yyvsp[(2) - (2)].str)));
free(cfg_parser->cfg->target_fetch_policy);
@ -2191,7 +2189,7 @@ yyreduce:
break;
case 118:
#line 523 "util/configparser.y"
#line 521 "util/configparser.y"
{
OUTYY(("P(server_harden_short_bufsize:%s)\n", (yyvsp[(2) - (2)].str)));
if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
@ -2203,7 +2201,7 @@ yyreduce:
break;
case 119:
#line 533 "util/configparser.y"
#line 531 "util/configparser.y"
{
OUTYY(("P(server_harden_large_queries:%s)\n", (yyvsp[(2) - (2)].str)));
if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
@ -2215,7 +2213,7 @@ yyreduce:
break;
case 120:
#line 543 "util/configparser.y"
#line 541 "util/configparser.y"
{
OUTYY(("P(server_harden_glue:%s)\n", (yyvsp[(2) - (2)].str)));
if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
@ -2227,7 +2225,7 @@ yyreduce:
break;
case 121:
#line 553 "util/configparser.y"
#line 551 "util/configparser.y"
{
OUTYY(("P(server_harden_dnssec_stripped:%s)\n", (yyvsp[(2) - (2)].str)));
if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
@ -2239,7 +2237,7 @@ yyreduce:
break;
case 122:
#line 563 "util/configparser.y"
#line 561 "util/configparser.y"
{
OUTYY(("P(server_do_not_query_address:%s)\n", (yyvsp[(2) - (2)].str)));
if(!cfg_strlist_insert(&cfg_parser->cfg->donotqueryaddrs, (yyvsp[(2) - (2)].str)))
@ -2248,7 +2246,7 @@ yyreduce:
break;
case 123:
#line 570 "util/configparser.y"
#line 568 "util/configparser.y"
{
OUTYY(("P(server_do_not_query_localhost:%s)\n", (yyvsp[(2) - (2)].str)));
if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
@ -2260,7 +2258,7 @@ yyreduce:
break;
case 124:
#line 580 "util/configparser.y"
#line 578 "util/configparser.y"
{
OUTYY(("P(server_access_control:%s %s)\n", (yyvsp[(2) - (3)].str), (yyvsp[(3) - (3)].str)));
if(strcmp((yyvsp[(3) - (3)].str), "deny")!=0 && strcmp((yyvsp[(3) - (3)].str), "refuse")!=0 &&
@ -2275,7 +2273,7 @@ yyreduce:
break;
case 125:
#line 593 "util/configparser.y"
#line 591 "util/configparser.y"
{
OUTYY(("P(server_module_conf:%s)\n", (yyvsp[(2) - (2)].str)));
free(cfg_parser->cfg->module_conf);
@ -2284,7 +2282,7 @@ yyreduce:
break;
case 126:
#line 600 "util/configparser.y"
#line 598 "util/configparser.y"
{
OUTYY(("P(server_val_override_date:%s)\n", (yyvsp[(2) - (2)].str)));
if(strlen((yyvsp[(2) - (2)].str)) == 0 || strcmp((yyvsp[(2) - (2)].str), "0") == 0) {
@ -2304,7 +2302,7 @@ yyreduce:
break;
case 127:
#line 618 "util/configparser.y"
#line 616 "util/configparser.y"
{
OUTYY(("P(server_cache_max_ttl:%s)\n", (yyvsp[(2) - (2)].str)));
if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0)
@ -2315,7 +2313,7 @@ yyreduce:
break;
case 128:
#line 627 "util/configparser.y"
#line 625 "util/configparser.y"
{
OUTYY(("P(server_bogus_ttl:%s)\n", (yyvsp[(2) - (2)].str)));
if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0)
@ -2326,7 +2324,7 @@ yyreduce:
break;
case 129:
#line 636 "util/configparser.y"
#line 634 "util/configparser.y"
{
OUTYY(("P(server_val_clean_additional:%s)\n", (yyvsp[(2) - (2)].str)));
if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
@ -2338,7 +2336,7 @@ yyreduce:
break;
case 130:
#line 646 "util/configparser.y"
#line 644 "util/configparser.y"
{
OUTYY(("P(server_val_permissive_mode:%s)\n", (yyvsp[(2) - (2)].str)));
if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
@ -2350,7 +2348,7 @@ yyreduce:
break;
case 131:
#line 656 "util/configparser.y"
#line 654 "util/configparser.y"
{
OUTYY(("P(server_val_nsec3_keysize_iterations:%s)\n", (yyvsp[(2) - (2)].str)));
free(cfg_parser->cfg->val_nsec3_key_iterations);
@ -2359,18 +2357,17 @@ yyreduce:
break;
case 132:
#line 663 "util/configparser.y"
#line 661 "util/configparser.y"
{
OUTYY(("P(server_key_cache_size:%s)\n", (yyvsp[(2) - (2)].str)));
if(atoi((yyvsp[(2) - (2)].str)) == 0)
yyerror("number expected");
else cfg_parser->cfg->key_cache_size = atoi((yyvsp[(2) - (2)].str));
if(cfg_parse_memsize((yyvsp[(2) - (2)].str), &cfg_parser->cfg->key_cache_size))
yyerror("memory size expected");
free((yyvsp[(2) - (2)].str));
}
break;
case 133:
#line 672 "util/configparser.y"
#line 669 "util/configparser.y"
{
OUTYY(("P(server_key_cache_slabs:%s)\n", (yyvsp[(2) - (2)].str)));
if(atoi((yyvsp[(2) - (2)].str)) == 0)
@ -2385,7 +2382,7 @@ yyreduce:
break;
case 134:
#line 685 "util/configparser.y"
#line 682 "util/configparser.y"
{
OUTYY(("P(server_local_zone:%s %s)\n", (yyvsp[(2) - (3)].str), (yyvsp[(3) - (3)].str)));
if(strcmp((yyvsp[(3) - (3)].str), "static")!=0 && strcmp((yyvsp[(3) - (3)].str), "deny")!=0 &&
@ -2406,7 +2403,7 @@ yyreduce:
break;
case 135:
#line 704 "util/configparser.y"
#line 701 "util/configparser.y"
{
OUTYY(("P(server_local_data:%s)\n", (yyvsp[(2) - (2)].str)));
if(!cfg_strlist_insert(&cfg_parser->cfg->local_data, (yyvsp[(2) - (2)].str)))
@ -2415,7 +2412,7 @@ yyreduce:
break;
case 136:
#line 711 "util/configparser.y"
#line 708 "util/configparser.y"
{
OUTYY(("P(name:%s)\n", (yyvsp[(2) - (2)].str)));
free(cfg_parser->cfg->stubs->name);
@ -2424,7 +2421,7 @@ yyreduce:
break;
case 137:
#line 718 "util/configparser.y"
#line 715 "util/configparser.y"
{
OUTYY(("P(stub-host:%s)\n", (yyvsp[(2) - (2)].str)));
if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->hosts, (yyvsp[(2) - (2)].str)))
@ -2433,7 +2430,7 @@ yyreduce:
break;
case 138:
#line 725 "util/configparser.y"
#line 722 "util/configparser.y"
{
OUTYY(("P(stub-addr:%s)\n", (yyvsp[(2) - (2)].str)));
if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->addrs, (yyvsp[(2) - (2)].str)))
@ -2442,7 +2439,7 @@ yyreduce:
break;
case 139:
#line 732 "util/configparser.y"
#line 729 "util/configparser.y"
{
OUTYY(("P(name:%s)\n", (yyvsp[(2) - (2)].str)));
free(cfg_parser->cfg->forwards->name);
@ -2451,7 +2448,7 @@ yyreduce:
break;
case 140:
#line 739 "util/configparser.y"
#line 736 "util/configparser.y"
{
OUTYY(("P(forward-host:%s)\n", (yyvsp[(2) - (2)].str)));
if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->hosts, (yyvsp[(2) - (2)].str)))
@ -2460,7 +2457,7 @@ yyreduce:
break;
case 141:
#line 746 "util/configparser.y"
#line 743 "util/configparser.y"
{
OUTYY(("P(forward-addr:%s)\n", (yyvsp[(2) - (2)].str)));
if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->addrs, (yyvsp[(2) - (2)].str)))
@ -2470,7 +2467,7 @@ yyreduce:
/* Line 1267 of yacc.c. */
#line 2474 "util/configparser.c"
#line 2471 "util/configparser.c"
default: break;
}
YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@ -2684,7 +2681,7 @@ yyreturn:
}
#line 752 "util/configparser.y"
#line 749 "util/configparser.y"
/* parse helper routines could be here */

View file

@ -413,9 +413,8 @@ server_msg_buffer_size: VAR_MSG_BUFFER_SIZE STRING
server_msg_cache_size: VAR_MSG_CACHE_SIZE STRING
{
OUTYY(("P(server_msg_cache_size:%s)\n", $2));
if(atoi($2) == 0)
yyerror("number expected");
else cfg_parser->cfg->msg_cache_size = atoi($2);
if(!cfg_parse_memsize($2, &cfg_parser->cfg->msg_cache_size))
yyerror("memory size expected");
free($2);
}
;
@ -444,9 +443,8 @@ server_num_queries_per_thread: VAR_NUM_QUERIES_PER_THREAD STRING
server_rrset_cache_size: VAR_RRSET_CACHE_SIZE STRING
{
OUTYY(("P(server_rrset_cache_size:%s)\n", $2));
if(atoi($2) == 0)
yyerror("number expected");
else cfg_parser->cfg->rrset_cache_size = atoi($2);
if(!cfg_parse_memsize($2, &cfg_parser->cfg->rrset_cache_size))
yyerror("memory size expected");
free($2);
}
;
@ -493,9 +491,9 @@ server_infra_cache_numhosts: VAR_INFRA_CACHE_NUMHOSTS STRING
server_infra_cache_lame_size: VAR_INFRA_CACHE_LAME_SIZE STRING
{
OUTYY(("P(server_infra_cache_lame_size:%s)\n", $2));
if(atoi($2) == 0)
if(!cfg_parse_memsize($2, &cfg_parser->cfg->
infra_cache_lame_size))
yyerror("number expected");
else cfg_parser->cfg->infra_cache_lame_size = atoi($2);
free($2);
}
;
@ -662,9 +660,8 @@ server_val_nsec3_keysize_iterations: VAR_VAL_NSEC3_KEYSIZE_ITERATIONS STRING
server_key_cache_size: VAR_KEY_CACHE_SIZE STRING
{
OUTYY(("P(server_key_cache_size:%s)\n", $2));
if(atoi($2) == 0)
yyerror("number expected");
else cfg_parser->cfg->key_cache_size = atoi($2);
if(cfg_parse_memsize($2, &cfg_parser->cfg->key_cache_size))
yyerror("memory size expected");
free($2);
}
;