aboutsummaryrefslogtreecommitdiffstats
path: root/app/nginx/src/tldk/ngx_tldk.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/tldk/ngx_tldk.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/tldk/ngx_tldk.h')
-rw-r--r--app/nginx/src/tldk/ngx_tldk.h182
1 files changed, 182 insertions, 0 deletions
diff --git a/app/nginx/src/tldk/ngx_tldk.h b/app/nginx/src/tldk/ngx_tldk.h
new file mode 100644
index 0000000..01ac556
--- /dev/null
+++ b/app/nginx/src/tldk/ngx_tldk.h
@@ -0,0 +1,182 @@
+/*
+ * Copyright (c) 2017 Intel Corporation.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#ifndef __NGX_TLDK_H__
+#define __NGX_TLDK_H__
+
+#include <stdint.h>
+#include <stddef.h>
+#include <inttypes.h>
+
+#include <ngx_config.h>
+#include <ngx_core.h>
+
+#include <rte_config.h>
+#include <rte_eal.h>
+#include <rte_common.h>
+#include <rte_ether.h>
+
+#include <tle_ctx.h>
+#include <tle_event.h>
+
+#define MAX_PKT_BURST 0x20
+
+#define MAX_PORT_QUEUE \
+ (sizeof(((struct tldk_port_conf *)NULL)->queue_map) * CHAR_BIT)
+
+#define MAX_CTX_PER_LOCRE 32
+
+struct tldk_port_conf {
+ uint32_t id;
+ uint32_t nb_queues;
+ uint32_t queue_map;
+ uint32_t mtu;
+ uint32_t rx_offload;
+ uint32_t tx_offload;
+ uint32_t ipv4;
+ struct in6_addr ipv6;
+ struct ether_addr mac;
+};
+
+struct tldk_dev_conf {
+ uint32_t id;
+ uint32_t port;
+ uint32_t queue;
+};
+
+struct tldk_dest_conf {
+ uint32_t dev;
+ uint32_t mtu;
+ uint32_t prfx;
+ uint16_t family;
+ union {
+ struct in_addr ipv4;
+ struct in6_addr ipv6;
+ };
+ struct ether_addr mac;
+};
+
+#define TLDK_MAX_DEST 0x10
+
+struct tldk_ctx_conf {
+ ngx_uint_t worker;
+ uint32_t lcore;
+ uint32_t nb_mbuf;
+ uint32_t nb_stream;
+ uint32_t nb_rbuf;
+ uint32_t nb_sbuf;
+ uint32_t nb_dev;
+ uint32_t nb_dest;
+ uint32_t be_in_worker;
+ uint32_t tcp_timewait; /* TCP TIME_WAIT value in milliseconds */
+ struct tldk_dev_conf dev[RTE_MAX_ETHPORTS];
+ struct tldk_dest_conf dest[TLDK_MAX_DEST];
+};
+
+typedef struct tldk_conf tldk_conf_t;
+
+struct tldk_conf {
+ uint32_t eal_argc;
+ char *eal_argv[NGX_CONF_MAX_ARGS];
+ char eal_cmd[PATH_MAX];
+ uint32_t nb_port;
+ struct tldk_port_conf port[RTE_MAX_ETHPORTS];
+ uint32_t nb_ctx;
+ struct tldk_ctx_conf ctx[RTE_MAX_LCORE];
+};
+
+extern char *tldk_block_parse(ngx_conf_t *, ngx_command_t *, void *);
+extern char *tldk_ctx_parse(ngx_conf_t *, ngx_command_t *, void *);
+
+struct pkt_buf {
+ uint32_t num;
+ struct rte_mbuf *pkt[2 * MAX_PKT_BURST];
+};
+
+struct tldk_dev {
+ struct tle_dev *dev;
+ struct tldk_dev_conf cf;
+ struct {
+ uint64_t in;
+ uint64_t up;
+ uint64_t drop;
+ } rx_stat;
+ struct {
+ uint64_t down;
+ uint64_t out;
+ uint64_t drop;
+ } tx_stat;
+ struct pkt_buf tx_buf;
+};
+
+#define LCORE_MAX_DST (UINT8_MAX + 1)
+
+struct tldk_ctx {
+ const struct tldk_ctx_conf *cf;
+ struct rte_lpm *lpm4;
+ struct rte_lpm6 *lpm6;
+ struct tle_ctx *ctx;
+ struct rte_mempool *mpool;
+ struct rte_mempool *frag_mpool;
+ uint32_t nb_dev;
+ struct tldk_dev dev[RTE_MAX_ETHPORTS];
+ uint32_t dst4_num;
+ uint32_t dst6_num;
+ struct tle_dest dst4[LCORE_MAX_DST];
+ struct tle_dest dst6[LCORE_MAX_DST];
+ struct {
+ uint64_t flags[UINT8_MAX + 1];
+ } tcp_stat;
+} __rte_cache_aligned;
+
+extern struct tldk_ctx wrk2ctx[RTE_MAX_LCORE];
+
+struct lcore_ctxs_list {
+ uint32_t nb_ctxs;
+ struct tldk_ctx *ctxs[MAX_CTX_PER_LOCRE];
+};
+
+/* helper macros */
+#define DUMMY_MACRO do {} while (0)
+
+#ifdef BE_DEBUG
+#define BE_TRACE(fmt, arg...) printf(fmt, ##arg)
+#define BE_PKT_DUMP(p) rte_pktmbuf_dump(stdout, (p), 74)
+#else
+#define BE_TRACE(fmt, arg...) DUMMY_MACRO
+#define BE_PKT_DUMP(p) DUMMY_MACRO
+#endif
+
+#ifdef FE_DEBUG
+#define FE_TRACE(fmt, arg...) printf(fmt, ##arg)
+#define FE_PKT_DUMP(p) rte_pktmbuf_dump(stdout, (p), 74)
+#else
+#define FE_TRACE(fmt, arg...) DUMMY_MACRO
+#define FE_PKT_DUMP(p) DUMMY_MACRO
+#endif
+
+
+#endif /* __NGX_TLDK_H__ */