49#if defined (DEBUG_MEMORY_LEAKAGE) || defined (DEBUG_MEMORY_LEAKAGE_ON_EXIT)
64 tp -> name = (
char *)0;
86 unsigned,
const char *,
int);
134 log_error (
"%s(%d): trace_begin called twice",
141 log_error (
"WARNING: Overwriting trace file \"%s\"", filename);
147 log_error (
"%s(%d): trace_begin: %s: %m",
151#if defined (HAVE_SETFD)
153 log_error (
"Can't set close-on-exec on %s: %m", filename);
165 }
else if (status !=
sizeof tfh) {
166 log_error (
"%s(%d): trace_begin: short write (%d:%ld)",
178 if (
tptr -> index != 0) {
192 const char *buf,
const char *
file,
int line)
216 log_error (
"%s(%d): trace_write_packet with null trace type",
221 log_error (
"%s(%d): trace_write_packet with no tracefile.",
228 for (
i = 0;
i < count;
i++)
229 length +=
iov [
i].len;
240 log_error (
"%s(%d): trace_write_packet write failed: %m",
243 }
else if (status !=
sizeof tmp) {
244 log_error (
"%s(%d): trace_write_packet: short write (%d:%ld)",
249 for (
i = 0;
i < count;
i++) {
252 log_error (
"%s(%d): %s write failed: %m",
255 }
else if (status !=
iov [
i].len) {
256 log_error (
"%s(%d): %s: short write (%d:%d)",
258 "trace_write_packet", status, length);
267 static char zero [] = { 0, 0, 0, 0, 0, 0, 0 };
268 unsigned padl = 8 - (length % 8);
272 log_error (
"%s(%d): trace_write_packet write failed: %m",
275 }
else if (status !=
padl) {
276 log_error (
"%s(%d): trace_write_packet: short write (%d:%d)",
331 ttmp -> have_packet = have_packet;
332 ttmp -> stop_tracing = stop_tracing;
401 *prev =
tptr -> next;
404 prev = &
tptr -> next;
407 log_error (
"No registered trace type for type name %.*s",
432 log_error(
"Can't open tracefile %s: %m", filename);
435#if defined (HAVE_SETFD)
437 log_error(
"Can't set close-on-exec on %s: %m", filename);
443 log_error(
"Error reading trace file header: %m");
445 log_error(
"Short read on trace file header: %d %ld.",
455 log_error(
"%s: not a dhcp trace file.", filename);
459 log_error (
"tracefile version %ld > current %ld.",
465 log_error(
"tracefile packet size too small - %ld < %ld",
467 (
long int)
sizeof *
tpkt);
472 log_error(
"tracefile header size too small - %ld < %ld",
487 log_error (
"can't allocate trace packet header.");
510 char **buf,
unsigned *buflen,
522 log_error(
"Can't save tracefile position: %m");
531 log_error(
"Error reading trace packet header: "
533 else if (status == 0)
536 log_error (
"Short read on trace packet header:"
553 log_error (
"Trace packet with unknown index %ld",
554 (
long int)
tpkt->type_index);
581 log_error(
"fsetpos in tracefile failed: %m");
585 (*trace_set_time_hook) (
tpkt->when);
594 log_error (
"Read packet type %s when expecting %s",
595 ttype -> name, (*ttp) -> name);
598 log_error (
"fsetpos in tracefile failed: %m");
612 (*bufmax) = ((
paylen + 1023) & ~1023U);
615 log_error (
"Can't allocate input buffer sized %d",
624 log_error (
"Error reading trace payload: %m");
626 log_error (
"Short read on trace payload: %d %d.",
632 *buflen =
tpkt -> length;
640 unsigned *buflen,
char **buf)
651 log_error (
"can't allocate trace packet header.");
667 const char *filename,
unsigned *len,
char **buf)
676 if (!buf || !len || *buf)
682 log_error (
"Can't save tracefile position: %m");
686 log_error (
"can't allocate trace packet header.");
702 if (
strcmp (filename, *buf)) {
703 log_error (
"Read file %s when expecting %s", *buf, filename);
709 log_error (
"fsetpos in tracefile failed: %m");
isc_result_t omapi_array_free(omapi_array_t **, const char *, int)
void * dmalloc(size_t, const char *, int)
void dfree(void *, const char *, int)
int log_error(const char *,...) __attribute__((__format__(__printf__
#define DHCP_R_INVALIDARG
#define DHCP_R_PROTOCOLERROR
isc_result_t trace_get_file(trace_type_t *, const char *, unsigned *, char **)
trace_type_t * trace_type_register(const char *, void *, void(*)(trace_type_t *, unsigned, char *), void(*)(trace_type_t *), const char *, int)
void trace_index_map_input(trace_type_t *, unsigned, char *)
void trace_index_stop_tracing(trace_type_t *)
isc_result_t trace_get_packet(trace_type_t **, unsigned *, char **)
void trace_free_all(void)
isc_result_t trace_begin(const char *, const char *, int)
isc_result_t trace_write_packet(trace_type_t *, unsigned, const char *, const char *, int)
void trace_file_replay(const char *)
void trace_type_stash(trace_type_t *)
void trace_replay_init(void)
isc_result_t trace_write_packet_iov(trace_type_t *, int, trace_iov_t *, const char *, int)
isc_result_t trace_get_next_packet(trace_type_t **, tracepacket_t *, char **, unsigned *, unsigned *)
isc_result_t trace_init(void(*set_time)(time_t), const char *, int)
#define TRACE_INDEX_MAPPING_SIZE
#define TRACEFILE_VERSION