*/
provider libdns {
+ probe xfrin_axfr_finalize_begin(void *);
+ probe xfrin_axfr_finalize_end(void *, int);
+ probe xfrin_connected(void *, int);
+ probe xfrin_done_callback_begin(void *, int);
+ probe xfrin_done_callback_end(void *, int);
+ probe xfrin_journal_destroy_begin(void *, int);
+ probe xfrin_journal_destroy_end(void *, int);
+ probe xfrin_read(void *, int);
+ probe xfrin_recv_answer(void *, void *);
+ probe xfrin_recv_done(void *, int);
+ probe xfrin_recv_parsed(void *, int);
+ probe xfrin_recv_question(void *, void *);
+ probe xfrin_recv_send_request(void *);
+ probe xfrin_recv_start(void *, int);
+ probe xfrin_recv_try_axfr(void *, int);
+ probe xfrin_sent(void *, int);
+ probe xfrin_start(void *);
};
#include <dns/rdataset.h>
#include <dns/result.h>
#include <dns/soa.h>
+#include <dns/trace.h>
#include <dns/transport.h>
#include <dns/tsig.h>
#include <dns/view.h>
#include <dst/dst.h>
+#include "probes.h"
+
/*
* Incoming AXFR and IXFR.
*/
axfr_finalize(dns_xfrin_t *xfr) {
isc_result_t result;
- CHECK(dns_zone_replacedb(xfr->zone, xfr->db, true));
+ LIBDNS_XFRIN_AXFR_FINALIZE_BEGIN(xfr);
+ result = dns_zone_replacedb(xfr->zone, xfr->db, true);
+ LIBDNS_XFRIN_AXFR_FINALIZE_END(xfr, result);
- result = ISC_R_SUCCESS;
-failure:
return (result);
}
CHECK(result);
}
+ LIBDNS_XFRIN_START(xfr);
+
/* Set the maximum timer */
isc_interval_set(&interval, dns_zone_getmaxxfrin(xfr->zone), 0);
isc_timer_start(xfr->max_time_timer, isc_timertype_once, &interval);
result = ISC_R_SHUTTINGDOWN;
}
+ LIBDNS_XFRIN_CONNECTED(xfr, result);
+
if (result != ISC_R_SUCCESS) {
xfrin_fail(xfr, result, "failed to connect");
goto failure;
dns_dbversion_t *ver = NULL;
dns_name_t *msgsoaname = NULL;
+ LIBDNS_XFRIN_RECV_SEND_REQUEST(xfr);
+
/* Create the request message */
dns_message_create(xfr->mctx, DNS_MESSAGE_INTENTRENDER, &msg);
CHECK(dns_message_settsigkey(msg, xfr->tsigkey));
result = ISC_R_SHUTTINGDOWN;
}
+ LIBDNS_XFRIN_SENT(xfr, result);
+
CHECK(result);
xfrin_log(xfr, ISC_LOG_DEBUG(3), "sent request data");
/* Stop the idle timer */
isc_timer_stop(xfr->max_idle_timer);
+ LIBDNS_XFRIN_RECV_START(xfr, result);
+
CHECK(result);
xfrin_log(xfr, ISC_LOG_DEBUG(7), "received %u bytes", region->length);
isc_result_totext(result));
}
+ LIBDNS_XFRIN_RECV_PARSED(xfr, result);
+
if (result != ISC_R_SUCCESS || msg->rcode != dns_rcode_noerror ||
msg->opcode != dns_opcode_query || msg->rdclass != xfr->rdclass)
{
xfrin_log(xfr, ISC_LOG_DEBUG(3), "got %s, retrying with AXFR",
isc_result_totext(result));
try_axfr:
+ LIBDNS_XFRIN_RECV_TRY_AXFR(xfr, result);
dns_message_detach(&msg);
xfrin_reset(xfr);
xfr->reqtype = dns_rdatatype_soa;
{
dns_rdataset_t *rds = NULL;
+ LIBDNS_XFRIN_RECV_QUESTION(xfr, msg);
+
name = NULL;
dns_message_currentname(msg, DNS_SECTION_QUESTION, &name);
if (!dns_name_equal(name, &xfr->name)) {
{
dns_rdataset_t *rds = NULL;
+ LIBDNS_XFRIN_RECV_ANSWER(xfr, msg);
+
name = NULL;
dns_message_currentname(msg, DNS_SECTION_ANSWER, &name);
for (rds = ISC_LIST_HEAD(name->list); rds != NULL;
* Close the journal.
*/
if (xfr->ixfr.journal != NULL) {
+ LIBDNS_XFRIN_JOURNAL_DESTROY_BEGIN(xfr, result);
dns_journal_destroy(&xfr->ixfr.journal);
+ LIBDNS_XFRIN_JOURNAL_DESTROY_END(xfr, result);
}
/*
* Inform the caller we succeeded.
*/
if (xfr->done != NULL) {
+ LIBDNS_XFRIN_DONE_CALLBACK_BEGIN(xfr, result);
(xfr->done)(xfr->zone, ISC_R_SUCCESS);
xfr->done = NULL;
+ LIBDNS_XFRIN_DONE_CALLBACK_END(xfr, result);
}
atomic_store(&xfr->shuttingdown, true);
isc_interval_set(&interval, dns_zone_getidlein(xfr->zone), 0);
isc_timer_start(xfr->max_idle_timer, isc_timertype_once,
&interval);
+
+ LIBDNS_XFRIN_READ(xfr, result);
return;
}
dns_message_detach(&msg);
}
dns_xfrin_detach(&xfr);
+ LIBDNS_XFRIN_RECV_DONE(xfr, result);
}
static void