Commit ce1f5b8d authored by Andreas Gustafsson's avatar Andreas Gustafsson
Browse files

rewrote much of the statistics counter code

parent 90ae9946
......@@ -15,7 +15,7 @@
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
/* $Id: server.h,v 1.46 2000/11/30 19:38:03 gson Exp $ */
/* $Id: server.h,v 1.47 2000/12/01 23:49:52 gson Exp $ */
#ifndef NAMED_SERVER_H
#define NAMED_SERVER_H 1
......@@ -69,9 +69,8 @@ struct ns_server {
isc_boolean_t flushonshutdown;
isc_boolean_t log_queries; /* For BIND 8 compatibility */
char * statsfile;
FILE * statsfp;
isc_uint64_t globalcount[DNS_ZONE_COUNTSIZE];
char * statsfile; /* Statistics file name */
isc_uint64_t * querystats; /* Query statistics counters */
};
#define NS_SERVER_MAGIC 0x53564552 /* SVER */
......@@ -125,11 +124,10 @@ ns_server_togglequerylog(ns_server_t *server);
* Toggle logging of queries, as in BIND 8.
*/
/*
* Dump the current statistics to the statstics file.
*/
isc_result_t
ns_server_dumpstats(ns_server_t *server);
void
ns_server_querycount(dns_zone_t *zone, isc_boolean_t is_zone,
dns_zonecount_t counter);
#endif /* NAMED_SERVER_H */
......@@ -15,7 +15,7 @@
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
/* $Id: query.c,v 1.156 2000/11/30 00:25:09 gson Exp $ */
/* $Id: query.c,v 1.157 2000/12/01 23:49:47 gson Exp $ */
#include <config.h>
......@@ -37,6 +37,7 @@
#include <dns/rdatatype.h>
#include <dns/resolver.h>
#include <dns/result.h>
#include <dns/stats.h>
#include <dns/tkey.h>
#include <dns/view.h>
#include <dns/zone.h>
......@@ -94,6 +95,22 @@ query_adda6rrset(void *arg, dns_name_t *name, dns_rdataset_t *rdataset,
static void
query_find(ns_client_t *client, dns_fetchevent_t *event);
/*
* Increment query statistics counters.
*/
static void
count_query(dns_zone_t *zone, isc_boolean_t is_zone, dns_statscounter_t counter)
{
REQUIRE(counter < dns_stats_ncounters());
ns_g_server->querystats[counter]++;
if (is_zone && zone != NULL) {
isc_uint64_t *zonestats = dns_zone_getstatscounters(zone);
if (zonestats != NULL)
zonestats[counter]++;
}
}
static inline void
query_maybeputqname(ns_client_t *client) {
......@@ -778,8 +795,7 @@ query_simplefind(void *arg, dns_name_t *name, dns_rdatatype_t type,
dns_rdataset_isassociated(sigrdataset))
dns_rdataset_disassociate(sigrdataset);
if (is_zone) {
ns_server_querycount(zone, is_zone,
dns_zonecount_delegate);
count_query(zone, is_zone, dns_statscounter_referral);
if (USECACHE(client)) {
/*
* Either the answer is in the cache, or we
......@@ -848,7 +864,7 @@ query_simplefind(void *arg, dns_name_t *name, dns_rdatatype_t type,
* query counter.
*/
if (result == ISC_R_SUCCESS)
ns_server_querycount(zone, is_zone, dns_zonecount_success);
count_query(zone, is_zone, dns_statscounter_success);
cleanup:
if (dns_rdataset_isassociated(&zrdataset)) {
......@@ -2341,23 +2357,21 @@ query_find(ns_client_t *client, dns_fetchevent_t *event) {
*/
dbuf = query_getnamebuf(client);
if (dbuf == NULL) {
ns_server_querycount(zone, is_zone,
dns_zonecount_failure);
count_query(zone, is_zone, dns_statscounter_failure);
QUERY_ERROR(DNS_R_SERVFAIL);
goto cleanup;
}
fname = query_newname(client, dbuf, &b);
if (fname == NULL) {
ns_server_querycount(zone, is_zone,
dns_zonecount_failure);
count_query(zone, is_zone,
dns_statscounter_failure);
QUERY_ERROR(DNS_R_SERVFAIL);
goto cleanup;
}
tname = dns_fixedname_name(&event->foundname);
result = dns_name_concatenate(tname, NULL, fname, NULL);
if (result != ISC_R_SUCCESS) {
ns_server_querycount(zone, is_zone,
dns_zonecount_failure);
count_query(zone, is_zone, dns_statscounter_failure);
QUERY_ERROR(DNS_R_SERVFAIL);
goto cleanup;
}
......@@ -2380,8 +2394,7 @@ query_find(ns_client_t *client, dns_fetchevent_t *event) {
result = query_getdb(client, client->query.qname, 0, &zone, &db,
&version, &is_zone);
if (result != ISC_R_SUCCESS) {
ns_server_querycount(NULL, ISC_FALSE,
dns_zonecount_failure);
count_query(NULL, ISC_FALSE, dns_statscounter_failure);
if (result == DNS_R_REFUSED)
QUERY_ERROR(DNS_R_REFUSED);
else
......@@ -2423,7 +2436,7 @@ query_find(ns_client_t *client, dns_fetchevent_t *event) {
type = qtype;
else {
CTRACE("find_query: REFUSED: qcount != 1");
ns_server_querycount(zone, is_zone, dns_zonecount_failure);
count_query(zone, is_zone, dns_statscounter_failure);
QUERY_ERROR(DNS_R_REFUSED);
goto cleanup;
}
......@@ -2434,7 +2447,7 @@ query_find(ns_client_t *client, dns_fetchevent_t *event) {
result = query_checktype(qtype);
if (result != ISC_R_SUCCESS) {
CTRACE("find_query: non supported query type");
ns_server_querycount(zone, is_zone, dns_zonecount_failure);
count_query(zone, is_zone, dns_statscounter_failure);
QUERY_ERROR(result);
goto cleanup;
}
......@@ -2452,22 +2465,21 @@ query_find(ns_client_t *client, dns_fetchevent_t *event) {
*/
dbuf = query_getnamebuf(client);
if (dbuf == NULL) {
ns_server_querycount(zone, is_zone, dns_zonecount_failure);
count_query(zone, is_zone, dns_statscounter_failure);
QUERY_ERROR(DNS_R_SERVFAIL);
goto cleanup;
}
fname = query_newname(client, dbuf, &b);
rdataset = query_newrdataset(client);
if (fname == NULL || rdataset == NULL) {
ns_server_querycount(zone, is_zone, dns_zonecount_failure);
count_query(zone, is_zone, dns_statscounter_failure);
QUERY_ERROR(DNS_R_SERVFAIL);
goto cleanup;
}
if (WANTDNSSEC(client)) {
sigrdataset = query_newrdataset(client);
if (sigrdataset == NULL) {
ns_server_querycount(zone, is_zone,
dns_zonecount_failure);
count_query(zone, is_zone, dns_statscounter_failure);
QUERY_ERROR(DNS_R_SERVFAIL);
goto cleanup;
}
......@@ -2524,8 +2536,7 @@ query_find(ns_client_t *client, dns_fetchevent_t *event) {
result = dns_name_concatenate(client->query.qname,
NULL, fname, NULL);
if (result != ISC_R_SUCCESS) {
ns_server_querycount(zone, is_zone,
dns_zonecount_failure);
count_query(zone, is_zone, dns_statscounter_failure);
QUERY_ERROR(DNS_R_SERVFAIL);
goto cleanup;
}
......@@ -2543,8 +2554,7 @@ query_find(ns_client_t *client, dns_fetchevent_t *event) {
CTRACE("query_find: resume");
switch (result) {
case ISC_R_SUCCESS:
ns_server_querycount(zone, is_zone,
dns_zonecount_success);
count_query(zone, is_zone, dns_statscounter_success);
/*
* This case is handled in the main line below.
*/
......@@ -2576,7 +2586,7 @@ query_find(ns_client_t *client, dns_fetchevent_t *event) {
*/
INSIST(!is_zone);
INSIST(client->view->hints != NULL);
ns_server_querycount(zone, is_zone, dns_zonecount_delegate);
count_query(zone, is_zone, dns_statscounter_referral);
if (db != NULL)
dns_db_detach(&db);
dns_db_attach(client->view->hints, &db);
......@@ -2588,8 +2598,7 @@ query_find(ns_client_t *client, dns_fetchevent_t *event) {
* We can't even find the hints for the root
* nameservers!
*/
ns_server_querycount(zone, is_zone,
dns_zonecount_failure);
count_query(zone, is_zone, dns_statscounter_failure);
QUERY_ERROR(DNS_R_SERVFAIL);
goto cleanup;
}
......@@ -2695,8 +2704,8 @@ query_find(ns_client_t *client, dns_fetchevent_t *event) {
/*
* Recurse!
*/
ns_server_querycount(zone, is_zone,
dns_zonecount_recurse);
count_query(zone, is_zone,
dns_statscounter_recursion);
if (type == dns_rdatatype_key)
result = query_recurse(client, qtype,
NULL, NULL);
......@@ -2707,16 +2716,16 @@ query_find(ns_client_t *client, dns_fetchevent_t *event) {
client->query.attributes |=
NS_QUERYATTR_RECURSING;
else {
ns_server_querycount(zone, is_zone,
dns_zonecount_failure);
count_query(zone, is_zone,
dns_statscounter_failure);
QUERY_ERROR(DNS_R_SERVFAIL);
}
} else {
/*
* This is the best answer.
*/
ns_server_querycount(zone, is_zone,
dns_zonecount_delegate);
count_query(zone, is_zone,
dns_statscounter_referral);
client->query.gluedb = zdb;
client->query.attributes |=
NS_QUERYATTR_CACHEGLUEOK;
......@@ -2735,7 +2744,7 @@ query_find(ns_client_t *client, dns_fetchevent_t *event) {
goto cleanup;
case DNS_R_NXRRSET:
INSIST(is_zone);
ns_server_querycount(zone, is_zone, dns_zonecount_nxrrset);
count_query(zone, is_zone, dns_statscounter_nxrrset);
if (dns_rdataset_isassociated(rdataset)) {
/*
* If we've got a NXT record, we need to save the
......@@ -2762,8 +2771,8 @@ query_find(ns_client_t *client, dns_fetchevent_t *event) {
*/
result = query_addsoa(client, db, ISC_FALSE);
if (result != ISC_R_SUCCESS) {
ns_server_querycount(zone, is_zone,
dns_zonecount_failure);
count_query(zone, is_zone,
dns_statscounter_failure);
QUERY_ERROR(result);
goto cleanup;
}
......@@ -2782,7 +2791,7 @@ query_find(ns_client_t *client, dns_fetchevent_t *event) {
goto cleanup;
case DNS_R_NXDOMAIN:
INSIST(is_zone);
ns_server_querycount(zone, is_zone, dns_zonecount_nxdomain);
count_query(zone, is_zone, dns_statscounter_nxdomain);
if (client->query.restarts > 0) {
/*
* We hit a dead end following a CNAME or DNAME.
......@@ -2821,8 +2830,8 @@ query_find(ns_client_t *client, dns_fetchevent_t *event) {
else
result = query_addsoa(client, db, ISC_FALSE);
if (result != ISC_R_SUCCESS) {
ns_server_querycount(zone, is_zone,
dns_zonecount_failure);
count_query(zone, is_zone,
dns_statscounter_failure);
QUERY_ERROR(result);
goto cleanup;
}
......@@ -2845,11 +2854,11 @@ query_find(ns_client_t *client, dns_fetchevent_t *event) {
goto cleanup;
case DNS_R_NCACHENXDOMAIN:
INSIST(!is_zone);
ns_server_querycount(NULL, is_zone, dns_zonecount_nxdomain);
count_query(NULL, is_zone, dns_statscounter_nxdomain);
goto ncachenxrrset;
case DNS_R_NCACHENXRRSET:
INSIST(!is_zone);
ns_server_querycount(NULL, is_zone, dns_zonecount_nxrrset);
count_query(NULL, is_zone, dns_statscounter_nxrrset);
ncachenxrrset:
authoritative = ISC_FALSE;
/*
......@@ -3019,7 +3028,7 @@ query_find(ns_client_t *client, dns_fetchevent_t *event) {
/*
* Something has gone wrong.
*/
ns_server_querycount(zone, is_zone, dns_zonecount_failure);
count_query(zone, is_zone, dns_statscounter_failure);
QUERY_ERROR(DNS_R_SERVFAIL);
goto cleanup;
}
......@@ -3033,8 +3042,8 @@ query_find(ns_client_t *client, dns_fetchevent_t *event) {
rdsiter = NULL;
result = dns_db_allrdatasets(db, node, version, 0, &rdsiter);
if (result != ISC_R_SUCCESS) {
ns_server_querycount(zone, is_zone,
dns_zonecount_failure);
count_query(zone, is_zone,
dns_statscounter_failure);
QUERY_ERROR(DNS_R_SERVFAIL);
goto cleanup;
}
......@@ -3108,15 +3117,14 @@ query_find(ns_client_t *client, dns_fetchevent_t *event) {
/*
* Something went wrong.
*/
ns_server_querycount(zone, is_zone,
dns_zonecount_failure);
count_query(zone, is_zone,
dns_statscounter_failure);
result = DNS_R_SERVFAIL;
}
}
dns_rdatasetiter_destroy(&rdsiter);
if (result != ISC_R_NOMORE) {
ns_server_querycount(zone, is_zone,
dns_zonecount_failure);
count_query(zone, is_zone, dns_statscounter_failure);
QUERY_ERROR(DNS_R_SERVFAIL);
goto cleanup;
}
......@@ -3403,3 +3411,4 @@ ns_query_start(ns_client_t *client) {
ns_client_attach(client, &qclient);
query_find(qclient, NULL);
}
......@@ -15,7 +15,7 @@
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
/* $Id: server.c,v 1.266 2000/12/01 08:58:10 marka Exp $ */
/* $Id: server.c,v 1.267 2000/12/01 23:49:49 gson Exp $ */
#include <config.h>
......@@ -48,6 +48,7 @@
#include <dns/rdatastruct.h>
#include <dns/resolver.h>
#include <dns/rootns.h>
#include <dns/stats.h>
#include <dns/tkey.h>
#include <dns/view.h>
#include <dns/zone.h>
......@@ -1310,57 +1311,19 @@ heartbeat_timer_tick(isc_task_t *task, isc_event_t *event) {
RWUNLOCK(&server->conflock, isc_rwlocktype_read);
}
static void
ns_server_freestatsfile(ns_server_t *serv) {
if (serv->statsfile != NULL)
isc_mem_free(serv->mctx, serv->statsfile);
serv->statsfile = NULL;
}
static void
ns_server_setstatsfile(const char *name, ns_server_t *serv) {
int len;
ns_server_freestatsfile(serv);
len = strlen(name);
serv->statsfile = isc_mem_allocate(serv->mctx, len + 1);
if (serv->statsfile == NULL)
fatal("allocate memory for server stats", ISC_R_NOMEMORY);
strcpy(serv->statsfile, name);
}
static isc_result_t
ns_server_openstatsfile(ns_server_t *serv) {
isc_result_t result;
const char *defname = "named.stats";
union { char *nc;
const char *cc; } deconst;
if (serv->statsfile == NULL)
deconst.cc = defname;
else
deconst.nc = serv->statsfile;
result = isc_stdio_open(deconst.nc, "a", &serv->statsfp);
return (result);
}
static isc_result_t
ns_server_closestatsfile(ns_server_t *serv) {
isc_result_t result = ISC_R_SUCCESS;
if (serv->statsfp != NULL)
result = isc_stdio_close(serv->statsfp);
serv->statsfp = NULL;
return (result);
}
setstatsfile(ns_server_t *server, const char *name) {
char *p;
static void
ns_server_zeroglobal(ns_server_t *serv) {
int i;
REQUIRE(name != NULL);
for (i = 0; i < DNS_ZONE_COUNTSIZE; i++)
serv->globalcount[i] = 0;
p = isc_mem_strdup(server->mctx, name);
if (p == NULL)
return (ISC_R_NOMEMORY);
if (server->statsfile != NULL)
isc_mem_free(server->mctx, server->statsfile);
server->statsfile = p;
return (ISC_R_SUCCESS);
}
#define SETLIMIT(cfgvar, resource, description) \
......@@ -1377,7 +1340,7 @@ ns_server_zeroglobal(ns_server_t *serv) {
NS_LOGMODULE_SERVER, \
result == ISC_R_SUCCESS ? \
ISC_LOG_DEBUG(1) : ISC_LOG_WARNING, \
"set maximum " description " to %" \
"set maximum " description " to %" \
ISC_PRINT_QUADFORMAT "d: %s", value, \
isc_result_totext(result)); \
}
......@@ -1778,8 +1741,12 @@ load_configuration(const char *filename, ns_server_t *server,
else
ns_os_writepidfile(ns_g_defaultpidfile);
if (dns_c_ctx_getstatsfilename(cctx, &statsfilename) != ISC_R_NOTFOUND)
ns_server_setstatsfile(statsfilename, server);
result = dns_c_ctx_getstatsfilename(cctx, &statsfilename);
if (result == ISC_R_NOTFOUND) {
CHECKM(setstatsfile(server, "named.stats"), "strdup");
} else {
CHECKM(setstatsfile(server, statsfilename), "strdup");
}
cleanup:
ns_aclconfctx_destroy(&aclconfctx);
......@@ -2024,9 +1991,12 @@ ns_server_create(isc_mem_t *mctx, ns_server_t **serverp) {
CHECKFATAL(dns_loadmgr_create(ns_g_mctx, &server->loadmgr),
"dns_loadmgr_create");
server->statsfile = NULL;
server->statsfp = NULL;
ns_server_zeroglobal(server);
server->statsfile = isc_mem_strdup(server->mctx, "named.stats");
CHECKFATAL(server->statsfile == NULL ? ISC_R_NOMEMORY : ISC_R_SUCCESS,
"isc_mem_strdup");
server->querystats = NULL;
CHECKFATAL(dns_stats_alloccounters(ns_g_mctx, &server->querystats),
"dns_stats_alloccounters");
server->flushonshutdown = ISC_FALSE;
server->log_queries = ISC_FALSE;
......@@ -2040,7 +2010,8 @@ ns_server_destroy(ns_server_t **serverp) {
ns_server_t *server = *serverp;
REQUIRE(NS_SERVER_VALID(server));
ns_server_freestatsfile(server);
dns_stats_freecounters(server->mctx, &server->querystats);
isc_mem_free(server->mctx, server->statsfile);
dns_loadmgr_detach(&server->loadmgr);
dns_zonemgr_detach(&server->zonemgr);
......@@ -2313,70 +2284,64 @@ ns_listenelt_fromconfig(dns_c_lstnon_t *celt, dns_c_ctx_t *cctx,
return (ISC_R_SUCCESS);
}
void
ns_server_querycount(dns_zone_t *zone, isc_boolean_t is_zone,
dns_zonecount_t counter)
{
REQUIRE(counter < DNS_ZONE_COUNTSIZE);
ns_g_server->globalcount[counter]++;
if (is_zone && zone != NULL && !dns_zone_hascounts(zone))
dns_zone_count(zone, counter);
}
/*
* Dump the current statistics to a file
*
* XXXMWS this should really be done asynchronously
*/
isc_result_t
ns_server_dumpstats(ns_server_t *server) {
isc_result_t result;
dns_zone_t *zone = NULL, *next = NULL;
char zonestore[DNS_NAME_FORMATSIZE];
dns_view_t *zoneview = NULL;
char *viewname;
dns_zone_t *zone;
isc_stdtime_t now;
FILE *fp;
FILE *fp = NULL;
int i;
int numbercounters;
int ncounters;
isc_stdtime_get(&now);
result = ns_server_openstatsfile(server);
if (result != ISC_R_SUCCESS) {
isc_log_write(ns_g_lctx, NS_LOGCATEGORY_GENERAL,
NS_LOGMODULE_SERVER, ISC_LOG_WARNING,
"could not open statistics dump file: %s",
isc_result_totext(result));
return (result);
}
numbercounters = dns_zone_numbercounters();
fp = server->statsfp;
fprintf(fp, "+++ Statistics Dump +++ (%ld)\n",
(long)now);
for (i = 0; i < numbercounters; i++)
fprintf(fp, "%s %ld\n", dns_zonecount_names[i],
(long)server->globalcount[i]);
CHECKM(isc_stdio_open(server->statsfile, "a", &fp),
"could not open statistics dump file");
ncounters = dns_stats_ncounters();
fprintf(fp, "+++ Statistics Dump +++ (%lu)\n", (unsigned long)now);
for (i = 0; i < ncounters; i++)
fprintf(fp, "%s %" ISC_PRINT_QUADFORMAT "d\n",
dns_statscounter_names[i],
server->querystats[i]);
dns_zonemgr_lockconf(server->zonemgr, isc_rwlocktype_read);
dns_zone_first(server->zonemgr, &zone);
while (zone != NULL) {
dns_name_format(dns_zone_getorigin(zone),
zonestore, sizeof(zonestore));
zoneview = dns_zone_getview(zone);
viewname = zoneview->name;
if (dns_zone_hascounts(zone)) {
for (i = 0; i < numbercounters; i++)
fprintf(fp, "%s %ld %s:%s\n",
dns_zonecount_names[i],
(long)dns_zone_getcounts(zone, i),
viewname, zonestore);
for (result = dns_zone_first(server->zonemgr, &zone);
result == ISC_R_SUCCESS;
result = dns_zone_next(zone, &zone))
{
isc_uint64_t *zonestats = dns_zone_getstatscounters(zone);
if (zonestats != NULL) {
char zonename[DNS_NAME_FORMATSIZE];
dns_view_t *view;
char *viewname;
dns_name_format(dns_zone_getorigin(zone),
zonename, sizeof(zonename));
view = dns_zone_getview(zone);
viewname = view->name;
for (i = 0; i < ncounters; i++) {
fprintf(fp, "%s %" ISC_PRINT_QUADFORMAT
"d %s",
dns_statscounter_names[i],
zonestats[i],
zonename);
if (strcmp(viewname, "_default") != 0)
fprintf(fp, " %s", viewname);
fprintf(fp, "\n");
}
}
dns_zone_next(zone, &next);
zone = next;
next = NULL;
}
fprintf(fp, "--- Statistics Dump --- (%ld)\n", (long)now);
if (result == ISC_R_NOMORE)
result = ISC_R_SUCCESS;
CHECK(result);
fprintf(fp, "--- Statistics Dump --- (%lu)\n", (unsigned long)now);
dns_zonemgr_unlockconf(server->zonemgr, isc_rwlocktype_read);
ns_server_closestatsfile(server);
return (ISC_R_SUCCESS);
cleanup:
if (fp != NULL)
(void)isc_stdio_close(fp);
return (result);
}
......@@ -15,7 +15,7 @@
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
/* $Id: zoneconf.c,v 1.75 2000/12/01 18:22:14 gson Exp $ */
/* $Id: zoneconf.c,v 1.76 2000/12/01 23:49:50 gson Exp $ */
#include <config.h>
......@@ -258,10 +258,7 @@ ns_zone_configure(dns_c_ctx_t *cctx, dns_c_view_t *cview,
result = dns_c_ctx_getstatistics(cctx, &statistics);
if (result != ISC_R_SUCCESS)
statistics = ISC_FALSE;
if (statistics)
dns_zone_startcounting(zone);
else
dns_zone_stopcounting(zone);
dns_zone_setstatistics(zone, statistics);
#ifndef NOMINUM_PUBLIC
if (czone->ztype != dns_c_zone_stub) {
......
......@@ -13,7 +13,7 @@
# NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
# WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
# $Id: Makefile.in,v 1.113 2000/11/17 19:04:45 gson Exp $
# $Id: Makefile.in,v 1.114 2000/12/01 23:49:53 gson Exp $
srcdir = @srcdir@
VPATH = @srcdir@
......@@ -97,7 +97,7 @@ OBJS = a6.@O@ acl.@O@ adb.@O@ byaddr.@O@ \
rbt.@O@ rbtdb.@O@ rbtdb64.@O@ rdata.@O@ rdatalist.@O@ \
rdataset.@O@ rdatasetiter.@O@ rdataslab.@O@ request.@O@ \
resolver.@O@ result.@O@ rootns.@O@ sdb.@O@ ssu.@O@ \
tcpmsg.@O@ time.@O@ timer.@O@ tkey.@O@ \
stats.@O@ tcpmsg.@O@ time.@O@ timer.@O@ tkey.@O@ \
tsig.@O@ ttl.@O@ validator.@O@ \
version.@O@ view.@O@ xfrin.@O@ zone.@O@ zt.@O@ \
${DSTOBJS} @DST_OPENSSL_OBJS@ ${CONFOBJS}
......@@ -112,7 +112,7 @@ SRCS = a6.c acl.c adb.c byaddr.c \
rbt.c rbtdb.c rbtdb64.c rdata.c rdatalist.c \
rdataset.c rdatasetiter.c rdataslab.c request.c \
resolver.c result.c rootns.c sdb.c ssu.c \