Lines Matching +full:set +full:- +full:env
4 * Copyright (c) 2013-2014, Farsight Security, Inc.
52 #include <protobuf-c/protobuf-c.h>
56 #include "dnstap/dnstap.pb-c.h"
91 dt_sample_rate_limited(struct dt_env* env)
93 lock_basic_lock(&env->sample_lock);
95 if(env->sample_rate > 1) {
98 if (env->sample_rate_count > env->sample_rate) {
103 env->sample_rate_count = 0;
106 env->sample_rate_count++;
107 lock_basic_unlock(&env->sample_lock);
110 lock_basic_unlock(&env->sample_lock);
115 dt_send(const struct dt_env *env, void *buf, size_t len_buf)
117 dt_msg_queue_submit(env->msgqueue, buf, len_buf);
121 dt_msg_init(const struct dt_env *env,
126 dm->d.base.descriptor = &dnstap__dnstap__descriptor;
127 dm->m.base.descriptor = &dnstap__message__descriptor;
128 dm->d.type = DNSTAP__DNSTAP__TYPE__MESSAGE;
129 dm->d.message = &dm->m;
130 dm->m.type = mtype;
131 if (env->identity != NULL) {
132 dm->d.identity.data = (uint8_t *) env->identity;
133 dm->d.identity.len = (size_t) env->len_identity;
134 dm->d.has_identity = 1;
136 if (env->version != NULL) {
137 dm->d.version.data = (uint8_t *) env->version;
138 dm->d.version.len = (size_t) env->len_version;
139 dm->d.has_version = 1;
150 log_warn("could not open dnstap-socket-path: %s, %s",
158 struct dt_env *env;
160 if(cfg->dnstap && cfg->dnstap_socket_path && cfg->dnstap_socket_path[0] &&
161 (cfg->dnstap_ip==NULL || cfg->dnstap_ip[0]==0)) {
162 char* p = cfg->dnstap_socket_path;
163 if(cfg->chrootdir && cfg->chrootdir[0] && strncmp(p,
164 cfg->chrootdir, strlen(cfg->chrootdir)) == 0)
165 p += strlen(cfg->chrootdir);
171 env = (struct dt_env *) calloc(1, sizeof(struct dt_env));
172 if (!env)
174 lock_basic_init(&env->sample_lock);
176 env->dtio = dt_io_thread_create();
177 if(!env->dtio) {
179 free(env);
182 if(!dt_io_thread_apply_cfg(env->dtio, cfg)) {
183 dt_io_thread_delete(env->dtio);
184 free(env);
187 dt_apply_cfg(env, cfg);
188 return env;
192 dt_apply_identity(struct dt_env *env, struct config_file *cfg)
195 if (!cfg->dnstap_send_identity) {
196 free(env->identity);
197 env->identity = NULL;
200 free(env->identity);
201 if (cfg->dnstap_identity == NULL || cfg->dnstap_identity[0] == 0) {
204 env->identity = strdup(buf);
209 env->identity = strdup(cfg->dnstap_identity);
211 if (env->identity == NULL)
213 env->len_identity = (unsigned int)strlen(env->identity);
214 verbose(VERB_OPS, "dnstap identity field set to \"%s\"",
215 env->identity);
219 dt_apply_version(struct dt_env *env, struct config_file *cfg)
221 if (!cfg->dnstap_send_version) {
222 free(env->version);
223 env->version = NULL;
226 free(env->version);
227 if (cfg->dnstap_version == NULL || cfg->dnstap_version[0] == 0)
228 env->version = strdup(PACKAGE_STRING);
230 env->version = strdup(cfg->dnstap_version);
231 if (env->version == NULL)
233 env->len_version = (unsigned int)strlen(env->version);
234 verbose(VERB_OPS, "dnstap version field set to \"%s\"",
235 env->version);
239 dt_apply_logcfg(struct dt_env *env, struct config_file *cfg)
241 if ((env->log_resolver_query_messages = (unsigned int)
242 cfg->dnstap_log_resolver_query_messages))
246 if ((env->log_resolver_response_messages = (unsigned int)
247 cfg->dnstap_log_resolver_response_messages))
251 if ((env->log_client_query_messages = (unsigned int)
252 cfg->dnstap_log_client_query_messages))
256 if ((env->log_client_response_messages = (unsigned int)
257 cfg->dnstap_log_client_response_messages))
261 if ((env->log_forwarder_query_messages = (unsigned int)
262 cfg->dnstap_log_forwarder_query_messages))
266 if ((env->log_forwarder_response_messages = (unsigned int)
267 cfg->dnstap_log_forwarder_response_messages))
271 lock_basic_lock(&env->sample_lock);
272 if((env->sample_rate = (unsigned int)cfg->dnstap_sample_rate))
274 verbose(VERB_OPS, "dnstap SAMPLE_RATE enabled and set to \"%d\"", (int)env->sample_rate);
276 lock_basic_unlock(&env->sample_lock);
280 dt_apply_cfg(struct dt_env *env, struct config_file *cfg)
282 if (!cfg->dnstap)
285 dt_apply_identity(env, cfg);
286 dt_apply_version(env, cfg);
287 dt_apply_logcfg(env, cfg);
291 dt_init(struct dt_env *env, struct comm_base* base)
293 env->msgqueue = dt_msg_queue_create(base);
294 if(!env->msgqueue) {
298 if(!dt_io_thread_register_queue(env->dtio, env->msgqueue)) {
300 dt_msg_queue_delete(env->msgqueue);
301 env->msgqueue = NULL;
308 dt_deinit(struct dt_env* env)
310 dt_io_thread_unregister_queue(env->dtio, env->msgqueue);
311 dt_msg_queue_delete(env->msgqueue);
315 dt_delete(struct dt_env *env)
317 if (!env)
319 dt_io_thread_delete(env->dtio);
320 lock_basic_destroy(&env->sample_lock);
321 free(env->identity);
322 free(env->version);
323 free(env);
332 *time_sec = tv->tv_sec;
333 *time_nsec = tv->tv_usec * 1000;
343 p->len = sldns_buffer_limit(b);
344 p->data = sldns_buffer_begin(b);
359 log_assert(qs->ss_family == AF_INET6 || qs->ss_family == AF_INET);
360 if (qs->ss_family == AF_INET6) {
364 dm->m.socket_family = DNSTAP__SOCKET_FAMILY__INET6;
365 dm->m.has_socket_family = 1;
368 qaddr->data = q->sin6_addr.s6_addr;
369 qaddr->len = 16; /* IPv6 */
373 *qport = ntohs(q->sin6_port);
375 } else if (qs->ss_family == AF_INET) {
379 dm->m.socket_family = DNSTAP__SOCKET_FAMILY__INET;
380 dm->m.has_socket_family = 1;
383 qaddr->data = (uint8_t *) &q->sin_addr.s_addr;
384 qaddr->len = 4; /* IPv4 */
388 *qport = ntohs(q->sin_port);
393 * This block is to fill second set of fields in DNSTAP-message defined as request_/response_ names.
396 if (rs && rs->ss_family == AF_INET6) {
400 raddr->data = r->sin6_addr.s6_addr;
401 raddr->len = 16; /* IPv6 */
405 *rport = ntohs(r->sin6_port);
407 } else if (rs && rs->ss_family == AF_INET) {
411 raddr->data = (uint8_t *) &r->sin_addr.s_addr;
412 raddr->len = 4; /* IPv4 */
416 *rport = ntohs(r->sin_port);
422 dm->m.socket_protocol = DNSTAP__SOCKET_PROTOCOL__UDP;
423 dm->m.has_socket_protocol = 1;
427 dm->m.socket_protocol = DNSTAP__SOCKET_PROTOCOL__TCP;
428 dm->m.has_socket_protocol = 1;
431 dm->m.socket_protocol = DNSTAP__SOCKET_PROTOCOL__DOT;
432 dm->m.has_socket_protocol = 1;
436 dm->m.socket_protocol = DNSTAP__SOCKET_PROTOCOL__DOH;
437 dm->m.has_socket_protocol = 1;
440 dm->m.socket_protocol = DNSTAP__SOCKET_PROTOCOL__TCP;
441 dm->m.has_socket_protocol = 1;
446 dt_msg_send_client_query(struct dt_env *env,
457 if(dt_sample_rate_limited(env))
465 dt_msg_init(env, &dm, DNSTAP__MESSAGE__TYPE__CLIENT_QUERY);
484 dt_send(env, dm.buf, dm.len_buf);
488 dt_msg_send_client_response(struct dt_env *env,
498 if(dt_sample_rate_limited(env))
504 dt_msg_init(env, &dm, DNSTAP__MESSAGE__TYPE__CLIENT_RESPONSE);
522 dt_send(env, dm.buf, dm.len_buf);
526 dt_msg_send_outside_query(struct dt_env *env,
538 if(dt_sample_rate_limited(env))
546 if (!env->log_forwarder_query_messages)
548 dt_msg_init(env, &dm, DNSTAP__MESSAGE__TYPE__FORWARDER_QUERY);
550 if (!env->log_resolver_query_messages)
552 dt_msg_init(env, &dm, DNSTAP__MESSAGE__TYPE__RESOLVER_QUERY);
576 dt_send(env, dm.buf, dm.len_buf);
580 dt_msg_send_outside_response(struct dt_env *env,
594 if(dt_sample_rate_limited(env))
603 if (!env->log_forwarder_response_messages)
605 dt_msg_init(env, &dm, DNSTAP__MESSAGE__TYPE__FORWARDER_RESPONSE);
607 if (!env->log_resolver_response_messages)
609 dt_msg_init(env, &dm, DNSTAP__MESSAGE__TYPE__RESOLVER_RESPONSE);
638 dt_send(env, dm.buf, dm.len_buf);