byname_test.c revision 5bd937c666375d03ee6a366a13d0bdb31aa3f07f
66bd3b3c6b171271c705b897823dcdcf29464698Michael Graff/*
66bd3b3c6b171271c705b897823dcdcf29464698Michael Graff * Copyright (C) 1999 Internet Software Consortium.
66bd3b3c6b171271c705b897823dcdcf29464698Michael Graff *
66bd3b3c6b171271c705b897823dcdcf29464698Michael Graff * Permission to use, copy, modify, and distribute this software for any
66bd3b3c6b171271c705b897823dcdcf29464698Michael Graff * purpose with or without fee is hereby granted, provided that the above
66bd3b3c6b171271c705b897823dcdcf29464698Michael Graff * copyright notice and this permission notice appear in all copies.
66bd3b3c6b171271c705b897823dcdcf29464698Michael Graff *
66bd3b3c6b171271c705b897823dcdcf29464698Michael Graff * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS
66bd3b3c6b171271c705b897823dcdcf29464698Michael Graff * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
66bd3b3c6b171271c705b897823dcdcf29464698Michael Graff * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE
66bd3b3c6b171271c705b897823dcdcf29464698Michael Graff * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
66bd3b3c6b171271c705b897823dcdcf29464698Michael Graff * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
66bd3b3c6b171271c705b897823dcdcf29464698Michael Graff * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
66bd3b3c6b171271c705b897823dcdcf29464698Michael Graff * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
66bd3b3c6b171271c705b897823dcdcf29464698Michael Graff * SOFTWARE.
66bd3b3c6b171271c705b897823dcdcf29464698Michael Graff */
66bd3b3c6b171271c705b897823dcdcf29464698Michael Graff
ad3a5c4b7e21af04d1b872f933c2e19e5c0a135bMichael Graff/*
ad3a5c4b7e21af04d1b872f933c2e19e5c0a135bMichael Graff * Principal Author: Bob Halley
ad3a5c4b7e21af04d1b872f933c2e19e5c0a135bMichael Graff */
ad3a5c4b7e21af04d1b872f933c2e19e5c0a135bMichael Graff
c803787146cadcb2d7e10cbf4491f3be513dfa1aMichael Graff/* XXXRTH */
ad3a5c4b7e21af04d1b872f933c2e19e5c0a135bMichael Graff#define ISC_MEM_DEBUG 1
ad3a5c4b7e21af04d1b872f933c2e19e5c0a135bMichael Graff
ad3a5c4b7e21af04d1b872f933c2e19e5c0a135bMichael Graff#include <config.h>
ad3a5c4b7e21af04d1b872f933c2e19e5c0a135bMichael Graff
ad3a5c4b7e21af04d1b872f933c2e19e5c0a135bMichael Graff#include <stddef.h>
294802790e8030f1c19b6c2c5d5204b6f464c729Michael Graff#include <stdlib.h>
294802790e8030f1c19b6c2c5d5204b6f464c729Michael Graff#include <string.h>
294802790e8030f1c19b6c2c5d5204b6f464c729Michael Graff
294802790e8030f1c19b6c2c5d5204b6f464c729Michael Graff#include <isc/assertions.h>
294802790e8030f1c19b6c2c5d5204b6f464c729Michael Graff#include <isc/buffer.h>
66bd3b3c6b171271c705b897823dcdcf29464698Michael Graff#include <isc/commandline.h>
66bd3b3c6b171271c705b897823dcdcf29464698Michael Graff#include <isc/error.h>
64828244e04e86dfa40f0a4f0c05f27923da499dMichael Graff#include <isc/task.h>
64828244e04e86dfa40f0a4f0c05f27923da499dMichael Graff#include <isc/timer.h>
64828244e04e86dfa40f0a4f0c05f27923da499dMichael Graff#include <isc/app.h>
11fcc67616fac1bc6a28b3d4fed24641137888e7Michael Graff#include <isc/mutex.h>
e51511aa3281f8dc384eb1283115c7f8d5c402aeMichael Graff#include <isc/boolean.h>
f181f94ec8da8b1dbcc6353e8be965ea4a5ea282Michael Graff#include <isc/net.h>
21e7034ec046105c00a0dab86c83732e2e77ad99Michael Graff#include <isc/region.h>
31fab17bcdbe302592a6c0dc5374ef56333ee879Michael Graff#include <isc/sockaddr.h>
213973a334f92d4aef4ef62b4538fc2e4d0e8082Michael Graff#include <isc/socket.h>
3024dbecbac365171bc6de0f3fa04951d6558be3Michael Graff#include <isc/util.h>
f181f94ec8da8b1dbcc6353e8be965ea4a5ea282Michael Graff#include <isc/netaddr.h>
3ac63b472022ff92691d1fe69ac715a729671965Michael Graff#include <isc/log.h>
11fcc67616fac1bc6a28b3d4fed24641137888e7Michael Graff
fe14eafefa91fada7cea0a55b09196c01477406cBob Halley#include <dns/types.h>
e45d323a2a0f4ca08d4b139546e60a5fa7bd3f0cMichael Graff#include <dns/result.h>
29f28fe573d4b3b318b3b026d567c1eb86738015Michael Graff#include <dns/adb.h>
86944a4c8002e80ae9b6eb5a5e29b797879be45fMichael Graff#include <dns/cache.h>
11efdeb076d65fa9f0c5fc067dc040e7c99dfba6Michael Graff#include <dns/name.h>
21e7034ec046105c00a0dab86c83732e2e77ad99Michael Graff#include <dns/fixedname.h>
ad3a5c4b7e21af04d1b872f933c2e19e5c0a135bMichael Graff#include <dns/resolver.h>
e51511aa3281f8dc384eb1283115c7f8d5c402aeMichael Graff#include <dns/events.h>
e51511aa3281f8dc384eb1283115c7f8d5c402aeMichael Graff#include <dns/dispatch.h>
11efdeb076d65fa9f0c5fc067dc040e7c99dfba6Michael Graff#include <dns/byaddr.h>
11efdeb076d65fa9f0c5fc067dc040e7c99dfba6Michael Graff#include <dns/view.h>
439c0011e642fb1d26011116144af698125262dbMichael Graff#include <dns/log.h>
ad3a5c4b7e21af04d1b872f933c2e19e5c0a135bMichael Graff
ad3a5c4b7e21af04d1b872f933c2e19e5c0a135bMichael Graffstatic isc_mem_t *mctx = NULL;
66bd3b3c6b171271c705b897823dcdcf29464698Michael Graffstatic dns_view_t *view = NULL;
31fab17bcdbe302592a6c0dc5374ef56333ee879Michael Graffstatic dns_adbfind_t *find = NULL;
31fab17bcdbe302592a6c0dc5374ef56333ee879Michael Graffstatic isc_task_t *task = NULL;
31fab17bcdbe302592a6c0dc5374ef56333ee879Michael Graffstatic dns_fixedname_t name;
31fab17bcdbe302592a6c0dc5374ef56333ee879Michael Graffstatic dns_fixedname_t target;
31fab17bcdbe302592a6c0dc5374ef56333ee879Michael Graffstatic isc_log_t *lctx;
31fab17bcdbe302592a6c0dc5374ef56333ee879Michael Graffstatic unsigned int level = 0;
31fab17bcdbe302592a6c0dc5374ef56333ee879Michael Graff
31fab17bcdbe302592a6c0dc5374ef56333ee879Michael Graffstatic void adb_callback(isc_task_t *task, isc_event_t *event);
31fab17bcdbe302592a6c0dc5374ef56333ee879Michael Graff
31fab17bcdbe302592a6c0dc5374ef56333ee879Michael Graffstatic void
ff9bb3fc5453bbf310b67c560fbf04a5c0fb60daMichael Grafflog_init(void) {
bb143613cf26e0f27dfd9caf1a7336065d064b26Michael Graff isc_logdestination_t destination;
fe14eafefa91fada7cea0a55b09196c01477406cBob Halley unsigned int flags;
fe14eafefa91fada7cea0a55b09196c01477406cBob Halley
11fcc67616fac1bc6a28b3d4fed24641137888e7Michael Graff /*
ad3a5c4b7e21af04d1b872f933c2e19e5c0a135bMichael Graff * Setup a logging context.
6dde125c2f47617ceef1518cf9e5588e8f366b71Michael Graff */
ad3a5c4b7e21af04d1b872f933c2e19e5c0a135bMichael Graff RUNTIME_CHECK(isc_log_create(mctx, &lctx) == ISC_R_SUCCESS);
6dde125c2f47617ceef1518cf9e5588e8f366b71Michael Graff RUNTIME_CHECK(dns_log_init(lctx) == ISC_R_SUCCESS);
ad3a5c4b7e21af04d1b872f933c2e19e5c0a135bMichael Graff
84c46a7acb961cac19c0d857bfdd00f3383a9bc6Michael Graff /*
6dde125c2f47617ceef1518cf9e5588e8f366b71Michael Graff * Create and install the default channel.
3ac63b472022ff92691d1fe69ac715a729671965Michael Graff */
ad3a5c4b7e21af04d1b872f933c2e19e5c0a135bMichael Graff destination.file.stream = stderr;
ad3a5c4b7e21af04d1b872f933c2e19e5c0a135bMichael Graff destination.file.name = NULL;
213973a334f92d4aef4ef62b4538fc2e4d0e8082Michael Graff destination.file.versions = ISC_LOG_ROLLNEVER;
64828244e04e86dfa40f0a4f0c05f27923da499dMichael Graff destination.file.maximum_size = 0;
64828244e04e86dfa40f0a4f0c05f27923da499dMichael Graff flags = ISC_LOG_PRINTTIME;
213973a334f92d4aef4ef62b4538fc2e4d0e8082Michael Graff RUNTIME_CHECK(isc_log_createchannel(lctx, "_default",
11fcc67616fac1bc6a28b3d4fed24641137888e7Michael Graff ISC_LOG_TOFILEDESC,
ff9bb3fc5453bbf310b67c560fbf04a5c0fb60daMichael Graff ISC_LOG_DYNAMIC,
11fcc67616fac1bc6a28b3d4fed24641137888e7Michael Graff &destination, flags) ==
ad3a5c4b7e21af04d1b872f933c2e19e5c0a135bMichael Graff ISC_R_SUCCESS);
bb143613cf26e0f27dfd9caf1a7336065d064b26Michael Graff RUNTIME_CHECK(isc_log_usechannel(lctx, "_default", NULL, NULL) ==
fe14eafefa91fada7cea0a55b09196c01477406cBob Halley ISC_R_SUCCESS);
66bd3b3c6b171271c705b897823dcdcf29464698Michael Graff isc_log_setdebuglevel(lctx, level);
66bd3b3c6b171271c705b897823dcdcf29464698Michael Graff}
11fcc67616fac1bc6a28b3d4fed24641137888e7Michael Graff
11fcc67616fac1bc6a28b3d4fed24641137888e7Michael Graffstatic void
11fcc67616fac1bc6a28b3d4fed24641137888e7Michael Graffprint_addresses(dns_adbfind_t *find) {
11fcc67616fac1bc6a28b3d4fed24641137888e7Michael Graff dns_adbaddrinfo_t *address;
439c0011e642fb1d26011116144af698125262dbMichael Graff isc_result_t result;
11efdeb076d65fa9f0c5fc067dc040e7c99dfba6Michael Graff isc_buffer_t b;
3ac63b472022ff92691d1fe69ac715a729671965Michael Graff isc_region_t r;
11efdeb076d65fa9f0c5fc067dc040e7c99dfba6Michael Graff char text[1024];
3ac63b472022ff92691d1fe69ac715a729671965Michael Graff
84c46a7acb961cac19c0d857bfdd00f3383a9bc6Michael Graff isc_buffer_init(&b, text, sizeof text, ISC_BUFFERTYPE_TEXT);
3ac63b472022ff92691d1fe69ac715a729671965Michael Graff
84c46a7acb961cac19c0d857bfdd00f3383a9bc6Michael Graff for (address = ISC_LIST_HEAD(find->list);
84c46a7acb961cac19c0d857bfdd00f3383a9bc6Michael Graff address != NULL;
11fcc67616fac1bc6a28b3d4fed24641137888e7Michael Graff address = ISC_LIST_NEXT(address, publink)) {
30251e07d1705d1a85b0e1d5a969496e1aed612eMichael Graff isc_buffer_clear(&b);
30251e07d1705d1a85b0e1d5a969496e1aed612eMichael Graff result = isc_sockaddr_totext(address->sockaddr, &b);
e51511aa3281f8dc384eb1283115c7f8d5c402aeMichael Graff if (result == ISC_R_SUCCESS) {
ad3a5c4b7e21af04d1b872f933c2e19e5c0a135bMichael Graff isc_buffer_used(&b, &r);
11fcc67616fac1bc6a28b3d4fed24641137888e7Michael Graff printf("%.*s\n", (int)r.length, r.base);
11fcc67616fac1bc6a28b3d4fed24641137888e7Michael Graff } else
11fcc67616fac1bc6a28b3d4fed24641137888e7Michael Graff printf("isc_sockaddr_totext() failed: %s\n",
11fcc67616fac1bc6a28b3d4fed24641137888e7Michael Graff isc_result_totext(result));
2992344aacdb08e4af936c176d49ef789f5673ddMichael Graff }
11fcc67616fac1bc6a28b3d4fed24641137888e7Michael Graff}
bb143613cf26e0f27dfd9caf1a7336065d064b26Michael Graff
fe14eafefa91fada7cea0a55b09196c01477406cBob Halleystatic void
11fcc67616fac1bc6a28b3d4fed24641137888e7Michael Graffprint_name(dns_name_t *name) {
f181f94ec8da8b1dbcc6353e8be965ea4a5ea282Michael Graff isc_result_t result;
f181f94ec8da8b1dbcc6353e8be965ea4a5ea282Michael Graff isc_buffer_t b;
213973a334f92d4aef4ef62b4538fc2e4d0e8082Michael Graff isc_region_t r;
213973a334f92d4aef4ef62b4538fc2e4d0e8082Michael Graff char text[1024];
213973a334f92d4aef4ef62b4538fc2e4d0e8082Michael Graff
6dde125c2f47617ceef1518cf9e5588e8f366b71Michael Graff isc_buffer_init(&b, text, sizeof text, ISC_BUFFERTYPE_TEXT);
6dde125c2f47617ceef1518cf9e5588e8f366b71Michael Graff
6dde125c2f47617ceef1518cf9e5588e8f366b71Michael Graff result = dns_name_totext(name, ISC_FALSE, &b);
6dde125c2f47617ceef1518cf9e5588e8f366b71Michael Graff if (result == ISC_R_SUCCESS) {
213973a334f92d4aef4ef62b4538fc2e4d0e8082Michael Graff isc_buffer_used(&b, &r);
213973a334f92d4aef4ef62b4538fc2e4d0e8082Michael Graff printf("%.*s\n", (int)r.length, r.base);
213973a334f92d4aef4ef62b4538fc2e4d0e8082Michael Graff } else
213973a334f92d4aef4ef62b4538fc2e4d0e8082Michael Graff printf("dns_name_totext() failed: %s\n",
6dde125c2f47617ceef1518cf9e5588e8f366b71Michael Graff isc_result_totext(result));
6dde125c2f47617ceef1518cf9e5588e8f366b71Michael Graff}
59c049874bbef182857c57bd9cca292898921c69Bob Halley
59c049874bbef182857c57bd9cca292898921c69Bob Halleystatic void
59c049874bbef182857c57bd9cca292898921c69Bob Halleydo_find(isc_boolean_t want_event) {
59c049874bbef182857c57bd9cca292898921c69Bob Halley isc_result_t result;
59c049874bbef182857c57bd9cca292898921c69Bob Halley isc_boolean_t done = ISC_FALSE;
66bd3b3c6b171271c705b897823dcdcf29464698Michael Graff unsigned int options;
66bd3b3c6b171271c705b897823dcdcf29464698Michael Graff
11fcc67616fac1bc6a28b3d4fed24641137888e7Michael Graff options = DNS_ADBFIND_INET | DNS_ADBFIND_INET6;
11fcc67616fac1bc6a28b3d4fed24641137888e7Michael Graff if (want_event)
ad3a5c4b7e21af04d1b872f933c2e19e5c0a135bMichael Graff options |= DNS_ADBFIND_WANTEVENT | DNS_ADBFIND_EMPTYEVENT;
1c3bc66ada38236cc81c41b7174a9f0a872c9ab6Michael Graff dns_fixedname_init(&target);
1f90c108282533a23b8362c34bcde4267c1eb4b1Michael Graff result = dns_adb_createfind(view->adb, task, adb_callback, NULL,
4281fe4a80af7402613f0d5c3eeff8829a4ede1fMichael Graff dns_fixedname_name(&name),
ebdd11e84734e28ddd64562e82a7c646a58a04f4Michael Graff dns_rootname, options, 0,
ff9bb3fc5453bbf310b67c560fbf04a5c0fb60daMichael Graff dns_fixedname_name(&target),
ff9bb3fc5453bbf310b67c560fbf04a5c0fb60daMichael Graff &find);
fe14eafefa91fada7cea0a55b09196c01477406cBob Halley if (result == ISC_R_SUCCESS) {
ff9bb3fc5453bbf310b67c560fbf04a5c0fb60daMichael Graff if (!ISC_LIST_EMPTY(find->list)) {
ff9bb3fc5453bbf310b67c560fbf04a5c0fb60daMichael Graff /*
59e22acc4f79ff481f7bfa46ef0558957ae53cfcMichael Graff * We have at least some of the addresses for the
59e22acc4f79ff481f7bfa46ef0558957ae53cfcMichael Graff * name.
fe14eafefa91fada7cea0a55b09196c01477406cBob Halley */
28ab8277a068f273f0a805a83b4811446cb78a5bBob Halley INSIST((find->options & DNS_ADBFIND_WANTEVENT) == 0);
d43c2cc7bc4022701f141e299ea8f3fb1d0640c2Michael Graff print_addresses(find);
11fcc67616fac1bc6a28b3d4fed24641137888e7Michael Graff done = ISC_TRUE;
11fcc67616fac1bc6a28b3d4fed24641137888e7Michael Graff } else {
bb143613cf26e0f27dfd9caf1a7336065d064b26Michael Graff /*
bb143613cf26e0f27dfd9caf1a7336065d064b26Michael Graff * We don't know any of the addresses for this
bb143613cf26e0f27dfd9caf1a7336065d064b26Michael Graff * name.
bb143613cf26e0f27dfd9caf1a7336065d064b26Michael Graff */
bb143613cf26e0f27dfd9caf1a7336065d064b26Michael Graff if ((find->options & DNS_ADBFIND_WANTEVENT) == 0) {
bb143613cf26e0f27dfd9caf1a7336065d064b26Michael Graff /*
bb143613cf26e0f27dfd9caf1a7336065d064b26Michael Graff * And ADB isn't going to send us any events
bb143613cf26e0f27dfd9caf1a7336065d064b26Michael Graff * either. This query loses.
fe14eafefa91fada7cea0a55b09196c01477406cBob Halley */
fe14eafefa91fada7cea0a55b09196c01477406cBob Halley done = ISC_TRUE;
14b98cb34eda66c87ce41a207704a2c232280eafMichael Graff }
fe14eafefa91fada7cea0a55b09196c01477406cBob Halley /*
fe14eafefa91fada7cea0a55b09196c01477406cBob Halley * If the DNS_ADBFIND_WANTEVENT flag was set, we'll
fe14eafefa91fada7cea0a55b09196c01477406cBob Halley * get an event when something happens.
fe14eafefa91fada7cea0a55b09196c01477406cBob Halley */
fe14eafefa91fada7cea0a55b09196c01477406cBob Halley }
fe14eafefa91fada7cea0a55b09196c01477406cBob Halley } else if (result == DNS_R_ALIAS) {
fe14eafefa91fada7cea0a55b09196c01477406cBob Halley print_name(dns_fixedname_name(&target));
fe14eafefa91fada7cea0a55b09196c01477406cBob Halley done = ISC_TRUE;
11fcc67616fac1bc6a28b3d4fed24641137888e7Michael Graff } else {
11fcc67616fac1bc6a28b3d4fed24641137888e7Michael Graff printf("dns_adb_createfind() returned %s\n",
11fcc67616fac1bc6a28b3d4fed24641137888e7Michael Graff isc_result_totext(result));
11fcc67616fac1bc6a28b3d4fed24641137888e7Michael Graff done = ISC_TRUE;
11fcc67616fac1bc6a28b3d4fed24641137888e7Michael Graff }
11fcc67616fac1bc6a28b3d4fed24641137888e7Michael Graff
11fcc67616fac1bc6a28b3d4fed24641137888e7Michael Graff if (done) {
11fcc67616fac1bc6a28b3d4fed24641137888e7Michael Graff if (find != NULL)
11fcc67616fac1bc6a28b3d4fed24641137888e7Michael Graff dns_adb_destroyfind(&find);
ad3a5c4b7e21af04d1b872f933c2e19e5c0a135bMichael Graff isc_app_shutdown();
d43c2cc7bc4022701f141e299ea8f3fb1d0640c2Michael Graff }
66bd3b3c6b171271c705b897823dcdcf29464698Michael Graff}
66bd3b3c6b171271c705b897823dcdcf29464698Michael Graff
11fcc67616fac1bc6a28b3d4fed24641137888e7Michael Graffstatic void
11fcc67616fac1bc6a28b3d4fed24641137888e7Michael Graffadb_callback(isc_task_t *etask, isc_event_t *event) {
11fcc67616fac1bc6a28b3d4fed24641137888e7Michael Graff unsigned int type = event->type;
11fcc67616fac1bc6a28b3d4fed24641137888e7Michael Graff
11fcc67616fac1bc6a28b3d4fed24641137888e7Michael Graff REQUIRE(etask == task);
11fcc67616fac1bc6a28b3d4fed24641137888e7Michael Graff
11fcc67616fac1bc6a28b3d4fed24641137888e7Michael Graff isc_event_free(&event);
11fcc67616fac1bc6a28b3d4fed24641137888e7Michael Graff dns_adb_destroyfind(&find);
11fcc67616fac1bc6a28b3d4fed24641137888e7Michael Graff
11fcc67616fac1bc6a28b3d4fed24641137888e7Michael Graff if (type == DNS_EVENT_ADBMOREADDRESSES)
439c0011e642fb1d26011116144af698125262dbMichael Graff do_find(ISC_FALSE);
d8590892d10fc9528b0dde7e2781935e7b8d7a87Michael Graff else if (type == DNS_EVENT_ADBNOMOREADDRESSES) {
11fcc67616fac1bc6a28b3d4fed24641137888e7Michael Graff printf("no more addresses\n");
d43c2cc7bc4022701f141e299ea8f3fb1d0640c2Michael Graff isc_app_shutdown();
11fcc67616fac1bc6a28b3d4fed24641137888e7Michael Graff } else {
11fcc67616fac1bc6a28b3d4fed24641137888e7Michael Graff printf("unexpected ADB event type %u\n", type);
11fcc67616fac1bc6a28b3d4fed24641137888e7Michael Graff isc_app_shutdown();
11fcc67616fac1bc6a28b3d4fed24641137888e7Michael Graff }
11fcc67616fac1bc6a28b3d4fed24641137888e7Michael Graff}
11fcc67616fac1bc6a28b3d4fed24641137888e7Michael Graff
66bd3b3c6b171271c705b897823dcdcf29464698Michael Graffstatic void
11fcc67616fac1bc6a28b3d4fed24641137888e7Michael Graffrun(isc_task_t *task, isc_event_t *event) {
11fcc67616fac1bc6a28b3d4fed24641137888e7Michael Graff (void)task;
ad3a5c4b7e21af04d1b872f933c2e19e5c0a135bMichael Graff do_find(ISC_TRUE);
439c0011e642fb1d26011116144af698125262dbMichael Graff isc_event_free(&event);
11fcc67616fac1bc6a28b3d4fed24641137888e7Michael Graff}
11fcc67616fac1bc6a28b3d4fed24641137888e7Michael Graff
f181f94ec8da8b1dbcc6353e8be965ea4a5ea282Michael Graffint
f181f94ec8da8b1dbcc6353e8be965ea4a5ea282Michael Graffmain(int argc, char *argv[]) {
11fcc67616fac1bc6a28b3d4fed24641137888e7Michael Graff isc_boolean_t verbose = ISC_FALSE;
11fcc67616fac1bc6a28b3d4fed24641137888e7Michael Graff unsigned int workers = 2;
11fcc67616fac1bc6a28b3d4fed24641137888e7Michael Graff isc_taskmgr_t *taskmgr;
11fcc67616fac1bc6a28b3d4fed24641137888e7Michael Graff isc_timermgr_t *timermgr;
d43c2cc7bc4022701f141e299ea8f3fb1d0640c2Michael Graff int ch;
66bd3b3c6b171271c705b897823dcdcf29464698Michael Graff isc_socketmgr_t *socketmgr;
66bd3b3c6b171271c705b897823dcdcf29464698Michael Graff dns_cache_t *cache;
11fcc67616fac1bc6a28b3d4fed24641137888e7Michael Graff isc_buffer_t b;
ad3a5c4b7e21af04d1b872f933c2e19e5c0a135bMichael Graff
ad3a5c4b7e21af04d1b872f933c2e19e5c0a135bMichael Graff RUNTIME_CHECK(isc_app_start() == ISC_R_SUCCESS);
d8590892d10fc9528b0dde7e2781935e7b8d7a87Michael Graff
439c0011e642fb1d26011116144af698125262dbMichael Graff dns_result_register();
439c0011e642fb1d26011116144af698125262dbMichael Graff
439c0011e642fb1d26011116144af698125262dbMichael Graff mctx = NULL;
439c0011e642fb1d26011116144af698125262dbMichael Graff RUNTIME_CHECK(isc_mem_create(0, 0, &mctx) == ISC_R_SUCCESS);
f36a81c88493985ee2d1c53cc6fe88f4b00dbbc8Michael Graff
439c0011e642fb1d26011116144af698125262dbMichael Graff while ((ch = isc_commandline_parse(argc, argv, "d:vw:")) != -1) {
439c0011e642fb1d26011116144af698125262dbMichael Graff switch (ch) {
439c0011e642fb1d26011116144af698125262dbMichael Graff case 'd':
c803787146cadcb2d7e10cbf4491f3be513dfa1aMichael Graff level = (unsigned int)atoi(isc_commandline_argument);
c803787146cadcb2d7e10cbf4491f3be513dfa1aMichael Graff break;
439c0011e642fb1d26011116144af698125262dbMichael Graff case 'v':
439c0011e642fb1d26011116144af698125262dbMichael Graff verbose = ISC_TRUE;
ff9bb3fc5453bbf310b67c560fbf04a5c0fb60daMichael Graff break;
ff9bb3fc5453bbf310b67c560fbf04a5c0fb60daMichael Graff case 'w':
e883738546c7c73b761bce8a15e08661863d3ae1Michael Graff workers = (unsigned int)atoi(isc_commandline_argument);
e883738546c7c73b761bce8a15e08661863d3ae1Michael Graff break;
fe14eafefa91fada7cea0a55b09196c01477406cBob Halley }
439c0011e642fb1d26011116144af698125262dbMichael Graff }
439c0011e642fb1d26011116144af698125262dbMichael Graff
439c0011e642fb1d26011116144af698125262dbMichael Graff log_init();
439c0011e642fb1d26011116144af698125262dbMichael Graff
1c3bc66ada38236cc81c41b7174a9f0a872c9ab6Michael Graff if (verbose) {
439c0011e642fb1d26011116144af698125262dbMichael Graff printf("%u workers\n", workers);
439c0011e642fb1d26011116144af698125262dbMichael Graff printf("IPv4: %s\n", isc_result_totext(isc_net_probeipv4()));
c803787146cadcb2d7e10cbf4491f3be513dfa1aMichael Graff printf("IPv6: %s\n", isc_result_totext(isc_net_probeipv6()));
1c3bc66ada38236cc81c41b7174a9f0a872c9ab6Michael Graff }
30251e07d1705d1a85b0e1d5a969496e1aed612eMichael Graff
a253e35c2451818fb39f9b808c7641adb5275fb3Michael Graff taskmgr = NULL;
30251e07d1705d1a85b0e1d5a969496e1aed612eMichael Graff RUNTIME_CHECK(isc_taskmgr_create(mctx, workers, 0, &taskmgr) ==
a253e35c2451818fb39f9b808c7641adb5275fb3Michael Graff ISC_R_SUCCESS);
439c0011e642fb1d26011116144af698125262dbMichael Graff task = NULL;
439c0011e642fb1d26011116144af698125262dbMichael Graff RUNTIME_CHECK(isc_task_create(taskmgr, mctx, 0, &task) ==
439c0011e642fb1d26011116144af698125262dbMichael Graff ISC_R_SUCCESS);
439c0011e642fb1d26011116144af698125262dbMichael Graff
d8590892d10fc9528b0dde7e2781935e7b8d7a87Michael Graff timermgr = NULL;
ff9bb3fc5453bbf310b67c560fbf04a5c0fb60daMichael Graff RUNTIME_CHECK(isc_timermgr_create(mctx, &timermgr) == ISC_R_SUCCESS);
4281fe4a80af7402613f0d5c3eeff8829a4ede1fMichael Graff socketmgr = NULL;
4281fe4a80af7402613f0d5c3eeff8829a4ede1fMichael Graff RUNTIME_CHECK(isc_socketmgr_create(mctx, &socketmgr) == ISC_R_SUCCESS);
ff9bb3fc5453bbf310b67c560fbf04a5c0fb60daMichael Graff
a253e35c2451818fb39f9b808c7641adb5275fb3Michael Graff cache = NULL;
14b98cb34eda66c87ce41a207704a2c232280eafMichael Graff RUNTIME_CHECK(dns_cache_create(mctx, taskmgr, timermgr,
14b98cb34eda66c87ce41a207704a2c232280eafMichael Graff dns_rdataclass_in, "rbt", 0, NULL,
e883738546c7c73b761bce8a15e08661863d3ae1Michael Graff &cache) == ISC_R_SUCCESS);
e883738546c7c73b761bce8a15e08661863d3ae1Michael Graff
14b98cb34eda66c87ce41a207704a2c232280eafMichael Graff view = NULL;
14b98cb34eda66c87ce41a207704a2c232280eafMichael Graff RUNTIME_CHECK(dns_view_create(mctx, dns_rdataclass_in, "default",
a253e35c2451818fb39f9b808c7641adb5275fb3Michael Graff &view) == ISC_R_SUCCESS);
3ac63b472022ff92691d1fe69ac715a729671965Michael Graff
651228967966ba4fb2e52f92d1207c790af4b130Michael Graff RUNTIME_CHECK(dns_view_createresolver(view, taskmgr, 10, socketmgr,
a253e35c2451818fb39f9b808c7641adb5275fb3Michael Graff timermgr, 0, NULL, NULL) ==
a253e35c2451818fb39f9b808c7641adb5275fb3Michael Graff DNS_R_SUCCESS);
a253e35c2451818fb39f9b808c7641adb5275fb3Michael Graff
e883738546c7c73b761bce8a15e08661863d3ae1Michael Graff {
e883738546c7c73b761bce8a15e08661863d3ae1Michael Graff struct in_addr ina;
14b98cb34eda66c87ce41a207704a2c232280eafMichael Graff isc_sockaddr_t sa;
ff9bb3fc5453bbf310b67c560fbf04a5c0fb60daMichael Graff isc_sockaddrlist_t sal;
4281fe4a80af7402613f0d5c3eeff8829a4ede1fMichael Graff
4281fe4a80af7402613f0d5c3eeff8829a4ede1fMichael Graff ISC_LIST_INIT(sal);
4281fe4a80af7402613f0d5c3eeff8829a4ede1fMichael Graff ina.s_addr = inet_addr("127.0.0.1");
4281fe4a80af7402613f0d5c3eeff8829a4ede1fMichael Graff isc_sockaddr_fromin(&sa, &ina, 53);
4281fe4a80af7402613f0d5c3eeff8829a4ede1fMichael Graff ISC_LIST_APPEND(sal, &sa, link);
65f6d2e1c1fce0989c13c2efb44b8dd26cd977f3Michael Graff
65f6d2e1c1fce0989c13c2efb44b8dd26cd977f3Michael Graff dns_resolver_setforwarders(view->resolver, &sal);
897c9ddb4d745b2bfecf98b17e5487bb6656299aMichael Graff dns_resolver_setfwdpolicy(view->resolver, dns_fwdpolicy_only);
4281fe4a80af7402613f0d5c3eeff8829a4ede1fMichael Graff }
4281fe4a80af7402613f0d5c3eeff8829a4ede1fMichael Graff
4281fe4a80af7402613f0d5c3eeff8829a4ede1fMichael Graff dns_view_setcache(view, cache);
4281fe4a80af7402613f0d5c3eeff8829a4ede1fMichael Graff dns_view_freeze(view);
14b98cb34eda66c87ce41a207704a2c232280eafMichael Graff
65f6d2e1c1fce0989c13c2efb44b8dd26cd977f3Michael Graff dns_cache_detach(&cache);
65f6d2e1c1fce0989c13c2efb44b8dd26cd977f3Michael Graff
65f6d2e1c1fce0989c13c2efb44b8dd26cd977f3Michael Graff printf("name = %s\n", argv[isc_commandline_index]);
65f6d2e1c1fce0989c13c2efb44b8dd26cd977f3Michael Graff isc_buffer_init(&b, argv[isc_commandline_index],
65f6d2e1c1fce0989c13c2efb44b8dd26cd977f3Michael Graff strlen(argv[isc_commandline_index]),
65f6d2e1c1fce0989c13c2efb44b8dd26cd977f3Michael Graff ISC_BUFFERTYPE_TEXT);
65f6d2e1c1fce0989c13c2efb44b8dd26cd977f3Michael Graff isc_buffer_add(&b, strlen(argv[isc_commandline_index]));
a253e35c2451818fb39f9b808c7641adb5275fb3Michael Graff dns_fixedname_init(&name);
65f6d2e1c1fce0989c13c2efb44b8dd26cd977f3Michael Graff dns_fixedname_init(&target);
65f6d2e1c1fce0989c13c2efb44b8dd26cd977f3Michael Graff RUNTIME_CHECK(dns_name_fromtext(dns_fixedname_name(&name), &b,
65f6d2e1c1fce0989c13c2efb44b8dd26cd977f3Michael Graff dns_rootname, ISC_FALSE, NULL) ==
65f6d2e1c1fce0989c13c2efb44b8dd26cd977f3Michael Graff ISC_R_SUCCESS);
65f6d2e1c1fce0989c13c2efb44b8dd26cd977f3Michael Graff
517274e709a3c730cd42f37dc1260dde95d1ea38Michael Graff RUNTIME_CHECK(isc_app_onrun(mctx, task, run, NULL) == ISC_R_SUCCESS);
517274e709a3c730cd42f37dc1260dde95d1ea38Michael Graff
517274e709a3c730cd42f37dc1260dde95d1ea38Michael Graff (void)isc_app_run();
517274e709a3c730cd42f37dc1260dde95d1ea38Michael Graff
517274e709a3c730cd42f37dc1260dde95d1ea38Michael Graff dns_view_detach(&view);
517274e709a3c730cd42f37dc1260dde95d1ea38Michael Graff isc_task_shutdown(task);
59e22acc4f79ff481f7bfa46ef0558957ae53cfcMichael Graff isc_task_detach(&task);
65f6d2e1c1fce0989c13c2efb44b8dd26cd977f3Michael Graff isc_taskmgr_destroy(&taskmgr);
65f6d2e1c1fce0989c13c2efb44b8dd26cd977f3Michael Graff
65f6d2e1c1fce0989c13c2efb44b8dd26cd977f3Michael Graff isc_socketmgr_destroy(&socketmgr);
65f6d2e1c1fce0989c13c2efb44b8dd26cd977f3Michael Graff isc_timermgr_destroy(&timermgr);
65f6d2e1c1fce0989c13c2efb44b8dd26cd977f3Michael Graff
65f6d2e1c1fce0989c13c2efb44b8dd26cd977f3Michael Graff isc_log_destroy(&lctx);
65f6d2e1c1fce0989c13c2efb44b8dd26cd977f3Michael Graff
65f6d2e1c1fce0989c13c2efb44b8dd26cd977f3Michael Graff if (verbose)
65f6d2e1c1fce0989c13c2efb44b8dd26cd977f3Michael Graff isc_mem_stats(mctx, stdout);
65f6d2e1c1fce0989c13c2efb44b8dd26cd977f3Michael Graff isc_mem_destroy(&mctx);
65f6d2e1c1fce0989c13c2efb44b8dd26cd977f3Michael Graff
65f6d2e1c1fce0989c13c2efb44b8dd26cd977f3Michael Graff isc_app_finish();
65f6d2e1c1fce0989c13c2efb44b8dd26cd977f3Michael Graff
65f6d2e1c1fce0989c13c2efb44b8dd26cd977f3Michael Graff return (0);
65f6d2e1c1fce0989c13c2efb44b8dd26cd977f3Michael Graff}
65f6d2e1c1fce0989c13c2efb44b8dd26cd977f3Michael Graff