aboutsummaryrefslogtreecommitdiffstats
path: root/app/nginx/src/core/ngx_resolver.h
diff options
context:
space:
mode:
authorKonstantin Ananyev <konstantin.ananyev@intel.com>2017-10-31 12:40:17 +0000
committerKonstantin Ananyev <konstantin.ananyev@intel.com>2017-10-31 14:19:39 +0000
commite18a033b921d0d79fa8278f853548e6125b93e0c (patch)
treea6a55edf6ddceef824561818c9836914c326340d /app/nginx/src/core/ngx_resolver.h
parent7e18fa1bf263822c46d7431a911b41d6377d5f69 (diff)
Integrate TLDK with NGINX
Created a clone of nginx (from https://github.com/nginx/nginx) to demonstrate and benchmark TLDK library integrated with real world application. A new nginx module is created and and BSD socket-like API is implemented on top of native TLDK API. Note, that right now only minimalistic subset of socket-like API is provided: - accept - close - readv - recv - writev so only limited nginx functionality is available for a moment. Change-Id: Ie1efe9349a0538da4348a48fb8306cbf636b5a92 Signed-off-by: Mohammad Abdul Awal <mohammad.abdul.awal@intel.com> Signed-off-by: Reshma Pattan <reshma.pattan@intel.com> Signed-off-by: Remy Horton <remy.horton@intel.com> Signed-off-by: Konstantin Ananyev <konstantin.ananyev@intel.com>
Diffstat (limited to 'app/nginx/src/core/ngx_resolver.h')
-rw-r--r--app/nginx/src/core/ngx_resolver.h238
1 files changed, 238 insertions, 0 deletions
diff --git a/app/nginx/src/core/ngx_resolver.h b/app/nginx/src/core/ngx_resolver.h
new file mode 100644
index 0000000..a0d6fc3
--- /dev/null
+++ b/app/nginx/src/core/ngx_resolver.h
@@ -0,0 +1,238 @@
+
+/*
+ * Copyright (C) Igor Sysoev
+ * Copyright (C) Nginx, Inc.
+ */
+
+
+#include <ngx_config.h>
+#include <ngx_core.h>
+
+
+#ifndef _NGX_RESOLVER_H_INCLUDED_
+#define _NGX_RESOLVER_H_INCLUDED_
+
+
+#define NGX_RESOLVE_A 1
+#define NGX_RESOLVE_CNAME 5
+#define NGX_RESOLVE_PTR 12
+#define NGX_RESOLVE_MX 15
+#define NGX_RESOLVE_TXT 16
+#if (NGX_HAVE_INET6)
+#define NGX_RESOLVE_AAAA 28
+#endif
+#define NGX_RESOLVE_SRV 33
+#define NGX_RESOLVE_DNAME 39
+
+#define NGX_RESOLVE_FORMERR 1
+#define NGX_RESOLVE_SERVFAIL 2
+#define NGX_RESOLVE_NXDOMAIN 3
+#define NGX_RESOLVE_NOTIMP 4
+#define NGX_RESOLVE_REFUSED 5
+#define NGX_RESOLVE_TIMEDOUT NGX_ETIMEDOUT
+
+
+#define NGX_NO_RESOLVER (void *) -1
+
+#define NGX_RESOLVER_MAX_RECURSION 50
+
+
+typedef struct ngx_resolver_s ngx_resolver_t;
+
+
+typedef struct {
+ ngx_connection_t *udp;
+ ngx_connection_t *tcp;
+ struct sockaddr *sockaddr;
+ socklen_t socklen;
+ ngx_str_t server;
+ ngx_log_t log;
+ ngx_buf_t *read_buf;
+ ngx_buf_t *write_buf;
+ ngx_resolver_t *resolver;
+} ngx_resolver_connection_t;
+
+
+typedef struct ngx_resolver_ctx_s ngx_resolver_ctx_t;
+
+typedef void (*ngx_resolver_handler_pt)(ngx_resolver_ctx_t *ctx);
+
+
+typedef struct {
+ struct sockaddr *sockaddr;
+ socklen_t socklen;
+ ngx_str_t name;
+ u_short priority;
+ u_short weight;
+} ngx_resolver_addr_t;
+
+
+typedef struct {
+ ngx_str_t name;
+ u_short priority;
+ u_short weight;
+ u_short port;
+} ngx_resolver_srv_t;
+
+
+typedef struct {
+ ngx_str_t name;
+ u_short priority;
+ u_short weight;
+ u_short port;
+
+ ngx_resolver_ctx_t *ctx;
+ ngx_int_t state;
+
+ ngx_uint_t naddrs;
+ ngx_addr_t *addrs;
+} ngx_resolver_srv_name_t;
+
+
+typedef struct {
+ ngx_rbtree_node_t node;
+ ngx_queue_t queue;
+
+ /* PTR: resolved name, A: name to resolve */
+ u_char *name;
+
+#if (NGX_HAVE_INET6)
+ /* PTR: IPv6 address to resolve (IPv4 address is in rbtree node key) */
+ struct in6_addr addr6;
+#endif
+
+ u_short nlen;
+ u_short qlen;
+
+ u_char *query;
+#if (NGX_HAVE_INET6)
+ u_char *query6;
+#endif
+
+ union {
+ in_addr_t addr;
+ in_addr_t *addrs;
+ u_char *cname;
+ ngx_resolver_srv_t *srvs;
+ } u;
+
+ u_char code;
+ u_short naddrs;
+ u_short nsrvs;
+ u_short cnlen;
+
+#if (NGX_HAVE_INET6)
+ union {
+ struct in6_addr addr6;
+ struct in6_addr *addrs6;
+ } u6;
+
+ u_short naddrs6;
+#endif
+
+ time_t expire;
+ time_t valid;
+ uint32_t ttl;
+
+ unsigned tcp:1;
+#if (NGX_HAVE_INET6)
+ unsigned tcp6:1;
+#endif
+
+ ngx_uint_t last_connection;
+
+ ngx_resolver_ctx_t *waiting;
+} ngx_resolver_node_t;
+
+
+struct ngx_resolver_s {
+ /* has to be pointer because of "incomplete type" */
+ ngx_event_t *event;
+ void *dummy;
+ ngx_log_t *log;
+
+ /* event ident must be after 3 pointers as in ngx_connection_t */
+ ngx_int_t ident;
+
+ /* simple round robin DNS peers balancer */
+ ngx_array_t connections;
+ ngx_uint_t last_connection;
+
+ ngx_rbtree_t name_rbtree;
+ ngx_rbtree_node_t name_sentinel;
+
+ ngx_rbtree_t srv_rbtree;
+ ngx_rbtree_node_t srv_sentinel;
+
+ ngx_rbtree_t addr_rbtree;
+ ngx_rbtree_node_t addr_sentinel;
+
+ ngx_queue_t name_resend_queue;
+ ngx_queue_t srv_resend_queue;
+ ngx_queue_t addr_resend_queue;
+
+ ngx_queue_t name_expire_queue;
+ ngx_queue_t srv_expire_queue;
+ ngx_queue_t addr_expire_queue;
+
+#if (NGX_HAVE_INET6)
+ ngx_uint_t ipv6; /* unsigned ipv6:1; */
+ ngx_rbtree_t addr6_rbtree;
+ ngx_rbtree_node_t addr6_sentinel;
+ ngx_queue_t addr6_resend_queue;
+ ngx_queue_t addr6_expire_queue;
+#endif
+
+ time_t resend_timeout;
+ time_t tcp_timeout;
+ time_t expire;
+ time_t valid;
+
+ ngx_uint_t log_level;
+};
+
+
+struct ngx_resolver_ctx_s {
+ ngx_resolver_ctx_t *next;
+ ngx_resolver_t *resolver;
+ ngx_resolver_node_t *node;
+
+ /* event ident must be after 3 pointers as in ngx_connection_t */
+ ngx_int_t ident;
+
+ ngx_int_t state;
+ ngx_str_t name;
+ ngx_str_t service;
+
+ time_t valid;
+ ngx_uint_t naddrs;
+ ngx_resolver_addr_t *addrs;
+ ngx_resolver_addr_t addr;
+ struct sockaddr_in sin;
+
+ ngx_uint_t count;
+ ngx_uint_t nsrvs;
+ ngx_resolver_srv_name_t *srvs;
+
+ ngx_resolver_handler_pt handler;
+ void *data;
+ ngx_msec_t timeout;
+
+ ngx_uint_t quick; /* unsigned quick:1; */
+ ngx_uint_t recursion;
+ ngx_event_t *event;
+};
+
+
+ngx_resolver_t *ngx_resolver_create(ngx_conf_t *cf, ngx_str_t *names,
+ ngx_uint_t n);
+ngx_resolver_ctx_t *ngx_resolve_start(ngx_resolver_t *r,
+ ngx_resolver_ctx_t *temp);
+ngx_int_t ngx_resolve_name(ngx_resolver_ctx_t *ctx);
+void ngx_resolve_name_done(ngx_resolver_ctx_t *ctx);
+ngx_int_t ngx_resolve_addr(ngx_resolver_ctx_t *ctx);
+void ngx_resolve_addr_done(ngx_resolver_ctx_t *ctx);
+char *ngx_resolver_strerror(ngx_int_t err);
+
+
+#endif /* _NGX_RESOLVER_H_INCLUDED_ */