From: Wouter Wijngaards Date: Tue, 5 Feb 2008 10:23:44 +0000 (+0000) Subject: statistics-interval config setting. X-Git-Tag: release-0.9~23 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=967793aad3a189be4de27a735031c963c42f214f;p=thirdparty%2Funbound.git statistics-interval config setting. git-svn-id: file:///svn/unbound/trunk@917 be551aaa-1e26-0410-a405-d3ace91eadb9 --- diff --git a/daemon/stats.c b/daemon/stats.c index 401d67170..d16627c38 100644 --- a/daemon/stats.c +++ b/daemon/stats.c @@ -46,7 +46,7 @@ void server_stats_init(struct server_stats* stats) { - memset(stats, 0, sizeof(stats)); + memset(stats, 0, sizeof(*stats)); } void server_stats_querymiss(struct server_stats* stats, struct worker* worker) diff --git a/daemon/worker.c b/daemon/worker.c index 006ac7996..86ae14c50 100644 --- a/daemon/worker.c +++ b/daemon/worker.c @@ -163,6 +163,23 @@ worker_mem_report(struct worker* ATTR_UNUSED(worker), (unsigned)infra, (unsigned)iter, (unsigned)val, (unsigned)ac, (unsigned)superac, (unsigned)me); debug_total_mem(total); +#else /* no UNBOUND_ALLOC_STATS */ + size_t val = 0; + int i; + if(verbosity < VERB_DETAIL) + return; + for(i=0; ienv.mesh->mods.num; i++) { + log_assert(fptr_whitelist_mod_get_mem(worker->env.mesh-> + mods.mod[i]->get_mem)); + if(strcmp(worker->env.mesh->mods.mod[i]->name, "validator")==0) + val += (*worker->env.mesh->mods.mod[i]->get_mem) + (&worker->env, i); + } + verbose(VERB_DETAIL, "cache memory msg=%u rrset=%u infra=%u val=%u", + slabhash_get_mem(worker->env.msg_cache), + slabhash_get_mem(&worker->env.rrset_cache->table), + infra_get_mem(worker->env.infra_cache), + val); #endif /* UNBOUND_ALLOC_STATS */ } @@ -842,6 +859,30 @@ worker_sighandler(int sig, void* arg) } } +/** restart statistics timer for worker, if enabled */ +static void +worker_restart_timer(struct worker* worker) +{ + if(worker->env.cfg->stat_interval > 0) { + struct timeval tv; + tv.tv_sec = worker->env.cfg->stat_interval; + tv.tv_usec = 0; + comm_timer_set(worker->stat_timer, &tv); + } +} + +void worker_stat_timer_cb(void* arg) +{ + struct worker* worker = (struct worker*)arg; + mesh_stats(worker->env.mesh, "mesh has"); + server_stats_log(&worker->stats, worker->thread_num); + worker_mem_report(worker, NULL); + server_stats_init(&worker->stats); + mesh_stats_clear(worker->env.mesh); + /* start next timer */ + worker_restart_timer(worker); +} + struct worker* worker_create(struct daemon* daemon, int id) { @@ -946,6 +987,12 @@ worker_init(struct worker* worker, struct config_file *cfg, return 0; } } + worker->stat_timer = comm_timer_create(worker->base, + worker_stat_timer_cb, worker); + if(!worker->stat_timer) { + log_err("could not create statistics timer"); + } + /* we use the msg_buffer_size as a good estimate for what the * user wants for memory usage sizes */ worker->scratchpad = regional_create_custom(cfg->msg_buffer_size); @@ -978,6 +1025,10 @@ worker_init(struct worker* worker, struct config_file *cfg, return 0; } worker_mem_report(worker, NULL); + /* if statistics enabled start timer */ + verbose(VERB_ALGO, "set statistics interval %d secs", + worker->env.cfg->stat_interval); + worker_restart_timer(worker); return 1; } @@ -1003,6 +1054,7 @@ worker_delete(struct worker* worker) outside_network_delete(worker->back); comm_signal_delete(worker->comsig); comm_point_delete(worker->cmd_com); + comm_timer_delete(worker->stat_timer); comm_base_delete(worker->base); ub_randfree(worker->rndstate); /* close fds after deleting commpoints, to be sure. diff --git a/daemon/worker.h b/daemon/worker.h index 1b30c3391..d80e1d858 100644 --- a/daemon/worker.h +++ b/daemon/worker.h @@ -90,6 +90,8 @@ struct worker { struct comm_signal* comsig; /** commpoint to listen to commands. */ struct comm_point* cmd_com; + /** timer for statistics */ + struct comm_timer* stat_timer; /** number of requests that can be handled by this worker */ size_t request_size; @@ -214,4 +216,7 @@ int worker_handle_service_reply(struct comm_point* c, void* arg, int error, /** cleanup the cache to remove all rrset IDs from it, arg is worker */ void worker_alloc_cleanup(void* arg); +/** statistics timer callback handler */ +void worker_stat_timer_cb(void* arg); + #endif /* DAEMON_WORKER_H */ diff --git a/doc/Changelog b/doc/Changelog index 842985cf0..6362e8817 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,6 @@ +5 February 2008: Wouter + - statistics-interval: seconds option added. + 31 January 2008: Wouter - bg thread/process reads and writes the pipe nonblocking all the time so that even if the pipe is buffered or so, the bg thread does not diff --git a/doc/example.conf b/doc/example.conf index 473169f98..8047ef4cb 100644 --- a/doc/example.conf +++ b/doc/example.conf @@ -15,6 +15,10 @@ server: # verbosity number, 0 is least verbose. 1 is default. verbosity: 1 + # print statistics to the log (for every thread) every N seconds. + # Set to "" or 0 to disable. Default is disabled. + # statistics-interval: 0 + # number of threads to create. 1 disables threading. # num-threads: 1 diff --git a/doc/unbound.conf.5 b/doc/unbound.conf.5 index 8a592f7f3..88169c241 100644 --- a/doc/unbound.conf.5 +++ b/doc/unbound.conf.5 @@ -83,6 +83,10 @@ Default is level 1. The verbosity can also be increased from the commandline, see \fIunbound\fR(8). .TP +.B statistics-interval: \fI +The number of seconds between printing statistics to the log for every thread. +Disable with value 0 or "". Default is disabled. +.TP .B num\-threads: \fI The number of threads to create to serve clients. Use 1 for no threading. .TP diff --git a/libunbound/worker.c b/libunbound/worker.c index 632416d67..70ad68524 100644 --- a/libunbound/worker.c +++ b/libunbound/worker.c @@ -1014,3 +1014,8 @@ acl_list_cmp(const void* ATTR_UNUSED(k1), const void* ATTR_UNUSED(k2)) log_assert(0); return 0; } + +void worker_stat_timer_cb(void* ATTR_UNUSED(arg)) +{ + log_assert(0); +} diff --git a/services/mesh.c b/services/mesh.c index a8222056e..03ddc1a50 100644 --- a/services/mesh.c +++ b/services/mesh.c @@ -785,6 +785,17 @@ mesh_stats(struct mesh_area* mesh, const char* str) } } +void +mesh_stats_clear(struct mesh_area* mesh) +{ + if(!mesh) + return; + mesh->replies_sent = 0; + mesh->replies_sum_wait.tv_sec = 0; + mesh->replies_sum_wait.tv_usec = 0; + timehist_clear(mesh->histogram); +} + size_t mesh_get_mem(struct mesh_area* mesh) { diff --git a/services/mesh.h b/services/mesh.h index 46d4372b7..dd888c835 100644 --- a/services/mesh.h +++ b/services/mesh.h @@ -415,6 +415,12 @@ void mesh_run(struct mesh_area* mesh, struct mesh_state* mstate, */ void mesh_stats(struct mesh_area* mesh, const char* str); +/** + * Clear the stats that the mesh keeps (number of queries serviced) + * @param mesh: the mesh + */ +void mesh_stats_clear(struct mesh_area* mesh); + /** * Print all the states in the mesh to the log. * @param mesh: the mesh to print all states of. diff --git a/smallapp/worker_cb.c b/smallapp/worker_cb.c index 6e6b74f75..4598e1677 100644 --- a/smallapp/worker_cb.c +++ b/smallapp/worker_cb.c @@ -155,3 +155,8 @@ int context_query_cmp(const void* ATTR_UNUSED(a), const void* ATTR_UNUSED(b)) log_assert(0); return 0; } + +void worker_stat_timer_cb(void* ATTR_UNUSED(arg)) +{ + log_assert(0); +} diff --git a/testcode/fake_event.c b/testcode/fake_event.c index fa2a907bb..453b57ab1 100644 --- a/testcode/fake_event.c +++ b/testcode/fake_event.c @@ -1066,4 +1066,26 @@ int serviced_cmp(const void* ATTR_UNUSED(a), const void* ATTR_UNUSED(b)) return 0; } +/* no statistics timers in testbound */ +struct comm_timer* comm_timer_create(struct comm_base* ATTR_UNUSED(base), + void (*cb)(void*), void* ATTR_UNUSED(cb_arg)) +{ + (void)cb; + return malloc(1); +} + +void comm_timer_disable(struct comm_timer* ATTR_UNUSED(timer)) +{ +} + +void comm_timer_set(struct comm_timer* ATTR_UNUSED(timer), + struct timeval* ATTR_UNUSED(tv)) +{ +} + +void comm_timer_delete(struct comm_timer* timer) +{ + free(timer); +} + /*********** End of Dummy routines ***********/ diff --git a/util/config_file.c b/util/config_file.c index 98538d746..42728b6f9 100644 --- a/util/config_file.c +++ b/util/config_file.c @@ -70,6 +70,7 @@ config_create() return NULL; /* the defaults if no config is present */ cfg->verbosity = 1; + cfg->stat_interval = 0; cfg->num_threads = 1; cfg->port = UNBOUND_DNS_PORT; cfg->do_ip4 = 1; diff --git a/util/config_file.h b/util/config_file.h index 98a7325c5..ffb6b3bba 100644 --- a/util/config_file.h +++ b/util/config_file.h @@ -52,6 +52,8 @@ struct config_str2list; struct config_file { /** verbosity level as specified in the config file */ int verbosity; + /** statistics interval (in seconds) */ + int stat_interval; /** number of threads to create */ int num_threads; diff --git a/util/configlexer.c b/util/configlexer.c index 778e7c74d..4937be73a 100644 --- a/util/configlexer.c +++ b/util/configlexer.c @@ -365,8 +365,8 @@ static void yy_fatal_error (yyconst char msg[] ); *yy_cp = '\0'; \ (yy_c_buf_p) = yy_cp; -#define YY_NUM_RULES 87 -#define YY_END_OF_BUFFER 88 +#define YY_NUM_RULES 88 +#define YY_END_OF_BUFFER 89 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info @@ -374,90 +374,91 @@ struct yy_trans_info flex_int32_t yy_verify; flex_int32_t yy_nxt; }; -static yyconst flex_int16_t yy_accept[743] = +static yyconst flex_int16_t yy_accept[761] = { 0, - 1, 1, 71, 71, 75, 75, 79, 79, 83, 83, - 88, 86, 1, 69, 70, 2, 74, 87, 86, 86, - 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, - 86, 86, 86, 86, 86, 71, 72, 87, 73, 87, - 75, 76, 77, 87, 82, 79, 80, 81, 87, 83, - 84, 85, 87, 86, 0, 1, 2, 2, 2, 2, - 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, - 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, - 86, 86, 86, 86, 86, 86, 86, 86, 71, 0, - 75, 0, 82, 0, 79, 83, 0, 86, 86, 86, - - 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, - 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, - 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, - 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, - 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, - 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, - 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, - 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, - 86, 86, 86, 86, 86, 86, 86, 42, 86, 86, - 86, 86, 6, 86, 86, 86, 86, 86, 86, 86, - - 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, - 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, - 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, - 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, - 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, - 86, 86, 86, 86, 86, 86, 18, 86, 11, 12, - 86, 14, 13, 86, 86, 86, 86, 86, 86, 86, - 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, - 86, 86, 86, 86, 86, 86, 86, 3, 86, 86, - 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, - - 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, - 86, 86, 86, 86, 86, 78, 86, 86, 86, 86, - 86, 86, 86, 86, 21, 86, 86, 86, 86, 86, - 86, 22, 86, 86, 86, 86, 86, 86, 86, 86, - 86, 86, 86, 86, 86, 86, 86, 86, 54, 86, - 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, - 86, 86, 53, 86, 86, 86, 86, 86, 86, 86, - 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, - 86, 86, 86, 86, 86, 86, 19, 86, 86, 86, - 86, 86, 86, 86, 86, 20, 86, 86, 86, 86, - - 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, - 86, 15, 86, 86, 86, 86, 86, 86, 86, 86, - 86, 86, 86, 86, 86, 86, 43, 44, 41, 86, - 86, 86, 86, 86, 86, 86, 86, 86, 5, 86, - 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, - 86, 86, 86, 86, 86, 86, 86, 68, 67, 86, - 86, 86, 86, 86, 86, 86, 86, 86, 23, 86, - 86, 86, 86, 66, 86, 86, 86, 86, 86, 86, - 86, 86, 86, 86, 86, 86, 39, 86, 86, 86, - 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, - - 86, 86, 86, 4, 86, 86, 86, 86, 86, 86, - 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, - 46, 47, 45, 86, 86, 86, 86, 52, 86, 86, - 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, - 86, 86, 86, 86, 86, 86, 86, 86, 86, 58, - 86, 86, 86, 86, 86, 86, 86, 29, 86, 86, - 86, 86, 86, 51, 86, 86, 86, 86, 86, 86, - 86, 86, 86, 55, 86, 86, 86, 86, 86, 86, - 7, 86, 86, 86, 86, 86, 86, 60, 86, 86, - 86, 86, 50, 86, 86, 86, 86, 86, 86, 86, - - 86, 86, 30, 31, 86, 63, 86, 86, 25, 86, - 86, 86, 86, 8, 86, 86, 86, 86, 86, 86, - 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, - 86, 86, 86, 64, 24, 26, 86, 86, 86, 86, - 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, - 86, 86, 86, 10, 86, 86, 86, 86, 86, 86, - 9, 27, 86, 86, 86, 86, 86, 86, 86, 86, - 86, 86, 86, 86, 86, 86, 86, 32, 86, 86, - 86, 28, 86, 56, 57, 86, 86, 59, 86, 86, - 86, 86, 86, 86, 86, 86, 86, 86, 16, 86, - - 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, - 17, 86, 36, 86, 86, 62, 48, 86, 86, 38, - 37, 86, 33, 86, 61, 86, 86, 86, 34, 86, - 86, 49, 40, 35, 86, 86, 86, 86, 86, 86, - 65, 0 + 1, 1, 72, 72, 76, 76, 80, 80, 84, 84, + 89, 87, 1, 70, 71, 2, 75, 88, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 72, 73, 88, 74, 88, + 76, 77, 78, 88, 83, 80, 81, 82, 88, 84, + 85, 86, 88, 87, 0, 1, 2, 2, 2, 2, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 72, 0, + 76, 0, 83, 0, 80, 84, 0, 87, 87, 87, + + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 42, + 87, 87, 87, 87, 6, 87, 87, 87, 87, 87, + + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 18, 87, 11, 12, 87, 14, 13, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 3, 87, 87, 87, 87, 87, 87, 87, 87, + + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 79, 87, 87, 87, 87, 87, 87, 87, 87, 21, + 87, 87, 87, 87, 87, 87, 22, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 54, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 53, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 19, 87, 87, 87, 87, 87, 87, + + 87, 87, 20, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 15, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 43, 44, 41, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 5, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 68, 67, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 23, 87, 87, 87, + 87, 87, 66, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 39, 87, 87, 87, 87, + + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 4, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 46, 47, 45, 87, 87, 87, 87, 52, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 58, 87, 87, 87, 87, 87, 87, 87, 29, 87, + 87, 87, 87, 87, 51, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 55, 87, 87, 87, 87, 87, + 87, 7, 87, 87, 87, 87, 87, 87, 87, 60, + + 87, 87, 87, 87, 50, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 30, 31, 87, 63, 87, 87, + 25, 87, 87, 87, 87, 8, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 64, 24, 26, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 10, 87, 87, + 87, 87, 87, 87, 9, 27, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 32, 87, 87, 87, 28, 87, 87, 56, + + 57, 87, 87, 59, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 16, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 17, 87, 69, + 36, 87, 87, 62, 48, 87, 87, 38, 37, 87, + 33, 87, 61, 87, 87, 87, 34, 87, 87, 49, + 40, 35, 87, 87, 87, 87, 87, 87, 65, 0 } ; static yyconst flex_int32_t yy_ec[256] = @@ -500,181 +501,185 @@ static yyconst flex_int32_t yy_meta[39] = 1, 1, 1, 1, 1, 1, 1, 1 } ; -static yyconst flex_int16_t yy_base[754] = +static yyconst flex_int16_t yy_base[772] = { 0, 0, 0, 36, 39, 43, 50, 62, 74, 55, 67, - 1535, 1521, 49, 1536, 1536, 81, 1536, 88, 32, 83, + 1571, 1557, 49, 1572, 1572, 81, 1572, 88, 32, 83, 76, 78, 60, 89, 94, 86, 87, 95, 88, 97, - 103, 104, 112, 98, 121, 1520, 1536, 1536, 1536, 57, - 1519, 1536, 1536, 116, 1518, 1528, 1536, 1536, 136, 1516, - 1536, 1536, 127, 1515, 142, 146, 0, 149, 0, 0, + 103, 104, 112, 98, 121, 1556, 1572, 1572, 1572, 57, + 1555, 1572, 1572, 116, 1554, 1564, 1572, 1572, 136, 1552, + 1572, 1572, 127, 1551, 142, 146, 0, 149, 0, 0, 142, 144, 137, 146, 153, 150, 151, 152, 155, 158, 157, 159, 165, 171, 170, 172, 173, 175, 174, 176, - 114, 180, 183, 185, 186, 188, 187, 194, 1514, 204, - 1513, 210, 1512, 216, 1522, 1510, 208, 209, 212, 213, - - 216, 215, 217, 218, 225, 219, 226, 229, 231, 238, - 241, 243, 244, 250, 247, 253, 251, 254, 255, 256, - 257, 259, 261, 265, 266, 273, 276, 267, 270, 277, - 278, 283, 279, 281, 293, 287, 297, 299, 305, 289, - 301, 302, 306, 303, 309, 311, 310, 313, 315, 326, - 316, 323, 327, 329, 338, 330, 334, 345, 341, 331, - 342, 343, 361, 344, 348, 347, 359, 351, 352, 369, - 353, 362, 368, 373, 378, 379, 380, 381, 384, 387, - 386, 394, 401, 397, 398, 399, 404, 1509, 402, 406, - 407, 409, 1508, 410, 417, 411, 423, 413, 430, 415, - - 426, 429, 433, 434, 421, 436, 437, 440, 450, 446, - 457, 447, 460, 463, 469, 466, 468, 449, 475, 472, - 473, 471, 474, 438, 477, 481, 483, 487, 484, 497, - 493, 495, 496, 494, 500, 502, 505, 503, 509, 515, - 504, 510, 521, 522, 525, 517, 520, 526, 531, 534, - 537, 527, 538, 528, 540, 545, 1507, 548, 1506, 1505, - 550, 1504, 1503, 554, 551, 552, 553, 556, 560, 561, - 563, 567, 571, 573, 574, 577, 575, 584, 585, 586, - 579, 590, 591, 593, 595, 597, 598, 1502, 601, 602, - 603, 606, 604, 613, 611, 609, 615, 618, 621, 623, - - 625, 626, 628, 629, 630, 631, 632, 633, 636, 639, - 646, 648, 638, 642, 662, 1501, 659, 663, 657, 664, - 665, 667, 668, 669, 1500, 671, 673, 674, 677, 680, - 688, 1499, 684, 689, 690, 691, 693, 694, 697, 695, - 701, 709, 696, 704, 706, 711, 712, 713, 1498, 716, - 723, 720, 722, 726, 724, 725, 731, 732, 733, 734, - 735, 736, 1497, 740, 743, 741, 742, 762, 763, 755, - 759, 765, 766, 772, 768, 770, 771, 769, 777, 776, - 782, 790, 779, 791, 792, 793, 1496, 801, 807, 808, - 795, 794, 806, 809, 810, 1495, 813, 811, 814, 818, - - 816, 817, 819, 820, 824, 821, 823, 836, 844, 845, - 846, 1494, 838, 849, 851, 852, 859, 842, 853, 855, - 857, 861, 862, 863, 866, 867, 1493, 1492, 1491, 874, - 868, 869, 879, 875, 883, 880, 885, 886, 1490, 888, - 887, 891, 892, 895, 896, 897, 899, 903, 900, 907, - 910, 912, 916, 913, 917, 918, 920, 1489, 1488, 921, - 922, 928, 946, 934, 925, 935, 942, 943, 1487, 950, - 949, 948, 951, 1486, 952, 954, 955, 961, 953, 963, - 964, 972, 974, 979, 981, 982, 1485, 988, 989, 968, - 987, 995, 991, 993, 994, 996, 976, 997, 999, 1005, - - 1000, 1007, 1003, 1484, 1011, 1022, 1010, 1019, 1020, 1028, - 1032, 1035, 1033, 1036, 1021, 1039, 1037, 1041, 1043, 1046, - 1483, 1482, 1481, 1053, 1049, 744, 1051, 1480, 1054, 1055, - 1059, 1060, 1061, 1063, 1062, 1064, 825, 1067, 1068, 1070, - 1078, 1077, 1081, 1083, 1085, 1086, 1088, 1089, 1090, 1479, - 1094, 1106, 1092, 1095, 1103, 1109, 1111, 1478, 1108, 1115, - 1116, 1117, 1118, 1477, 1119, 1120, 1121, 1123, 1126, 1128, - 1130, 1136, 1131, 1476, 1139, 1141, 1143, 1145, 1146, 1147, - 1475, 1154, 1148, 1155, 1151, 1157, 1158, 1471, 1159, 1160, - 1163, 1175, 1467, 1168, 1171, 1176, 1177, 1179, 1181, 1183, - - 1184, 1187, 1466, 1465, 1190, 1461, 1194, 1198, 1460, 1200, - 1206, 1202, 1204, 1456, 1205, 1207, 1211, 1212, 1213, 1208, - 1214, 1215, 1216, 1218, 1220, 1225, 1226, 1227, 1230, 1236, - 1232, 1233, 1237, 1455, 1454, 1448, 1238, 1241, 1248, 1250, - 1240, 1252, 1254, 1255, 1253, 1263, 1264, 1262, 1265, 1266, - 1271, 1272, 1273, 1420, 1274, 1275, 1279, 1285, 1283, 1284, - 1419, 1415, 1287, 1295, 1297, 1300, 1288, 1307, 1304, 1305, - 1290, 1306, 1310, 1311, 1312, 1313, 1315, 1414, 1317, 1318, - 1324, 1413, 1319, 1412, 1411, 1326, 1321, 1410, 1328, 1329, - 1331, 1336, 1332, 1339, 1338, 1340, 1342, 1348, 1405, 1355, - - 1346, 1349, 1360, 1362, 1352, 1364, 1366, 1372, 1373, 1375, - 1367, 1376, 1356, 1380, 1381, 1186, 1180, 1382, 1383, 1087, - 1024, 1385, 970, 1388, 927, 1389, 1391, 1394, 644, 1396, - 1397, 530, 355, 223, 1399, 1400, 1402, 1404, 1403, 1408, - 189, 1536, 1434, 1440, 1446, 1452, 136, 1458, 1464, 1470, - 83, 1475, 1481 + 114, 180, 185, 183, 187, 188, 195, 194, 1550, 207, + 1549, 210, 1548, 221, 1558, 1546, 211, 209, 208, 217, + + 218, 219, 220, 221, 222, 224, 229, 230, 236, 249, + 233, 245, 226, 253, 250, 257, 189, 254, 256, 258, + 259, 261, 262, 263, 266, 267, 274, 276, 268, 272, + 278, 279, 284, 280, 288, 289, 294, 296, 299, 305, + 301, 303, 306, 307, 309, 310, 311, 312, 314, 327, + 316, 317, 324, 319, 332, 339, 335, 337, 340, 346, + 343, 344, 347, 345, 366, 350, 351, 352, 361, 353, + 355, 378, 367, 362, 373, 382, 371, 383, 385, 387, + 389, 395, 396, 400, 408, 405, 406, 393, 409, 1545, + 397, 407, 412, 414, 1544, 418, 424, 420, 422, 427, + + 423, 434, 430, 431, 433, 438, 441, 436, 443, 444, + 446, 450, 451, 456, 453, 465, 469, 466, 471, 473, + 474, 480, 477, 479, 476, 482, 483, 486, 490, 485, + 498, 499, 505, 501, 503, 508, 492, 511, 510, 512, + 514, 519, 516, 522, 520, 525, 532, 528, 533, 530, + 531, 538, 536, 542, 544, 540, 546, 550, 551, 552, + 1543, 556, 1542, 1541, 558, 1540, 1539, 564, 561, 562, + 560, 566, 570, 571, 575, 580, 581, 583, 584, 587, + 585, 596, 597, 598, 593, 589, 602, 603, 609, 605, + 611, 1538, 613, 615, 614, 616, 617, 620, 626, 624, + + 625, 627, 636, 628, 634, 638, 639, 641, 642, 643, + 644, 645, 652, 646, 661, 648, 654, 657, 655, 664, + 1537, 674, 675, 667, 671, 676, 679, 680, 682, 1536, + 686, 687, 688, 689, 690, 701, 1535, 694, 702, 703, + 697, 704, 707, 710, 708, 709, 716, 718, 720, 721, + 726, 724, 727, 725, 1534, 729, 733, 732, 735, 739, + 737, 744, 745, 746, 747, 748, 750, 752, 1533, 754, + 757, 753, 755, 775, 773, 776, 778, 771, 779, 785, + 781, 787, 788, 782, 790, 789, 793, 795, 809, 799, + 802, 806, 812, 1532, 820, 821, 822, 804, 814, 824, + + 825, 826, 1531, 829, 827, 830, 828, 833, 834, 835, + 836, 838, 840, 837, 850, 861, 863, 859, 1530, 849, + 865, 869, 866, 875, 862, 871, 873, 874, 876, 878, + 881, 884, 885, 893, 1529, 1528, 1527, 756, 886, 877, + 895, 879, 902, 897, 904, 899, 1526, 905, 906, 909, + 910, 911, 913, 914, 916, 921, 912, 920, 923, 928, + 929, 932, 934, 935, 937, 1525, 1524, 843, 938, 941, + 947, 944, 945, 949, 954, 957, 1523, 963, 959, 965, + 960, 962, 1522, 966, 972, 969, 978, 975, 967, 979, + 987, 989, 992, 994, 995, 1521, 1001, 1002, 986, 1000, + + 1008, 1004, 1005, 1006, 1007, 1009, 1011, 1013, 1014, 1016, + 1018, 1021, 1520, 1027, 1033, 1029, 1030, 1031, 1038, 1040, + 1044, 1047, 1045, 1046, 1052, 1058, 1054, 1055, 1060, 1061, + 1519, 1518, 1517, 1068, 1057, 357, 1065, 1516, 1067, 1069, + 1071, 1074, 1077, 1078, 1079, 1082, 1081, 1095, 1080, 1092, + 1096, 1099, 1084, 1090, 1103, 1106, 1107, 1100, 1108, 1114, + 1515, 1115, 1113, 1117, 1110, 1125, 1122, 1131, 1514, 1132, + 1124, 1133, 1134, 1135, 1513, 1137, 1141, 1144, 1142, 1146, + 1148, 1149, 1158, 1150, 1512, 1159, 1163, 1152, 1160, 1165, + 1166, 1511, 1173, 1167, 1174, 1176, 1179, 1178, 1180, 1510, + + 1182, 1185, 1183, 1191, 1509, 1195, 1197, 1188, 1198, 1190, + 1202, 1204, 1205, 1206, 1508, 1507, 1210, 1506, 1215, 1219, + 1505, 1221, 1227, 1223, 1216, 1504, 1225, 1226, 1212, 1232, + 1233, 1234, 1237, 1235, 1236, 1238, 1239, 1240, 1242, 1247, + 1248, 1252, 1254, 1253, 1257, 1258, 1500, 1496, 1495, 1261, + 1262, 1269, 1271, 1263, 1272, 1273, 1274, 1278, 1276, 1284, + 1286, 1285, 1287, 1294, 1288, 1295, 1298, 1494, 1296, 1300, + 1302, 1303, 1308, 1306, 1490, 1489, 1310, 1319, 1321, 1323, + 1326, 1315, 1332, 1330, 1313, 1331, 1333, 1335, 1334, 1336, + 1337, 1338, 1485, 1340, 1342, 1345, 1484, 1347, 1348, 1483, + + 1477, 1351, 1353, 1449, 1355, 1356, 1354, 1363, 1364, 1365, + 1366, 1367, 1376, 1379, 1448, 1381, 1387, 1377, 1371, 1393, + 1395, 1383, 1397, 1399, 1404, 1400, 1407, 1447, 1408, 1446, + 1445, 1411, 1412, 1442, 1441, 1396, 1369, 1440, 1437, 1414, + 1436, 1416, 1389, 1418, 1422, 1424, 1139, 1426, 1427, 591, + 493, 458, 1419, 1430, 1429, 1431, 1432, 1434, 235, 1572, + 1463, 1469, 1475, 1481, 136, 1487, 1493, 1499, 83, 1504, + 1510 } ; -static yyconst flex_int16_t yy_def[754] = +static yyconst flex_int16_t yy_def[772] = { 0, - 742, 1, 743, 743, 744, 744, 745, 745, 746, 746, - 742, 747, 742, 742, 742, 748, 742, 747, 747, 747, - 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, - 747, 747, 747, 747, 747, 749, 742, 742, 742, 749, - 750, 742, 742, 750, 751, 742, 742, 742, 751, 752, - 742, 742, 752, 747, 747, 742, 753, 748, 753, 748, - 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, - 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, - 747, 747, 747, 747, 747, 747, 747, 747, 749, 749, - 750, 750, 751, 751, 742, 752, 752, 747, 747, 747, - - 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, - 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, - 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, - 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, - 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, - 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, - 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, - 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, - 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, - 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, - - 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, - 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, - 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, - 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, - 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, - 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, - 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, - 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, - 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, - 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, - - 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, - 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, - 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, - 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, - 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, - 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, - 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, - 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, - 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, - 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, - - 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, - 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, - 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, - 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, - 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, - 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, - 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, - 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, - 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, - 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, - - 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, - 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, - 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, - 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, - 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, - 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, - 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, - 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, - 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, - 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, - - 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, - 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, - 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, - 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, - 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, - 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, - 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, - 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, - 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, - 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, - - 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, - 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, - 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, - 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, - 747, 0, 742, 742, 742, 742, 742, 742, 742, 742, - 742, 742, 742 + 760, 1, 761, 761, 762, 762, 763, 763, 764, 764, + 760, 765, 760, 760, 760, 766, 760, 765, 765, 765, + 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, + 765, 765, 765, 765, 765, 767, 760, 760, 760, 767, + 768, 760, 760, 768, 769, 760, 760, 760, 769, 770, + 760, 760, 770, 765, 765, 760, 771, 766, 771, 766, + 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, + 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, + 765, 765, 765, 765, 765, 765, 765, 765, 767, 767, + 768, 768, 769, 769, 760, 770, 770, 765, 765, 765, + + 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, + 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, + 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, + 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, + 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, + 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, + 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, + 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, + 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, + 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, + + 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, + 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, + 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, + 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, + 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, + 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, + 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, + 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, + 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, + 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, + + 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, + 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, + 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, + 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, + 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, + 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, + 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, + 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, + 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, + 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, + + 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, + 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, + 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, + 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, + 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, + 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, + 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, + 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, + 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, + 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, + + 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, + 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, + 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, + 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, + 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, + 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, + 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, + 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, + 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, + 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, + + 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, + 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, + 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, + 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, + 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, + 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, + 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, + 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, + 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, + 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, + + 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, + 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, + 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, + 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, + 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, + 765, 765, 765, 765, 765, 765, 765, 765, 765, 0, + 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, + 760 } ; -static yyconst flex_int16_t yy_nxt[1575] = +static yyconst flex_int16_t yy_nxt[1611] = { 0, 12, 13, 14, 14, 15, 16, 17, 12, 12, 12, 12, 12, 18, 19, 12, 20, 21, 12, 22, 12, @@ -696,162 +701,166 @@ static yyconst flex_int16_t yy_nxt[1575] = 102, 60, 55, 55, 55, 55, 100, 55, 105, 55, 55, 55, 106, 107, 111, 101, 108, 55, 112, 103, 104, 113, 55, 55, 55, 55, 55, 55, 55, 109, - 114, 118, 55, 110, 115, 55, 116, 55, 55, 55, - - 55, 55, 120, 119, 117, 126, 55, 89, 89, 122, - 127, 96, 96, 91, 124, 123, 91, 93, 125, 93, - 93, 55, 93, 128, 55, 55, 129, 55, 55, 55, - 55, 55, 130, 132, 138, 55, 133, 55, 55, 131, - 134, 55, 139, 55, 140, 145, 135, 136, 144, 141, - 55, 137, 142, 55, 146, 55, 55, 149, 143, 55, - 151, 147, 55, 55, 150, 55, 55, 55, 55, 55, - 152, 55, 153, 55, 156, 158, 148, 55, 55, 55, - 161, 164, 55, 163, 159, 55, 154, 155, 55, 55, - 55, 55, 157, 55, 167, 55, 160, 165, 169, 55, - - 166, 55, 162, 173, 168, 55, 170, 171, 172, 55, - 174, 55, 176, 55, 55, 55, 175, 55, 55, 180, - 177, 55, 55, 55, 182, 55, 179, 55, 55, 186, - 187, 184, 181, 178, 183, 55, 185, 188, 55, 55, - 193, 55, 55, 55, 189, 194, 55, 190, 192, 191, - 55, 196, 197, 55, 55, 55, 55, 55, 198, 55, - 55, 195, 199, 55, 55, 55, 210, 55, 201, 208, - 207, 55, 200, 55, 55, 202, 203, 209, 213, 214, - 55, 55, 211, 212, 215, 55, 204, 205, 206, 216, - 55, 55, 55, 55, 225, 217, 55, 223, 55, 55, - - 220, 222, 218, 219, 226, 224, 55, 227, 228, 55, - 55, 55, 221, 55, 55, 230, 55, 232, 55, 55, - 229, 55, 55, 55, 238, 55, 234, 55, 235, 55, - 237, 231, 236, 55, 233, 55, 240, 244, 55, 247, - 239, 55, 55, 241, 243, 55, 55, 245, 55, 55, - 55, 246, 55, 252, 251, 248, 249, 255, 55, 55, - 242, 55, 55, 270, 250, 264, 254, 253, 257, 55, - 256, 259, 55, 258, 260, 55, 261, 262, 55, 263, - 55, 55, 265, 55, 55, 55, 55, 55, 266, 55, - 267, 269, 271, 55, 274, 55, 55, 272, 275, 55, - - 273, 278, 268, 276, 279, 55, 55, 55, 55, 55, - 281, 280, 55, 282, 55, 55, 55, 55, 287, 285, - 288, 55, 55, 283, 277, 284, 286, 55, 292, 55, - 290, 289, 55, 55, 55, 293, 291, 55, 55, 55, - 55, 294, 55, 55, 296, 297, 55, 295, 298, 55, - 55, 299, 55, 303, 300, 304, 301, 55, 305, 302, - 55, 308, 55, 55, 55, 55, 55, 309, 55, 313, - 310, 316, 55, 55, 311, 55, 318, 306, 307, 55, - 317, 312, 314, 55, 320, 55, 55, 55, 321, 55, - 323, 55, 315, 319, 322, 325, 55, 55, 55, 328, - - 326, 324, 55, 55, 327, 55, 332, 55, 330, 55, - 55, 334, 331, 55, 55, 55, 55, 335, 55, 329, - 340, 55, 333, 55, 338, 55, 342, 55, 337, 339, - 55, 344, 336, 55, 341, 55, 345, 55, 55, 349, - 55, 55, 55, 55, 55, 55, 354, 343, 55, 347, - 55, 55, 346, 355, 55, 350, 55, 348, 55, 359, - 55, 357, 358, 361, 353, 351, 364, 352, 360, 55, - 356, 55, 362, 363, 55, 55, 55, 55, 365, 55, - 55, 55, 368, 55, 369, 55, 55, 366, 367, 55, - 373, 374, 55, 376, 371, 377, 55, 372, 375, 370, - - 55, 55, 55, 55, 379, 55, 55, 55, 55, 55, - 382, 383, 384, 55, 390, 378, 55, 385, 55, 380, - 387, 55, 381, 55, 55, 55, 388, 386, 55, 389, - 395, 396, 55, 392, 55, 55, 55, 55, 55, 397, - 391, 394, 398, 55, 55, 55, 55, 55, 55, 393, - 399, 400, 55, 55, 55, 55, 55, 406, 563, 410, - 404, 401, 403, 408, 402, 407, 405, 55, 414, 411, - 413, 55, 409, 412, 55, 55, 415, 55, 55, 418, - 55, 55, 55, 55, 55, 419, 420, 427, 55, 55, - 416, 55, 421, 428, 55, 417, 422, 426, 423, 425, - - 424, 429, 55, 55, 55, 55, 55, 55, 434, 432, - 430, 431, 433, 55, 435, 436, 437, 439, 55, 55, - 55, 55, 55, 55, 438, 55, 55, 443, 55, 55, - 55, 55, 55, 55, 447, 55, 55, 55, 448, 573, - 440, 441, 442, 445, 444, 450, 446, 451, 55, 449, - 55, 454, 455, 453, 55, 452, 55, 55, 55, 456, - 458, 55, 459, 55, 55, 55, 461, 55, 457, 55, - 460, 55, 462, 55, 55, 55, 468, 469, 55, 55, - 55, 55, 465, 463, 470, 464, 55, 55, 467, 471, - 474, 55, 55, 466, 472, 55, 476, 55, 55, 55, - - 55, 478, 477, 55, 55, 473, 475, 55, 55, 55, - 487, 55, 55, 485, 486, 55, 479, 480, 481, 55, - 488, 483, 55, 493, 55, 55, 484, 482, 55, 55, - 55, 489, 55, 55, 55, 491, 492, 55, 490, 55, - 55, 497, 499, 498, 494, 504, 55, 55, 495, 501, - 496, 502, 500, 503, 55, 55, 505, 509, 55, 506, - 55, 55, 55, 55, 55, 55, 55, 55, 508, 510, - 514, 507, 515, 55, 517, 55, 55, 511, 516, 520, - 55, 512, 55, 513, 55, 521, 55, 519, 55, 518, - 522, 55, 523, 55, 55, 525, 526, 524, 528, 55, - - 55, 55, 529, 55, 527, 55, 55, 55, 55, 55, - 537, 55, 55, 536, 530, 55, 531, 55, 538, 55, - 541, 532, 55, 55, 533, 534, 539, 535, 543, 544, - 542, 55, 55, 55, 55, 548, 55, 540, 546, 549, - 55, 545, 551, 550, 55, 55, 555, 55, 55, 55, - 547, 55, 553, 55, 558, 55, 552, 554, 55, 559, - 561, 55, 564, 55, 557, 55, 55, 55, 566, 560, - 556, 55, 55, 55, 55, 55, 55, 562, 574, 55, - 55, 572, 55, 568, 569, 565, 570, 576, 571, 55, - 55, 567, 577, 55, 578, 55, 581, 55, 55, 55, - - 55, 55, 55, 582, 55, 575, 55, 55, 586, 583, - 579, 584, 587, 589, 580, 55, 585, 588, 55, 591, - 55, 55, 593, 55, 594, 590, 592, 55, 55, 55, - 55, 55, 55, 55, 599, 55, 602, 603, 55, 604, - 55, 595, 55, 55, 600, 601, 596, 606, 55, 597, - 598, 55, 609, 55, 605, 55, 608, 55, 55, 55, - 55, 607, 613, 55, 612, 614, 55, 55, 616, 55, - 55, 55, 55, 610, 611, 55, 622, 617, 618, 619, - 55, 621, 623, 55, 624, 615, 625, 55, 55, 55, - 620, 55, 55, 55, 627, 55, 55, 628, 55, 55, - - 630, 632, 55, 633, 631, 634, 55, 626, 629, 635, - 55, 636, 55, 637, 55, 638, 55, 55, 55, 55, - 55, 641, 640, 55, 55, 55, 55, 55, 55, 645, - 55, 639, 55, 650, 642, 643, 644, 55, 55, 55, - 648, 654, 55, 655, 55, 55, 647, 649, 55, 55, - 55, 646, 55, 55, 651, 652, 660, 653, 656, 661, - 55, 662, 55, 657, 55, 55, 55, 55, 658, 659, - 663, 665, 666, 664, 55, 55, 55, 55, 55, 667, - 668, 669, 671, 55, 55, 55, 55, 55, 670, 672, - 678, 55, 673, 674, 675, 55, 55, 55, 682, 55, - - 55, 681, 55, 680, 676, 677, 679, 55, 684, 55, - 683, 685, 55, 686, 687, 688, 55, 55, 55, 55, - 690, 689, 55, 55, 55, 55, 691, 55, 693, 55, - 55, 55, 697, 55, 695, 699, 55, 692, 55, 701, - 55, 55, 702, 55, 55, 703, 696, 698, 55, 694, - 55, 55, 55, 711, 55, 700, 708, 705, 55, 704, - 55, 55, 707, 706, 55, 712, 713, 55, 55, 714, - 710, 716, 55, 717, 55, 709, 55, 720, 55, 55, - 715, 719, 718, 721, 55, 55, 723, 55, 55, 724, - 722, 725, 55, 55, 55, 55, 729, 55, 726, 728, - - 55, 55, 732, 55, 730, 733, 55, 734, 55, 55, - 735, 55, 55, 727, 55, 55, 55, 55, 731, 741, - 55, 737, 55, 55, 55, 55, 55, 55, 738, 739, - 736, 55, 55, 740, 36, 36, 36, 36, 36, 36, - 41, 41, 41, 41, 41, 41, 45, 45, 45, 45, - 45, 45, 50, 50, 50, 50, 50, 50, 58, 58, - 55, 58, 58, 58, 89, 89, 55, 55, 55, 89, - 91, 91, 55, 55, 91, 96, 96, 55, 55, 55, - 96, 59, 59, 55, 59, 59, 59, 55, 55, 55, + 114, 118, 55, 110, 115, 55, 116, 55, 123, 55, + + 55, 55, 120, 119, 117, 127, 55, 55, 153, 122, + 89, 89, 125, 91, 96, 96, 91, 124, 128, 126, + 55, 55, 93, 129, 93, 93, 130, 93, 131, 55, + 55, 55, 55, 55, 55, 133, 55, 139, 55, 140, + 134, 55, 55, 132, 135, 55, 147, 55, 55, 141, + 136, 137, 142, 145, 138, 143, 146, 55, 149, 144, + 150, 55, 55, 148, 152, 55, 55, 151, 55, 55, + 55, 55, 154, 55, 55, 55, 157, 160, 55, 55, + 55, 163, 166, 165, 55, 161, 55, 155, 55, 156, + 55, 55, 55, 159, 158, 169, 55, 162, 167, 171, + + 55, 55, 168, 164, 174, 170, 55, 172, 55, 176, + 175, 55, 178, 55, 173, 55, 177, 55, 55, 55, + 182, 55, 55, 55, 55, 184, 55, 190, 55, 55, + 181, 55, 179, 186, 185, 180, 55, 187, 183, 55, + 194, 188, 189, 195, 55, 191, 196, 55, 192, 55, + 193, 55, 55, 200, 198, 55, 55, 55, 55, 55, + 201, 199, 55, 55, 55, 55, 197, 55, 213, 55, + 204, 574, 211, 55, 55, 202, 210, 203, 55, 55, + 205, 206, 212, 55, 214, 55, 215, 216, 217, 219, + 55, 207, 208, 209, 55, 55, 222, 55, 218, 55, + + 220, 55, 228, 226, 223, 55, 225, 55, 55, 55, + 227, 221, 55, 230, 229, 231, 224, 55, 55, 55, + 55, 55, 235, 233, 55, 234, 55, 237, 232, 236, + 55, 241, 55, 238, 55, 55, 55, 239, 240, 55, + 244, 248, 55, 55, 251, 55, 55, 245, 55, 242, + 55, 249, 243, 55, 247, 55, 55, 259, 55, 252, + 256, 253, 55, 55, 246, 55, 250, 261, 55, 255, + 55, 254, 258, 265, 257, 260, 263, 55, 55, 262, + 264, 55, 266, 55, 267, 55, 55, 269, 55, 55, + 268, 55, 55, 270, 55, 55, 271, 55, 55, 273, + + 279, 275, 55, 278, 55, 55, 276, 272, 274, 277, + 55, 55, 283, 55, 280, 55, 282, 55, 285, 284, + 55, 287, 55, 55, 55, 286, 55, 289, 55, 291, + 292, 55, 55, 290, 55, 281, 288, 55, 294, 297, + 55, 298, 55, 55, 55, 55, 295, 293, 55, 299, + 55, 296, 55, 303, 55, 301, 55, 302, 55, 304, + 300, 305, 55, 55, 55, 310, 309, 307, 55, 306, + 55, 313, 55, 55, 55, 308, 55, 314, 55, 318, + 315, 321, 55, 55, 316, 311, 312, 55, 323, 319, + 322, 317, 55, 55, 325, 55, 55, 55, 326, 55, + + 328, 55, 320, 55, 327, 55, 324, 330, 55, 55, + 55, 329, 331, 333, 55, 55, 332, 55, 334, 335, + 337, 55, 336, 55, 339, 55, 55, 55, 55, 55, + 338, 341, 55, 346, 340, 344, 55, 55, 55, 55, + 55, 343, 348, 351, 342, 345, 55, 347, 55, 350, + 55, 55, 355, 55, 55, 55, 55, 55, 55, 349, + 55, 365, 353, 352, 55, 360, 55, 55, 356, 55, + 354, 363, 361, 55, 366, 369, 55, 359, 357, 55, + 358, 370, 367, 55, 364, 368, 55, 55, 55, 362, + 371, 55, 55, 374, 55, 373, 375, 372, 55, 55, + + 55, 55, 55, 382, 379, 380, 55, 377, 383, 55, + 381, 376, 378, 55, 55, 55, 55, 385, 386, 55, + 55, 55, 55, 391, 389, 384, 387, 390, 55, 394, + 55, 392, 55, 55, 397, 388, 55, 55, 55, 55, + 402, 55, 393, 403, 55, 55, 396, 55, 399, 55, + 395, 55, 404, 398, 401, 405, 55, 55, 55, 55, + 55, 400, 55, 406, 55, 55, 55, 55, 55, 55, + 407, 480, 417, 413, 411, 408, 410, 415, 409, 414, + 420, 412, 418, 55, 416, 55, 419, 55, 55, 421, + 55, 55, 425, 55, 55, 422, 423, 55, 426, 55, + + 55, 55, 55, 427, 435, 55, 436, 55, 424, 428, + 433, 55, 432, 429, 55, 430, 55, 431, 55, 434, + 437, 55, 439, 440, 55, 445, 55, 442, 443, 444, + 438, 441, 55, 55, 55, 447, 55, 55, 55, 55, + 55, 55, 55, 451, 446, 55, 55, 55, 55, 55, + 55, 455, 55, 453, 456, 55, 448, 449, 450, 458, + 452, 55, 55, 454, 508, 457, 459, 461, 462, 460, + 463, 55, 464, 55, 55, 55, 466, 55, 55, 465, + 467, 55, 469, 55, 468, 55, 55, 55, 55, 55, + 55, 55, 470, 55, 476, 477, 55, 55, 55, 473, + + 479, 471, 478, 472, 475, 55, 483, 55, 474, 55, + 484, 55, 481, 482, 55, 485, 55, 55, 55, 486, + 487, 55, 55, 55, 55, 55, 55, 496, 55, 488, + 494, 495, 55, 55, 489, 55, 502, 490, 497, 492, + 55, 55, 493, 498, 55, 491, 55, 55, 500, 55, + 55, 499, 501, 55, 512, 513, 55, 55, 506, 55, + 507, 55, 510, 503, 511, 504, 55, 505, 509, 55, + 518, 55, 55, 515, 55, 55, 514, 55, 55, 55, + 519, 55, 517, 516, 55, 520, 525, 55, 524, 521, + 55, 55, 522, 528, 530, 526, 527, 523, 55, 55, + + 531, 55, 529, 532, 55, 533, 55, 55, 535, 536, + 534, 538, 55, 55, 55, 539, 55, 55, 55, 55, + 55, 55, 537, 55, 547, 55, 55, 540, 55, 541, + 55, 551, 548, 55, 542, 549, 543, 544, 545, 55, + 554, 55, 55, 55, 553, 55, 546, 559, 552, 556, + 55, 560, 55, 550, 562, 561, 55, 55, 55, 55, + 555, 557, 564, 558, 55, 566, 55, 55, 563, 55, + 55, 569, 55, 55, 570, 572, 575, 55, 568, 55, + 55, 55, 577, 55, 571, 573, 55, 567, 565, 55, + 55, 55, 55, 55, 55, 584, 55, 579, 576, 583, + + 580, 581, 55, 578, 55, 582, 585, 55, 55, 587, + 588, 55, 55, 590, 592, 55, 589, 586, 55, 55, + 55, 591, 55, 593, 600, 55, 55, 55, 594, 55, + 595, 596, 598, 599, 55, 597, 55, 55, 601, 604, + 602, 603, 605, 55, 55, 55, 55, 55, 606, 55, + 607, 55, 611, 55, 55, 614, 55, 615, 55, 616, + 55, 55, 55, 608, 55, 612, 609, 610, 613, 618, + 55, 55, 55, 617, 621, 55, 620, 55, 55, 55, + 619, 625, 622, 624, 626, 55, 55, 628, 55, 623, + 55, 55, 55, 629, 55, 55, 635, 55, 636, 631, + + 55, 632, 55, 55, 627, 630, 634, 55, 641, 55, + 55, 637, 638, 633, 55, 640, 55, 55, 55, 639, + 645, 643, 55, 646, 55, 644, 647, 55, 55, 642, + 648, 55, 649, 55, 650, 55, 651, 55, 55, 55, + 654, 655, 653, 652, 55, 55, 55, 55, 55, 55, + 55, 55, 55, 664, 55, 656, 657, 658, 659, 55, + 55, 669, 662, 668, 55, 55, 55, 661, 663, 55, + 55, 665, 660, 55, 55, 55, 666, 674, 667, 670, + 675, 55, 676, 55, 55, 55, 55, 671, 55, 672, + 55, 680, 673, 677, 679, 681, 55, 55, 55, 55, + + 55, 683, 682, 684, 686, 678, 55, 55, 55, 688, + 55, 685, 55, 693, 55, 55, 689, 687, 55, 690, + 55, 697, 55, 696, 694, 55, 691, 55, 695, 705, + 692, 55, 698, 55, 700, 55, 699, 701, 55, 703, + 702, 704, 55, 55, 55, 55, 55, 55, 55, 55, + 55, 709, 55, 707, 55, 713, 715, 55, 711, 55, + 55, 706, 708, 55, 718, 55, 55, 55, 55, 712, + 716, 714, 720, 710, 719, 55, 55, 55, 55, 55, + 722, 55, 725, 55, 717, 746, 721, 728, 55, 55, + 723, 55, 730, 55, 724, 55, 729, 727, 731, 55, + + 732, 55, 733, 726, 734, 55, 735, 55, 55, 55, + 738, 55, 55, 736, 737, 739, 55, 740, 741, 55, + 55, 742, 743, 55, 55, 747, 55, 745, 55, 744, + 55, 55, 748, 750, 55, 751, 55, 752, 55, 55, + 753, 55, 55, 55, 55, 759, 55, 749, 55, 55, + 754, 755, 55, 55, 55, 756, 757, 55, 55, 55, + 55, 55, 758, 36, 36, 36, 36, 36, 36, 41, + 41, 41, 41, 41, 41, 45, 45, 45, 45, 45, + 45, 50, 50, 50, 50, 50, 50, 58, 58, 55, + 58, 58, 58, 89, 89, 55, 55, 55, 89, 91, + + 91, 55, 55, 91, 96, 96, 55, 55, 55, 96, + 59, 59, 55, 59, 59, 59, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, - 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, - 55, 55, 97, 95, 94, 92, 90, 55, 97, 95, - 94, 92, 90, 55, 742, 11, 742, 742, 742, 742, - 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, - 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, - 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, - 742, 742, 742, 742 + 55, 55, 55, 55, 55, 55, 55, 55, 97, 95, + 94, 92, 90, 55, 97, 95, 94, 92, 90, 55, + 760, 11, 760, 760, 760, 760, 760, 760, 760, 760, + 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, + 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, + + 760, 760, 760, 760, 760, 760, 760, 760, 760, 760 } ; -static yyconst flex_int16_t yy_chk[1575] = +static yyconst flex_int16_t yy_chk[1611] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -861,171 +870,175 @@ static yyconst flex_int16_t yy_chk[1575] = 13, 4, 6, 6, 13, 5, 6, 9, 9, 9, 40, 40, 6, 7, 7, 7, 7, 9, 7, 10, 10, 10, 23, 23, 7, 8, 8, 8, 8, 10, - 8, 23, 16, 751, 16, 16, 8, 16, 21, 18, + 8, 23, 16, 769, 16, 16, 8, 16, 21, 18, 22, 18, 18, 16, 18, 20, 20, 21, 26, 27, 29, 24, 21, 20, 22, 24, 25, 28, 28, 30, 34, 25, 26, 27, 24, 31, 32, 27, 30, 44, 29, 32, 44, 30, 33, 33, 81, 28, 34, 31, - 53, 53, 31, 35, 35, 32, 747, 49, 35, 49, + 53, 53, 31, 35, 35, 32, 765, 49, 35, 49, 49, 33, 49, 55, 81, 55, 55, 56, 55, 63, 58, 56, 58, 58, 61, 58, 62, 61, 64, 62, 65, 58, 66, 67, 68, 65, 63, 69, 68, 71, 70, 72, 69, 70, 72, 64, 70, 73, 72, 66, 67, 73, 75, 74, 76, 77, 79, 78, 80, 70, - 74, 78, 82, 71, 75, 83, 76, 84, 85, 87, - - 86, 741, 80, 79, 77, 86, 88, 90, 90, 82, - 87, 97, 97, 92, 84, 83, 92, 94, 85, 94, - 94, 98, 94, 88, 99, 100, 98, 102, 101, 103, - 104, 106, 99, 101, 104, 734, 102, 105, 107, 100, - 102, 108, 105, 109, 106, 110, 102, 102, 109, 107, - 110, 103, 107, 111, 111, 112, 113, 114, 108, 115, - 116, 112, 114, 117, 115, 116, 118, 119, 120, 121, - 117, 122, 118, 123, 121, 123, 113, 124, 125, 128, - 126, 128, 129, 127, 124, 126, 119, 120, 127, 130, - 131, 133, 122, 134, 130, 132, 125, 128, 132, 136, - - 129, 140, 126, 136, 131, 135, 133, 134, 135, 137, - 137, 138, 139, 141, 142, 144, 138, 139, 143, 143, - 140, 145, 147, 146, 145, 148, 142, 149, 151, 149, - 149, 147, 144, 141, 146, 152, 148, 150, 150, 153, - 154, 154, 156, 160, 151, 155, 157, 151, 153, 152, - 155, 157, 158, 159, 161, 162, 164, 158, 159, 166, - 165, 156, 160, 168, 169, 171, 167, 733, 162, 165, - 164, 167, 161, 163, 172, 163, 163, 166, 170, 170, - 173, 170, 168, 169, 171, 174, 163, 163, 163, 172, - 175, 176, 177, 178, 180, 173, 179, 178, 181, 180, - - 176, 177, 174, 175, 181, 179, 182, 182, 183, 184, - 185, 186, 176, 183, 189, 185, 187, 187, 190, 191, - 184, 192, 194, 196, 195, 198, 190, 200, 191, 195, - 194, 186, 192, 205, 189, 197, 197, 199, 201, 201, - 196, 202, 199, 197, 198, 203, 204, 199, 206, 207, - 224, 200, 208, 206, 205, 202, 203, 209, 210, 212, - 197, 218, 209, 224, 204, 218, 208, 207, 211, 211, - 210, 213, 213, 212, 214, 214, 215, 216, 216, 217, - 217, 215, 219, 222, 220, 221, 223, 219, 220, 225, - 221, 223, 225, 226, 226, 227, 229, 225, 227, 228, - - 225, 229, 222, 228, 230, 231, 234, 232, 233, 230, - 232, 231, 235, 233, 236, 238, 241, 237, 238, 236, - 239, 239, 242, 234, 228, 235, 237, 240, 243, 246, - 241, 240, 247, 243, 244, 244, 242, 245, 248, 252, - 254, 245, 732, 249, 247, 248, 250, 246, 249, 251, - 253, 250, 255, 254, 251, 255, 252, 256, 256, 253, - 258, 264, 261, 265, 266, 267, 264, 265, 268, 266, - 265, 269, 269, 270, 265, 271, 271, 258, 261, 272, - 270, 265, 267, 273, 273, 274, 275, 277, 274, 276, - 276, 281, 268, 272, 275, 278, 278, 279, 280, 281, - - 279, 277, 282, 283, 280, 284, 285, 285, 283, 286, - 287, 287, 284, 289, 290, 291, 293, 289, 292, 282, - 294, 296, 286, 295, 292, 294, 296, 297, 291, 293, - 298, 298, 290, 299, 295, 300, 299, 301, 302, 303, - 303, 304, 305, 306, 307, 308, 308, 297, 309, 301, - 313, 310, 300, 308, 314, 304, 729, 302, 311, 311, - 312, 309, 310, 313, 307, 305, 317, 306, 312, 319, - 308, 317, 314, 315, 315, 318, 320, 321, 318, 322, - 323, 324, 321, 326, 322, 327, 328, 319, 320, 329, - 327, 328, 330, 330, 324, 331, 333, 326, 329, 323, - - 331, 334, 335, 336, 334, 337, 338, 340, 343, 339, - 337, 338, 339, 341, 345, 333, 344, 340, 345, 335, - 342, 342, 336, 346, 347, 348, 343, 341, 350, 344, - 351, 352, 352, 347, 353, 351, 355, 356, 354, 353, - 346, 350, 354, 357, 358, 359, 360, 361, 362, 348, - 355, 356, 364, 366, 367, 365, 526, 362, 526, 367, - 360, 357, 359, 365, 358, 364, 361, 370, 370, 368, - 369, 371, 366, 368, 368, 369, 371, 372, 373, 374, - 375, 378, 376, 377, 374, 375, 376, 380, 380, 379, - 372, 383, 377, 381, 381, 373, 377, 379, 377, 378, - - 377, 382, 382, 384, 385, 386, 392, 391, 388, 385, - 383, 384, 386, 388, 389, 390, 391, 393, 393, 389, - 390, 394, 395, 398, 392, 397, 399, 398, 401, 402, - 400, 403, 404, 406, 402, 407, 405, 537, 403, 537, - 394, 395, 397, 400, 399, 405, 401, 406, 408, 404, - 413, 409, 410, 408, 418, 407, 409, 410, 411, 411, - 414, 414, 415, 415, 416, 419, 417, 420, 413, 421, - 416, 417, 418, 422, 423, 424, 424, 425, 425, 426, - 431, 432, 421, 419, 426, 420, 430, 434, 423, 430, - 433, 433, 436, 422, 431, 435, 435, 437, 438, 441, - - 440, 437, 436, 442, 443, 432, 434, 444, 445, 446, - 447, 447, 449, 445, 446, 448, 438, 440, 441, 450, - 448, 443, 451, 453, 452, 454, 444, 442, 453, 455, - 456, 449, 457, 460, 461, 451, 452, 465, 450, 725, - 462, 457, 460, 457, 454, 464, 464, 466, 455, 462, - 456, 462, 461, 463, 467, 468, 465, 470, 463, 466, - 472, 471, 470, 473, 475, 479, 476, 477, 468, 471, - 476, 467, 477, 478, 479, 480, 481, 472, 478, 482, - 490, 473, 723, 475, 482, 483, 483, 481, 497, 480, - 484, 484, 485, 485, 486, 488, 489, 486, 491, 491, - - 488, 489, 492, 493, 490, 494, 495, 492, 496, 498, - 498, 499, 501, 497, 493, 503, 493, 500, 499, 502, - 502, 493, 507, 505, 494, 495, 500, 496, 505, 506, - 503, 508, 509, 515, 506, 510, 721, 501, 508, 511, - 510, 507, 512, 511, 511, 513, 516, 512, 514, 517, - 509, 516, 514, 518, 519, 519, 513, 515, 520, 520, - 524, 525, 527, 527, 518, 524, 529, 530, 530, 520, - 517, 531, 532, 533, 535, 534, 536, 525, 538, 538, - 539, 536, 540, 532, 533, 529, 534, 540, 535, 542, - 541, 531, 541, 543, 542, 544, 545, 545, 546, 720, - - 547, 548, 549, 546, 553, 539, 551, 554, 549, 547, - 543, 547, 551, 553, 544, 555, 548, 552, 552, 555, - 559, 556, 557, 557, 559, 554, 556, 560, 561, 562, - 563, 565, 566, 567, 565, 568, 568, 569, 569, 570, - 570, 560, 571, 573, 566, 567, 561, 572, 572, 562, - 563, 575, 576, 576, 571, 577, 575, 578, 579, 580, - 583, 573, 580, 585, 579, 582, 582, 584, 584, 586, - 587, 589, 590, 577, 578, 591, 591, 585, 586, 587, - 594, 590, 592, 595, 594, 583, 595, 592, 596, 597, - 589, 598, 717, 599, 597, 600, 601, 598, 716, 602, - - 600, 602, 605, 605, 601, 607, 607, 596, 599, 608, - 608, 610, 610, 611, 612, 612, 613, 615, 611, 616, - 620, 616, 615, 617, 618, 619, 621, 622, 623, 620, - 624, 613, 625, 625, 617, 618, 619, 626, 627, 628, - 623, 629, 629, 630, 631, 632, 622, 624, 630, 633, - 637, 621, 641, 638, 626, 627, 638, 628, 631, 639, - 639, 640, 640, 632, 642, 645, 643, 644, 633, 637, - 641, 643, 644, 642, 648, 646, 647, 649, 650, 645, - 646, 647, 649, 651, 652, 653, 655, 656, 648, 650, - 657, 657, 651, 652, 653, 659, 660, 658, 663, 663, - - 667, 660, 671, 659, 655, 656, 658, 664, 665, 665, - 664, 666, 666, 667, 668, 669, 669, 670, 672, 668, - 671, 670, 673, 674, 675, 676, 672, 677, 674, 679, - 680, 683, 679, 687, 676, 681, 681, 673, 686, 686, - 689, 690, 687, 691, 693, 689, 677, 680, 692, 675, - 695, 694, 696, 697, 697, 683, 694, 691, 701, 690, - 698, 702, 693, 692, 705, 698, 700, 700, 713, 701, - 696, 703, 703, 704, 704, 695, 706, 707, 707, 711, - 702, 706, 705, 708, 708, 709, 710, 710, 712, 712, - 709, 714, 714, 715, 718, 719, 722, 722, 715, 719, - - 724, 726, 727, 727, 724, 728, 728, 730, 730, 731, - 731, 735, 736, 718, 737, 739, 738, 699, 726, 740, - 740, 736, 688, 685, 684, 682, 678, 662, 737, 738, - 735, 661, 654, 739, 743, 743, 743, 743, 743, 743, - 744, 744, 744, 744, 744, 744, 745, 745, 745, 745, - 745, 745, 746, 746, 746, 746, 746, 746, 748, 748, - 636, 748, 748, 748, 749, 749, 635, 634, 614, 749, - 750, 750, 609, 606, 750, 752, 752, 604, 603, 593, - 752, 753, 753, 588, 753, 753, 753, 581, 574, 564, - 558, 550, 528, 523, 522, 521, 504, 487, 474, 469, - - 459, 458, 439, 429, 428, 427, 412, 396, 387, 363, - 349, 332, 325, 316, 288, 263, 262, 260, 259, 257, - 193, 188, 96, 95, 93, 91, 89, 54, 50, 46, - 45, 41, 36, 12, 11, 742, 742, 742, 742, 742, - 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, - 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, - 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, - 742, 742, 742, 742 + 74, 78, 82, 71, 75, 84, 76, 83, 83, 85, + + 86, 117, 80, 79, 77, 86, 88, 87, 117, 82, + 90, 90, 84, 92, 97, 97, 92, 83, 87, 85, + 99, 98, 94, 88, 94, 94, 98, 94, 99, 100, + 101, 102, 103, 104, 105, 101, 106, 104, 113, 105, + 102, 107, 108, 100, 102, 111, 111, 759, 109, 106, + 102, 102, 107, 109, 103, 107, 110, 112, 113, 108, + 114, 110, 115, 112, 116, 114, 118, 115, 119, 116, + 120, 121, 118, 122, 123, 124, 121, 124, 125, 126, + 129, 127, 129, 128, 130, 125, 127, 119, 128, 120, + 131, 132, 134, 123, 122, 131, 133, 126, 129, 133, + + 135, 136, 130, 127, 136, 132, 137, 134, 138, 138, + 137, 139, 140, 141, 135, 142, 139, 140, 143, 144, + 144, 145, 146, 147, 148, 146, 149, 151, 151, 152, + 143, 154, 141, 148, 147, 142, 153, 149, 145, 150, + 154, 150, 150, 155, 155, 152, 156, 157, 152, 158, + 153, 156, 159, 160, 158, 161, 162, 164, 160, 163, + 161, 159, 166, 167, 168, 170, 157, 171, 169, 536, + 164, 536, 167, 169, 174, 162, 166, 163, 165, 173, + 165, 165, 168, 177, 170, 175, 171, 172, 172, 174, + 172, 165, 165, 165, 176, 178, 177, 179, 173, 180, + + 175, 181, 182, 180, 178, 188, 179, 182, 183, 191, + 181, 176, 184, 184, 183, 185, 178, 186, 187, 192, + 185, 189, 189, 187, 193, 188, 194, 192, 186, 191, + 196, 197, 198, 193, 199, 201, 197, 194, 196, 200, + 200, 202, 203, 204, 204, 205, 202, 200, 208, 198, + 206, 202, 199, 207, 201, 209, 210, 212, 211, 205, + 209, 206, 212, 213, 200, 215, 203, 214, 214, 208, + 752, 207, 211, 218, 210, 213, 216, 216, 218, 215, + 217, 217, 219, 219, 220, 220, 221, 222, 225, 223, + 221, 224, 222, 223, 226, 227, 224, 230, 228, 226, + + 230, 228, 229, 229, 237, 751, 228, 225, 227, 228, + 231, 232, 233, 234, 231, 235, 232, 233, 235, 234, + 236, 237, 239, 238, 240, 236, 241, 239, 243, 241, + 242, 242, 245, 240, 244, 231, 238, 246, 244, 247, + 248, 248, 250, 251, 247, 249, 245, 243, 253, 249, + 252, 246, 256, 253, 254, 251, 255, 252, 257, 254, + 250, 255, 258, 259, 260, 260, 259, 257, 262, 256, + 265, 268, 271, 269, 270, 258, 268, 269, 272, 270, + 269, 273, 273, 274, 269, 262, 265, 275, 275, 271, + 274, 269, 276, 277, 277, 278, 279, 281, 278, 280, + + 280, 286, 272, 750, 279, 285, 276, 282, 282, 283, + 284, 281, 283, 285, 287, 288, 284, 290, 286, 287, + 289, 289, 288, 291, 291, 293, 295, 294, 296, 297, + 290, 294, 298, 299, 293, 297, 300, 301, 299, 302, + 304, 296, 301, 304, 295, 298, 305, 300, 303, 303, + 306, 307, 308, 308, 309, 310, 311, 312, 314, 302, + 316, 316, 306, 305, 313, 313, 317, 319, 309, 318, + 307, 314, 313, 315, 317, 320, 320, 312, 310, 324, + 311, 322, 318, 325, 315, 319, 322, 323, 326, 313, + 323, 327, 328, 326, 329, 325, 327, 324, 331, 332, + + 333, 334, 335, 335, 332, 333, 338, 329, 336, 341, + 334, 328, 331, 336, 339, 340, 342, 339, 340, 343, + 345, 346, 344, 345, 343, 338, 341, 344, 347, 348, + 348, 346, 349, 350, 351, 342, 352, 354, 351, 353, + 357, 356, 347, 358, 358, 357, 350, 359, 353, 361, + 349, 360, 359, 352, 356, 360, 362, 363, 364, 365, + 366, 354, 367, 361, 368, 372, 370, 373, 438, 371, + 362, 438, 373, 368, 366, 363, 365, 371, 364, 370, + 375, 367, 374, 378, 372, 375, 374, 374, 376, 376, + 377, 379, 380, 381, 384, 377, 378, 380, 381, 382, + + 383, 386, 385, 382, 387, 387, 388, 388, 379, 383, + 385, 390, 384, 383, 391, 383, 398, 383, 392, 386, + 389, 389, 391, 392, 393, 398, 399, 395, 396, 397, + 390, 393, 395, 396, 397, 400, 400, 401, 402, 405, + 407, 404, 406, 405, 399, 408, 409, 410, 411, 414, + 412, 409, 413, 407, 410, 468, 401, 402, 404, 412, + 406, 420, 415, 408, 468, 411, 413, 415, 416, 414, + 417, 418, 418, 416, 425, 417, 421, 421, 423, 420, + 422, 422, 424, 426, 423, 427, 428, 424, 429, 440, + 430, 442, 425, 431, 431, 432, 432, 433, 439, 428, + + 434, 426, 433, 427, 430, 434, 441, 441, 429, 444, + 442, 446, 439, 440, 443, 443, 445, 448, 449, 444, + 445, 450, 451, 452, 457, 453, 454, 455, 455, 446, + 453, 454, 458, 456, 448, 459, 461, 449, 456, 451, + 460, 461, 452, 457, 462, 450, 463, 464, 459, 465, + 469, 458, 460, 470, 471, 472, 472, 473, 465, 471, + 465, 474, 470, 462, 470, 463, 475, 464, 469, 476, + 478, 479, 481, 474, 482, 478, 473, 480, 484, 489, + 479, 486, 476, 475, 485, 480, 486, 488, 485, 481, + 487, 490, 482, 489, 491, 487, 488, 484, 499, 491, + + 492, 492, 490, 493, 493, 494, 494, 495, 497, 498, + 495, 500, 500, 497, 498, 501, 502, 503, 504, 505, + 501, 506, 499, 507, 507, 508, 509, 502, 510, 502, + 511, 511, 508, 512, 502, 509, 503, 504, 505, 514, + 515, 516, 517, 518, 514, 515, 506, 520, 512, 517, + 519, 521, 520, 510, 522, 521, 521, 523, 524, 522, + 516, 518, 524, 519, 525, 526, 527, 528, 523, 535, + 526, 529, 529, 530, 530, 534, 537, 537, 528, 539, + 534, 540, 540, 541, 530, 535, 542, 527, 525, 543, + 544, 545, 549, 547, 546, 547, 553, 542, 539, 546, + + 543, 544, 554, 541, 550, 545, 548, 548, 551, 550, + 551, 552, 558, 553, 555, 555, 552, 549, 556, 557, + 559, 554, 565, 556, 563, 563, 560, 562, 557, 564, + 557, 558, 560, 562, 567, 559, 571, 566, 564, 567, + 565, 566, 568, 568, 570, 572, 573, 574, 570, 576, + 571, 747, 576, 577, 579, 579, 578, 580, 580, 581, + 581, 582, 584, 572, 588, 577, 573, 574, 578, 583, + 583, 586, 589, 582, 587, 587, 586, 590, 591, 594, + 584, 591, 588, 590, 593, 593, 595, 595, 596, 589, + 598, 597, 599, 596, 601, 603, 603, 602, 604, 598, + + 608, 599, 610, 604, 594, 597, 602, 606, 610, 607, + 609, 606, 607, 601, 611, 609, 612, 613, 614, 608, + 614, 612, 617, 617, 629, 613, 619, 619, 625, 611, + 620, 620, 622, 622, 623, 624, 624, 627, 628, 623, + 628, 629, 627, 625, 630, 631, 632, 634, 635, 633, + 636, 637, 638, 638, 639, 630, 631, 632, 633, 640, + 641, 643, 636, 642, 642, 644, 643, 635, 637, 645, + 646, 639, 634, 650, 651, 654, 640, 651, 641, 644, + 652, 652, 653, 653, 655, 656, 657, 645, 659, 646, + 658, 657, 650, 654, 656, 658, 660, 662, 661, 663, + + 665, 660, 659, 661, 663, 655, 664, 666, 669, 665, + 667, 662, 670, 671, 671, 672, 666, 664, 674, 667, + 673, 677, 677, 674, 672, 685, 669, 682, 673, 685, + 670, 678, 678, 679, 680, 680, 679, 681, 681, 683, + 682, 684, 684, 686, 683, 687, 689, 688, 690, 691, + 692, 689, 694, 687, 695, 694, 696, 696, 691, 698, + 699, 686, 688, 702, 702, 703, 707, 705, 706, 692, + 698, 695, 705, 690, 703, 708, 709, 710, 711, 712, + 707, 737, 710, 719, 699, 737, 706, 713, 713, 718, + 708, 714, 716, 716, 709, 722, 714, 712, 717, 717, + + 718, 743, 719, 711, 720, 720, 721, 721, 736, 723, + 724, 724, 726, 722, 723, 725, 725, 726, 727, 727, + 729, 729, 732, 732, 733, 740, 740, 736, 742, 733, + 744, 753, 742, 745, 745, 746, 746, 748, 748, 749, + 749, 755, 754, 756, 757, 758, 758, 744, 741, 739, + 753, 754, 738, 735, 734, 755, 756, 731, 730, 728, + 715, 704, 757, 761, 761, 761, 761, 761, 761, 762, + 762, 762, 762, 762, 762, 763, 763, 763, 763, 763, + 763, 764, 764, 764, 764, 764, 764, 766, 766, 701, + 766, 766, 766, 767, 767, 700, 697, 693, 767, 768, + + 768, 676, 675, 768, 770, 770, 668, 649, 648, 770, + 771, 771, 647, 771, 771, 771, 626, 621, 618, 616, + 615, 605, 600, 592, 585, 575, 569, 561, 538, 533, + 532, 531, 513, 496, 483, 477, 467, 466, 447, 437, + 436, 435, 419, 403, 394, 369, 355, 337, 330, 321, + 292, 267, 266, 264, 263, 261, 195, 190, 96, 95, + 93, 91, 89, 54, 50, 46, 45, 41, 36, 12, + 11, 760, 760, 760, 760, 760, 760, 760, 760, 760, + 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, + 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, + + 760, 760, 760, 760, 760, 760, 760, 760, 760, 760 } ; static yy_state_type yy_last_accepting_state; @@ -1131,7 +1144,7 @@ static void config_end_include(void) #endif -#line 1134 "" +#line 1147 "" #define INITIAL 0 #define quotedstring 1 @@ -1288,7 +1301,7 @@ YY_DECL #line 99 "util/configlexer.lex" -#line 1291 "" +#line 1304 "" if ( !(yy_init) ) { @@ -1347,13 +1360,13 @@ yy_match: while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 743 ) + if ( yy_current_state >= 761 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; ++yy_cp; } - while ( yy_base[yy_current_state] != 1536 ); + while ( yy_base[yy_current_state] != 1572 ); yy_find_action: yy_act = yy_accept[yy_current_state]; @@ -1718,38 +1731,43 @@ YY_RULE_SETUP { YDOUT; return VAR_LOCAL_DATA;} YY_BREAK case 69: -/* rule 69 can match eol */ YY_RULE_SETUP #line 168 "util/configlexer.lex" +{ YDOUT; return VAR_STATISTICS_INTERVAL;} + YY_BREAK +case 70: +/* rule 70 can match eol */ +YY_RULE_SETUP +#line 169 "util/configlexer.lex" { LEXOUT(("NL\n")); cfg_parser->line++;} YY_BREAK /* Quoted strings. Strip leading and ending quotes */ -case 70: +case 71: YY_RULE_SETUP -#line 171 "util/configlexer.lex" +#line 172 "util/configlexer.lex" { BEGIN(quotedstring); LEXOUT(("QS ")); } YY_BREAK case YY_STATE_EOF(quotedstring): -#line 172 "util/configlexer.lex" +#line 173 "util/configlexer.lex" { yyerror("EOF inside quoted string"); BEGIN(INITIAL); } YY_BREAK -case 71: -YY_RULE_SETUP -#line 176 "util/configlexer.lex" -{ LEXOUT(("STR(%s) ", yytext)); yymore(); } - YY_BREAK case 72: -/* rule 72 can match eol */ YY_RULE_SETUP #line 177 "util/configlexer.lex" -{ cfg_parser->line++; yymore(); } +{ LEXOUT(("STR(%s) ", yytext)); yymore(); } YY_BREAK case 73: +/* rule 73 can match eol */ YY_RULE_SETUP #line 178 "util/configlexer.lex" +{ cfg_parser->line++; yymore(); } + YY_BREAK +case 74: +YY_RULE_SETUP +#line 179 "util/configlexer.lex" { LEXOUT(("QE ")); BEGIN(INITIAL); @@ -1761,32 +1779,32 @@ YY_RULE_SETUP } YY_BREAK /* Single Quoted strings. Strip leading and ending quotes */ -case 74: +case 75: YY_RULE_SETUP -#line 189 "util/configlexer.lex" +#line 190 "util/configlexer.lex" { BEGIN(singlequotedstr); LEXOUT(("SQS ")); } YY_BREAK case YY_STATE_EOF(singlequotedstr): -#line 190 "util/configlexer.lex" +#line 191 "util/configlexer.lex" { yyerror("EOF inside quoted string"); BEGIN(INITIAL); } YY_BREAK -case 75: -YY_RULE_SETUP -#line 194 "util/configlexer.lex" -{ LEXOUT(("STR(%s) ", yytext)); yymore(); } - YY_BREAK case 76: -/* rule 76 can match eol */ YY_RULE_SETUP #line 195 "util/configlexer.lex" -{ cfg_parser->line++; yymore(); } +{ LEXOUT(("STR(%s) ", yytext)); yymore(); } YY_BREAK case 77: +/* rule 77 can match eol */ YY_RULE_SETUP #line 196 "util/configlexer.lex" +{ cfg_parser->line++; yymore(); } + YY_BREAK +case 78: +YY_RULE_SETUP +#line 197 "util/configlexer.lex" { LEXOUT(("SQE ")); BEGIN(INITIAL); @@ -1798,37 +1816,37 @@ YY_RULE_SETUP } YY_BREAK /* include: directive */ -case 78: +case 79: YY_RULE_SETUP -#line 207 "util/configlexer.lex" +#line 208 "util/configlexer.lex" { LEXOUT(("v(%s) ", yytext)); BEGIN(include); } YY_BREAK case YY_STATE_EOF(include): -#line 208 "util/configlexer.lex" +#line 209 "util/configlexer.lex" { yyerror("EOF inside include directive"); BEGIN(INITIAL); } YY_BREAK -case 79: -YY_RULE_SETUP -#line 212 "util/configlexer.lex" -{ LEXOUT(("ISP ")); /* ignore */ } - YY_BREAK case 80: -/* rule 80 can match eol */ YY_RULE_SETUP #line 213 "util/configlexer.lex" -{ LEXOUT(("NL\n")); cfg_parser->line++;} +{ LEXOUT(("ISP ")); /* ignore */ } YY_BREAK case 81: +/* rule 81 can match eol */ YY_RULE_SETUP #line 214 "util/configlexer.lex" -{ LEXOUT(("IQS ")); BEGIN(include_quoted); } +{ LEXOUT(("NL\n")); cfg_parser->line++;} YY_BREAK case 82: YY_RULE_SETUP #line 215 "util/configlexer.lex" +{ LEXOUT(("IQS ")); BEGIN(include_quoted); } + YY_BREAK +case 83: +YY_RULE_SETUP +#line 216 "util/configlexer.lex" { LEXOUT(("Iunquotedstr(%s) ", yytext)); config_start_include(yytext); @@ -1836,26 +1854,26 @@ YY_RULE_SETUP } YY_BREAK case YY_STATE_EOF(include_quoted): -#line 220 "util/configlexer.lex" +#line 221 "util/configlexer.lex" { yyerror("EOF inside quoted string"); BEGIN(INITIAL); } YY_BREAK -case 83: -YY_RULE_SETUP -#line 224 "util/configlexer.lex" -{ LEXOUT(("ISTR(%s) ", yytext)); yymore(); } - YY_BREAK case 84: -/* rule 84 can match eol */ YY_RULE_SETUP #line 225 "util/configlexer.lex" -{ cfg_parser->line++; yymore(); } +{ LEXOUT(("ISTR(%s) ", yytext)); yymore(); } YY_BREAK case 85: +/* rule 85 can match eol */ YY_RULE_SETUP #line 226 "util/configlexer.lex" +{ cfg_parser->line++; yymore(); } + YY_BREAK +case 86: +YY_RULE_SETUP +#line 227 "util/configlexer.lex" { LEXOUT(("IQE ")); yytext[yyleng - 1] = '\0'; @@ -1864,7 +1882,7 @@ YY_RULE_SETUP } YY_BREAK case YY_STATE_EOF(INITIAL): -#line 232 "util/configlexer.lex" +#line 233 "util/configlexer.lex" { yy_set_bol(1); /* Set beginning of line, so "^" rules match. */ if (config_include_stack_ptr == 0) { @@ -1875,18 +1893,18 @@ case YY_STATE_EOF(INITIAL): } } YY_BREAK -case 86: +case 87: YY_RULE_SETUP -#line 242 "util/configlexer.lex" +#line 243 "util/configlexer.lex" { LEXOUT(("unquotedstr(%s) ", yytext)); yylval.str = strdup(yytext); return STRING; } YY_BREAK -case 87: +case 88: YY_RULE_SETUP -#line 245 "util/configlexer.lex" +#line 246 "util/configlexer.lex" ECHO; YY_BREAK -#line 1889 "" +#line 1907 "" case YY_END_OF_BUFFER: { @@ -2168,7 +2186,7 @@ static int yy_get_next_buffer (void) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 743 ) + if ( yy_current_state >= 761 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; @@ -2196,11 +2214,11 @@ static int yy_get_next_buffer (void) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 743 ) + if ( yy_current_state >= 761 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; - yy_is_jam = (yy_current_state == 742); + yy_is_jam = (yy_current_state == 760); return yy_is_jam ? 0 : yy_current_state; } @@ -2833,7 +2851,7 @@ void yyfree (void * ptr ) #define YYTABLES_NAME "yytables" -#line 245 "util/configlexer.lex" +#line 246 "util/configlexer.lex" diff --git a/util/configlexer.lex b/util/configlexer.lex index 3c3241d98..7059e07f6 100644 --- a/util/configlexer.lex +++ b/util/configlexer.lex @@ -165,6 +165,7 @@ val-nsec3-keysize-iterations{COLON} { YDOUT; return VAR_VAL_NSEC3_KEYSIZE_ITERAT use-syslog{COLON} { YDOUT; return VAR_USE_SYSLOG;} local-zone{COLON} { YDOUT; return VAR_LOCAL_ZONE;} local-data{COLON} { YDOUT; return VAR_LOCAL_DATA;} +statistics-interval{COLON} { YDOUT; return VAR_STATISTICS_INTERVAL;} {NEWLINE} { LEXOUT(("NL\n")); cfg_parser->line++;} /* Quoted strings. Strip leading and ending quotes */ diff --git a/util/configparser.c b/util/configparser.c index 9befd4dc2..5729c80a7 100644 --- a/util/configparser.c +++ b/util/configparser.c @@ -139,7 +139,8 @@ VAR_ACCESS_CONTROL = 328, VAR_LOCAL_ZONE = 329, VAR_LOCAL_DATA = 330, - VAR_INTERFACE_AUTOMATIC = 331 + VAR_INTERFACE_AUTOMATIC = 331, + VAR_STATISTICS_INTERVAL = 332 }; #endif /* Tokens. */ @@ -217,6 +218,7 @@ #define VAR_LOCAL_ZONE 329 #define VAR_LOCAL_DATA 330 #define VAR_INTERFACE_AUTOMATIC 331 +#define VAR_STATISTICS_INTERVAL 332 @@ -275,7 +277,7 @@ typedef union YYSTYPE char* str; } /* Line 187 of yacc.c. */ -#line 279 "util/configparser.c" +#line 281 "util/configparser.c" YYSTYPE; # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 @@ -288,7 +290,7 @@ typedef union YYSTYPE /* Line 216 of yacc.c. */ -#line 292 "util/configparser.c" +#line 294 "util/configparser.c" #ifdef short # undef short @@ -503,20 +505,20 @@ union yyalloc /* YYFINAL -- State number of the termination state. */ #define YYFINAL 2 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 133 +#define YYLAST 135 /* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 77 +#define YYNTOKENS 78 /* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 76 +#define YYNNTS 77 /* YYNRULES -- Number of rules. */ -#define YYNRULES 143 +#define YYNRULES 145 /* YYNRULES -- Number of states. */ -#define YYNSTATES 210 +#define YYNSTATES 213 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ #define YYUNDEFTOK 2 -#define YYMAXUTOK 331 +#define YYMAXUTOK 332 #define YYTRANSLATE(YYX) \ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) @@ -557,7 +559,7 @@ static const yytype_uint8 yytranslate[] = 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, - 75, 76 + 75, 76, 77 }; #if YYDEBUG @@ -572,75 +574,76 @@ static const yytype_uint16 yyprhs[] = 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, - 143, 144, 146, 148, 150, 152, 155, 156, 158, 160, - 162, 165, 168, 171, 174, 177, 180, 183, 186, 189, - 192, 195, 198, 201, 204, 207, 210, 213, 216, 219, - 222, 225, 228, 231, 234, 237, 240, 243, 246, 249, - 252, 255, 258, 261, 264, 267, 270, 273, 276, 279, - 282, 285, 288, 291, 294, 297, 300, 304, 307, 310, - 313, 316, 319, 322, 325, 328, 331, 335, 338, 341, - 344, 347, 350, 353 + 142, 145, 146, 148, 150, 152, 154, 157, 158, 160, + 162, 164, 167, 170, 173, 176, 179, 182, 185, 188, + 191, 194, 197, 200, 203, 206, 209, 212, 215, 218, + 221, 224, 227, 230, 233, 236, 239, 242, 245, 248, + 251, 254, 257, 260, 263, 266, 269, 272, 275, 278, + 281, 284, 287, 290, 293, 296, 299, 302, 305, 309, + 312, 315, 318, 321, 324, 327, 330, 333, 336, 340, + 343, 346, 349, 352, 355, 358 }; /* YYRHS -- A `-1'-separated list of the rules' RHS. */ static const yytype_int16 yyrhs[] = { - 78, 0, -1, -1, 78, 79, -1, 80, 81, -1, - 83, 84, -1, 86, 87, -1, 11, -1, 81, 82, - -1, -1, 89, -1, 90, -1, 91, -1, 94, -1, - 95, -1, 99, -1, 100, -1, 101, -1, 102, -1, - 92, -1, 104, -1, 105, -1, 106, -1, 107, -1, - 108, -1, 118, -1, 119, -1, 120, -1, 121, -1, - 122, -1, 96, -1, 123, -1, 124, -1, 127, -1, - 125, -1, 126, -1, 128, -1, 129, -1, 130, -1, - 133, -1, 113, -1, 114, -1, 115, -1, 116, -1, - 131, -1, 136, -1, 110, -1, 112, -1, 137, -1, - 139, -1, 140, -1, 141, -1, 97, -1, 117, -1, - 143, -1, 144, -1, 111, -1, 142, -1, 103, -1, - 93, -1, 109, -1, 134, -1, 138, -1, 132, -1, - 135, -1, 145, -1, 146, -1, 98, -1, 39, -1, - 84, 85, -1, -1, 147, -1, 148, -1, 149, -1, - 45, -1, 87, 88, -1, -1, 150, -1, 151, -1, - 152, -1, 13, 10, -1, 12, 10, -1, 14, 10, - -1, 17, 10, -1, 68, 10, -1, 15, 10, -1, - 16, 10, -1, 32, 10, -1, 61, 10, -1, 76, - 10, -1, 18, 10, -1, 19, 10, -1, 20, 10, - -1, 21, 10, -1, 67, 10, -1, 22, 10, -1, - 23, 10, -1, 24, 10, -1, 25, 10, -1, 26, - 10, -1, 69, 10, -1, 55, 10, -1, 65, 10, - -1, 56, 10, -1, 49, 10, -1, 50, 10, -1, - 51, 10, -1, 52, 10, -1, 62, 10, -1, 27, - 10, -1, 28, 10, -1, 29, 10, -1, 30, 10, - -1, 31, 10, -1, 33, 10, -1, 34, 10, -1, - 36, 10, -1, 37, 10, -1, 35, 10, -1, 42, - 10, -1, 43, 10, -1, 44, 10, -1, 53, 10, - -1, 72, 10, -1, 48, 10, -1, 70, 10, -1, - 73, 10, 10, -1, 54, 10, -1, 57, 10, -1, - 71, 10, -1, 58, 10, -1, 59, 10, -1, 60, - 10, -1, 66, 10, -1, 63, 10, -1, 64, 10, - -1, 74, 10, 10, -1, 75, 10, -1, 38, 10, - -1, 40, 10, -1, 41, 10, -1, 38, 10, -1, - 46, 10, -1, 47, 10, -1 + 79, 0, -1, -1, 79, 80, -1, 81, 82, -1, + 84, 85, -1, 87, 88, -1, 11, -1, 82, 83, + -1, -1, 90, -1, 91, -1, 93, -1, 96, -1, + 97, -1, 101, -1, 102, -1, 103, -1, 104, -1, + 94, -1, 106, -1, 107, -1, 108, -1, 109, -1, + 110, -1, 120, -1, 121, -1, 122, -1, 123, -1, + 124, -1, 98, -1, 125, -1, 126, -1, 129, -1, + 127, -1, 128, -1, 130, -1, 131, -1, 132, -1, + 135, -1, 115, -1, 116, -1, 117, -1, 118, -1, + 133, -1, 138, -1, 112, -1, 114, -1, 139, -1, + 141, -1, 142, -1, 143, -1, 99, -1, 119, -1, + 145, -1, 146, -1, 113, -1, 144, -1, 105, -1, + 95, -1, 111, -1, 136, -1, 140, -1, 134, -1, + 137, -1, 147, -1, 148, -1, 100, -1, 92, -1, + 39, -1, 85, 86, -1, -1, 149, -1, 150, -1, + 151, -1, 45, -1, 88, 89, -1, -1, 152, -1, + 153, -1, 154, -1, 13, 10, -1, 12, 10, -1, + 77, 10, -1, 14, 10, -1, 17, 10, -1, 68, + 10, -1, 15, 10, -1, 16, 10, -1, 32, 10, + -1, 61, 10, -1, 76, 10, -1, 18, 10, -1, + 19, 10, -1, 20, 10, -1, 21, 10, -1, 67, + 10, -1, 22, 10, -1, 23, 10, -1, 24, 10, + -1, 25, 10, -1, 26, 10, -1, 69, 10, -1, + 55, 10, -1, 65, 10, -1, 56, 10, -1, 49, + 10, -1, 50, 10, -1, 51, 10, -1, 52, 10, + -1, 62, 10, -1, 27, 10, -1, 28, 10, -1, + 29, 10, -1, 30, 10, -1, 31, 10, -1, 33, + 10, -1, 34, 10, -1, 36, 10, -1, 37, 10, + -1, 35, 10, -1, 42, 10, -1, 43, 10, -1, + 44, 10, -1, 53, 10, -1, 72, 10, -1, 48, + 10, -1, 70, 10, -1, 73, 10, 10, -1, 54, + 10, -1, 57, 10, -1, 71, 10, -1, 58, 10, + -1, 59, 10, -1, 60, 10, -1, 66, 10, -1, + 63, 10, -1, 64, 10, -1, 74, 10, 10, -1, + 75, 10, -1, 38, 10, -1, 40, 10, -1, 41, + 10, -1, 38, 10, -1, 46, 10, -1, 47, 10, + -1 }; /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ static const yytype_uint16 yyrline[] = { - 0, 93, 93, 93, 94, 94, 95, 99, 104, 105, - 106, 106, 106, 107, 107, 107, 108, 108, 108, 109, - 109, 109, 110, 110, 110, 111, 111, 112, 112, 113, - 113, 114, 114, 115, 115, 116, 116, 117, 117, 118, - 118, 119, 119, 119, 120, 120, 120, 121, 121, 121, - 122, 122, 123, 123, 124, 124, 125, 125, 126, 126, - 126, 127, 127, 128, 128, 129, 129, 129, 131, 143, - 144, 145, 145, 145, 147, 159, 160, 161, 161, 161, - 163, 172, 181, 190, 203, 218, 227, 236, 245, 254, - 263, 272, 281, 290, 299, 313, 320, 327, 334, 342, - 349, 356, 364, 372, 379, 388, 397, 404, 411, 422, - 430, 443, 452, 460, 473, 482, 491, 500, 509, 522, - 529, 539, 549, 559, 569, 576, 586, 599, 606, 624, - 633, 642, 652, 662, 669, 677, 690, 709, 716, 723, - 730, 737, 744, 751 + 0, 94, 94, 94, 95, 95, 96, 100, 105, 106, + 107, 107, 107, 108, 108, 108, 109, 109, 109, 110, + 110, 110, 111, 111, 111, 112, 112, 113, 113, 114, + 114, 115, 115, 116, 116, 117, 117, 118, 118, 119, + 119, 120, 120, 120, 121, 121, 121, 122, 122, 122, + 123, 123, 124, 124, 125, 125, 126, 126, 127, 127, + 127, 128, 128, 129, 129, 130, 130, 130, 131, 133, + 145, 146, 147, 147, 147, 149, 161, 162, 163, 163, + 163, 165, 174, 183, 194, 203, 216, 231, 240, 249, + 258, 267, 276, 285, 294, 303, 312, 326, 333, 340, + 347, 355, 362, 369, 377, 385, 392, 401, 410, 417, + 424, 435, 443, 456, 465, 473, 486, 495, 504, 513, + 522, 535, 542, 552, 562, 572, 582, 589, 599, 612, + 619, 637, 646, 655, 665, 675, 682, 690, 703, 722, + 729, 736, 743, 750, 757, 764 }; #endif @@ -671,12 +674,13 @@ static const char *const yytname[] = "VAR_VAL_NSEC3_KEYSIZE_ITERATIONS", "VAR_USE_SYSLOG", "VAR_OUTGOING_INTERFACE", "VAR_ROOT_HINTS", "VAR_DO_NOT_QUERY_LOCALHOST", "VAR_CACHE_MAX_TTL", "VAR_HARDEN_DNNSEC_STRIPPED", "VAR_ACCESS_CONTROL", - "VAR_LOCAL_ZONE", "VAR_LOCAL_DATA", "VAR_INTERFACE_AUTOMATIC", "$accept", - "toplevelvars", "toplevelvar", "serverstart", "contents_server", - "content_server", "stubstart", "contents_stub", "content_stub", - "forwardstart", "contents_forward", "content_forward", - "server_num_threads", "server_verbosity", "server_port", - "server_interface", "server_outgoing_interface", "server_outgoing_port", + "VAR_LOCAL_ZONE", "VAR_LOCAL_DATA", "VAR_INTERFACE_AUTOMATIC", + "VAR_STATISTICS_INTERVAL", "$accept", "toplevelvars", "toplevelvar", + "serverstart", "contents_server", "content_server", "stubstart", + "contents_stub", "content_stub", "forwardstart", "contents_forward", + "content_forward", "server_num_threads", "server_verbosity", + "server_statistics_interval", "server_port", "server_interface", + "server_outgoing_interface", "server_outgoing_port", "server_outgoing_range", "server_outgoing_num_tcp", "server_incoming_num_tcp", "server_interface_automatic", "server_do_ip4", "server_do_ip6", "server_do_udp", "server_do_tcp", "server_use_syslog", @@ -715,28 +719,28 @@ static const yytype_uint16 yytoknum[] = 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 327, 328, 329, 330, 331 + 325, 326, 327, 328, 329, 330, 331, 332 }; # endif /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_uint8 yyr1[] = { - 0, 77, 78, 78, 79, 79, 79, 80, 81, 81, - 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, - 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, - 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, - 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, - 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, - 82, 82, 82, 82, 82, 82, 82, 82, 83, 84, - 84, 85, 85, 85, 86, 87, 87, 88, 88, 88, + 0, 78, 79, 79, 80, 80, 80, 81, 82, 82, + 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 83, 83, 83, 84, + 85, 85, 86, 86, 86, 87, 88, 88, 89, 89, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, - 149, 150, 151, 152 + 149, 150, 151, 152, 153, 154 }; /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ @@ -748,15 +752,15 @@ static const yytype_uint8 yyr2[] = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, - 0, 1, 1, 1, 1, 2, 0, 1, 1, 1, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 2, 0, 1, 1, 1, 1, 2, 0, 1, 1, + 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, - 2, 2, 2, 2 + 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, + 2, 2, 2, 2, 2, 2 }; /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state @@ -764,40 +768,41 @@ static const yytype_uint8 yyr2[] = means the default is an error. */ static const yytype_uint8 yydefact[] = { - 2, 0, 1, 7, 68, 74, 3, 9, 70, 76, + 2, 0, 1, 7, 69, 75, 3, 9, 71, 77, 4, 5, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 8, 10, 11, 12, 19, 59, 13, 14, 30, - 52, 67, 15, 16, 17, 18, 58, 20, 21, 22, - 23, 24, 60, 46, 56, 47, 40, 41, 42, 43, - 53, 25, 26, 27, 28, 29, 31, 32, 34, 35, - 33, 36, 37, 38, 44, 63, 39, 61, 64, 45, - 48, 62, 49, 50, 51, 57, 54, 55, 65, 66, - 0, 0, 0, 69, 71, 72, 73, 0, 0, 0, - 75, 77, 78, 79, 81, 80, 82, 85, 86, 83, - 90, 91, 92, 93, 95, 96, 97, 98, 99, 109, - 110, 111, 112, 113, 87, 114, 115, 118, 116, 117, - 119, 120, 121, 124, 104, 105, 106, 107, 122, 127, - 101, 103, 128, 130, 131, 132, 88, 108, 134, 135, - 102, 133, 94, 84, 100, 125, 129, 123, 0, 0, - 137, 89, 138, 139, 140, 141, 142, 143, 126, 136 + 0, 0, 8, 10, 11, 68, 12, 19, 59, 13, + 14, 30, 52, 67, 15, 16, 17, 18, 58, 20, + 21, 22, 23, 24, 60, 46, 56, 47, 40, 41, + 42, 43, 53, 25, 26, 27, 28, 29, 31, 32, + 34, 35, 33, 36, 37, 38, 44, 63, 39, 61, + 64, 45, 48, 62, 49, 50, 51, 57, 54, 55, + 65, 66, 0, 0, 0, 70, 72, 73, 74, 0, + 0, 0, 76, 78, 79, 80, 82, 81, 84, 87, + 88, 85, 92, 93, 94, 95, 97, 98, 99, 100, + 101, 111, 112, 113, 114, 115, 89, 116, 117, 120, + 118, 119, 121, 122, 123, 126, 106, 107, 108, 109, + 124, 129, 103, 105, 130, 132, 133, 134, 90, 110, + 136, 137, 104, 135, 96, 86, 102, 127, 131, 125, + 0, 0, 139, 91, 83, 140, 141, 142, 143, 144, + 145, 128, 138 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { - -1, 1, 6, 7, 10, 71, 8, 11, 133, 9, - 12, 140, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, - 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, - 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, - 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, - 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, - 134, 135, 136, 141, 142, 143 + -1, 1, 6, 7, 10, 72, 8, 11, 135, 9, + 12, 142, 73, 74, 75, 76, 77, 78, 79, 80, + 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, + 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, + 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, + 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, + 131, 136, 137, 138, 143, 144, 145 }; /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing @@ -805,27 +810,28 @@ static const yytype_int16 yydefgoto[] = #define YYPACT_NINF -13 static const yytype_int8 yypact[] = { - -13, 65, -13, -13, -13, -13, -13, -13, -13, -13, - -12, 29, 28, 16, 17, 18, 19, 23, 24, 25, - 58, 61, 62, 63, 67, 68, 69, 70, 71, 72, - 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, - 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, - 93, 95, 96, 97, 98, 99, 101, 102, 103, 104, - 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, - 115, -13, -13, -13, -13, -13, -13, -13, -13, -13, + -13, 66, -13, -13, -13, -13, -13, -13, -13, -13, + -12, 30, 29, 16, 17, 18, 19, 23, 24, 25, + 59, 62, 63, 64, 68, 69, 70, 71, 72, 73, + 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, + 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, + 94, 96, 97, 98, 99, 100, 102, 103, 104, 105, + 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, + 116, 117, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, - 116, 117, 118, -13, -13, -13, -13, 119, 120, 121, + -13, -13, 118, 119, 120, -13, -13, -13, -13, 121, + 122, 123, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, - -13, -13, -13, -13, -13, -13, -13, -13, 122, 123, - -13, -13, -13, -13, -13, -13, -13, -13, -13, -13 + 124, 125, -13, -13, -13, -13, -13, -13, -13, -13, + -13, -13, -13 }; /* YYPGOTO[NTERM-NUM]. */ @@ -838,7 +844,7 @@ static const yytype_int8 yypgoto[] = -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, - -13, -13, -13, -13, -13, -13 + -13, -13, -13, -13, -13, -13, -13 }; /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If @@ -850,18 +856,18 @@ static const yytype_uint8 yytable[] = { 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, - 33, 34, 35, 36, 37, 38, 144, 145, 146, 147, - 39, 40, 41, 148, 149, 150, 42, 43, 44, 45, + 33, 34, 35, 36, 37, 38, 146, 147, 148, 149, + 39, 40, 41, 150, 151, 152, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, - 66, 67, 68, 69, 70, 2, 137, 130, 151, 131, - 132, 152, 153, 154, 138, 139, 3, 155, 156, 157, - 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, - 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, - 178, 179, 180, 181, 4, 182, 183, 184, 185, 186, - 5, 187, 188, 189, 190, 191, 192, 193, 194, 195, - 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, - 206, 207, 208, 209 + 66, 67, 68, 69, 70, 71, 2, 139, 132, 153, + 133, 134, 154, 155, 156, 140, 141, 3, 157, 158, + 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, + 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, + 179, 180, 181, 182, 183, 4, 184, 185, 186, 187, + 188, 5, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, + 207, 208, 209, 210, 211, 212 }; static const yytype_uint8 yycheck[] = @@ -872,41 +878,42 @@ static const yytype_uint8 yycheck[] = 42, 43, 44, 10, 10, 10, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, - 72, 73, 74, 75, 76, 0, 38, 38, 10, 40, - 41, 10, 10, 10, 46, 47, 11, 10, 10, 10, + 72, 73, 74, 75, 76, 77, 0, 38, 38, 10, + 40, 41, 10, 10, 10, 46, 47, 11, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 39, 10, 10, 10, 10, 10, - 45, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 39, 10, 10, 10, 10, + 10, 45, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10 + 10, 10, 10, 10, 10, 10 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const yytype_uint8 yystos[] = { - 0, 78, 0, 11, 39, 45, 79, 80, 83, 86, - 81, 84, 87, 12, 13, 14, 15, 16, 17, 18, + 0, 79, 0, 11, 39, 45, 80, 81, 84, 87, + 82, 85, 88, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 42, 43, 44, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, - 76, 82, 89, 90, 91, 92, 93, 94, 95, 96, + 76, 77, 83, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, - 38, 40, 41, 85, 147, 148, 149, 38, 46, 47, - 88, 150, 151, 152, 10, 10, 10, 10, 10, 10, + 147, 148, 38, 40, 41, 86, 149, 150, 151, 38, + 46, 47, 89, 152, 153, 154, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 + 10, 10, 10 }; #define yyerrok (yyerrstatus = 0) @@ -1721,14 +1728,14 @@ yyreduce: switch (yyn) { case 7: -#line 100 "util/configparser.y" +#line 101 "util/configparser.y" { OUTYY(("\nP(server:)\n")); } break; - case 68: -#line 132 "util/configparser.y" + case 69: +#line 134 "util/configparser.y" { struct config_stub* s; OUTYY(("\nP(stub_zone:)\n")); @@ -1741,8 +1748,8 @@ yyreduce: } break; - case 74: -#line 148 "util/configparser.y" + case 75: +#line 150 "util/configparser.y" { struct config_stub* s; OUTYY(("\nP(forward_zone:)\n")); @@ -1755,8 +1762,8 @@ yyreduce: } break; - case 80: -#line 164 "util/configparser.y" + case 81: +#line 166 "util/configparser.y" { OUTYY(("P(server_num_threads:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) @@ -1766,8 +1773,8 @@ yyreduce: } break; - case 81: -#line 173 "util/configparser.y" + case 82: +#line 175 "util/configparser.y" { OUTYY(("P(server_verbosity:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) @@ -1777,8 +1784,21 @@ yyreduce: } break; - case 82: -#line 182 "util/configparser.y" + case 83: +#line 184 "util/configparser.y" + { + OUTYY(("P(server_statistics_interval:%s)\n", (yyvsp[(2) - (2)].str))); + if(strcmp((yyvsp[(2) - (2)].str), "") == 0 || strcmp((yyvsp[(2) - (2)].str), "0") == 0) + cfg_parser->cfg->stat_interval = 0; + else if(atoi((yyvsp[(2) - (2)].str)) == 0) + yyerror("number expected"); + else cfg_parser->cfg->stat_interval = atoi((yyvsp[(2) - (2)].str)); + free((yyvsp[(2) - (2)].str)); + } + break; + + case 84: +#line 195 "util/configparser.y" { OUTYY(("P(server_port:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0) @@ -1788,8 +1808,8 @@ yyreduce: } break; - case 83: -#line 191 "util/configparser.y" + case 85: +#line 204 "util/configparser.y" { OUTYY(("P(server_interface:%s)\n", (yyvsp[(2) - (2)].str))); if(cfg_parser->cfg->num_ifs == 0) @@ -1803,8 +1823,8 @@ yyreduce: } break; - case 84: -#line 204 "util/configparser.y" + case 86: +#line 217 "util/configparser.y" { OUTYY(("P(server_outgoing_interface:%s)\n", (yyvsp[(2) - (2)].str))); if(cfg_parser->cfg->num_out_ifs == 0) @@ -1820,8 +1840,8 @@ yyreduce: } break; - case 85: -#line 219 "util/configparser.y" + case 87: +#line 232 "util/configparser.y" { OUTYY(("P(server_outgoing_port:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0) @@ -1831,8 +1851,8 @@ yyreduce: } break; - case 86: -#line 228 "util/configparser.y" + case 88: +#line 241 "util/configparser.y" { OUTYY(("P(server_outgoing_range:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0) @@ -1842,8 +1862,8 @@ yyreduce: } break; - case 87: -#line 237 "util/configparser.y" + case 89: +#line 250 "util/configparser.y" { OUTYY(("P(server_outgoing_num_tcp:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) @@ -1853,8 +1873,8 @@ yyreduce: } break; - case 88: -#line 246 "util/configparser.y" + case 90: +#line 259 "util/configparser.y" { OUTYY(("P(server_incoming_num_tcp:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) @@ -1864,8 +1884,8 @@ yyreduce: } break; - case 89: -#line 255 "util/configparser.y" + case 91: +#line 268 "util/configparser.y" { OUTYY(("P(server_interface_automatic:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -1875,8 +1895,8 @@ yyreduce: } break; - case 90: -#line 264 "util/configparser.y" + case 92: +#line 277 "util/configparser.y" { OUTYY(("P(server_do_ip4:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -1886,8 +1906,8 @@ yyreduce: } break; - case 91: -#line 273 "util/configparser.y" + case 93: +#line 286 "util/configparser.y" { OUTYY(("P(server_do_ip6:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -1897,8 +1917,8 @@ yyreduce: } break; - case 92: -#line 282 "util/configparser.y" + case 94: +#line 295 "util/configparser.y" { OUTYY(("P(server_do_udp:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -1908,8 +1928,8 @@ yyreduce: } break; - case 93: -#line 291 "util/configparser.y" + case 95: +#line 304 "util/configparser.y" { OUTYY(("P(server_do_tcp:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -1919,8 +1939,8 @@ yyreduce: } break; - case 94: -#line 300 "util/configparser.y" + case 96: +#line 313 "util/configparser.y" { OUTYY(("P(server_use_syslog:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -1935,8 +1955,8 @@ yyreduce: } break; - case 95: -#line 314 "util/configparser.y" + case 97: +#line 327 "util/configparser.y" { OUTYY(("P(server_chroot:%s)\n", (yyvsp[(2) - (2)].str))); free(cfg_parser->cfg->chrootdir); @@ -1944,8 +1964,8 @@ yyreduce: } break; - case 96: -#line 321 "util/configparser.y" + case 98: +#line 334 "util/configparser.y" { OUTYY(("P(server_username:%s)\n", (yyvsp[(2) - (2)].str))); free(cfg_parser->cfg->username); @@ -1953,8 +1973,8 @@ yyreduce: } break; - case 97: -#line 328 "util/configparser.y" + case 99: +#line 341 "util/configparser.y" { OUTYY(("P(server_directory:%s)\n", (yyvsp[(2) - (2)].str))); free(cfg_parser->cfg->directory); @@ -1962,8 +1982,8 @@ yyreduce: } break; - case 98: -#line 335 "util/configparser.y" + case 100: +#line 348 "util/configparser.y" { OUTYY(("P(server_logfile:%s)\n", (yyvsp[(2) - (2)].str))); free(cfg_parser->cfg->logfile); @@ -1972,8 +1992,8 @@ yyreduce: } break; - case 99: -#line 343 "util/configparser.y" + case 101: +#line 356 "util/configparser.y" { OUTYY(("P(server_pidfile:%s)\n", (yyvsp[(2) - (2)].str))); free(cfg_parser->cfg->pidfile); @@ -1981,8 +2001,8 @@ yyreduce: } break; - case 100: -#line 350 "util/configparser.y" + case 102: +#line 363 "util/configparser.y" { OUTYY(("P(server_root_hints:%s)\n", (yyvsp[(2) - (2)].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->root_hints, (yyvsp[(2) - (2)].str))) @@ -1990,8 +2010,8 @@ yyreduce: } break; - case 101: -#line 357 "util/configparser.y" + case 103: +#line 370 "util/configparser.y" { OUTYY(("P(server_trust_anchor_file:%s)\n", (yyvsp[(2) - (2)].str))); if(!cfg_strlist_insert(&cfg_parser->cfg-> @@ -2000,8 +2020,8 @@ yyreduce: } break; - case 102: -#line 365 "util/configparser.y" + case 104: +#line 378 "util/configparser.y" { OUTYY(("P(server_trusted_keys_file:%s)\n", (yyvsp[(2) - (2)].str))); if(!cfg_strlist_insert(&cfg_parser->cfg-> @@ -2010,8 +2030,8 @@ yyreduce: } break; - case 103: -#line 373 "util/configparser.y" + case 105: +#line 386 "util/configparser.y" { OUTYY(("P(server_trust_anchor:%s)\n", (yyvsp[(2) - (2)].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->trust_anchor_list, (yyvsp[(2) - (2)].str))) @@ -2019,8 +2039,8 @@ yyreduce: } break; - case 104: -#line 380 "util/configparser.y" + case 106: +#line 393 "util/configparser.y" { OUTYY(("P(server_hide_identity:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -2030,8 +2050,8 @@ yyreduce: } break; - case 105: -#line 389 "util/configparser.y" + case 107: +#line 402 "util/configparser.y" { OUTYY(("P(server_hide_version:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -2041,8 +2061,8 @@ yyreduce: } break; - case 106: -#line 398 "util/configparser.y" + case 108: +#line 411 "util/configparser.y" { OUTYY(("P(server_identity:%s)\n", (yyvsp[(2) - (2)].str))); free(cfg_parser->cfg->identity); @@ -2050,8 +2070,8 @@ yyreduce: } break; - case 107: -#line 405 "util/configparser.y" + case 109: +#line 418 "util/configparser.y" { OUTYY(("P(server_version:%s)\n", (yyvsp[(2) - (2)].str))); free(cfg_parser->cfg->version); @@ -2059,8 +2079,8 @@ yyreduce: } break; - case 108: -#line 412 "util/configparser.y" + case 110: +#line 425 "util/configparser.y" { OUTYY(("P(server_msg_buffer_size:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0) @@ -2072,8 +2092,8 @@ yyreduce: } break; - case 109: -#line 423 "util/configparser.y" + case 111: +#line 436 "util/configparser.y" { OUTYY(("P(server_msg_cache_size:%s)\n", (yyvsp[(2) - (2)].str))); if(!cfg_parse_memsize((yyvsp[(2) - (2)].str), &cfg_parser->cfg->msg_cache_size)) @@ -2082,8 +2102,8 @@ yyreduce: } break; - case 110: -#line 431 "util/configparser.y" + case 112: +#line 444 "util/configparser.y" { OUTYY(("P(server_msg_cache_slabs:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0) @@ -2097,8 +2117,8 @@ yyreduce: } break; - case 111: -#line 444 "util/configparser.y" + case 113: +#line 457 "util/configparser.y" { OUTYY(("P(server_num_queries_per_thread:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0) @@ -2108,8 +2128,8 @@ yyreduce: } break; - case 112: -#line 453 "util/configparser.y" + case 114: +#line 466 "util/configparser.y" { OUTYY(("P(server_rrset_cache_size:%s)\n", (yyvsp[(2) - (2)].str))); if(!cfg_parse_memsize((yyvsp[(2) - (2)].str), &cfg_parser->cfg->rrset_cache_size)) @@ -2118,8 +2138,8 @@ yyreduce: } break; - case 113: -#line 461 "util/configparser.y" + case 115: +#line 474 "util/configparser.y" { OUTYY(("P(server_rrset_cache_slabs:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0) @@ -2133,8 +2153,8 @@ yyreduce: } break; - case 114: -#line 474 "util/configparser.y" + case 116: +#line 487 "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) @@ -2144,8 +2164,8 @@ yyreduce: } break; - case 115: -#line 483 "util/configparser.y" + case 117: +#line 496 "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) @@ -2155,8 +2175,8 @@ yyreduce: } break; - case 116: -#line 492 "util/configparser.y" + case 118: +#line 505 "util/configparser.y" { OUTYY(("P(server_infra_cache_numhosts:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0) @@ -2166,8 +2186,8 @@ yyreduce: } break; - case 117: -#line 501 "util/configparser.y" + case 119: +#line 514 "util/configparser.y" { OUTYY(("P(server_infra_cache_lame_size:%s)\n", (yyvsp[(2) - (2)].str))); if(!cfg_parse_memsize((yyvsp[(2) - (2)].str), &cfg_parser->cfg-> @@ -2177,8 +2197,8 @@ yyreduce: } break; - case 118: -#line 510 "util/configparser.y" + case 120: +#line 523 "util/configparser.y" { OUTYY(("P(server_infra_cache_slabs:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0) @@ -2192,8 +2212,8 @@ yyreduce: } break; - case 119: -#line 523 "util/configparser.y" + case 121: +#line 536 "util/configparser.y" { OUTYY(("P(server_target_fetch_policy:%s)\n", (yyvsp[(2) - (2)].str))); free(cfg_parser->cfg->target_fetch_policy); @@ -2201,8 +2221,8 @@ yyreduce: } break; - case 120: -#line 530 "util/configparser.y" + case 122: +#line 543 "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) @@ -2213,8 +2233,8 @@ yyreduce: } break; - case 121: -#line 540 "util/configparser.y" + case 123: +#line 553 "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) @@ -2225,8 +2245,8 @@ yyreduce: } break; - case 122: -#line 550 "util/configparser.y" + case 124: +#line 563 "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) @@ -2237,8 +2257,8 @@ yyreduce: } break; - case 123: -#line 560 "util/configparser.y" + case 125: +#line 573 "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) @@ -2249,8 +2269,8 @@ yyreduce: } break; - case 124: -#line 570 "util/configparser.y" + case 126: +#line 583 "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))) @@ -2258,8 +2278,8 @@ yyreduce: } break; - case 125: -#line 577 "util/configparser.y" + case 127: +#line 590 "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) @@ -2270,8 +2290,8 @@ yyreduce: } break; - case 126: -#line 587 "util/configparser.y" + case 128: +#line 600 "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 && @@ -2285,8 +2305,8 @@ yyreduce: } break; - case 127: -#line 600 "util/configparser.y" + case 129: +#line 613 "util/configparser.y" { OUTYY(("P(server_module_conf:%s)\n", (yyvsp[(2) - (2)].str))); free(cfg_parser->cfg->module_conf); @@ -2294,8 +2314,8 @@ yyreduce: } break; - case 128: -#line 607 "util/configparser.y" + case 130: +#line 620 "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) { @@ -2314,8 +2334,8 @@ yyreduce: } break; - case 129: -#line 625 "util/configparser.y" + case 131: +#line 638 "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) @@ -2325,8 +2345,8 @@ yyreduce: } break; - case 130: -#line 634 "util/configparser.y" + case 132: +#line 647 "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) @@ -2336,8 +2356,8 @@ yyreduce: } break; - case 131: -#line 643 "util/configparser.y" + case 133: +#line 656 "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) @@ -2348,8 +2368,8 @@ yyreduce: } break; - case 132: -#line 653 "util/configparser.y" + case 134: +#line 666 "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) @@ -2360,8 +2380,8 @@ yyreduce: } break; - case 133: -#line 663 "util/configparser.y" + case 135: +#line 676 "util/configparser.y" { OUTYY(("P(server_val_nsec3_keysize_iterations:%s)\n", (yyvsp[(2) - (2)].str))); free(cfg_parser->cfg->val_nsec3_key_iterations); @@ -2369,8 +2389,8 @@ yyreduce: } break; - case 134: -#line 670 "util/configparser.y" + case 136: +#line 683 "util/configparser.y" { OUTYY(("P(server_key_cache_size:%s)\n", (yyvsp[(2) - (2)].str))); if(!cfg_parse_memsize((yyvsp[(2) - (2)].str), &cfg_parser->cfg->key_cache_size)) @@ -2379,8 +2399,8 @@ yyreduce: } break; - case 135: -#line 678 "util/configparser.y" + case 137: +#line 691 "util/configparser.y" { OUTYY(("P(server_key_cache_slabs:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0) @@ -2394,8 +2414,8 @@ yyreduce: } break; - case 136: -#line 691 "util/configparser.y" + case 138: +#line 704 "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 && @@ -2415,8 +2435,8 @@ yyreduce: } break; - case 137: -#line 710 "util/configparser.y" + case 139: +#line 723 "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))) @@ -2424,8 +2444,8 @@ yyreduce: } break; - case 138: -#line 717 "util/configparser.y" + case 140: +#line 730 "util/configparser.y" { OUTYY(("P(name:%s)\n", (yyvsp[(2) - (2)].str))); free(cfg_parser->cfg->stubs->name); @@ -2433,8 +2453,8 @@ yyreduce: } break; - case 139: -#line 724 "util/configparser.y" + case 141: +#line 737 "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))) @@ -2442,8 +2462,8 @@ yyreduce: } break; - case 140: -#line 731 "util/configparser.y" + case 142: +#line 744 "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))) @@ -2451,8 +2471,8 @@ yyreduce: } break; - case 141: -#line 738 "util/configparser.y" + case 143: +#line 751 "util/configparser.y" { OUTYY(("P(name:%s)\n", (yyvsp[(2) - (2)].str))); free(cfg_parser->cfg->forwards->name); @@ -2460,8 +2480,8 @@ yyreduce: } break; - case 142: -#line 745 "util/configparser.y" + case 144: +#line 758 "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))) @@ -2469,8 +2489,8 @@ yyreduce: } break; - case 143: -#line 752 "util/configparser.y" + case 145: +#line 765 "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))) @@ -2480,7 +2500,7 @@ yyreduce: /* Line 1267 of yacc.c. */ -#line 2484 "util/configparser.c" +#line 2504 "util/configparser.c" default: break; } YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); @@ -2694,7 +2714,7 @@ yyreturn: } -#line 758 "util/configparser.y" +#line 771 "util/configparser.y" /* parse helper routines could be here */ diff --git a/util/configparser.h b/util/configparser.h index c4a4cb94b..5c06c2c55 100644 --- a/util/configparser.h +++ b/util/configparser.h @@ -112,7 +112,8 @@ VAR_ACCESS_CONTROL = 328, VAR_LOCAL_ZONE = 329, VAR_LOCAL_DATA = 330, - VAR_INTERFACE_AUTOMATIC = 331 + VAR_INTERFACE_AUTOMATIC = 331, + VAR_STATISTICS_INTERVAL = 332 }; #endif /* Tokens. */ @@ -190,6 +191,7 @@ #define VAR_LOCAL_ZONE 329 #define VAR_LOCAL_DATA 330 #define VAR_INTERFACE_AUTOMATIC 331 +#define VAR_STATISTICS_INTERVAL 332 @@ -201,7 +203,7 @@ typedef union YYSTYPE char* str; } /* Line 1489 of yacc.c. */ -#line 205 "util/configparser.h" +#line 207 "util/configparser.h" YYSTYPE; # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 diff --git a/util/configparser.y b/util/configparser.y index fb1dba0c1..ff8776f1b 100644 --- a/util/configparser.y +++ b/util/configparser.y @@ -88,6 +88,7 @@ extern struct config_parser_state* cfg_parser; %token VAR_OUTGOING_INTERFACE VAR_ROOT_HINTS VAR_DO_NOT_QUERY_LOCALHOST %token VAR_CACHE_MAX_TTL VAR_HARDEN_DNNSEC_STRIPPED VAR_ACCESS_CONTROL %token VAR_LOCAL_ZONE VAR_LOCAL_DATA VAR_INTERFACE_AUTOMATIC +%token VAR_STATISTICS_INTERVAL %% toplevelvars: /* empty */ | toplevelvars toplevelvar ; @@ -126,7 +127,8 @@ content_server: server_num_threads | server_verbosity | server_port | server_use_syslog | server_outgoing_interface | server_root_hints | server_do_not_query_localhost | server_cache_max_ttl | server_harden_dnssec_stripped | server_access_control | - server_local_zone | server_local_data | server_interface_automatic + server_local_zone | server_local_data | server_interface_automatic | + server_statistics_interval ; stubstart: VAR_STUB_ZONE { @@ -178,6 +180,17 @@ server_verbosity: VAR_VERBOSITY STRING free($2); } ; +server_statistics_interval: VAR_STATISTICS_INTERVAL STRING + { + OUTYY(("P(server_statistics_interval:%s)\n", $2)); + if(strcmp($2, "") == 0 || strcmp($2, "0") == 0) + cfg_parser->cfg->stat_interval = 0; + else if(atoi($2) == 0) + yyerror("number expected"); + else cfg_parser->cfg->stat_interval = atoi($2); + free($2); + } + ; server_port: VAR_PORT STRING { OUTYY(("P(server_port:%s)\n", $2)); diff --git a/util/fptr_wlist.c b/util/fptr_wlist.c index 84b33f2c1..348dba612 100644 --- a/util/fptr_wlist.c +++ b/util/fptr_wlist.c @@ -85,6 +85,7 @@ fptr_whitelist_comm_timer(void (*fptr)(void*)) { if(fptr == &pending_udp_timer_cb) return 1; else if(fptr == &outnet_tcptimer) return 1; + else if(fptr == &worker_stat_timer_cb) return 1; return 0; } diff --git a/util/netevent.c b/util/netevent.c index 0e60ba266..6e4d8ca1b 100644 --- a/util/netevent.c +++ b/util/netevent.c @@ -129,7 +129,9 @@ comm_base_delete(struct comm_base* b) { if(!b) return; -#if defined(HAVE_EVENT_BASE_FREE) && defined(HAVE_EVENT_BASE_ONCE) +#ifdef USE_MINI_EVENT + event_base_free(b->eb->base); +#elif defined(HAVE_EVENT_BASE_FREE) && defined(HAVE_EVENT_BASE_ONCE) /* only libevent 1.2+ has it, but in 1.2 it is broken - assertion fails on signal handling ev that is not deleted in libevent 1.3c (event_base_once appears) this is fixed. */ @@ -1308,6 +1310,8 @@ comm_timer_set(struct comm_timer* timer, struct timeval* tv) log_assert(tv); if(timer->ev_timer->enabled) comm_timer_disable(timer); + event_set(&timer->ev_timer->ev, -1, EV_PERSIST|EV_TIMEOUT, + comm_timer_callback, timer); if(evtimer_add(&timer->ev_timer->ev, tv) != 0) log_err("comm_timer_set: evtimer_add failed."); timer->ev_timer->enabled = 1; diff --git a/util/timehist.c b/util/timehist.c index cad132a25..d60a6d997 100644 --- a/util/timehist.c +++ b/util/timehist.c @@ -102,6 +102,13 @@ void timehist_delete(struct timehist* hist) free(hist); } +void timehist_clear(struct timehist* hist) +{ + size_t i; + for(i=0; inum; i++) + hist->buckets[i].count = 0; +} + /** histogram compare of time values */ static int timeval_smaller(struct timeval* x, struct timeval* y) diff --git a/util/timehist.h b/util/timehist.h index 0d8dfe592..96e744f4d 100644 --- a/util/timehist.h +++ b/util/timehist.h @@ -76,6 +76,12 @@ struct timehist* timehist_setup(); */ void timehist_delete(struct timehist* hist); +/** + * Clear histogram + * @param hist: to clear all data from + */ +void timehist_clear(struct timehist* hist); + /** * Add time value to histogram. * @param hist: histogram