DPDK patches and discussions
 help / color / mirror / Atom feed
From: Conor Walsh <conor.walsh@intel.com>
To: jerinj@marvell.com, stephen@networkplumber.org,
	bernard.iremonger@intel.com, konstantin.ananyev@intel.com,
	vladimir.medvedkin@intel.com, anatoly.burakov@intel.com
Cc: dev@dpdk.org, Conor Walsh <conor.walsh@intel.com>
Subject: [dpdk-dev] [PATCH v5 3/5] examples/l3fwd: add FIB infrastructure
Date: Mon, 15 Mar 2021 11:34:37 +0000	[thread overview]
Message-ID: <20210315113439.1045223-4-conor.walsh@intel.com> (raw)
In-Reply-To: <20210315113439.1045223-1-conor.walsh@intel.com>

The purpose of this commit is to add the necessary function calls
and supporting infrastructure to allow the Forwarding Information Base
(FIB) library to be integrated into the l3fwd sample app.
Instead of adding an individual flag for FIB, a new flag '--lookup' has
been added that allows the user to select their desired lookup method.
The flags '-E' and '-L' have been retained for backwards compatibility.

Signed-off-by: Conor Walsh <conor.walsh@intel.com>
Acked-by: Konstantin Ananyev <konstantin.ananyev@intel.com>
Acked-by: Vladimir Medvedkin <vladimir.medvedkin@intel.com>
---
 examples/l3fwd/Makefile      |   2 +-
 examples/l3fwd/l3fwd.h       |  27 ++++++++-
 examples/l3fwd/l3fwd_event.c |   9 +++
 examples/l3fwd/l3fwd_event.h |   1 +
 examples/l3fwd/l3fwd_fib.c   |  60 ++++++++++++++++++++
 examples/l3fwd/main.c        | 107 ++++++++++++++++++++++++++---------
 examples/l3fwd/meson.build   |   4 +-
 7 files changed, 176 insertions(+), 34 deletions(-)
 create mode 100644 examples/l3fwd/l3fwd_fib.c

diff --git a/examples/l3fwd/Makefile b/examples/l3fwd/Makefile
index 7e70bbd826..5f7baffbf7 100644
--- a/examples/l3fwd/Makefile
+++ b/examples/l3fwd/Makefile
@@ -5,7 +5,7 @@
 APP = l3fwd
 
 # all source are stored in SRCS-y
-SRCS-y := main.c l3fwd_lpm.c l3fwd_em.c l3fwd_event.c
+SRCS-y := main.c l3fwd_lpm.c l3fwd_fib.c l3fwd_em.c l3fwd_event.c
 SRCS-y += l3fwd_event_generic.c l3fwd_event_internal_port.c
 
 # Build using pkg-config variables if possible
diff --git a/examples/l3fwd/l3fwd.h b/examples/l3fwd/l3fwd.h
index 2cf06099e0..a808d60247 100644
--- a/examples/l3fwd/l3fwd.h
+++ b/examples/l3fwd/l3fwd.h
@@ -1,5 +1,5 @@
 /* SPDX-License-Identifier: BSD-3-Clause
- * Copyright(c) 2010-2016 Intel Corporation
+ * Copyright(c) 2010-2021 Intel Corporation
  */
 
 #ifndef __L3_FWD_H__
@@ -180,13 +180,16 @@ is_valid_ipv4_pkt(struct rte_ipv4_hdr *pkt, uint32_t link_len)
 int
 init_mem(uint16_t portid, unsigned int nb_mbuf);
 
-/* Function pointers for LPM or EM functionality. */
+/* Function pointers for LPM, EM or FIB functionality. */
 void
 setup_lpm(const int socketid);
 
 void
 setup_hash(const int socketid);
 
+void
+setup_fib(const int socketid);
+
 int
 em_check_ptype(int portid);
 
@@ -207,6 +210,9 @@ em_main_loop(__rte_unused void *dummy);
 int
 lpm_main_loop(__rte_unused void *dummy);
 
+int
+fib_main_loop(__rte_unused void *dummy);
+
 int
 lpm_event_main_loop_tx_d(__rte_unused void *dummy);
 int
@@ -225,8 +231,17 @@ em_event_main_loop_tx_q(__rte_unused void *dummy);
 int
 em_event_main_loop_tx_q_burst(__rte_unused void *dummy);
 
+int
+fib_event_main_loop_tx_d(__rte_unused void *dummy);
+int
+fib_event_main_loop_tx_d_burst(__rte_unused void *dummy);
+int
+fib_event_main_loop_tx_q(__rte_unused void *dummy);
+int
+fib_event_main_loop_tx_q_burst(__rte_unused void *dummy);
+
 
-/* Return ipv4/ipv6 fwd lookup struct for LPM or EM. */
+/* Return ipv4/ipv6 fwd lookup struct for LPM, EM or FIB. */
 void *
 em_get_ipv4_l3fwd_lookup_struct(const int socketid);
 
@@ -239,4 +254,10 @@ lpm_get_ipv4_l3fwd_lookup_struct(const int socketid);
 void *
 lpm_get_ipv6_l3fwd_lookup_struct(const int socketid);
 
+void *
+fib_get_ipv4_l3fwd_lookup_struct(const int socketid);
+
+void *
+fib_get_ipv6_l3fwd_lookup_struct(const int socketid);
+
 #endif  /* __L3_FWD_H__ */
diff --git a/examples/l3fwd/l3fwd_event.c b/examples/l3fwd/l3fwd_event.c
index 4d31593a0a..961860ea18 100644
--- a/examples/l3fwd/l3fwd_event.c
+++ b/examples/l3fwd/l3fwd_event.c
@@ -227,6 +227,12 @@ l3fwd_event_resource_setup(struct rte_eth_conf *port_conf)
 		[1][0] = em_event_main_loop_tx_q,
 		[1][1] = em_event_main_loop_tx_q_burst,
 	};
+	const event_loop_cb fib_event_loop[2][2] = {
+		[0][0] = fib_event_main_loop_tx_d,
+		[0][1] = fib_event_main_loop_tx_d_burst,
+		[1][0] = fib_event_main_loop_tx_q,
+		[1][1] = fib_event_main_loop_tx_q_burst,
+	};
 	uint32_t event_queue_cfg;
 	int ret;
 
@@ -264,4 +270,7 @@ l3fwd_event_resource_setup(struct rte_eth_conf *port_conf)
 
 	evt_rsrc->ops.em_event_loop = em_event_loop[evt_rsrc->tx_mode_q]
 						       [evt_rsrc->has_burst];
+
+	evt_rsrc->ops.fib_event_loop = fib_event_loop[evt_rsrc->tx_mode_q]
+						       [evt_rsrc->has_burst];
 }
diff --git a/examples/l3fwd/l3fwd_event.h b/examples/l3fwd/l3fwd_event.h
index 0e46164170..3ad1902ab5 100644
--- a/examples/l3fwd/l3fwd_event.h
+++ b/examples/l3fwd/l3fwd_event.h
@@ -55,6 +55,7 @@ struct l3fwd_event_setup_ops {
 	adapter_setup_cb adapter_setup;
 	event_loop_cb lpm_event_loop;
 	event_loop_cb em_event_loop;
+	event_loop_cb fib_event_loop;
 };
 
 struct l3fwd_event_resources {
diff --git a/examples/l3fwd/l3fwd_fib.c b/examples/l3fwd/l3fwd_fib.c
new file mode 100644
index 0000000000..0a2d02db2f
--- /dev/null
+++ b/examples/l3fwd/l3fwd_fib.c
@@ -0,0 +1,60 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(c) 2021 Intel Corporation
+ */
+
+#include <rte_fib.h>
+#include <rte_fib6.h>
+
+#include "l3fwd.h"
+#include "l3fwd_event.h"
+#include "l3fwd_common_route.h"
+
+/* Main fib processing loop. */
+int
+fib_main_loop(__rte_unused void *dummy)
+{
+	return 0;
+}
+
+int __rte_noinline
+fib_event_main_loop_tx_d(__rte_unused void *dummy)
+{
+	return 0;
+}
+
+int __rte_noinline
+fib_event_main_loop_tx_d_burst(__rte_unused void *dummy)
+{
+	return 0;
+}
+
+int __rte_noinline
+fib_event_main_loop_tx_q(__rte_unused void *dummy)
+{
+	return 0;
+}
+
+int __rte_noinline
+fib_event_main_loop_tx_q_burst(__rte_unused void *dummy)
+{
+	return 0;
+}
+
+/* Function to setup fib. */
+void
+setup_fib(__rte_unused const int socketid)
+{}
+
+/* Return ipv4 fib lookup struct. */
+void *
+fib_get_ipv4_l3fwd_lookup_struct(__rte_unused const int socketid)
+{
+	return 0;
+}
+
+/* Return ipv6 fib lookup struct. */
+void *
+fib_get_ipv6_l3fwd_lookup_struct(__rte_unused const int socketid)
+{
+	return 0;
+}
diff --git a/examples/l3fwd/main.c b/examples/l3fwd/main.c
index bb49e5faff..3f48895e87 100644
--- a/examples/l3fwd/main.c
+++ b/examples/l3fwd/main.c
@@ -1,5 +1,5 @@
 /* SPDX-License-Identifier: BSD-3-Clause
- * Copyright(c) 2010-2016 Intel Corporation
+ * Copyright(c) 2010-2021 Intel Corporation
  */
 
 #include <stdio.h>
@@ -60,9 +60,14 @@ static uint16_t nb_txd = RTE_TEST_TX_DESC_DEFAULT;
 /**< Ports set in promiscuous mode off by default. */
 static int promiscuous_on;
 
-/* Select Longest-Prefix or Exact match. */
-static int l3fwd_lpm_on;
-static int l3fwd_em_on;
+/* Select Longest-Prefix, Exact match or Forwarding Information Base. */
+enum L3FWD_LOOKUP_MODE {
+	L3FWD_LOOKUP_DEFAULT,
+	L3FWD_LOOKUP_LPM,
+	L3FWD_LOOKUP_EM,
+	L3FWD_LOOKUP_FIB
+};
+static enum L3FWD_LOOKUP_MODE lookup_mode;
 
 /* Global variables. */
 
@@ -162,17 +167,29 @@ static struct l3fwd_lkp_mode l3fwd_lpm_lkp = {
 	.get_ipv6_lookup_struct = lpm_get_ipv6_l3fwd_lookup_struct,
 };
 
+static struct l3fwd_lkp_mode l3fwd_fib_lkp = {
+	.setup                  = setup_fib,
+	.check_ptype            = lpm_check_ptype,
+	.cb_parse_ptype         = lpm_cb_parse_ptype,
+	.main_loop              = fib_main_loop,
+	.get_ipv4_lookup_struct = fib_get_ipv4_l3fwd_lookup_struct,
+	.get_ipv6_lookup_struct = fib_get_ipv6_l3fwd_lookup_struct,
+};
+
 /*
  * Setup lookup methods for forwarding.
- * Currently exact-match and longest-prefix-match
- * are supported ones.
+ * Currently exact-match, longest-prefix-match and forwarding information
+ * base are the supported ones.
  */
 static void
 setup_l3fwd_lookup_tables(void)
 {
 	/* Setup HASH lookup functions. */
-	if (l3fwd_em_on)
+	if (lookup_mode == L3FWD_LOOKUP_EM)
 		l3fwd_lkp = l3fwd_em_lkp;
+	/* Setup FIB lookup functions. */
+	else if (lookup_mode == L3FWD_LOOKUP_FIB)
+		l3fwd_lkp = l3fwd_fib_lkp;
 	/* Setup LPM lookup functions. */
 	else
 		l3fwd_lkp = l3fwd_lpm_lkp;
@@ -286,12 +303,13 @@ print_usage(const char *prgname)
 		" [--parse-ptype]"
 		" [--per-port-pool]"
 		" [--mode]"
-		" [--eventq-sched]\n\n"
+		" [--eventq-sched]"
+		" [--lookup]\n\n"
 
 		"  -p PORTMASK: Hexadecimal bitmask of ports to configure\n"
 		"  -P : Enable promiscuous mode\n"
-		"  -E : Enable exact match\n"
-		"  -L : Enable longest prefix match (default)\n"
+		"  -E : Enable exact match, legacy flag please use --lookup=em instead\n"
+		"  -L : Enable longest prefix match, legacy flag please use --lookup=lpm instead\n"
 		"  --config (port,queue,lcore): Rx queue configuration\n"
 		"  --eth-dest=X,MM:MM:MM:MM:MM:MM: Ethernet destination for port X\n"
 		"  --enable-jumbo: Enable jumbo frames\n"
@@ -310,7 +328,10 @@ print_usage(const char *prgname)
 		"                  Valid only if --mode=eventdev\n"
 		"  --event-eth-rxqs: Number of ethernet RX queues per device.\n"
 		"                    Default: 1\n"
-		"                    Valid only if --mode=eventdev\n\n",
+		"                    Valid only if --mode=eventdev\n"
+		"  --lookup: Select the lookup method\n"
+		"            Default: lpm\n"
+		"            Accepted: em (Exact Match), lpm (Longest Prefix Match), fib (First Information Base)\n\n",
 		prgname);
 }
 
@@ -485,13 +506,32 @@ parse_event_eth_rx_queues(const char *eth_rx_queues)
 	evt_rsrc->eth_rx_queues = num_eth_rx_queues;
 }
 
+static void
+parse_lookup(const char *optarg)
+{
+	if (lookup_mode != L3FWD_LOOKUP_DEFAULT) {
+		rte_exit(EXIT_FAILURE,
+				"Only one lookup mode is allowed at a time!\n");
+	}
+	if (!strcmp(optarg, "em"))
+		lookup_mode = L3FWD_LOOKUP_EM;
+	else if (!strcmp(optarg, "lpm"))
+		lookup_mode = L3FWD_LOOKUP_LPM;
+	else if (!strcmp(optarg, "fib"))
+		lookup_mode = L3FWD_LOOKUP_FIB;
+	else {
+		rte_exit(EXIT_FAILURE,
+				"Invalid --lookup option! Accepted options: em, lpm, fib\n");
+	}
+}
+
 #define MAX_JUMBO_PKT_LEN  9600
 
 static const char short_options[] =
 	"p:"  /* portmask */
 	"P"   /* promiscuous */
-	"L"   /* enable long prefix match */
-	"E"   /* enable exact match */
+	"L"   /* legacy enable long prefix match */
+	"E"   /* legacy enable exact match */
 	;
 
 #define CMD_LINE_OPT_CONFIG "config"
@@ -505,6 +545,7 @@ static const char short_options[] =
 #define CMD_LINE_OPT_MODE "mode"
 #define CMD_LINE_OPT_EVENTQ_SYNC "eventq-sched"
 #define CMD_LINE_OPT_EVENT_ETH_RX_QUEUES "event-eth-rxqs"
+#define CMD_LINE_OPT_LOOKUP "lookup"
 enum {
 	/* long options mapped to a short option */
 
@@ -522,6 +563,7 @@ enum {
 	CMD_LINE_OPT_MODE_NUM,
 	CMD_LINE_OPT_EVENTQ_SYNC_NUM,
 	CMD_LINE_OPT_EVENT_ETH_RX_QUEUES_NUM,
+	CMD_LINE_OPT_LOOKUP_NUM,
 };
 
 static const struct option lgopts[] = {
@@ -537,6 +579,7 @@ static const struct option lgopts[] = {
 	{CMD_LINE_OPT_EVENTQ_SYNC, 1, 0, CMD_LINE_OPT_EVENTQ_SYNC_NUM},
 	{CMD_LINE_OPT_EVENT_ETH_RX_QUEUES, 1, 0,
 					CMD_LINE_OPT_EVENT_ETH_RX_QUEUES_NUM},
+	{CMD_LINE_OPT_LOOKUP, 1, 0, CMD_LINE_OPT_LOOKUP_NUM},
 	{NULL, 0, 0, 0}
 };
 
@@ -589,11 +632,19 @@ parse_args(int argc, char **argv)
 			break;
 
 		case 'E':
-			l3fwd_em_on = 1;
+			if (lookup_mode != L3FWD_LOOKUP_DEFAULT) {
+				fprintf(stderr, "Only one lookup mode is allowed at a time!\n");
+				return -1;
+			}
+			lookup_mode = L3FWD_LOOKUP_EM;
 			break;
 
 		case 'L':
-			l3fwd_lpm_on = 1;
+			if (lookup_mode != L3FWD_LOOKUP_DEFAULT) {
+				fprintf(stderr, "Only one lookup mode is allowed at a time!\n");
+				return -1;
+			}
+			lookup_mode = L3FWD_LOOKUP_LPM;
 			break;
 
 		/* long options */
@@ -680,18 +731,16 @@ parse_args(int argc, char **argv)
 			eth_rx_q = 1;
 			break;
 
+		case CMD_LINE_OPT_LOOKUP_NUM:
+			parse_lookup(optarg);
+			break;
+
 		default:
 			print_usage(prgname);
 			return -1;
 		}
 	}
 
-	/* If both LPM and EM are selected, return error. */
-	if (l3fwd_lpm_on && l3fwd_em_on) {
-		fprintf(stderr, "LPM and EM are mutually exclusive, select only one\n");
-		return -1;
-	}
-
 	if (evt_rsrc->enabled && lcore_params) {
 		fprintf(stderr, "lcore config is not valid when event mode is selected\n");
 		return -1;
@@ -711,17 +760,17 @@ parse_args(int argc, char **argv)
 	 * Nothing is selected, pick longest-prefix match
 	 * as default match.
 	 */
-	if (!l3fwd_lpm_on && !l3fwd_em_on) {
-		fprintf(stderr, "LPM or EM none selected, default LPM on\n");
-		l3fwd_lpm_on = 1;
+	if (lookup_mode == L3FWD_LOOKUP_DEFAULT) {
+		fprintf(stderr, "Neither LPM, EM, or FIB selected, defaulting to LPM\n");
+		lookup_mode = L3FWD_LOOKUP_LPM;
 	}
 
 	/*
 	 * ipv6 and hash flags are valid only for
-	 * exact macth, reset them to default for
+	 * exact match, reset them to default for
 	 * longest-prefix match.
 	 */
-	if (l3fwd_lpm_on) {
+	if (lookup_mode == L3FWD_LOOKUP_LPM) {
 		ipv6 = 0;
 		hash_entry_number = HASH_ENTRY_NUMBER_DEFAULT;
 	}
@@ -780,7 +829,7 @@ init_mem(uint16_t portid, unsigned int nb_mbuf)
 				printf("Allocated mbuf pool on socket %d\n",
 					socketid);
 
-			/* Setup either LPM or EM(f.e Hash). But, only once per
+			/* Setup LPM, EM(f.e Hash) or FIB. But, only once per
 			 * available socket.
 			 */
 			if (!lkp_per_socket[socketid]) {
@@ -1219,8 +1268,10 @@ main(int argc, char **argv)
 	/* Configure eventdev parameters if user has requested */
 	if (evt_rsrc->enabled) {
 		l3fwd_event_resource_setup(&port_conf);
-		if (l3fwd_em_on)
+		if (lookup_mode == L3FWD_LOOKUP_EM)
 			l3fwd_lkp.main_loop = evt_rsrc->ops.em_event_loop;
+		else if (lookup_mode == L3FWD_LOOKUP_FIB)
+			l3fwd_lkp.main_loop = evt_rsrc->ops.fib_event_loop;
 		else
 			l3fwd_lkp.main_loop = evt_rsrc->ops.lpm_event_loop;
 		l3fwd_event_service_setup();
diff --git a/examples/l3fwd/meson.build b/examples/l3fwd/meson.build
index 7d72b1b365..2e5d1d34f2 100644
--- a/examples/l3fwd/meson.build
+++ b/examples/l3fwd/meson.build
@@ -7,8 +7,8 @@
 # DPDK instance, use 'make'
 
 allow_experimental_apis = true
-deps += ['hash', 'lpm', 'eventdev']
+deps += ['hash', 'lpm', 'fib', 'eventdev']
 sources = files(
-	'l3fwd_em.c', 'l3fwd_lpm.c', 'l3fwd_event.c',
+	'l3fwd_em.c', 'l3fwd_lpm.c', 'l3fwd_fib.c', 'l3fwd_event.c',
 	'l3fwd_event_internal_port.c', 'l3fwd_event_generic.c', 'main.c'
 )
-- 
2.25.1


  parent reply	other threads:[~2021-03-15 11:35 UTC|newest]

Thread overview: 77+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-02-18 12:15 [dpdk-dev] [PATCH 0/5] examples/l3fwd: add FIB lookup method to l3fwd Conor Walsh
2021-02-18 12:15 ` [dpdk-dev] [PATCH 1/5] examples/l3fwd: fix LPM IPv6 subnets Conor Walsh
2021-02-18 12:15 ` [dpdk-dev] [PATCH 2/5] examples/l3fwd: move l3fwd routes to common header Conor Walsh
2021-02-18 12:15 ` [dpdk-dev] [PATCH 3/5] examples/l3fwd: add FIB infrastructure Conor Walsh
2021-02-18 12:15 ` [dpdk-dev] [PATCH 4/5] examples/l3fwd: implement FIB lookup method Conor Walsh
2021-02-18 12:15 ` [dpdk-dev] [PATCH 5/5] doc/guides/l3_forward: update documentation for FIB Conor Walsh
2021-02-18 15:20 ` [dpdk-dev] [PATCH v2 0/5] examples/l3fwd: add FIB lookup method to l3fwd Conor Walsh
2021-02-18 15:20   ` [dpdk-dev] [PATCH v2 1/5] examples/l3fwd: fix LPM IPv6 subnets Conor Walsh
2021-02-18 15:20   ` [dpdk-dev] [PATCH v2 2/5] examples/l3fwd: move l3fwd routes to common header Conor Walsh
2021-02-18 15:20   ` [dpdk-dev] [PATCH v2 3/5] examples/l3fwd: add FIB infrastructure Conor Walsh
2021-02-18 15:20   ` [dpdk-dev] [PATCH v2 4/5] examples/l3fwd: implement FIB lookup method Conor Walsh
2021-02-18 15:20   ` [dpdk-dev] [PATCH v2 5/5] doc/guides/l3_forward: update documentation for FIB Conor Walsh
2021-02-19 15:09   ` [dpdk-dev] [PATCH v3 0/5] examples/l3fwd: add FIB lookup method to l3fwd Conor Walsh
2021-02-19 15:09     ` [dpdk-dev] [PATCH v3 1/5] examples/l3fwd: fix LPM IPv6 subnets Conor Walsh
2021-03-08 10:41       ` Medvedkin, Vladimir
2021-02-19 15:09     ` [dpdk-dev] [PATCH v3 2/5] examples/l3fwd: move l3fwd routes to common header Conor Walsh
2021-03-02 16:20       ` Ananyev, Konstantin
2021-03-08 10:42       ` Medvedkin, Vladimir
2021-02-19 15:09     ` [dpdk-dev] [PATCH v3 3/5] examples/l3fwd: add FIB infrastructure Conor Walsh
2021-03-02 16:22       ` Ananyev, Konstantin
2021-03-03 11:36       ` Burakov, Anatoly
2021-03-08 15:13         ` Walsh, Conor
2021-03-08 10:42       ` Medvedkin, Vladimir
2021-02-19 15:09     ` [dpdk-dev] [PATCH v3 4/5] examples/l3fwd: implement FIB lookup method Conor Walsh
2021-03-02 16:21       ` Ananyev, Konstantin
2021-03-03 11:52       ` Burakov, Anatoly
2021-03-08 15:35         ` Walsh, Conor
2021-03-08 10:43       ` Medvedkin, Vladimir
2021-03-08 17:20         ` Walsh, Conor
2021-02-19 15:09     ` [dpdk-dev] [PATCH v3 5/5] doc/guides/l3_forward: update documentation for FIB Conor Walsh
2021-03-11 12:01     ` [dpdk-dev] [PATCH v4 0/5] examples/l3fwd: add FIB lookup method to l3fwd Conor Walsh
2021-03-11 12:01       ` [dpdk-dev] [PATCH v4 1/5] examples/l3fwd: fix LPM IPv6 subnets Conor Walsh
2021-03-11 12:01       ` [dpdk-dev] [PATCH v4 2/5] examples/l3fwd: move l3fwd routes to common header Conor Walsh
2021-03-11 12:01       ` [dpdk-dev] [PATCH v4 3/5] examples/l3fwd: add FIB infrastructure Conor Walsh
2021-03-11 12:01       ` [dpdk-dev] [PATCH v4 4/5] examples/l3fwd: implement FIB lookup method Conor Walsh
2021-03-12 18:56         ` Medvedkin, Vladimir
2021-03-15 10:21           ` Walsh, Conor
2021-03-11 12:01       ` [dpdk-dev] [PATCH v4 5/5] doc/guides/l3_forward: update documentation for FIB Conor Walsh
2021-03-15 11:34       ` [dpdk-dev] [PATCH v5 0/5] examples/l3fwd: add FIB lookup method to l3fwd Conor Walsh
2021-03-15 11:34         ` [dpdk-dev] [PATCH v5 1/5] examples/l3fwd: fix LPM IPv6 subnets Conor Walsh
2021-03-15 11:34         ` [dpdk-dev] [PATCH v5 2/5] examples/l3fwd: move l3fwd routes to common header Conor Walsh
2021-03-15 11:34         ` Conor Walsh [this message]
2021-04-01 11:20           ` [dpdk-dev] [PATCH v5 3/5] examples/l3fwd: add FIB infrastructure Burakov, Anatoly
2021-04-01 12:59             ` Walsh, Conor
2021-03-15 11:34         ` [dpdk-dev] [PATCH v5 4/5] examples/l3fwd: implement FIB lookup method Conor Walsh
2021-03-16 18:46           ` Medvedkin, Vladimir
2021-03-15 11:34         ` [dpdk-dev] [PATCH v5 5/5] doc/guides/l3_forward: update documentation for FIB Conor Walsh
2021-03-18 19:45           ` Mcnamara, John
2021-04-02 10:52         ` [dpdk-dev] [PATCH v6 0/5] examples/l3fwd: add FIB lookup method to l3fwd Conor Walsh
2021-04-02 10:52           ` [dpdk-dev] [PATCH v6 1/5] examples/l3fwd: fix LPM IPv6 subnets Conor Walsh
2021-04-02 10:52           ` [dpdk-dev] [PATCH v6 2/5] examples/l3fwd: move l3fwd routes to common header Conor Walsh
2021-04-02 10:52           ` [dpdk-dev] [PATCH v6 3/5] examples/l3fwd: add FIB infrastructure Conor Walsh
2021-04-02 16:34             ` Burakov, Anatoly
2021-04-06 11:05               ` Walsh, Conor
2021-04-02 10:52           ` [dpdk-dev] [PATCH v6 4/5] examples/l3fwd: implement FIB lookup method Conor Walsh
2021-04-02 10:52           ` [dpdk-dev] [PATCH v6 5/5] doc/guides/l3_forward: update documentation for FIB Conor Walsh
2021-04-06 11:11           ` [dpdk-dev] [PATCH v7 0/5] examples/l3fwd: add FIB lookup method to l3fwd Conor Walsh
2021-04-06 11:11             ` [dpdk-dev] [PATCH v7 1/5] examples/l3fwd: fix LPM IPv6 subnets Conor Walsh
2021-04-14 20:59               ` David Marchand
2021-04-15  8:44                 ` Walsh, Conor
2021-04-15 14:31                   ` David Marchand
2021-04-15 15:18                     ` Walsh, Conor
2021-04-06 11:11             ` [dpdk-dev] [PATCH v7 2/5] examples/l3fwd: move l3fwd routes to common header Conor Walsh
2021-04-15 14:38               ` David Marchand
2021-04-06 11:11             ` [dpdk-dev] [PATCH v7 3/5] examples/l3fwd: add FIB infrastructure Conor Walsh
2021-04-06 11:11             ` [dpdk-dev] [PATCH v7 4/5] examples/l3fwd: implement FIB lookup method Conor Walsh
2021-04-15 14:42               ` David Marchand
2021-04-06 11:11             ` [dpdk-dev] [PATCH v7 5/5] doc/guides/l3_forward: update documentation for FIB Conor Walsh
2021-04-15 14:43               ` David Marchand
2021-04-15 14:59               ` David Marchand
2021-04-16 17:19             ` [dpdk-dev] [PATCH v8 0/5] examples/l3fwd: add FIB lookup method to l3fwd Conor Walsh
2021-04-16 17:19               ` [dpdk-dev] [PATCH v8 1/5] examples/l3fwd: fix LPM IPv6 subnets Conor Walsh
2021-04-16 17:19               ` [dpdk-dev] [PATCH v8 2/5] examples/l3fwd: move l3fwd routes to common header Conor Walsh
2021-04-16 17:19               ` [dpdk-dev] [PATCH v8 3/5] examples/l3fwd: add FIB infrastructure Conor Walsh
2021-04-16 17:19               ` [dpdk-dev] [PATCH v8 4/5] examples/l3fwd: implement FIB lookup method Conor Walsh
2021-04-16 17:19               ` [dpdk-dev] [PATCH v8 5/5] doc/guides/l3_forward: update documentation for FIB Conor Walsh
2021-04-20 18:28               ` [dpdk-dev] [PATCH v8 0/5] examples/l3fwd: add FIB lookup method to l3fwd Thomas Monjalon

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20210315113439.1045223-4-conor.walsh@intel.com \
    --to=conor.walsh@intel.com \
    --cc=anatoly.burakov@intel.com \
    --cc=bernard.iremonger@intel.com \
    --cc=dev@dpdk.org \
    --cc=jerinj@marvell.com \
    --cc=konstantin.ananyev@intel.com \
    --cc=stephen@networkplumber.org \
    --cc=vladimir.medvedkin@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).