DPDK patches and discussions
 help / color / mirror / Atom feed
* [dpdk-dev]  [PATCH 1/2] examples/l3fwd: increase number of routes
@ 2019-10-30  5:23 pbhagavatula
  2019-10-30  5:23 ` [dpdk-dev] [PATCH 2/2] examples/l3fwd: print port bdf when initializing routes pbhagavatula
                   ` (2 more replies)
  0 siblings, 3 replies; 26+ messages in thread
From: pbhagavatula @ 2019-10-30  5:23 UTC (permalink / raw)
  To: jerinj, Marko Kovacevic, Ori Kam, Bruce Richardson, Radu Nicolau,
	Akhil Goyal, Tomasz Kantecki
  Cc: dev, Pavan Nikhilesh

From: Pavan Nikhilesh <pbhagavatula@marvell.com>

Increase the number of routes from 8 to 16 that are statically added for
lpm and em mode as most of the SoCs support more than 8 interfaces.

Signed-off-by: Pavan Nikhilesh <pbhagavatula@marvell.com>
---
 examples/l3fwd/l3fwd_em.c  | 72 ++++++++++++++++++++++++++++++++++++++
 examples/l3fwd/l3fwd_lpm.c | 16 +++++++++
 2 files changed, 88 insertions(+)

diff --git a/examples/l3fwd/l3fwd_em.c b/examples/l3fwd/l3fwd_em.c
index 74a7c8fa4..c07a5b937 100644
--- a/examples/l3fwd/l3fwd_em.c
+++ b/examples/l3fwd/l3fwd_em.c
@@ -103,6 +103,18 @@ static struct ipv4_l3fwd_em_route ipv4_l3fwd_em_route_array[] = {
 	{{RTE_IPV4(201, 0, 0, 0), RTE_IPV4(200, 20, 0, 1),  102, 12, IPPROTO_TCP}, 1},
 	{{RTE_IPV4(111, 0, 0, 0), RTE_IPV4(100, 30, 0, 1),  101, 11, IPPROTO_TCP}, 2},
 	{{RTE_IPV4(211, 0, 0, 0), RTE_IPV4(200, 40, 0, 1),  102, 12, IPPROTO_TCP}, 3},
+	{{RTE_IPV4(121, 0, 0, 0), RTE_IPV4(100, 10, 0, 1),  101, 11, IPPROTO_TCP}, 4},
+	{{RTE_IPV4(221, 0, 0, 0), RTE_IPV4(200, 20, 0, 1),  102, 12, IPPROTO_TCP}, 5},
+	{{RTE_IPV4(131, 0, 0, 0), RTE_IPV4(100, 30, 0, 1),  101, 11, IPPROTO_TCP}, 6},
+	{{RTE_IPV4(231, 0, 0, 0), RTE_IPV4(200, 40, 0, 1),  102, 12, IPPROTO_TCP}, 7},
+	{{RTE_IPV4(141, 0, 0, 0), RTE_IPV4(100, 30, 0, 1),  101, 11, IPPROTO_TCP}, 8},
+	{{RTE_IPV4(241, 0, 0, 0), RTE_IPV4(200, 40, 0, 1),  102, 12, IPPROTO_TCP}, 9},
+	{{RTE_IPV4(151, 0, 0, 0), RTE_IPV4(100, 30, 0, 1),  101, 11, IPPROTO_TCP}, 10},
+	{{RTE_IPV4(251, 0, 0, 0), RTE_IPV4(200, 40, 0, 1),  102, 12, IPPROTO_TCP}, 11},
+	{{RTE_IPV4(161, 0, 0, 0), RTE_IPV4(100, 30, 0, 1),  101, 11, IPPROTO_TCP}, 12},
+	{{RTE_IPV4(261, 0, 0, 0), RTE_IPV4(200, 40, 0, 1),  102, 12, IPPROTO_TCP}, 13},
+	{{RTE_IPV4(171, 0, 0, 0), RTE_IPV4(100, 30, 0, 1),  101, 11, IPPROTO_TCP}, 14},
+	{{RTE_IPV4(271, 0, 0, 0), RTE_IPV4(200, 40, 0, 1),  102, 12, IPPROTO_TCP}, 15},
 };
 
 static struct ipv6_l3fwd_em_route ipv6_l3fwd_em_route_array[] = {
@@ -125,6 +137,66 @@ static struct ipv6_l3fwd_em_route ipv6_l3fwd_em_route_array[] = {
 	{0xfe, 0xb0, 0, 0, 0, 0, 0, 0, 0x02, 0x1e, 0x67, 0xff, 0xfe, 0, 0, 0},
 	{0xfe, 0xb0, 0, 0, 0, 0, 0, 0, 0x02, 0x1b, 0x21, 0xff, 0xfe, 0x91, 0x38, 0x05},
 	102, 12, IPPROTO_TCP}, 3},
+
+	{{
+	{0xfe, 0xc0, 0, 0, 0, 0, 0, 0, 0x02, 0x1e, 0x67, 0xff, 0xfe, 0, 0, 0},
+	{0xfe, 0xc0, 0, 0, 0, 0, 0, 0, 0x02, 0x1b, 0x21, 0xff, 0xfe, 0x91, 0x38, 0x05},
+	101, 11, IPPROTO_TCP}, 4},
+
+	{{
+	{0xfe, 0xd0, 0, 0, 0, 0, 0, 0, 0x02, 0x1e, 0x67, 0xff, 0xfe, 0, 0, 0},
+	{0xfe, 0xd0, 0, 0, 0, 0, 0, 0, 0x02, 0x1b, 0x21, 0xff, 0xfe, 0x91, 0x38, 0x05},
+	102, 12, IPPROTO_TCP}, 5},
+
+	{{
+	{0xfe, 0xe0, 0, 0, 0, 0, 0, 0, 0x02, 0x1e, 0x67, 0xff, 0xfe, 0, 0, 0},
+	{0xfe, 0xe0, 0, 0, 0, 0, 0, 0, 0x02, 0x1b, 0x21, 0xff, 0xfe, 0x91, 0x38, 0x05},
+	101, 11, IPPROTO_TCP}, 6},
+
+	{{
+	{0xfe, 0xf0, 0, 0, 0, 0, 0, 0, 0x02, 0x1e, 0x67, 0xff, 0xfe, 0, 0, 0},
+	{0xfe, 0xf0, 0, 0, 0, 0, 0, 0, 0x02, 0x1b, 0x21, 0xff, 0xfe, 0x91, 0x38, 0x05},
+	102, 12, IPPROTO_TCP}, 7},
+
+	{{
+	{0xfe, 0x81, 0, 0, 0, 0, 0, 0, 0x02, 0x1e, 0x67, 0xff, 0xfe, 0, 0, 0},
+	{0xfe, 0x81, 0, 0, 0, 0, 0, 0, 0x02, 0x1b, 0x21, 0xff, 0xfe, 0x91, 0x38, 0x05},
+	101, 11, IPPROTO_TCP}, 8},
+
+	{{
+	{0xfe, 0x92, 0, 0, 0, 0, 0, 0, 0x02, 0x1e, 0x67, 0xff, 0xfe, 0, 0, 0},
+	{0xfe, 0x92, 0, 0, 0, 0, 0, 0, 0x02, 0x1b, 0x21, 0xff, 0xfe, 0x91, 0x38, 0x05},
+	102, 12, IPPROTO_TCP}, 9},
+
+	{{
+	{0xfe, 0xa3, 0, 0, 0, 0, 0, 0, 0x02, 0x1e, 0x67, 0xff, 0xfe, 0, 0, 0},
+	{0xfe, 0xa3, 0, 0, 0, 0, 0, 0, 0x02, 0x1b, 0x21, 0xff, 0xfe, 0x91, 0x38, 0x05},
+	101, 11, IPPROTO_TCP}, 10},
+
+	{{
+	{0xfe, 0xb4, 0, 0, 0, 0, 0, 0, 0x02, 0x1e, 0x67, 0xff, 0xfe, 0, 0, 0},
+	{0xfe, 0xb4, 0, 0, 0, 0, 0, 0, 0x02, 0x1b, 0x21, 0xff, 0xfe, 0x91, 0x38, 0x05},
+	102, 12, IPPROTO_TCP}, 11},
+
+	{{
+	{0xfe, 0xc5, 0, 0, 0, 0, 0, 0, 0x02, 0x1e, 0x67, 0xff, 0xfe, 0, 0, 0},
+	{0xfe, 0xc5, 0, 0, 0, 0, 0, 0, 0x02, 0x1b, 0x21, 0xff, 0xfe, 0x91, 0x38, 0x05},
+	101, 11, IPPROTO_TCP}, 12},
+
+	{{
+	{0xfe, 0xd6, 0, 0, 0, 0, 0, 0, 0x02, 0x1e, 0x67, 0xff, 0xfe, 0, 0, 0},
+	{0xfe, 0xd6, 0, 0, 0, 0, 0, 0, 0x02, 0x1b, 0x21, 0xff, 0xfe, 0x91, 0x38, 0x05},
+	102, 12, IPPROTO_TCP}, 13},
+
+	{{
+	{0xfe, 0xe7, 0, 0, 0, 0, 0, 0, 0x02, 0x1e, 0x67, 0xff, 0xfe, 0, 0, 0},
+	{0xfe, 0xe7, 0, 0, 0, 0, 0, 0, 0x02, 0x1b, 0x21, 0xff, 0xfe, 0x91, 0x38, 0x05},
+	101, 11, IPPROTO_TCP}, 14},
+
+	{{
+	{0xfe, 0xf8, 0, 0, 0, 0, 0, 0, 0x02, 0x1e, 0x67, 0xff, 0xfe, 0, 0, 0},
+	{0xfe, 0xf8, 0, 0, 0, 0, 0, 0, 0x02, 0x1b, 0x21, 0xff, 0xfe, 0x91, 0x38, 0x05},
+	102, 12, IPPROTO_TCP}, 15},
 };
 
 struct rte_hash *ipv4_l3fwd_em_lookup_struct[NB_SOCKETS];
diff --git a/examples/l3fwd/l3fwd_lpm.c b/examples/l3fwd/l3fwd_lpm.c
index a3a65f7fc..ace5823b5 100644
--- a/examples/l3fwd/l3fwd_lpm.c
+++ b/examples/l3fwd/l3fwd_lpm.c
@@ -51,6 +51,14 @@ static struct ipv4_l3fwd_lpm_route ipv4_l3fwd_lpm_route_array[] = {
 	{RTE_IPV4(192, 18, 5, 0), 24, 5},
 	{RTE_IPV4(192, 18, 6, 0), 24, 6},
 	{RTE_IPV4(192, 18, 7, 0), 24, 7},
+	{RTE_IPV4(192, 18, 8, 0), 24, 8},
+	{RTE_IPV4(192, 18, 9, 0), 24, 9},
+	{RTE_IPV4(192, 18, 10, 0), 24, 10},
+	{RTE_IPV4(192, 18, 11, 0), 24, 11},
+	{RTE_IPV4(192, 18, 12, 0), 24, 12},
+	{RTE_IPV4(192, 18, 13, 0), 24, 13},
+	{RTE_IPV4(192, 18, 14, 0), 24, 14},
+	{RTE_IPV4(192, 18, 15, 0), 24, 15},
 };
 
 /* 2001:0200::/48 is IANA reserved range for IPv6 benchmarking (RFC5180) */
@@ -63,6 +71,14 @@ static struct ipv6_l3fwd_lpm_route ipv6_l3fwd_lpm_route_array[] = {
 	{{32, 1, 2, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0}, 48, 5},
 	{{32, 1, 2, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0}, 48, 6},
 	{{32, 1, 2, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0}, 48, 7},
+	{{32, 1, 2, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0}, 48, 8},
+	{{32, 1, 2, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0}, 48, 9},
+	{{32, 1, 2, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0}, 48, 10},
+	{{32, 1, 2, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0}, 48, 11},
+	{{32, 1, 2, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0}, 48, 12},
+	{{32, 1, 2, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0}, 48, 13},
+	{{32, 1, 2, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0}, 48, 14},
+	{{32, 1, 2, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0}, 48, 15},
 };
 
 #define IPV4_L3FWD_LPM_NUM_ROUTES \
-- 
2.17.1


^ permalink raw reply	[flat|nested] 26+ messages in thread

* [dpdk-dev] [PATCH 2/2] examples/l3fwd: print port bdf when initializing routes
  2019-10-30  5:23 [dpdk-dev] [PATCH 1/2] examples/l3fwd: increase number of routes pbhagavatula
@ 2019-10-30  5:23 ` pbhagavatula
  2019-11-08  8:51 ` [dpdk-dev] [PATCH 1/2] examples/l3fwd: increase number of routes David Marchand
  2020-08-02 18:16 ` [dpdk-dev] [PATCH v2 1/3] " pbhagavatula
  2 siblings, 0 replies; 26+ messages in thread
From: pbhagavatula @ 2019-10-30  5:23 UTC (permalink / raw)
  To: jerinj, Marko Kovacevic, Ori Kam, Bruce Richardson, Radu Nicolau,
	Akhil Goyal, Tomasz Kantecki
  Cc: dev, Pavan Nikhilesh

From: Pavan Nikhilesh <pbhagavatula@marvell.com>

Since the number of Ethernet ports have gone up, print the pci bdf along
with the routes.
This is also helpful for cases where whitelisting order is honored.

Signed-off-by: Pavan Nikhilesh <pbhagavatula@marvell.com>
---
 examples/l3fwd/l3fwd_lpm.c | 16 ++++++++++++----
 1 file changed, 12 insertions(+), 4 deletions(-)

diff --git a/examples/l3fwd/l3fwd_lpm.c b/examples/l3fwd/l3fwd_lpm.c
index ace5823b5..707912a87 100644
--- a/examples/l3fwd/l3fwd_lpm.c
+++ b/examples/l3fwd/l3fwd_lpm.c
@@ -294,6 +294,7 @@ setup_lpm(const int socketid)
 
 	/* populate the LPM table */
 	for (i = 0; i < IPV4_L3FWD_LPM_NUM_ROUTES; i++) {
+		struct rte_eth_dev_info dev_info;
 		struct in_addr in;
 
 		/* skip unused ports */
@@ -301,6 +302,8 @@ setup_lpm(const int socketid)
 				enabled_port_mask) == 0)
 			continue;
 
+		rte_eth_dev_info_get(ipv4_l3fwd_lpm_route_array[i].if_out,
+				     &dev_info);
 		ret = rte_lpm_add(ipv4_l3fwd_lpm_lookup_struct[socketid],
 			ipv4_l3fwd_lpm_route_array[i].ip,
 			ipv4_l3fwd_lpm_route_array[i].depth,
@@ -313,10 +316,11 @@ setup_lpm(const int socketid)
 		}
 
 		in.s_addr = htonl(ipv4_l3fwd_lpm_route_array[i].ip);
-		printf("LPM: Adding route %s / %d (%d)\n",
+		printf("LPM: Adding route %s / %d (%d) [%s]\n",
 		       inet_ntop(AF_INET, &in, abuf, sizeof(abuf)),
 			ipv4_l3fwd_lpm_route_array[i].depth,
-			ipv4_l3fwd_lpm_route_array[i].if_out);
+			ipv4_l3fwd_lpm_route_array[i].if_out,
+			dev_info.device->name);
 	}
 
 	/* create the LPM6 table */
@@ -334,12 +338,15 @@ setup_lpm(const int socketid)
 
 	/* populate the LPM table */
 	for (i = 0; i < IPV6_L3FWD_LPM_NUM_ROUTES; i++) {
+		struct rte_eth_dev_info dev_info;
 
 		/* skip unused ports */
 		if ((1 << ipv6_l3fwd_lpm_route_array[i].if_out &
 				enabled_port_mask) == 0)
 			continue;
 
+		rte_eth_dev_info_get(ipv4_l3fwd_lpm_route_array[i].if_out,
+				     &dev_info);
 		ret = rte_lpm6_add(ipv6_l3fwd_lpm_lookup_struct[socketid],
 			ipv6_l3fwd_lpm_route_array[i].ip,
 			ipv6_l3fwd_lpm_route_array[i].depth,
@@ -351,11 +358,12 @@ setup_lpm(const int socketid)
 				i, socketid);
 		}
 
-		printf("LPM: Adding route %s / %d (%d)\n",
+		printf("LPM: Adding route %s / %d (%d) [%s]\n",
 		       inet_ntop(AF_INET6, ipv6_l3fwd_lpm_route_array[i].ip,
 				 abuf, sizeof(abuf)),
 		       ipv6_l3fwd_lpm_route_array[i].depth,
-		       ipv6_l3fwd_lpm_route_array[i].if_out);
+		       ipv6_l3fwd_lpm_route_array[i].if_out,
+		       dev_info.device->name);
 	}
 }
 
-- 
2.17.1


^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [dpdk-dev] [PATCH 1/2] examples/l3fwd: increase number of routes
  2019-10-30  5:23 [dpdk-dev] [PATCH 1/2] examples/l3fwd: increase number of routes pbhagavatula
  2019-10-30  5:23 ` [dpdk-dev] [PATCH 2/2] examples/l3fwd: print port bdf when initializing routes pbhagavatula
@ 2019-11-08  8:51 ` David Marchand
  2020-08-02 18:16 ` [dpdk-dev] [PATCH v2 1/3] " pbhagavatula
  2 siblings, 0 replies; 26+ messages in thread
From: David Marchand @ 2019-11-08  8:51 UTC (permalink / raw)
  To: Pavan Nikhilesh
  Cc: Jerin Jacob Kollanukkaran, Marko Kovacevic, Ori Kam,
	Bruce Richardson, Radu Nicolau, Akhil Goyal, Tomasz Kantecki,
	dev

On Wed, Oct 30, 2019 at 6:23 AM <pbhagavatula@marvell.com> wrote:
>
> From: Pavan Nikhilesh <pbhagavatula@marvell.com>
>
> Increase the number of routes from 8 to 16 that are statically added for
> lpm and em mode as most of the SoCs support more than 8 interfaces.
>
> Signed-off-by: Pavan Nikhilesh <pbhagavatula@marvell.com>
> ---
>  examples/l3fwd/l3fwd_em.c  | 72 ++++++++++++++++++++++++++++++++++++++
>  examples/l3fwd/l3fwd_lpm.c | 16 +++++++++
>  2 files changed, 88 insertions(+)
>
> diff --git a/examples/l3fwd/l3fwd_em.c b/examples/l3fwd/l3fwd_em.c
> index 74a7c8fa4..c07a5b937 100644
> --- a/examples/l3fwd/l3fwd_em.c
> +++ b/examples/l3fwd/l3fwd_em.c
> @@ -103,6 +103,18 @@ static struct ipv4_l3fwd_em_route ipv4_l3fwd_em_route_array[] = {
>         {{RTE_IPV4(201, 0, 0, 0), RTE_IPV4(200, 20, 0, 1),  102, 12, IPPROTO_TCP}, 1},
>         {{RTE_IPV4(111, 0, 0, 0), RTE_IPV4(100, 30, 0, 1),  101, 11, IPPROTO_TCP}, 2},
>         {{RTE_IPV4(211, 0, 0, 0), RTE_IPV4(200, 40, 0, 1),  102, 12, IPPROTO_TCP}, 3},
> +       {{RTE_IPV4(121, 0, 0, 0), RTE_IPV4(100, 10, 0, 1),  101, 11, IPPROTO_TCP}, 4},
> +       {{RTE_IPV4(221, 0, 0, 0), RTE_IPV4(200, 20, 0, 1),  102, 12, IPPROTO_TCP}, 5},
> +       {{RTE_IPV4(131, 0, 0, 0), RTE_IPV4(100, 30, 0, 1),  101, 11, IPPROTO_TCP}, 6},
> +       {{RTE_IPV4(231, 0, 0, 0), RTE_IPV4(200, 40, 0, 1),  102, 12, IPPROTO_TCP}, 7},
> +       {{RTE_IPV4(141, 0, 0, 0), RTE_IPV4(100, 30, 0, 1),  101, 11, IPPROTO_TCP}, 8},
> +       {{RTE_IPV4(241, 0, 0, 0), RTE_IPV4(200, 40, 0, 1),  102, 12, IPPROTO_TCP}, 9},
> +       {{RTE_IPV4(151, 0, 0, 0), RTE_IPV4(100, 30, 0, 1),  101, 11, IPPROTO_TCP}, 10},
> +       {{RTE_IPV4(251, 0, 0, 0), RTE_IPV4(200, 40, 0, 1),  102, 12, IPPROTO_TCP}, 11},
> +       {{RTE_IPV4(161, 0, 0, 0), RTE_IPV4(100, 30, 0, 1),  101, 11, IPPROTO_TCP}, 12},
> +       {{RTE_IPV4(261, 0, 0, 0), RTE_IPV4(200, 40, 0, 1),  102, 12, IPPROTO_TCP}, 13},

Am I reading this correctly ? 261.0.0.0 ?


-- 
David Marchand


^ permalink raw reply	[flat|nested] 26+ messages in thread

* [dpdk-dev] [PATCH v2 1/3] examples/l3fwd: increase number of routes
  2019-10-30  5:23 [dpdk-dev] [PATCH 1/2] examples/l3fwd: increase number of routes pbhagavatula
  2019-10-30  5:23 ` [dpdk-dev] [PATCH 2/2] examples/l3fwd: print port bdf when initializing routes pbhagavatula
  2019-11-08  8:51 ` [dpdk-dev] [PATCH 1/2] examples/l3fwd: increase number of routes David Marchand
@ 2020-08-02 18:16 ` pbhagavatula
  2020-08-02 18:16   ` [dpdk-dev] [PATCH v2 2/3] examples/l3fwd: use IP reserved addresses for EM mode pbhagavatula
                     ` (2 more replies)
  2 siblings, 3 replies; 26+ messages in thread
From: pbhagavatula @ 2020-08-02 18:16 UTC (permalink / raw)
  To: jerinj, thomas, david.marchand, Marko Kovacevic, Ori Kam,
	Bruce Richardson, Radu Nicolau, Akhil Goyal, Tomasz Kantecki,
	Sunil Kumar Kori, Pavan Nikhilesh
  Cc: dev

From: Pavan Nikhilesh <pbhagavatula@marvell.com>

Increase the number of routes from 8 to 16 that are statically added for
lpm and em mode as most of the SoCs support more than 8 interfaces.

Signed-off-by: Pavan Nikhilesh <pbhagavatula@marvell.com>
---
 v2 Changes:
 - Fixup for EM mode.

 examples/l3fwd/l3fwd_lpm.c | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/examples/l3fwd/l3fwd_lpm.c b/examples/l3fwd/l3fwd_lpm.c
index 91eb74272..00047c706 100644
--- a/examples/l3fwd/l3fwd_lpm.c
+++ b/examples/l3fwd/l3fwd_lpm.c
@@ -52,6 +52,14 @@ static const struct ipv4_l3fwd_lpm_route ipv4_l3fwd_lpm_route_array[] = {
 	{RTE_IPV4(198, 18, 5, 0), 24, 5},
 	{RTE_IPV4(198, 18, 6, 0), 24, 6},
 	{RTE_IPV4(198, 18, 7, 0), 24, 7},
+	{RTE_IPV4(198, 18, 8, 0), 24, 8},
+	{RTE_IPV4(198, 18, 9, 0), 24, 9},
+	{RTE_IPV4(198, 18, 10, 0), 24, 10},
+	{RTE_IPV4(198, 18, 11, 0), 24, 11},
+	{RTE_IPV4(198, 18, 12, 0), 24, 12},
+	{RTE_IPV4(198, 18, 13, 0), 24, 13},
+	{RTE_IPV4(198, 18, 14, 0), 24, 14},
+	{RTE_IPV4(198, 18, 15, 0), 24, 15},
 };

 /* 2001:0200::/48 is IANA reserved range for IPv6 benchmarking (RFC5180) */
@@ -64,6 +72,14 @@ static const struct ipv6_l3fwd_lpm_route ipv6_l3fwd_lpm_route_array[] = {
 	{{32, 1, 2, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0}, 48, 5},
 	{{32, 1, 2, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0}, 48, 6},
 	{{32, 1, 2, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0}, 48, 7},
+	{{32, 1, 2, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0}, 48, 8},
+	{{32, 1, 2, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0}, 48, 9},
+	{{32, 1, 2, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0}, 48, 10},
+	{{32, 1, 2, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0}, 48, 11},
+	{{32, 1, 2, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0}, 48, 12},
+	{{32, 1, 2, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0}, 48, 13},
+	{{32, 1, 2, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0}, 48, 14},
+	{{32, 1, 2, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0}, 48, 15},
 };

 #define IPV4_L3FWD_LPM_MAX_RULES         1024
--
2.17.1


^ permalink raw reply	[flat|nested] 26+ messages in thread

* [dpdk-dev] [PATCH v2 2/3] examples/l3fwd: use IP reserved addresses for EM mode
  2020-08-02 18:16 ` [dpdk-dev] [PATCH v2 1/3] " pbhagavatula
@ 2020-08-02 18:16   ` pbhagavatula
  2020-10-23 14:11     ` David Marchand
  2020-08-02 18:16   ` [dpdk-dev] [PATCH v2 3/3] examples/l3fwd: print port bdf when initializing routes pbhagavatula
  2021-10-03 20:11   ` [dpdk-dev] [PATCH 1/3] examples/l3fwd: increase number of routes pbhagavatula
  2 siblings, 1 reply; 26+ messages in thread
From: pbhagavatula @ 2020-08-02 18:16 UTC (permalink / raw)
  To: jerinj, thomas, david.marchand, Marko Kovacevic, Ori Kam,
	Bruce Richardson, Radu Nicolau, Akhil Goyal, Tomasz Kantecki,
	Sunil Kumar Kori, Pavan Nikhilesh
  Cc: dev

From: Pavan Nikhilesh <pbhagavatula@marvell.com>

The l3fwd example should use the reserved IPv4/v6 reserved address
ranges defined in RFC5735 and RFC5180 and RFC863 discard protocol for
the port number in the exact match mode of L3 forwarding.

Signed-off-by: Pavan Nikhilesh <pbhagavatula@marvell.com>
---
 examples/l3fwd/l3fwd_em.c | 87 ++++++++++++++++++++++++++-------------
 1 file changed, 59 insertions(+), 28 deletions(-)

diff --git a/examples/l3fwd/l3fwd_em.c b/examples/l3fwd/l3fwd_em.c
index fdbee70b4..481b6dcce 100644
--- a/examples/l3fwd/l3fwd_em.c
+++ b/examples/l3fwd/l3fwd_em.c
@@ -99,33 +99,64 @@ struct ipv6_l3fwd_em_route {
 	uint8_t if_out;
 };
 
-static struct ipv4_l3fwd_em_route ipv4_l3fwd_em_route_array[] = {
-	{{RTE_IPV4(101, 0, 0, 0), RTE_IPV4(100, 10, 0, 1),  101, 11, IPPROTO_TCP}, 0},
-	{{RTE_IPV4(201, 0, 0, 0), RTE_IPV4(200, 20, 0, 1),  102, 12, IPPROTO_TCP}, 1},
-	{{RTE_IPV4(111, 0, 0, 0), RTE_IPV4(100, 30, 0, 1),  101, 11, IPPROTO_TCP}, 2},
-	{{RTE_IPV4(211, 0, 0, 0), RTE_IPV4(200, 40, 0, 1),  102, 12, IPPROTO_TCP}, 3},
+/* 198.18.0.0/16 are set aside for RFC2544 benchmarking (RFC5735).
+ * Use RFC863 Discard Protocol.
+ */
+static const struct ipv4_l3fwd_em_route ipv4_l3fwd_em_route_array[] = {
+	{{RTE_IPV4(198, 18, 0, 0), RTE_IPV4(198, 18, 0, 1),  9, 9, IPPROTO_TCP}, 0},
+	{{RTE_IPV4(198, 18, 1, 0), RTE_IPV4(198, 18, 1, 1),  9, 9, IPPROTO_TCP}, 1},
+	{{RTE_IPV4(198, 18, 2, 0), RTE_IPV4(198, 18, 2, 1),  9, 9, IPPROTO_TCP}, 2},
+	{{RTE_IPV4(198, 18, 3, 0), RTE_IPV4(198, 18, 3, 1),  9, 9, IPPROTO_TCP}, 3},
+	{{RTE_IPV4(198, 18, 4, 0), RTE_IPV4(198, 18, 4, 1),  9, 9, IPPROTO_TCP}, 4},
+	{{RTE_IPV4(198, 18, 5, 0), RTE_IPV4(198, 18, 5, 1),  9, 9, IPPROTO_TCP}, 5},
+	{{RTE_IPV4(198, 18, 6, 0), RTE_IPV4(198, 18, 6, 1),  9, 9, IPPROTO_TCP}, 6},
+	{{RTE_IPV4(198, 18, 7, 0), RTE_IPV4(198, 18, 7, 1),  9, 9, IPPROTO_TCP}, 7},
+	{{RTE_IPV4(198, 18, 8, 0), RTE_IPV4(198, 18, 8, 1),  9, 9, IPPROTO_TCP}, 8},
+	{{RTE_IPV4(198, 18, 9, 0), RTE_IPV4(198, 18, 9, 1),  9, 9, IPPROTO_TCP}, 9},
+	{{RTE_IPV4(198, 18, 10, 0), RTE_IPV4(198, 18, 10, 1),  9, 9, IPPROTO_TCP}, 10},
+	{{RTE_IPV4(198, 18, 11, 0), RTE_IPV4(198, 18, 11, 1),  9, 9, IPPROTO_TCP}, 11},
+	{{RTE_IPV4(198, 18, 12, 0), RTE_IPV4(198, 18, 12, 1),  9, 9, IPPROTO_TCP}, 12},
+	{{RTE_IPV4(198, 18, 13, 0), RTE_IPV4(198, 18, 13, 1),  9, 9, IPPROTO_TCP}, 13},
+	{{RTE_IPV4(198, 18, 14, 0), RTE_IPV4(198, 18, 14, 1),  9, 9, IPPROTO_TCP}, 14},
+	{{RTE_IPV4(198, 18, 15, 0), RTE_IPV4(198, 18, 15, 1),  9, 9, IPPROTO_TCP}, 15},
 };
 
-static struct ipv6_l3fwd_em_route ipv6_l3fwd_em_route_array[] = {
-	{{
-	{0xfe, 0x80, 0, 0, 0, 0, 0, 0, 0x02, 0x1e, 0x67, 0xff, 0xfe, 0, 0, 0},
-	{0xfe, 0x80, 0, 0, 0, 0, 0, 0, 0x02, 0x1b, 0x21, 0xff, 0xfe, 0x91, 0x38, 0x05},
-	101, 11, IPPROTO_TCP}, 0},
-
-	{{
-	{0xfe, 0x90, 0, 0, 0, 0, 0, 0, 0x02, 0x1e, 0x67, 0xff, 0xfe, 0, 0, 0},
-	{0xfe, 0x90, 0, 0, 0, 0, 0, 0, 0x02, 0x1b, 0x21, 0xff, 0xfe, 0x91, 0x38, 0x05},
-	102, 12, IPPROTO_TCP}, 1},
-
-	{{
-	{0xfe, 0xa0, 0, 0, 0, 0, 0, 0, 0x02, 0x1e, 0x67, 0xff, 0xfe, 0, 0, 0},
-	{0xfe, 0xa0, 0, 0, 0, 0, 0, 0, 0x02, 0x1b, 0x21, 0xff, 0xfe, 0x91, 0x38, 0x05},
-	101, 11, IPPROTO_TCP}, 2},
-
-	{{
-	{0xfe, 0xb0, 0, 0, 0, 0, 0, 0, 0x02, 0x1e, 0x67, 0xff, 0xfe, 0, 0, 0},
-	{0xfe, 0xb0, 0, 0, 0, 0, 0, 0, 0x02, 0x1b, 0x21, 0xff, 0xfe, 0x91, 0x38, 0x05},
-	102, 12, IPPROTO_TCP}, 3},
+/* 2001:0200::/48 is IANA reserved range for IPv6 benchmarking (RFC5180).
+ * Use RFC863 Discard Protocol.
+ */
+static const struct ipv6_l3fwd_em_route ipv6_l3fwd_em_route_array[] = {
+	{{{32, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+	  {32, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, 9, 9, IPPROTO_TCP}, 0},
+	{{{32, 1, 2, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0},
+	  {32, 1, 2, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1}, 9, 9, IPPROTO_TCP}, 1},
+	{{{32, 1, 2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0},
+	  {32, 1, 2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 1}, 9, 9, IPPROTO_TCP}, 2},
+	{{{32, 1, 2, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0},
+	  {32, 1, 2, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 1}, 9, 9, IPPROTO_TCP}, 3},
+	{{{32, 1, 2, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0},
+	  {32, 1, 2, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 1}, 9, 9, IPPROTO_TCP}, 4},
+	{{{32, 1, 2, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0},
+	  {32, 1, 2, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 1}, 9, 9, IPPROTO_TCP}, 5},
+	{{{32, 1, 2, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0},
+	  {32, 1, 2, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 1}, 9, 9, IPPROTO_TCP}, 6},
+	{{{32, 1, 2, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0},
+	  {32, 1, 2, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 1}, 9, 9, IPPROTO_TCP}, 7},
+	{{{32, 1, 2, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0},
+	  {32, 1, 2, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 1}, 9, 9, IPPROTO_TCP}, 8},
+	{{{32, 1, 2, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0},
+	  {32, 1, 2, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 1}, 9, 9, IPPROTO_TCP}, 9},
+	{{{32, 1, 2, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0},
+	  {32, 1, 2, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 1}, 9, 9, IPPROTO_TCP}, 10},
+	{{{32, 1, 2, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0},
+	  {32, 1, 2, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 1}, 9, 9, IPPROTO_TCP}, 11},
+	{{{32, 1, 2, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0},
+	  {32, 1, 2, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 1}, 9, 9, IPPROTO_TCP}, 12},
+	{{{32, 1, 2, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0},
+	  {32, 1, 2, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 1}, 9, 9, IPPROTO_TCP}, 13},
+	{{{32, 1, 2, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0},
+	  {32, 1, 2, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 1}, 9, 9, IPPROTO_TCP}, 14},
+	{{{32, 1, 2, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0},
+	  {32, 1, 2, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 1}, 9, 9, IPPROTO_TCP}, 15},
 };
 
 struct rte_hash *ipv4_l3fwd_em_lookup_struct[NB_SOCKETS];
@@ -429,7 +460,7 @@ populate_ipv4_many_flow_into_table(const struct rte_hash *h,
 		switch (i & (NUMBER_PORT_USED - 1)) {
 		case 0:
 			entry = ipv4_l3fwd_em_route_array[0];
-			entry.key.ip_dst = RTE_IPV4(101, c, b, a);
+			entry.key.ip_dst = RTE_IPV4(9, c, b, a);
 			break;
 		case 1:
 			entry = ipv4_l3fwd_em_route_array[1];
@@ -437,11 +468,11 @@ populate_ipv4_many_flow_into_table(const struct rte_hash *h,
 			break;
 		case 2:
 			entry = ipv4_l3fwd_em_route_array[2];
-			entry.key.ip_dst = RTE_IPV4(111, c, b, a);
+			entry.key.ip_dst = RTE_IPV4(91, c, b, a);
 			break;
 		case 3:
 			entry = ipv4_l3fwd_em_route_array[3];
-			entry.key.ip_dst = RTE_IPV4(211, c, b, a);
+			entry.key.ip_dst = RTE_IPV4(29, c, b, a);
 			break;
 		};
 		convert_ipv4_5tuple(&entry.key, &newkey);
-- 
2.17.1


^ permalink raw reply	[flat|nested] 26+ messages in thread

* [dpdk-dev] [PATCH v2 3/3] examples/l3fwd: print port bdf when initializing routes
  2020-08-02 18:16 ` [dpdk-dev] [PATCH v2 1/3] " pbhagavatula
  2020-08-02 18:16   ` [dpdk-dev] [PATCH v2 2/3] examples/l3fwd: use IP reserved addresses for EM mode pbhagavatula
@ 2020-08-02 18:16   ` pbhagavatula
  2021-10-03 20:11   ` [dpdk-dev] [PATCH 1/3] examples/l3fwd: increase number of routes pbhagavatula
  2 siblings, 0 replies; 26+ messages in thread
From: pbhagavatula @ 2020-08-02 18:16 UTC (permalink / raw)
  To: jerinj, thomas, david.marchand, Marko Kovacevic, Ori Kam,
	Bruce Richardson, Radu Nicolau, Akhil Goyal, Tomasz Kantecki,
	Sunil Kumar Kori, Pavan Nikhilesh
  Cc: dev

From: Pavan Nikhilesh <pbhagavatula@marvell.com>

Since the number of Ethernet ports have gone up, print the pci bdf along
with the routes.
This is also helpful for cases where whitelisting order is honored.

Signed-off-by: Pavan Nikhilesh <pbhagavatula@marvell.com>
---
 examples/l3fwd/l3fwd_lpm.c | 16 ++++++++++++----
 1 file changed, 12 insertions(+), 4 deletions(-)

diff --git a/examples/l3fwd/l3fwd_lpm.c b/examples/l3fwd/l3fwd_lpm.c
index 00047c706..65639d65a 100644
--- a/examples/l3fwd/l3fwd_lpm.c
+++ b/examples/l3fwd/l3fwd_lpm.c
@@ -496,6 +496,7 @@ setup_lpm(const int socketid)
 
 	/* populate the LPM table */
 	for (i = 0; i < RTE_DIM(ipv4_l3fwd_lpm_route_array); i++) {
+		struct rte_eth_dev_info dev_info;
 		struct in_addr in;
 
 		/* skip unused ports */
@@ -503,6 +504,8 @@ setup_lpm(const int socketid)
 				enabled_port_mask) == 0)
 			continue;
 
+		rte_eth_dev_info_get(ipv4_l3fwd_lpm_route_array[i].if_out,
+				     &dev_info);
 		ret = rte_lpm_add(ipv4_l3fwd_lpm_lookup_struct[socketid],
 			ipv4_l3fwd_lpm_route_array[i].ip,
 			ipv4_l3fwd_lpm_route_array[i].depth,
@@ -515,10 +518,11 @@ setup_lpm(const int socketid)
 		}
 
 		in.s_addr = htonl(ipv4_l3fwd_lpm_route_array[i].ip);
-		printf("LPM: Adding route %s / %d (%d)\n",
+		printf("LPM: Adding route %s / %d (%d) [%s]\n",
 		       inet_ntop(AF_INET, &in, abuf, sizeof(abuf)),
 			ipv4_l3fwd_lpm_route_array[i].depth,
-			ipv4_l3fwd_lpm_route_array[i].if_out);
+			ipv4_l3fwd_lpm_route_array[i].if_out,
+			dev_info.device->name);
 	}
 
 	/* create the LPM6 table */
@@ -536,12 +540,15 @@ setup_lpm(const int socketid)
 
 	/* populate the LPM table */
 	for (i = 0; i < RTE_DIM(ipv6_l3fwd_lpm_route_array); i++) {
+		struct rte_eth_dev_info dev_info;
 
 		/* skip unused ports */
 		if ((1 << ipv6_l3fwd_lpm_route_array[i].if_out &
 				enabled_port_mask) == 0)
 			continue;
 
+		rte_eth_dev_info_get(ipv4_l3fwd_lpm_route_array[i].if_out,
+				     &dev_info);
 		ret = rte_lpm6_add(ipv6_l3fwd_lpm_lookup_struct[socketid],
 			ipv6_l3fwd_lpm_route_array[i].ip,
 			ipv6_l3fwd_lpm_route_array[i].depth,
@@ -553,11 +560,12 @@ setup_lpm(const int socketid)
 				i, socketid);
 		}
 
-		printf("LPM: Adding route %s / %d (%d)\n",
+		printf("LPM: Adding route %s / %d (%d) [%s]\n",
 		       inet_ntop(AF_INET6, ipv6_l3fwd_lpm_route_array[i].ip,
 				 abuf, sizeof(abuf)),
 		       ipv6_l3fwd_lpm_route_array[i].depth,
-		       ipv6_l3fwd_lpm_route_array[i].if_out);
+		       ipv6_l3fwd_lpm_route_array[i].if_out,
+		       dev_info.device->name);
 	}
 }
 
-- 
2.17.1


^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [dpdk-dev] [PATCH v2 2/3] examples/l3fwd: use IP reserved addresses for EM mode
  2020-08-02 18:16   ` [dpdk-dev] [PATCH v2 2/3] examples/l3fwd: use IP reserved addresses for EM mode pbhagavatula
@ 2020-10-23 14:11     ` David Marchand
  0 siblings, 0 replies; 26+ messages in thread
From: David Marchand @ 2020-10-23 14:11 UTC (permalink / raw)
  To: Pavan Nikhilesh
  Cc: Jerin Jacob Kollanukkaran, Thomas Monjalon, Marko Kovacevic,
	Ori Kam, Bruce Richardson, Radu Nicolau, Akhil Goyal,
	Tomasz Kantecki, Sunil Kumar Kori, dev

On Sun, Aug 2, 2020 at 8:17 PM <pbhagavatula@marvell.com> wrote:
>
> From: Pavan Nikhilesh <pbhagavatula@marvell.com>
>
> The l3fwd example should use the reserved IPv4/v6 reserved address
> ranges defined in RFC5735 and RFC5180 and RFC863 discard protocol for
> the port number in the exact match mode of L3 forwarding.
>
> Signed-off-by: Pavan Nikhilesh <pbhagavatula@marvell.com>
> ---
>  examples/l3fwd/l3fwd_em.c | 87 ++++++++++++++++++++++++++-------------
>  1 file changed, 59 insertions(+), 28 deletions(-)

Would such a change affect current users?
If so, please add a release note update.


I see DTS uses l3fwd.
If the change has an impact, probably worth reporting it on the dts ml.


>
> diff --git a/examples/l3fwd/l3fwd_em.c b/examples/l3fwd/l3fwd_em.c
> index fdbee70b4..481b6dcce 100644
> --- a/examples/l3fwd/l3fwd_em.c
> +++ b/examples/l3fwd/l3fwd_em.c
[snip]
> @@ -429,7 +460,7 @@ populate_ipv4_many_flow_into_table(const struct rte_hash *h,
>                 switch (i & (NUMBER_PORT_USED - 1)) {
>                 case 0:
>                         entry = ipv4_l3fwd_em_route_array[0];
> -                       entry.key.ip_dst = RTE_IPV4(101, c, b, a);
> +                       entry.key.ip_dst = RTE_IPV4(9, c, b, a);
>                         break;
>                 case 1:
>                         entry = ipv4_l3fwd_em_route_array[1];
> @@ -437,11 +468,11 @@ populate_ipv4_many_flow_into_table(const struct rte_hash *h,
>                         break;
>                 case 2:
>                         entry = ipv4_l3fwd_em_route_array[2];
> -                       entry.key.ip_dst = RTE_IPV4(111, c, b, a);
> +                       entry.key.ip_dst = RTE_IPV4(91, c, b, a);
>                         break;
>                 case 3:
>                         entry = ipv4_l3fwd_em_route_array[3];
> -                       entry.key.ip_dst = RTE_IPV4(211, c, b, a);
> +                       entry.key.ip_dst = RTE_IPV4(29, c, b, a);
>                         break;
>                 };
>                 convert_ipv4_5tuple(&entry.key, &newkey);

Why such 9, 91, 29 values? Do they have special properties?

-- 
David Marchand


^ permalink raw reply	[flat|nested] 26+ messages in thread

* [dpdk-dev] [PATCH 1/3] examples/l3fwd: increase number of routes
  2020-08-02 18:16 ` [dpdk-dev] [PATCH v2 1/3] " pbhagavatula
  2020-08-02 18:16   ` [dpdk-dev] [PATCH v2 2/3] examples/l3fwd: use IP reserved addresses for EM mode pbhagavatula
  2020-08-02 18:16   ` [dpdk-dev] [PATCH v2 3/3] examples/l3fwd: print port bdf when initializing routes pbhagavatula
@ 2021-10-03 20:11   ` pbhagavatula
  2021-10-03 20:11     ` [dpdk-dev] [PATCH 2/3] examples/l3fwd: print port bdf when adding routes pbhagavatula
                       ` (3 more replies)
  2 siblings, 4 replies; 26+ messages in thread
From: pbhagavatula @ 2021-10-03 20:11 UTC (permalink / raw)
  To: jerinj; +Cc: dev, Pavan Nikhilesh

From: Pavan Nikhilesh <pbhagavatula@marvell.com>

Increase the number of routes from 8 to 16 that are statically added for
lpm and em mode as most of the SoCs support more than 8 interfaces.
The number of routes added is equal to the number of ethernet devices
ports enabled through port mask.

Signed-off-by: Pavan Nikhilesh <pbhagavatula@marvell.com>
---
 v3 Changes: (Finally!)
 - Add FIB to the list.
 - Update release notes.
 - Update EM route addition routine and use the correct IP addresses
   DTS need not be updated as EM test doesn't use IP addresses defined
   in l3fwd.

 v2 Changes:
 - Fixup for EM mode.

 examples/l3fwd/l3fwd_route.h |  4 ++--
 examples/l3fwd/main.c        | 20 ++++++++++++++++++--
 2 files changed, 20 insertions(+), 4 deletions(-)

diff --git a/examples/l3fwd/l3fwd_route.h b/examples/l3fwd/l3fwd_route.h
index 89f8634443..c7eba06c4d 100644
--- a/examples/l3fwd/l3fwd_route.h
+++ b/examples/l3fwd/l3fwd_route.h
@@ -14,6 +14,6 @@ struct ipv6_l3fwd_route {
 	uint8_t if_out;
 };

-extern const struct ipv4_l3fwd_route ipv4_l3fwd_route_array[8];
+extern const struct ipv4_l3fwd_route ipv4_l3fwd_route_array[16];

-extern const struct ipv6_l3fwd_route ipv6_l3fwd_route_array[8];
+extern const struct ipv6_l3fwd_route ipv6_l3fwd_route_array[16];
diff --git a/examples/l3fwd/main.c b/examples/l3fwd/main.c
index 00ac267af1..194f6ac1a4 100644
--- a/examples/l3fwd/main.c
+++ b/examples/l3fwd/main.c
@@ -179,7 +179,7 @@ static struct l3fwd_lkp_mode l3fwd_fib_lkp = {

 /*
  * 198.18.0.0/16 are set aside for RFC2544 benchmarking (RFC5735).
- * 198.18.{0-7}.0/24 = Port {0-7}
+ * 198.18.{0-15}.0/24 = Port {0-15}
  */
 const struct ipv4_l3fwd_route ipv4_l3fwd_route_array[] = {
 	{RTE_IPV4(198, 18, 0, 0), 24, 0},
@@ -190,11 +190,19 @@ const struct ipv4_l3fwd_route ipv4_l3fwd_route_array[] = {
 	{RTE_IPV4(198, 18, 5, 0), 24, 5},
 	{RTE_IPV4(198, 18, 6, 0), 24, 6},
 	{RTE_IPV4(198, 18, 7, 0), 24, 7},
+	{RTE_IPV4(198, 18, 8, 0), 24, 8},
+	{RTE_IPV4(198, 18, 9, 0), 24, 9},
+	{RTE_IPV4(198, 18, 10, 0), 24, 10},
+	{RTE_IPV4(198, 18, 11, 0), 24, 11},
+	{RTE_IPV4(198, 18, 12, 0), 24, 12},
+	{RTE_IPV4(198, 18, 13, 0), 24, 13},
+	{RTE_IPV4(198, 18, 14, 0), 24, 14},
+	{RTE_IPV4(198, 18, 15, 0), 24, 15},
 };

 /*
  * 2001:200::/48 is IANA reserved range for IPv6 benchmarking (RFC5180).
- * 2001:200:0:{0-7}::/64 = Port {0-7}
+ * 2001:200:0:{0-15}::/64 = Port {0-15}
  */
 const struct ipv6_l3fwd_route ipv6_l3fwd_route_array[] = {
 	{{32, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 64, 0},
@@ -205,6 +213,14 @@ const struct ipv6_l3fwd_route ipv6_l3fwd_route_array[] = {
 	{{32, 1, 2, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0}, 64, 5},
 	{{32, 1, 2, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0}, 64, 6},
 	{{32, 1, 2, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0}, 64, 7},
+	{{32, 1, 2, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0}, 64, 8},
+	{{32, 1, 2, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0}, 64, 9},
+	{{32, 1, 2, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0}, 64, 10},
+	{{32, 1, 2, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0}, 64, 11},
+	{{32, 1, 2, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0}, 64, 12},
+	{{32, 1, 2, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0}, 64, 13},
+	{{32, 1, 2, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0}, 64, 14},
+	{{32, 1, 2, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0}, 64, 15},
 };

 /*
--
2.33.0


^ permalink raw reply	[flat|nested] 26+ messages in thread

* [dpdk-dev] [PATCH 2/3] examples/l3fwd: print port bdf when adding routes
  2021-10-03 20:11   ` [dpdk-dev] [PATCH 1/3] examples/l3fwd: increase number of routes pbhagavatula
@ 2021-10-03 20:11     ` pbhagavatula
  2021-11-04 10:28       ` Walsh, Conor
  2021-10-03 20:11     ` [dpdk-dev] [PATCH 3/3] examples/l3fwd: use reserved addresses for EM mode pbhagavatula
                       ` (2 subsequent siblings)
  3 siblings, 1 reply; 26+ messages in thread
From: pbhagavatula @ 2021-10-03 20:11 UTC (permalink / raw)
  To: jerinj; +Cc: dev, Pavan Nikhilesh

From: Pavan Nikhilesh <pbhagavatula@marvell.com>

Since the number of Ethernet ports have gone up, print the pci bdf along
with the routes.
This is also helpful for cases where allow listing order is not honored.

Signed-off-by: Pavan Nikhilesh <pbhagavatula@marvell.com>
---
 examples/l3fwd/l3fwd_fib.c | 16 ++++++++++------
 examples/l3fwd/l3fwd_lpm.c |  9 ++++++---
 2 files changed, 16 insertions(+), 9 deletions(-)

diff --git a/examples/l3fwd/l3fwd_fib.c b/examples/l3fwd/l3fwd_fib.c
index f8d6a3ac39..cc6054ca44 100644
--- a/examples/l3fwd/l3fwd_fib.c
+++ b/examples/l3fwd/l3fwd_fib.c
@@ -439,6 +439,7 @@ setup_fib(const int socketid)
 
 	/* Populate the fib ipv4 table. */
 	for (i = 0; i < RTE_DIM(ipv4_l3fwd_route_array); i++) {
+		struct rte_eth_dev_info dev_info;
 		struct in_addr in;
 
 		/* Skip unused ports. */
@@ -446,6 +447,8 @@ setup_fib(const int socketid)
 				enabled_port_mask) == 0)
 			continue;
 
+		rte_eth_dev_info_get(ipv4_l3fwd_route_array[i].if_out,
+				     &dev_info);
 		ret = rte_fib_add(ipv4_l3fwd_fib_lookup_struct[socketid],
 			ipv4_l3fwd_route_array[i].ip,
 			ipv4_l3fwd_route_array[i].depth,
@@ -459,13 +462,14 @@ setup_fib(const int socketid)
 
 		in.s_addr = htonl(ipv4_l3fwd_route_array[i].ip);
 		if (inet_ntop(AF_INET, &in, abuf, sizeof(abuf)) != NULL) {
-			printf("FIB: Adding route %s / %d (%d)\n",
-				abuf,
-				ipv4_l3fwd_route_array[i].depth,
-				ipv4_l3fwd_route_array[i].if_out);
+			printf("FIB: Adding route %s / %d (%d) [%s]\n", abuf,
+			       ipv4_l3fwd_route_array[i].depth,
+			       ipv4_l3fwd_route_array[i].if_out,
+			       dev_info.device->name);
 		} else {
-			printf("FIB: IPv4 route added to port %d\n",
-				ipv4_l3fwd_route_array[i].if_out);
+			printf("FIB: IPv4 route added to port %d [%s]\n",
+			       ipv4_l3fwd_route_array[i].if_out,
+			       dev_info.device->name);
 		}
 	}
 	/* >8 End of setup fib. */
diff --git a/examples/l3fwd/l3fwd_lpm.c b/examples/l3fwd/l3fwd_lpm.c
index 7200160164..582911c622 100644
--- a/examples/l3fwd/l3fwd_lpm.c
+++ b/examples/l3fwd/l3fwd_lpm.c
@@ -451,6 +451,7 @@ setup_lpm(const int socketid)
 
 	/* populate the LPM table */
 	for (i = 0; i < RTE_DIM(ipv4_l3fwd_route_array); i++) {
+		struct rte_eth_dev_info dev_info;
 		struct in_addr in;
 
 		/* skip unused ports */
@@ -458,6 +459,8 @@ setup_lpm(const int socketid)
 				enabled_port_mask) == 0)
 			continue;
 
+		rte_eth_dev_info_get(ipv4_l3fwd_route_array[i].if_out,
+				     &dev_info);
 		ret = rte_lpm_add(ipv4_l3fwd_lpm_lookup_struct[socketid],
 			ipv4_l3fwd_route_array[i].ip,
 			ipv4_l3fwd_route_array[i].depth,
@@ -470,10 +473,10 @@ setup_lpm(const int socketid)
 		}
 
 		in.s_addr = htonl(ipv4_l3fwd_route_array[i].ip);
-		printf("LPM: Adding route %s / %d (%d)\n",
+		printf("LPM: Adding route %s / %d (%d) [%s]\n",
 		       inet_ntop(AF_INET, &in, abuf, sizeof(abuf)),
-			ipv4_l3fwd_route_array[i].depth,
-			ipv4_l3fwd_route_array[i].if_out);
+		       ipv4_l3fwd_route_array[i].depth,
+		       ipv4_l3fwd_route_array[i].if_out, dev_info.device->name);
 	}
 
 	/* create the LPM6 table */
-- 
2.33.0


^ permalink raw reply	[flat|nested] 26+ messages in thread

* [dpdk-dev] [PATCH 3/3] examples/l3fwd: use reserved addresses for EM mode
  2021-10-03 20:11   ` [dpdk-dev] [PATCH 1/3] examples/l3fwd: increase number of routes pbhagavatula
  2021-10-03 20:11     ` [dpdk-dev] [PATCH 2/3] examples/l3fwd: print port bdf when adding routes pbhagavatula
@ 2021-10-03 20:11     ` pbhagavatula
  2021-10-03 20:24     ` [dpdk-dev] [PATCH v4 1/3] examples/l3fwd: increase number of routes pbhagavatula
  2021-10-04 15:46     ` [dpdk-dev] [PATCH " Stephen Hemminger
  3 siblings, 0 replies; 26+ messages in thread
From: pbhagavatula @ 2021-10-03 20:11 UTC (permalink / raw)
  To: jerinj; +Cc: dev, Pavan Nikhilesh

From: Pavan Nikhilesh <pbhagavatula@marvell.com>

The l3fwd example should use the reserved IPv4/v6 reserved address
ranges defined in RFC5735, RFC5180 and RFC863 discard protocol for
the port number in the exact match mode of L3 forwarding.

Signed-off-by: Pavan Nikhilesh <pbhagavatula@marvell.com>
---
 doc/guides/rel_notes/release_21_11.rst |   6 ++
 examples/l3fwd/l3fwd.h                 |   2 +-
 examples/l3fwd/l3fwd_em.c              | 142 ++++++++++++-------------
 3 files changed, 73 insertions(+), 77 deletions(-)

diff --git a/doc/guides/rel_notes/release_21_11.rst b/doc/guides/rel_notes/release_21_11.rst
index 37dc1a7786..ccdfa47baa 100644
--- a/doc/guides/rel_notes/release_21_11.rst
+++ b/doc/guides/rel_notes/release_21_11.rst
@@ -125,6 +125,12 @@ New Features
   * Added tests to validate packets hard expiry.
   * Added tests to verify tunnel header verification in IPsec inbound.
 
+* **Increase number of routes configured in l3fwd lpm, em and fib lookups.**
+
+  * Increase number of routes from 8 to 16 for all lookup modes of l3fwd, this
+    helps in validating SoC with more than 8 ethernet devices using l3fwd.
+  * Update EM mode to use RFC2544 reserved IP address space.
+
 
 Removed Items
 -------------
diff --git a/examples/l3fwd/l3fwd.h b/examples/l3fwd/l3fwd.h
index a808d60247..853a31d4c2 100644
--- a/examples/l3fwd/l3fwd.h
+++ b/examples/l3fwd/l3fwd.h
@@ -54,7 +54,7 @@
 /* 32-bit has less address-space for hugepage memory, limit to 1M entries */
 #define L3FWD_HASH_ENTRIES		(1024*1024*1)
 #endif
-#define HASH_ENTRY_NUMBER_DEFAULT	4
+#define HASH_ENTRY_NUMBER_DEFAULT	16
 
 struct mbuf_table {
 	uint16_t len;
diff --git a/examples/l3fwd/l3fwd_em.c b/examples/l3fwd/l3fwd_em.c
index 2a8ab6aab5..92998e26b2 100644
--- a/examples/l3fwd/l3fwd_em.c
+++ b/examples/l3fwd/l3fwd_em.c
@@ -99,33 +99,64 @@ struct ipv6_l3fwd_em_route {
 	uint8_t if_out;
 };
 
-static struct ipv4_l3fwd_em_route ipv4_l3fwd_em_route_array[] = {
-	{{RTE_IPV4(101, 0, 0, 0), RTE_IPV4(100, 10, 0, 1),  101, 11, IPPROTO_TCP}, 0},
-	{{RTE_IPV4(201, 0, 0, 0), RTE_IPV4(200, 20, 0, 1),  102, 12, IPPROTO_TCP}, 1},
-	{{RTE_IPV4(111, 0, 0, 0), RTE_IPV4(100, 30, 0, 1),  101, 11, IPPROTO_TCP}, 2},
-	{{RTE_IPV4(211, 0, 0, 0), RTE_IPV4(200, 40, 0, 1),  102, 12, IPPROTO_TCP}, 3},
+/* 198.18.0.0/16 are set aside for RFC2544 benchmarking (RFC5735).
+ * Use RFC863 Discard Protocol.
+ */
+static const struct ipv4_l3fwd_em_route ipv4_l3fwd_em_route_array[] = {
+	{{RTE_IPV4(198, 18, 0, 0), RTE_IPV4(198, 18, 0, 1),  9, 9, IPPROTO_UDP}, 0},
+	{{RTE_IPV4(198, 18, 1, 0), RTE_IPV4(198, 18, 1, 1),  9, 9, IPPROTO_UDP}, 1},
+	{{RTE_IPV4(198, 18, 2, 0), RTE_IPV4(198, 18, 2, 1),  9, 9, IPPROTO_UDP}, 2},
+	{{RTE_IPV4(198, 18, 3, 0), RTE_IPV4(198, 18, 3, 1),  9, 9, IPPROTO_UDP}, 3},
+	{{RTE_IPV4(198, 18, 4, 0), RTE_IPV4(198, 18, 4, 1),  9, 9, IPPROTO_UDP}, 4},
+	{{RTE_IPV4(198, 18, 5, 0), RTE_IPV4(198, 18, 5, 1),  9, 9, IPPROTO_UDP}, 5},
+	{{RTE_IPV4(198, 18, 6, 0), RTE_IPV4(198, 18, 6, 1),  9, 9, IPPROTO_UDP}, 6},
+	{{RTE_IPV4(198, 18, 7, 0), RTE_IPV4(198, 18, 7, 1),  9, 9, IPPROTO_UDP}, 7},
+	{{RTE_IPV4(198, 18, 8, 0), RTE_IPV4(198, 18, 8, 1),  9, 9, IPPROTO_UDP}, 8},
+	{{RTE_IPV4(198, 18, 9, 0), RTE_IPV4(198, 18, 9, 1),  9, 9, IPPROTO_UDP}, 9},
+	{{RTE_IPV4(198, 18, 10, 0), RTE_IPV4(198, 18, 10, 1),  9, 9, IPPROTO_UDP}, 10},
+	{{RTE_IPV4(198, 18, 11, 0), RTE_IPV4(198, 18, 11, 1),  9, 9, IPPROTO_UDP}, 11},
+	{{RTE_IPV4(198, 18, 12, 0), RTE_IPV4(198, 18, 12, 1),  9, 9, IPPROTO_UDP}, 12},
+	{{RTE_IPV4(198, 18, 13, 0), RTE_IPV4(198, 18, 13, 1),  9, 9, IPPROTO_UDP}, 13},
+	{{RTE_IPV4(198, 18, 14, 0), RTE_IPV4(198, 18, 14, 1),  9, 9, IPPROTO_UDP}, 14},
+	{{RTE_IPV4(198, 18, 15, 0), RTE_IPV4(198, 18, 15, 1),  9, 9, IPPROTO_UDP}, 15},
 };
 
-static struct ipv6_l3fwd_em_route ipv6_l3fwd_em_route_array[] = {
-	{{
-	{0xfe, 0x80, 0, 0, 0, 0, 0, 0, 0x02, 0x1e, 0x67, 0xff, 0xfe, 0, 0, 0},
-	{0xfe, 0x80, 0, 0, 0, 0, 0, 0, 0x02, 0x1b, 0x21, 0xff, 0xfe, 0x91, 0x38, 0x05},
-	101, 11, IPPROTO_TCP}, 0},
-
-	{{
-	{0xfe, 0x90, 0, 0, 0, 0, 0, 0, 0x02, 0x1e, 0x67, 0xff, 0xfe, 0, 0, 0},
-	{0xfe, 0x90, 0, 0, 0, 0, 0, 0, 0x02, 0x1b, 0x21, 0xff, 0xfe, 0x91, 0x38, 0x05},
-	102, 12, IPPROTO_TCP}, 1},
-
-	{{
-	{0xfe, 0xa0, 0, 0, 0, 0, 0, 0, 0x02, 0x1e, 0x67, 0xff, 0xfe, 0, 0, 0},
-	{0xfe, 0xa0, 0, 0, 0, 0, 0, 0, 0x02, 0x1b, 0x21, 0xff, 0xfe, 0x91, 0x38, 0x05},
-	101, 11, IPPROTO_TCP}, 2},
-
-	{{
-	{0xfe, 0xb0, 0, 0, 0, 0, 0, 0, 0x02, 0x1e, 0x67, 0xff, 0xfe, 0, 0, 0},
-	{0xfe, 0xb0, 0, 0, 0, 0, 0, 0, 0x02, 0x1b, 0x21, 0xff, 0xfe, 0x91, 0x38, 0x05},
-	102, 12, IPPROTO_TCP}, 3},
+/* 2001:0200::/48 is IANA reserved range for IPv6 benchmarking (RFC5180).
+ * Use RFC863 Discard Protocol.
+ */
+static const struct ipv6_l3fwd_em_route ipv6_l3fwd_em_route_array[] = {
+	{{{32, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+	  {32, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, 9, 9, IPPROTO_UDP}, 0},
+	{{{32, 1, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
+	  {32, 1, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1}, 9, 9, IPPROTO_UDP}, 1},
+	{{{32, 1, 2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0},
+	  {32, 1, 2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 1}, 9, 9, IPPROTO_UDP}, 2},
+	{{{32, 1, 2, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0},
+	  {32, 1, 2, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 1}, 9, 9, IPPROTO_UDP}, 3},
+	{{{32, 1, 2, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0},
+	  {32, 1, 2, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 1}, 9, 9, IPPROTO_UDP}, 4},
+	{{{32, 1, 2, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0},
+	  {32, 1, 2, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 1}, 9, 9, IPPROTO_UDP}, 5},
+	{{{32, 1, 2, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0},
+	  {32, 1, 2, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 1}, 9, 9, IPPROTO_UDP}, 6},
+	{{{32, 1, 2, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0},
+	  {32, 1, 2, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 1}, 9, 9, IPPROTO_UDP}, 7},
+	{{{32, 1, 2, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0},
+	  {32, 1, 2, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 1}, 9, 9, IPPROTO_UDP}, 8},
+	{{{32, 1, 2, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0},
+	  {32, 1, 2, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1}, 9, 9, IPPROTO_UDP}, 9},
+	{{{32, 1, 2, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0},
+	  {32, 1, 2, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 1}, 9, 9, IPPROTO_UDP}, 10},
+	{{{32, 1, 2, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0},
+	  {32, 1, 2, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 1}, 9, 9, IPPROTO_UDP}, 11},
+	{{{32, 1, 2, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0},
+	  {32, 1, 2, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 1}, 9, 9, IPPROTO_UDP}, 12},
+	{{{32, 1, 2, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0},
+	  {32, 1, 2, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 1}, 9, 9, IPPROTO_UDP}, 13},
+	{{{32, 1, 2, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0},
+	  {32, 1, 2, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 1}, 9, 9, IPPROTO_UDP}, 14},
+	{{{32, 1, 2, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0},
+	  {32, 1, 2, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 1}, 9, 9, IPPROTO_UDP}, 15},
 };
 
 struct rte_hash *ipv4_l3fwd_em_lookup_struct[NB_SOCKETS];
@@ -405,7 +436,7 @@ populate_ipv6_few_flow_into_table(const struct rte_hash *h)
 		(uint64_t)IPV6_L3FWD_EM_NUM_ROUTES);
 }
 
-#define NUMBER_PORT_USED 4
+#define NUMBER_PORT_USED 16
 static inline void
 populate_ipv4_many_flow_into_table(const struct rte_hash *h,
 		unsigned int nr_flow)
@@ -416,36 +447,16 @@ populate_ipv4_many_flow_into_table(const struct rte_hash *h,
 				ALL_32_BITS, ALL_32_BITS} };
 
 	for (i = 0; i < nr_flow; i++) {
+		uint8_t port = i % NUMBER_PORT_USED;
 		struct ipv4_l3fwd_em_route entry;
 		union ipv4_5tuple_host newkey;
 
-		uint8_t a = (uint8_t)
-			((i/NUMBER_PORT_USED)%BYTE_VALUE_MAX);
-		uint8_t b = (uint8_t)
-			(((i/NUMBER_PORT_USED)/BYTE_VALUE_MAX)%BYTE_VALUE_MAX);
-		uint8_t c = (uint8_t)
-			((i/NUMBER_PORT_USED)/(BYTE_VALUE_MAX*BYTE_VALUE_MAX));
+		uint8_t a = (uint8_t)((port + 1) % BYTE_VALUE_MAX);
 
 		/* Create the ipv4 exact match flow */
 		memset(&entry, 0, sizeof(entry));
-		switch (i & (NUMBER_PORT_USED - 1)) {
-		case 0:
-			entry = ipv4_l3fwd_em_route_array[0];
-			entry.key.ip_dst = RTE_IPV4(101, c, b, a);
-			break;
-		case 1:
-			entry = ipv4_l3fwd_em_route_array[1];
-			entry.key.ip_dst = RTE_IPV4(201, c, b, a);
-			break;
-		case 2:
-			entry = ipv4_l3fwd_em_route_array[2];
-			entry.key.ip_dst = RTE_IPV4(111, c, b, a);
-			break;
-		case 3:
-			entry = ipv4_l3fwd_em_route_array[3];
-			entry.key.ip_dst = RTE_IPV4(211, c, b, a);
-			break;
-		};
+		entry = ipv4_l3fwd_em_route_array[port];
+		entry.key.ip_dst = RTE_IPV4(198, 18, port, a);
 		convert_ipv4_5tuple(&entry.key, &newkey);
 		int32_t ret = rte_hash_add_key(h, (void *) &newkey);
 
@@ -469,35 +480,14 @@ populate_ipv6_many_flow_into_table(const struct rte_hash *h,
 	mask2 = (rte_xmm_t){.u32 = {ALL_32_BITS, ALL_32_BITS, 0, 0} };
 
 	for (i = 0; i < nr_flow; i++) {
+		uint8_t port = i % NUMBER_PORT_USED;
 		struct ipv6_l3fwd_em_route entry;
 		union ipv6_5tuple_host newkey;
 
-		uint8_t a = (uint8_t)
-			((i/NUMBER_PORT_USED)%BYTE_VALUE_MAX);
-		uint8_t b = (uint8_t)
-			(((i/NUMBER_PORT_USED)/BYTE_VALUE_MAX)%BYTE_VALUE_MAX);
-		uint8_t c = (uint8_t)
-			((i/NUMBER_PORT_USED)/(BYTE_VALUE_MAX*BYTE_VALUE_MAX));
-
 		/* Create the ipv6 exact match flow */
 		memset(&entry, 0, sizeof(entry));
-		switch (i & (NUMBER_PORT_USED - 1)) {
-		case 0:
-			entry = ipv6_l3fwd_em_route_array[0];
-			break;
-		case 1:
-			entry = ipv6_l3fwd_em_route_array[1];
-			break;
-		case 2:
-			entry = ipv6_l3fwd_em_route_array[2];
-			break;
-		case 3:
-			entry = ipv6_l3fwd_em_route_array[3];
-			break;
-		};
-		entry.key.ip_dst[13] = c;
-		entry.key.ip_dst[14] = b;
-		entry.key.ip_dst[15] = a;
+		entry = ipv6_l3fwd_em_route_array[port];
+		entry.key.ip_dst[15] = (port + 1) % BYTE_VALUE_MAX;
 		convert_ipv6_5tuple(&entry.key, &newkey);
 		int32_t ret = rte_hash_add_key(h, (void *) &newkey);
 
@@ -584,7 +574,7 @@ em_parse_ptype(struct rte_mbuf *m)
 		hdr_len = rte_ipv4_hdr_len(ipv4_hdr);
 		if (hdr_len == sizeof(struct rte_ipv4_hdr)) {
 			packet_type |= RTE_PTYPE_L3_IPV4;
-			if (ipv4_hdr->next_proto_id == IPPROTO_TCP)
+			if (ipv4_hdr->next_proto_id == IPPROTO_UDP)
 				packet_type |= RTE_PTYPE_L4_TCP;
 			else if (ipv4_hdr->next_proto_id == IPPROTO_UDP)
 				packet_type |= RTE_PTYPE_L4_UDP;
@@ -592,7 +582,7 @@ em_parse_ptype(struct rte_mbuf *m)
 			packet_type |= RTE_PTYPE_L3_IPV4_EXT;
 	} else if (ether_type == rte_cpu_to_be_16(RTE_ETHER_TYPE_IPV6)) {
 		ipv6_hdr = (struct rte_ipv6_hdr *)l3;
-		if (ipv6_hdr->proto == IPPROTO_TCP)
+		if (ipv6_hdr->proto == IPPROTO_UDP)
 			packet_type |= RTE_PTYPE_L3_IPV6 | RTE_PTYPE_L4_TCP;
 		else if (ipv6_hdr->proto == IPPROTO_UDP)
 			packet_type |= RTE_PTYPE_L3_IPV6 | RTE_PTYPE_L4_UDP;
-- 
2.33.0


^ permalink raw reply	[flat|nested] 26+ messages in thread

* [dpdk-dev] [PATCH v4 1/3] examples/l3fwd: increase number of routes
  2021-10-03 20:11   ` [dpdk-dev] [PATCH 1/3] examples/l3fwd: increase number of routes pbhagavatula
  2021-10-03 20:11     ` [dpdk-dev] [PATCH 2/3] examples/l3fwd: print port bdf when adding routes pbhagavatula
  2021-10-03 20:11     ` [dpdk-dev] [PATCH 3/3] examples/l3fwd: use reserved addresses for EM mode pbhagavatula
@ 2021-10-03 20:24     ` pbhagavatula
  2021-10-03 20:24       ` [dpdk-dev] [PATCH v4 2/3] examples/l3fwd: print port bdf when adding routes pbhagavatula
                         ` (3 more replies)
  2021-10-04 15:46     ` [dpdk-dev] [PATCH " Stephen Hemminger
  3 siblings, 4 replies; 26+ messages in thread
From: pbhagavatula @ 2021-10-03 20:24 UTC (permalink / raw)
  To: david.marchand, jerinj; +Cc: dev, Pavan Nikhilesh

From: Pavan Nikhilesh <pbhagavatula@marvell.com>

Increase the number of routes from 8 to 16 that are statically added for
lpm and em mode as most of the SoCs support more than 8 interfaces.
The number of routes added is equal to the number of ethernet devices
ports enabled through port mask.

Signed-off-by: Pavan Nikhilesh <pbhagavatula@marvell.com>
---
 v4 Changes:
 - Use correct patch version and prefix.

 v3 Changes: (Finally!)
 - Add FIB to the list.
 - Update release notes.
 - Update EM route addition routine and use the correct IP addresses
   DTS need not be updated as EM test doesn't use IP addresses defined
   in l3fwd.

 v2 Changes:
 - Fixup for EM mode.

 examples/l3fwd/l3fwd_route.h |  4 ++--
 examples/l3fwd/main.c        | 20 ++++++++++++++++++--
 2 files changed, 20 insertions(+), 4 deletions(-)

diff --git a/examples/l3fwd/l3fwd_route.h b/examples/l3fwd/l3fwd_route.h
index 89f8634443..c7eba06c4d 100644
--- a/examples/l3fwd/l3fwd_route.h
+++ b/examples/l3fwd/l3fwd_route.h
@@ -14,6 +14,6 @@ struct ipv6_l3fwd_route {
 	uint8_t if_out;
 };

-extern const struct ipv4_l3fwd_route ipv4_l3fwd_route_array[8];
+extern const struct ipv4_l3fwd_route ipv4_l3fwd_route_array[16];

-extern const struct ipv6_l3fwd_route ipv6_l3fwd_route_array[8];
+extern const struct ipv6_l3fwd_route ipv6_l3fwd_route_array[16];
diff --git a/examples/l3fwd/main.c b/examples/l3fwd/main.c
index 00ac267af1..194f6ac1a4 100644
--- a/examples/l3fwd/main.c
+++ b/examples/l3fwd/main.c
@@ -179,7 +179,7 @@ static struct l3fwd_lkp_mode l3fwd_fib_lkp = {

 /*
  * 198.18.0.0/16 are set aside for RFC2544 benchmarking (RFC5735).
- * 198.18.{0-7}.0/24 = Port {0-7}
+ * 198.18.{0-15}.0/24 = Port {0-15}
  */
 const struct ipv4_l3fwd_route ipv4_l3fwd_route_array[] = {
 	{RTE_IPV4(198, 18, 0, 0), 24, 0},
@@ -190,11 +190,19 @@ const struct ipv4_l3fwd_route ipv4_l3fwd_route_array[] = {
 	{RTE_IPV4(198, 18, 5, 0), 24, 5},
 	{RTE_IPV4(198, 18, 6, 0), 24, 6},
 	{RTE_IPV4(198, 18, 7, 0), 24, 7},
+	{RTE_IPV4(198, 18, 8, 0), 24, 8},
+	{RTE_IPV4(198, 18, 9, 0), 24, 9},
+	{RTE_IPV4(198, 18, 10, 0), 24, 10},
+	{RTE_IPV4(198, 18, 11, 0), 24, 11},
+	{RTE_IPV4(198, 18, 12, 0), 24, 12},
+	{RTE_IPV4(198, 18, 13, 0), 24, 13},
+	{RTE_IPV4(198, 18, 14, 0), 24, 14},
+	{RTE_IPV4(198, 18, 15, 0), 24, 15},
 };

 /*
  * 2001:200::/48 is IANA reserved range for IPv6 benchmarking (RFC5180).
- * 2001:200:0:{0-7}::/64 = Port {0-7}
+ * 2001:200:0:{0-15}::/64 = Port {0-15}
  */
 const struct ipv6_l3fwd_route ipv6_l3fwd_route_array[] = {
 	{{32, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 64, 0},
@@ -205,6 +213,14 @@ const struct ipv6_l3fwd_route ipv6_l3fwd_route_array[] = {
 	{{32, 1, 2, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0}, 64, 5},
 	{{32, 1, 2, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0}, 64, 6},
 	{{32, 1, 2, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0}, 64, 7},
+	{{32, 1, 2, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0}, 64, 8},
+	{{32, 1, 2, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0}, 64, 9},
+	{{32, 1, 2, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0}, 64, 10},
+	{{32, 1, 2, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0}, 64, 11},
+	{{32, 1, 2, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0}, 64, 12},
+	{{32, 1, 2, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0}, 64, 13},
+	{{32, 1, 2, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0}, 64, 14},
+	{{32, 1, 2, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0}, 64, 15},
 };

 /*
--
2.17.1


^ permalink raw reply	[flat|nested] 26+ messages in thread

* [dpdk-dev] [PATCH v4 2/3] examples/l3fwd: print port bdf when adding routes
  2021-10-03 20:24     ` [dpdk-dev] [PATCH v4 1/3] examples/l3fwd: increase number of routes pbhagavatula
@ 2021-10-03 20:24       ` pbhagavatula
  2021-10-03 20:24       ` [dpdk-dev] [PATCH v4 3/3] examples/l3fwd: use reserved addresses for EM mode pbhagavatula
                         ` (2 subsequent siblings)
  3 siblings, 0 replies; 26+ messages in thread
From: pbhagavatula @ 2021-10-03 20:24 UTC (permalink / raw)
  To: david.marchand, jerinj; +Cc: dev, Pavan Nikhilesh

From: Pavan Nikhilesh <pbhagavatula@marvell.com>

Since the number of Ethernet ports have gone up, print the pci bdf along
with the routes.
This is also helpful for cases where allow listing order is not honored.

Signed-off-by: Pavan Nikhilesh <pbhagavatula@marvell.com>
---
 examples/l3fwd/l3fwd_fib.c | 16 ++++++++++------
 examples/l3fwd/l3fwd_lpm.c |  9 ++++++---
 2 files changed, 16 insertions(+), 9 deletions(-)

diff --git a/examples/l3fwd/l3fwd_fib.c b/examples/l3fwd/l3fwd_fib.c
index f8d6a3ac39..cc6054ca44 100644
--- a/examples/l3fwd/l3fwd_fib.c
+++ b/examples/l3fwd/l3fwd_fib.c
@@ -439,6 +439,7 @@ setup_fib(const int socketid)
 
 	/* Populate the fib ipv4 table. */
 	for (i = 0; i < RTE_DIM(ipv4_l3fwd_route_array); i++) {
+		struct rte_eth_dev_info dev_info;
 		struct in_addr in;
 
 		/* Skip unused ports. */
@@ -446,6 +447,8 @@ setup_fib(const int socketid)
 				enabled_port_mask) == 0)
 			continue;
 
+		rte_eth_dev_info_get(ipv4_l3fwd_route_array[i].if_out,
+				     &dev_info);
 		ret = rte_fib_add(ipv4_l3fwd_fib_lookup_struct[socketid],
 			ipv4_l3fwd_route_array[i].ip,
 			ipv4_l3fwd_route_array[i].depth,
@@ -459,13 +462,14 @@ setup_fib(const int socketid)
 
 		in.s_addr = htonl(ipv4_l3fwd_route_array[i].ip);
 		if (inet_ntop(AF_INET, &in, abuf, sizeof(abuf)) != NULL) {
-			printf("FIB: Adding route %s / %d (%d)\n",
-				abuf,
-				ipv4_l3fwd_route_array[i].depth,
-				ipv4_l3fwd_route_array[i].if_out);
+			printf("FIB: Adding route %s / %d (%d) [%s]\n", abuf,
+			       ipv4_l3fwd_route_array[i].depth,
+			       ipv4_l3fwd_route_array[i].if_out,
+			       dev_info.device->name);
 		} else {
-			printf("FIB: IPv4 route added to port %d\n",
-				ipv4_l3fwd_route_array[i].if_out);
+			printf("FIB: IPv4 route added to port %d [%s]\n",
+			       ipv4_l3fwd_route_array[i].if_out,
+			       dev_info.device->name);
 		}
 	}
 	/* >8 End of setup fib. */
diff --git a/examples/l3fwd/l3fwd_lpm.c b/examples/l3fwd/l3fwd_lpm.c
index 7200160164..582911c622 100644
--- a/examples/l3fwd/l3fwd_lpm.c
+++ b/examples/l3fwd/l3fwd_lpm.c
@@ -451,6 +451,7 @@ setup_lpm(const int socketid)
 
 	/* populate the LPM table */
 	for (i = 0; i < RTE_DIM(ipv4_l3fwd_route_array); i++) {
+		struct rte_eth_dev_info dev_info;
 		struct in_addr in;
 
 		/* skip unused ports */
@@ -458,6 +459,8 @@ setup_lpm(const int socketid)
 				enabled_port_mask) == 0)
 			continue;
 
+		rte_eth_dev_info_get(ipv4_l3fwd_route_array[i].if_out,
+				     &dev_info);
 		ret = rte_lpm_add(ipv4_l3fwd_lpm_lookup_struct[socketid],
 			ipv4_l3fwd_route_array[i].ip,
 			ipv4_l3fwd_route_array[i].depth,
@@ -470,10 +473,10 @@ setup_lpm(const int socketid)
 		}
 
 		in.s_addr = htonl(ipv4_l3fwd_route_array[i].ip);
-		printf("LPM: Adding route %s / %d (%d)\n",
+		printf("LPM: Adding route %s / %d (%d) [%s]\n",
 		       inet_ntop(AF_INET, &in, abuf, sizeof(abuf)),
-			ipv4_l3fwd_route_array[i].depth,
-			ipv4_l3fwd_route_array[i].if_out);
+		       ipv4_l3fwd_route_array[i].depth,
+		       ipv4_l3fwd_route_array[i].if_out, dev_info.device->name);
 	}
 
 	/* create the LPM6 table */
-- 
2.17.1


^ permalink raw reply	[flat|nested] 26+ messages in thread

* [dpdk-dev] [PATCH v4 3/3] examples/l3fwd: use reserved addresses for EM mode
  2021-10-03 20:24     ` [dpdk-dev] [PATCH v4 1/3] examples/l3fwd: increase number of routes pbhagavatula
  2021-10-03 20:24       ` [dpdk-dev] [PATCH v4 2/3] examples/l3fwd: print port bdf when adding routes pbhagavatula
@ 2021-10-03 20:24       ` pbhagavatula
  2021-11-03 20:53         ` David Marchand
  2021-11-04 10:28       ` [dpdk-dev] [PATCH v4 1/3] examples/l3fwd: increase number of routes Walsh, Conor
  2021-11-05  8:38       ` [dpdk-dev] [PATCH v5 " pbhagavatula
  3 siblings, 1 reply; 26+ messages in thread
From: pbhagavatula @ 2021-10-03 20:24 UTC (permalink / raw)
  To: david.marchand, jerinj; +Cc: dev, Pavan Nikhilesh

From: Pavan Nikhilesh <pbhagavatula@marvell.com>

The l3fwd example should use the reserved IPv4/v6 reserved address
ranges defined in RFC5735, RFC5180 and RFC863 discard protocol for
the port number in the exact match mode of L3 forwarding.

Signed-off-by: Pavan Nikhilesh <pbhagavatula@marvell.com>
---
 doc/guides/rel_notes/release_21_11.rst |   6 ++
 examples/l3fwd/l3fwd.h                 |   2 +-
 examples/l3fwd/l3fwd_em.c              | 142 ++++++++++++-------------
 3 files changed, 73 insertions(+), 77 deletions(-)

diff --git a/doc/guides/rel_notes/release_21_11.rst b/doc/guides/rel_notes/release_21_11.rst
index 37dc1a7786..ccdfa47baa 100644
--- a/doc/guides/rel_notes/release_21_11.rst
+++ b/doc/guides/rel_notes/release_21_11.rst
@@ -125,6 +125,12 @@ New Features
   * Added tests to validate packets hard expiry.
   * Added tests to verify tunnel header verification in IPsec inbound.
 
+* **Increase number of routes configured in l3fwd lpm, em and fib lookups.**
+
+  * Increase number of routes from 8 to 16 for all lookup modes of l3fwd, this
+    helps in validating SoC with more than 8 ethernet devices using l3fwd.
+  * Update EM mode to use RFC2544 reserved IP address space.
+
 
 Removed Items
 -------------
diff --git a/examples/l3fwd/l3fwd.h b/examples/l3fwd/l3fwd.h
index a808d60247..853a31d4c2 100644
--- a/examples/l3fwd/l3fwd.h
+++ b/examples/l3fwd/l3fwd.h
@@ -54,7 +54,7 @@
 /* 32-bit has less address-space for hugepage memory, limit to 1M entries */
 #define L3FWD_HASH_ENTRIES		(1024*1024*1)
 #endif
-#define HASH_ENTRY_NUMBER_DEFAULT	4
+#define HASH_ENTRY_NUMBER_DEFAULT	16
 
 struct mbuf_table {
 	uint16_t len;
diff --git a/examples/l3fwd/l3fwd_em.c b/examples/l3fwd/l3fwd_em.c
index 2a8ab6aab5..92998e26b2 100644
--- a/examples/l3fwd/l3fwd_em.c
+++ b/examples/l3fwd/l3fwd_em.c
@@ -99,33 +99,64 @@ struct ipv6_l3fwd_em_route {
 	uint8_t if_out;
 };
 
-static struct ipv4_l3fwd_em_route ipv4_l3fwd_em_route_array[] = {
-	{{RTE_IPV4(101, 0, 0, 0), RTE_IPV4(100, 10, 0, 1),  101, 11, IPPROTO_TCP}, 0},
-	{{RTE_IPV4(201, 0, 0, 0), RTE_IPV4(200, 20, 0, 1),  102, 12, IPPROTO_TCP}, 1},
-	{{RTE_IPV4(111, 0, 0, 0), RTE_IPV4(100, 30, 0, 1),  101, 11, IPPROTO_TCP}, 2},
-	{{RTE_IPV4(211, 0, 0, 0), RTE_IPV4(200, 40, 0, 1),  102, 12, IPPROTO_TCP}, 3},
+/* 198.18.0.0/16 are set aside for RFC2544 benchmarking (RFC5735).
+ * Use RFC863 Discard Protocol.
+ */
+static const struct ipv4_l3fwd_em_route ipv4_l3fwd_em_route_array[] = {
+	{{RTE_IPV4(198, 18, 0, 0), RTE_IPV4(198, 18, 0, 1),  9, 9, IPPROTO_UDP}, 0},
+	{{RTE_IPV4(198, 18, 1, 0), RTE_IPV4(198, 18, 1, 1),  9, 9, IPPROTO_UDP}, 1},
+	{{RTE_IPV4(198, 18, 2, 0), RTE_IPV4(198, 18, 2, 1),  9, 9, IPPROTO_UDP}, 2},
+	{{RTE_IPV4(198, 18, 3, 0), RTE_IPV4(198, 18, 3, 1),  9, 9, IPPROTO_UDP}, 3},
+	{{RTE_IPV4(198, 18, 4, 0), RTE_IPV4(198, 18, 4, 1),  9, 9, IPPROTO_UDP}, 4},
+	{{RTE_IPV4(198, 18, 5, 0), RTE_IPV4(198, 18, 5, 1),  9, 9, IPPROTO_UDP}, 5},
+	{{RTE_IPV4(198, 18, 6, 0), RTE_IPV4(198, 18, 6, 1),  9, 9, IPPROTO_UDP}, 6},
+	{{RTE_IPV4(198, 18, 7, 0), RTE_IPV4(198, 18, 7, 1),  9, 9, IPPROTO_UDP}, 7},
+	{{RTE_IPV4(198, 18, 8, 0), RTE_IPV4(198, 18, 8, 1),  9, 9, IPPROTO_UDP}, 8},
+	{{RTE_IPV4(198, 18, 9, 0), RTE_IPV4(198, 18, 9, 1),  9, 9, IPPROTO_UDP}, 9},
+	{{RTE_IPV4(198, 18, 10, 0), RTE_IPV4(198, 18, 10, 1),  9, 9, IPPROTO_UDP}, 10},
+	{{RTE_IPV4(198, 18, 11, 0), RTE_IPV4(198, 18, 11, 1),  9, 9, IPPROTO_UDP}, 11},
+	{{RTE_IPV4(198, 18, 12, 0), RTE_IPV4(198, 18, 12, 1),  9, 9, IPPROTO_UDP}, 12},
+	{{RTE_IPV4(198, 18, 13, 0), RTE_IPV4(198, 18, 13, 1),  9, 9, IPPROTO_UDP}, 13},
+	{{RTE_IPV4(198, 18, 14, 0), RTE_IPV4(198, 18, 14, 1),  9, 9, IPPROTO_UDP}, 14},
+	{{RTE_IPV4(198, 18, 15, 0), RTE_IPV4(198, 18, 15, 1),  9, 9, IPPROTO_UDP}, 15},
 };
 
-static struct ipv6_l3fwd_em_route ipv6_l3fwd_em_route_array[] = {
-	{{
-	{0xfe, 0x80, 0, 0, 0, 0, 0, 0, 0x02, 0x1e, 0x67, 0xff, 0xfe, 0, 0, 0},
-	{0xfe, 0x80, 0, 0, 0, 0, 0, 0, 0x02, 0x1b, 0x21, 0xff, 0xfe, 0x91, 0x38, 0x05},
-	101, 11, IPPROTO_TCP}, 0},
-
-	{{
-	{0xfe, 0x90, 0, 0, 0, 0, 0, 0, 0x02, 0x1e, 0x67, 0xff, 0xfe, 0, 0, 0},
-	{0xfe, 0x90, 0, 0, 0, 0, 0, 0, 0x02, 0x1b, 0x21, 0xff, 0xfe, 0x91, 0x38, 0x05},
-	102, 12, IPPROTO_TCP}, 1},
-
-	{{
-	{0xfe, 0xa0, 0, 0, 0, 0, 0, 0, 0x02, 0x1e, 0x67, 0xff, 0xfe, 0, 0, 0},
-	{0xfe, 0xa0, 0, 0, 0, 0, 0, 0, 0x02, 0x1b, 0x21, 0xff, 0xfe, 0x91, 0x38, 0x05},
-	101, 11, IPPROTO_TCP}, 2},
-
-	{{
-	{0xfe, 0xb0, 0, 0, 0, 0, 0, 0, 0x02, 0x1e, 0x67, 0xff, 0xfe, 0, 0, 0},
-	{0xfe, 0xb0, 0, 0, 0, 0, 0, 0, 0x02, 0x1b, 0x21, 0xff, 0xfe, 0x91, 0x38, 0x05},
-	102, 12, IPPROTO_TCP}, 3},
+/* 2001:0200::/48 is IANA reserved range for IPv6 benchmarking (RFC5180).
+ * Use RFC863 Discard Protocol.
+ */
+static const struct ipv6_l3fwd_em_route ipv6_l3fwd_em_route_array[] = {
+	{{{32, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+	  {32, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, 9, 9, IPPROTO_UDP}, 0},
+	{{{32, 1, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
+	  {32, 1, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1}, 9, 9, IPPROTO_UDP}, 1},
+	{{{32, 1, 2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0},
+	  {32, 1, 2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 1}, 9, 9, IPPROTO_UDP}, 2},
+	{{{32, 1, 2, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0},
+	  {32, 1, 2, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 1}, 9, 9, IPPROTO_UDP}, 3},
+	{{{32, 1, 2, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0},
+	  {32, 1, 2, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 1}, 9, 9, IPPROTO_UDP}, 4},
+	{{{32, 1, 2, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0},
+	  {32, 1, 2, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 1}, 9, 9, IPPROTO_UDP}, 5},
+	{{{32, 1, 2, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0},
+	  {32, 1, 2, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 1}, 9, 9, IPPROTO_UDP}, 6},
+	{{{32, 1, 2, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0},
+	  {32, 1, 2, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 1}, 9, 9, IPPROTO_UDP}, 7},
+	{{{32, 1, 2, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0},
+	  {32, 1, 2, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 1}, 9, 9, IPPROTO_UDP}, 8},
+	{{{32, 1, 2, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0},
+	  {32, 1, 2, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1}, 9, 9, IPPROTO_UDP}, 9},
+	{{{32, 1, 2, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0},
+	  {32, 1, 2, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 1}, 9, 9, IPPROTO_UDP}, 10},
+	{{{32, 1, 2, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0},
+	  {32, 1, 2, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 1}, 9, 9, IPPROTO_UDP}, 11},
+	{{{32, 1, 2, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0},
+	  {32, 1, 2, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 1}, 9, 9, IPPROTO_UDP}, 12},
+	{{{32, 1, 2, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0},
+	  {32, 1, 2, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 1}, 9, 9, IPPROTO_UDP}, 13},
+	{{{32, 1, 2, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0},
+	  {32, 1, 2, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 1}, 9, 9, IPPROTO_UDP}, 14},
+	{{{32, 1, 2, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0},
+	  {32, 1, 2, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 1}, 9, 9, IPPROTO_UDP}, 15},
 };
 
 struct rte_hash *ipv4_l3fwd_em_lookup_struct[NB_SOCKETS];
@@ -405,7 +436,7 @@ populate_ipv6_few_flow_into_table(const struct rte_hash *h)
 		(uint64_t)IPV6_L3FWD_EM_NUM_ROUTES);
 }
 
-#define NUMBER_PORT_USED 4
+#define NUMBER_PORT_USED 16
 static inline void
 populate_ipv4_many_flow_into_table(const struct rte_hash *h,
 		unsigned int nr_flow)
@@ -416,36 +447,16 @@ populate_ipv4_many_flow_into_table(const struct rte_hash *h,
 				ALL_32_BITS, ALL_32_BITS} };
 
 	for (i = 0; i < nr_flow; i++) {
+		uint8_t port = i % NUMBER_PORT_USED;
 		struct ipv4_l3fwd_em_route entry;
 		union ipv4_5tuple_host newkey;
 
-		uint8_t a = (uint8_t)
-			((i/NUMBER_PORT_USED)%BYTE_VALUE_MAX);
-		uint8_t b = (uint8_t)
-			(((i/NUMBER_PORT_USED)/BYTE_VALUE_MAX)%BYTE_VALUE_MAX);
-		uint8_t c = (uint8_t)
-			((i/NUMBER_PORT_USED)/(BYTE_VALUE_MAX*BYTE_VALUE_MAX));
+		uint8_t a = (uint8_t)((port + 1) % BYTE_VALUE_MAX);
 
 		/* Create the ipv4 exact match flow */
 		memset(&entry, 0, sizeof(entry));
-		switch (i & (NUMBER_PORT_USED - 1)) {
-		case 0:
-			entry = ipv4_l3fwd_em_route_array[0];
-			entry.key.ip_dst = RTE_IPV4(101, c, b, a);
-			break;
-		case 1:
-			entry = ipv4_l3fwd_em_route_array[1];
-			entry.key.ip_dst = RTE_IPV4(201, c, b, a);
-			break;
-		case 2:
-			entry = ipv4_l3fwd_em_route_array[2];
-			entry.key.ip_dst = RTE_IPV4(111, c, b, a);
-			break;
-		case 3:
-			entry = ipv4_l3fwd_em_route_array[3];
-			entry.key.ip_dst = RTE_IPV4(211, c, b, a);
-			break;
-		};
+		entry = ipv4_l3fwd_em_route_array[port];
+		entry.key.ip_dst = RTE_IPV4(198, 18, port, a);
 		convert_ipv4_5tuple(&entry.key, &newkey);
 		int32_t ret = rte_hash_add_key(h, (void *) &newkey);
 
@@ -469,35 +480,14 @@ populate_ipv6_many_flow_into_table(const struct rte_hash *h,
 	mask2 = (rte_xmm_t){.u32 = {ALL_32_BITS, ALL_32_BITS, 0, 0} };
 
 	for (i = 0; i < nr_flow; i++) {
+		uint8_t port = i % NUMBER_PORT_USED;
 		struct ipv6_l3fwd_em_route entry;
 		union ipv6_5tuple_host newkey;
 
-		uint8_t a = (uint8_t)
-			((i/NUMBER_PORT_USED)%BYTE_VALUE_MAX);
-		uint8_t b = (uint8_t)
-			(((i/NUMBER_PORT_USED)/BYTE_VALUE_MAX)%BYTE_VALUE_MAX);
-		uint8_t c = (uint8_t)
-			((i/NUMBER_PORT_USED)/(BYTE_VALUE_MAX*BYTE_VALUE_MAX));
-
 		/* Create the ipv6 exact match flow */
 		memset(&entry, 0, sizeof(entry));
-		switch (i & (NUMBER_PORT_USED - 1)) {
-		case 0:
-			entry = ipv6_l3fwd_em_route_array[0];
-			break;
-		case 1:
-			entry = ipv6_l3fwd_em_route_array[1];
-			break;
-		case 2:
-			entry = ipv6_l3fwd_em_route_array[2];
-			break;
-		case 3:
-			entry = ipv6_l3fwd_em_route_array[3];
-			break;
-		};
-		entry.key.ip_dst[13] = c;
-		entry.key.ip_dst[14] = b;
-		entry.key.ip_dst[15] = a;
+		entry = ipv6_l3fwd_em_route_array[port];
+		entry.key.ip_dst[15] = (port + 1) % BYTE_VALUE_MAX;
 		convert_ipv6_5tuple(&entry.key, &newkey);
 		int32_t ret = rte_hash_add_key(h, (void *) &newkey);
 
@@ -584,7 +574,7 @@ em_parse_ptype(struct rte_mbuf *m)
 		hdr_len = rte_ipv4_hdr_len(ipv4_hdr);
 		if (hdr_len == sizeof(struct rte_ipv4_hdr)) {
 			packet_type |= RTE_PTYPE_L3_IPV4;
-			if (ipv4_hdr->next_proto_id == IPPROTO_TCP)
+			if (ipv4_hdr->next_proto_id == IPPROTO_UDP)
 				packet_type |= RTE_PTYPE_L4_TCP;
 			else if (ipv4_hdr->next_proto_id == IPPROTO_UDP)
 				packet_type |= RTE_PTYPE_L4_UDP;
@@ -592,7 +582,7 @@ em_parse_ptype(struct rte_mbuf *m)
 			packet_type |= RTE_PTYPE_L3_IPV4_EXT;
 	} else if (ether_type == rte_cpu_to_be_16(RTE_ETHER_TYPE_IPV6)) {
 		ipv6_hdr = (struct rte_ipv6_hdr *)l3;
-		if (ipv6_hdr->proto == IPPROTO_TCP)
+		if (ipv6_hdr->proto == IPPROTO_UDP)
 			packet_type |= RTE_PTYPE_L3_IPV6 | RTE_PTYPE_L4_TCP;
 		else if (ipv6_hdr->proto == IPPROTO_UDP)
 			packet_type |= RTE_PTYPE_L3_IPV6 | RTE_PTYPE_L4_UDP;
-- 
2.17.1


^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [dpdk-dev] [PATCH 1/3] examples/l3fwd: increase number of routes
  2021-10-03 20:11   ` [dpdk-dev] [PATCH 1/3] examples/l3fwd: increase number of routes pbhagavatula
                       ` (2 preceding siblings ...)
  2021-10-03 20:24     ` [dpdk-dev] [PATCH v4 1/3] examples/l3fwd: increase number of routes pbhagavatula
@ 2021-10-04 15:46     ` Stephen Hemminger
  3 siblings, 0 replies; 26+ messages in thread
From: Stephen Hemminger @ 2021-10-04 15:46 UTC (permalink / raw)
  To: pbhagavatula; +Cc: jerinj, dev

On Mon, 4 Oct 2021 01:41:08 +0530
<pbhagavatula@marvell.com> wrote:

> From: Pavan Nikhilesh <pbhagavatula@marvell.com>
> 
> Increase the number of routes from 8 to 16 that are statically added for
> lpm and em mode as most of the SoCs support more than 8 interfaces.
> The number of routes added is equal to the number of ethernet devices
> ports enabled through port mask.
> 
> Signed-off-by: Pavan Nikhilesh <pbhagavatula@marvell.com>
> ---
>  v3 Changes: (Finally!)
>  - Add FIB to the list.
>  - Update release notes.
>  - Update EM route addition routine and use the correct IP addresses
>    DTS need not be updated as EM test doesn't use IP addresses defined
>    in l3fwd.
> 
>  v2 Changes:
>  - Fixup for EM mode.
> 
>  examples/l3fwd/l3fwd_route.h |  4 ++--
>  examples/l3fwd/main.c        | 20 ++++++++++++++++++--
>  2 files changed, 20 insertions(+), 4 deletions(-)
> 
> diff --git a/examples/l3fwd/l3fwd_route.h b/examples/l3fwd/l3fwd_route.h
> index 89f8634443..c7eba06c4d 100644
> --- a/examples/l3fwd/l3fwd_route.h
> +++ b/examples/l3fwd/l3fwd_route.h
> @@ -14,6 +14,6 @@ struct ipv6_l3fwd_route {
>  	uint8_t if_out;
>  };
> 
> -extern const struct ipv4_l3fwd_route ipv4_l3fwd_route_array[8];
> +extern const struct ipv4_l3fwd_route ipv4_l3fwd_route_array[16];
> 
> -extern const struct ipv6_l3fwd_route ipv6_l3fwd_route_array[8];
> +extern const struct ipv6_l3fwd_route ipv6_l3fwd_route_array[16];
> diff --git a/examples/l3fwd/main.c b/examples/l3fwd/main.c
> index 00ac267af1..194f6ac1a4 100644
> --- a/examples/l3fwd/main.c
> +++ b/examples/l3fwd/main.c
> @@ -179,7 +179,7 @@ static struct l3fwd_lkp_mode l3fwd_fib_lkp = {
> 
>  /*
>   * 198.18.0.0/16 are set aside for RFC2544 benchmarking (RFC5735).
> - * 198.18.{0-7}.0/24 = Port {0-7}
> + * 198.18.{0-15}.0/24 = Port {0-15}
>   */
>  const struct ipv4_l3fwd_route ipv4_l3fwd_route_array[] = {
>  	{RTE_IPV4(198, 18, 0, 0), 24, 0},
> @@ -190,11 +190,19 @@ const struct ipv4_l3fwd_route ipv4_l3fwd_route_array[] = {
>  	{RTE_IPV4(198, 18, 5, 0), 24, 5},
>  	{RTE_IPV4(198, 18, 6, 0), 24, 6},
>  	{RTE_IPV4(198, 18, 7, 0), 24, 7},
> +	{RTE_IPV4(198, 18, 8, 0), 24, 8},
> +	{RTE_IPV4(198, 18, 9, 0), 24, 9},
> +	{RTE_IPV4(198, 18, 10, 0), 24, 10},
> +	{RTE_IPV4(198, 18, 11, 0), 24, 11},
> +	{RTE_IPV4(198, 18, 12, 0), 24, 12},
> +	{RTE_IPV4(198, 18, 13, 0), 24, 13},
> +	{RTE_IPV4(198, 18, 14, 0), 24, 14},
> +	{RTE_IPV4(198, 18, 15, 0), 24, 15},
>  };
> 
>  /*
>   * 2001:200::/48 is IANA reserved range for IPv6 benchmarking (RFC5180).
> - * 2001:200:0:{0-7}::/64 = Port {0-7}
> + * 2001:200:0:{0-15}::/64 = Port {0-15}
>   */
>  const struct ipv6_l3fwd_route ipv6_l3fwd_route_array[] = {
>  	{{32, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 64, 0},
> @@ -205,6 +213,14 @@ const struct ipv6_l3fwd_route ipv6_l3fwd_route_array[] = {
>  	{{32, 1, 2, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0}, 64, 5},
>  	{{32, 1, 2, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0}, 64, 6},
>  	{{32, 1, 2, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0}, 64, 7},
> +	{{32, 1, 2, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0}, 64, 8},
> +	{{32, 1, 2, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0}, 64, 9},
> +	{{32, 1, 2, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0}, 64, 10},
> +	{{32, 1, 2, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0}, 64, 11},
> +	{{32, 1, 2, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0}, 64, 12},
> +	{{32, 1, 2, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0}, 64, 13},
> +	{{32, 1, 2, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0}, 64, 14},
> +	{{32, 1, 2, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0}, 64, 15},
>  };
> 
>  /*
> --
> 2.33.0
> 

Maybe the table should be generated or take an input file generated by a script.

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [dpdk-dev] [PATCH v4 3/3] examples/l3fwd: use reserved addresses for EM mode
  2021-10-03 20:24       ` [dpdk-dev] [PATCH v4 3/3] examples/l3fwd: use reserved addresses for EM mode pbhagavatula
@ 2021-11-03 20:53         ` David Marchand
  2021-11-05  7:30           ` [dpdk-dev] [EXT] " Pavan Nikhilesh Bhagavatula
  0 siblings, 1 reply; 26+ messages in thread
From: David Marchand @ 2021-11-03 20:53 UTC (permalink / raw)
  To: Pavan Nikhilesh; +Cc: Jerin Jacob Kollanukkaran, dev, Ananyev, Konstantin

On Sun, Oct 3, 2021 at 10:25 PM <pbhagavatula@marvell.com> wrote:
>
> From: Pavan Nikhilesh <pbhagavatula@marvell.com>
>
> The l3fwd example should use the reserved IPv4/v6 reserved address
> ranges defined in RFC5735, RFC5180 and RFC863 discard protocol for
> the port number in the exact match mode of L3 forwarding.
>
> Signed-off-by: Pavan Nikhilesh <pbhagavatula@marvell.com>
> ---
>  doc/guides/rel_notes/release_21_11.rst |   6 ++
>  examples/l3fwd/l3fwd.h                 |   2 +-
>  examples/l3fwd/l3fwd_em.c              | 142 ++++++++++++-------------
>  3 files changed, 73 insertions(+), 77 deletions(-)
>
> diff --git a/doc/guides/rel_notes/release_21_11.rst b/doc/guides/rel_notes/release_21_11.rst
> index 37dc1a7786..ccdfa47baa 100644
> --- a/doc/guides/rel_notes/release_21_11.rst
> +++ b/doc/guides/rel_notes/release_21_11.rst
> @@ -125,6 +125,12 @@ New Features
>    * Added tests to validate packets hard expiry.
>    * Added tests to verify tunnel header verification in IPsec inbound.
>
> +* **Increase number of routes configured in l3fwd lpm, em and fib lookups.**
> +
> +  * Increase number of routes from 8 to 16 for all lookup modes of l3fwd, this
> +    helps in validating SoC with more than 8 ethernet devices using l3fwd.

It should be in patch1.


> +  * Update EM mode to use RFC2544 reserved IP address space.
> +
>
>  Removed Items
>  -------------
> diff --git a/examples/l3fwd/l3fwd.h b/examples/l3fwd/l3fwd.h
> index a808d60247..853a31d4c2 100644
> --- a/examples/l3fwd/l3fwd.h
> +++ b/examples/l3fwd/l3fwd.h
> @@ -54,7 +54,7 @@
>  /* 32-bit has less address-space for hugepage memory, limit to 1M entries */
>  #define L3FWD_HASH_ENTRIES             (1024*1024*1)
>  #endif
> -#define HASH_ENTRY_NUMBER_DEFAULT      4
> +#define HASH_ENTRY_NUMBER_DEFAULT      16
>
>  struct mbuf_table {
>         uint16_t len;
> diff --git a/examples/l3fwd/l3fwd_em.c b/examples/l3fwd/l3fwd_em.c
> index 2a8ab6aab5..92998e26b2 100644
> --- a/examples/l3fwd/l3fwd_em.c
> +++ b/examples/l3fwd/l3fwd_em.c
> @@ -99,33 +99,64 @@ struct ipv6_l3fwd_em_route {
>         uint8_t if_out;
>  };
>
> -static struct ipv4_l3fwd_em_route ipv4_l3fwd_em_route_array[] = {
> -       {{RTE_IPV4(101, 0, 0, 0), RTE_IPV4(100, 10, 0, 1),  101, 11, IPPROTO_TCP}, 0},
> -       {{RTE_IPV4(201, 0, 0, 0), RTE_IPV4(200, 20, 0, 1),  102, 12, IPPROTO_TCP}, 1},
> -       {{RTE_IPV4(111, 0, 0, 0), RTE_IPV4(100, 30, 0, 1),  101, 11, IPPROTO_TCP}, 2},
> -       {{RTE_IPV4(211, 0, 0, 0), RTE_IPV4(200, 40, 0, 1),  102, 12, IPPROTO_TCP}, 3},
> +/* 198.18.0.0/16 are set aside for RFC2544 benchmarking (RFC5735).
> + * Use RFC863 Discard Protocol.
> + */
> +static const struct ipv4_l3fwd_em_route ipv4_l3fwd_em_route_array[] = {
> +       {{RTE_IPV4(198, 18, 0, 0), RTE_IPV4(198, 18, 0, 1),  9, 9, IPPROTO_UDP}, 0},
> +       {{RTE_IPV4(198, 18, 1, 0), RTE_IPV4(198, 18, 1, 1),  9, 9, IPPROTO_UDP}, 1},
> +       {{RTE_IPV4(198, 18, 2, 0), RTE_IPV4(198, 18, 2, 1),  9, 9, IPPROTO_UDP}, 2},
> +       {{RTE_IPV4(198, 18, 3, 0), RTE_IPV4(198, 18, 3, 1),  9, 9, IPPROTO_UDP}, 3},
> +       {{RTE_IPV4(198, 18, 4, 0), RTE_IPV4(198, 18, 4, 1),  9, 9, IPPROTO_UDP}, 4},
> +       {{RTE_IPV4(198, 18, 5, 0), RTE_IPV4(198, 18, 5, 1),  9, 9, IPPROTO_UDP}, 5},
> +       {{RTE_IPV4(198, 18, 6, 0), RTE_IPV4(198, 18, 6, 1),  9, 9, IPPROTO_UDP}, 6},
> +       {{RTE_IPV4(198, 18, 7, 0), RTE_IPV4(198, 18, 7, 1),  9, 9, IPPROTO_UDP}, 7},
> +       {{RTE_IPV4(198, 18, 8, 0), RTE_IPV4(198, 18, 8, 1),  9, 9, IPPROTO_UDP}, 8},
> +       {{RTE_IPV4(198, 18, 9, 0), RTE_IPV4(198, 18, 9, 1),  9, 9, IPPROTO_UDP}, 9},
> +       {{RTE_IPV4(198, 18, 10, 0), RTE_IPV4(198, 18, 10, 1),  9, 9, IPPROTO_UDP}, 10},
> +       {{RTE_IPV4(198, 18, 11, 0), RTE_IPV4(198, 18, 11, 1),  9, 9, IPPROTO_UDP}, 11},
> +       {{RTE_IPV4(198, 18, 12, 0), RTE_IPV4(198, 18, 12, 1),  9, 9, IPPROTO_UDP}, 12},
> +       {{RTE_IPV4(198, 18, 13, 0), RTE_IPV4(198, 18, 13, 1),  9, 9, IPPROTO_UDP}, 13},
> +       {{RTE_IPV4(198, 18, 14, 0), RTE_IPV4(198, 18, 14, 1),  9, 9, IPPROTO_UDP}, 14},
> +       {{RTE_IPV4(198, 18, 15, 0), RTE_IPV4(198, 18, 15, 1),  9, 9, IPPROTO_UDP}, 15},
>  };
>
> -static struct ipv6_l3fwd_em_route ipv6_l3fwd_em_route_array[] = {
> -       {{
> -       {0xfe, 0x80, 0, 0, 0, 0, 0, 0, 0x02, 0x1e, 0x67, 0xff, 0xfe, 0, 0, 0},
> -       {0xfe, 0x80, 0, 0, 0, 0, 0, 0, 0x02, 0x1b, 0x21, 0xff, 0xfe, 0x91, 0x38, 0x05},
> -       101, 11, IPPROTO_TCP}, 0},
> -
> -       {{
> -       {0xfe, 0x90, 0, 0, 0, 0, 0, 0, 0x02, 0x1e, 0x67, 0xff, 0xfe, 0, 0, 0},
> -       {0xfe, 0x90, 0, 0, 0, 0, 0, 0, 0x02, 0x1b, 0x21, 0xff, 0xfe, 0x91, 0x38, 0x05},
> -       102, 12, IPPROTO_TCP}, 1},
> -
> -       {{
> -       {0xfe, 0xa0, 0, 0, 0, 0, 0, 0, 0x02, 0x1e, 0x67, 0xff, 0xfe, 0, 0, 0},
> -       {0xfe, 0xa0, 0, 0, 0, 0, 0, 0, 0x02, 0x1b, 0x21, 0xff, 0xfe, 0x91, 0x38, 0x05},
> -       101, 11, IPPROTO_TCP}, 2},
> -
> -       {{
> -       {0xfe, 0xb0, 0, 0, 0, 0, 0, 0, 0x02, 0x1e, 0x67, 0xff, 0xfe, 0, 0, 0},
> -       {0xfe, 0xb0, 0, 0, 0, 0, 0, 0, 0x02, 0x1b, 0x21, 0xff, 0xfe, 0x91, 0x38, 0x05},
> -       102, 12, IPPROTO_TCP}, 3},
> +/* 2001:0200::/48 is IANA reserved range for IPv6 benchmarking (RFC5180).
> + * Use RFC863 Discard Protocol.
> + */
> +static const struct ipv6_l3fwd_em_route ipv6_l3fwd_em_route_array[] = {
> +       {{{32, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
> +         {32, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, 9, 9, IPPROTO_UDP}, 0},
> +       {{{32, 1, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
> +         {32, 1, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1}, 9, 9, IPPROTO_UDP}, 1},
> +       {{{32, 1, 2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0},
> +         {32, 1, 2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 1}, 9, 9, IPPROTO_UDP}, 2},
> +       {{{32, 1, 2, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0},
> +         {32, 1, 2, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 1}, 9, 9, IPPROTO_UDP}, 3},
> +       {{{32, 1, 2, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0},
> +         {32, 1, 2, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 1}, 9, 9, IPPROTO_UDP}, 4},
> +       {{{32, 1, 2, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0},
> +         {32, 1, 2, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 1}, 9, 9, IPPROTO_UDP}, 5},
> +       {{{32, 1, 2, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0},
> +         {32, 1, 2, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 1}, 9, 9, IPPROTO_UDP}, 6},
> +       {{{32, 1, 2, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0},
> +         {32, 1, 2, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 1}, 9, 9, IPPROTO_UDP}, 7},
> +       {{{32, 1, 2, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0},
> +         {32, 1, 2, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 1}, 9, 9, IPPROTO_UDP}, 8},
> +       {{{32, 1, 2, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0},
> +         {32, 1, 2, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1}, 9, 9, IPPROTO_UDP}, 9},
> +       {{{32, 1, 2, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0},
> +         {32, 1, 2, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 1}, 9, 9, IPPROTO_UDP}, 10},
> +       {{{32, 1, 2, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0},
> +         {32, 1, 2, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 1}, 9, 9, IPPROTO_UDP}, 11},
> +       {{{32, 1, 2, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0},
> +         {32, 1, 2, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 1}, 9, 9, IPPROTO_UDP}, 12},
> +       {{{32, 1, 2, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0},
> +         {32, 1, 2, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 1}, 9, 9, IPPROTO_UDP}, 13},
> +       {{{32, 1, 2, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0},
> +         {32, 1, 2, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 1}, 9, 9, IPPROTO_UDP}, 14},
> +       {{{32, 1, 2, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0},
> +         {32, 1, 2, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 1}, 9, 9, IPPROTO_UDP}, 15},
>  };
>
>  struct rte_hash *ipv4_l3fwd_em_lookup_struct[NB_SOCKETS];
> @@ -405,7 +436,7 @@ populate_ipv6_few_flow_into_table(const struct rte_hash *h)
>                 (uint64_t)IPV6_L3FWD_EM_NUM_ROUTES);
>  }
>
> -#define NUMBER_PORT_USED 4
> +#define NUMBER_PORT_USED 16
>  static inline void
>  populate_ipv4_many_flow_into_table(const struct rte_hash *h,
>                 unsigned int nr_flow)
> @@ -416,36 +447,16 @@ populate_ipv4_many_flow_into_table(const struct rte_hash *h,
>                                 ALL_32_BITS, ALL_32_BITS} };
>
>         for (i = 0; i < nr_flow; i++) {
> +               uint8_t port = i % NUMBER_PORT_USED;
>                 struct ipv4_l3fwd_em_route entry;
>                 union ipv4_5tuple_host newkey;
>
> -               uint8_t a = (uint8_t)
> -                       ((i/NUMBER_PORT_USED)%BYTE_VALUE_MAX);
> -               uint8_t b = (uint8_t)
> -                       (((i/NUMBER_PORT_USED)/BYTE_VALUE_MAX)%BYTE_VALUE_MAX);
> -               uint8_t c = (uint8_t)
> -                       ((i/NUMBER_PORT_USED)/(BYTE_VALUE_MAX*BYTE_VALUE_MAX));
> +               uint8_t a = (uint8_t)((port + 1) % BYTE_VALUE_MAX);
>
>                 /* Create the ipv4 exact match flow */
>                 memset(&entry, 0, sizeof(entry));
> -               switch (i & (NUMBER_PORT_USED - 1)) {
> -               case 0:
> -                       entry = ipv4_l3fwd_em_route_array[0];
> -                       entry.key.ip_dst = RTE_IPV4(101, c, b, a);
> -                       break;
> -               case 1:
> -                       entry = ipv4_l3fwd_em_route_array[1];
> -                       entry.key.ip_dst = RTE_IPV4(201, c, b, a);
> -                       break;
> -               case 2:
> -                       entry = ipv4_l3fwd_em_route_array[2];
> -                       entry.key.ip_dst = RTE_IPV4(111, c, b, a);
> -                       break;
> -               case 3:
> -                       entry = ipv4_l3fwd_em_route_array[3];
> -                       entry.key.ip_dst = RTE_IPV4(211, c, b, a);
> -                       break;
> -               };
> +               entry = ipv4_l3fwd_em_route_array[port];
> +               entry.key.ip_dst = RTE_IPV4(198, 18, port, a);
>                 convert_ipv4_5tuple(&entry.key, &newkey);
>                 int32_t ret = rte_hash_add_key(h, (void *) &newkey);
>
> @@ -469,35 +480,14 @@ populate_ipv6_many_flow_into_table(const struct rte_hash *h,
>         mask2 = (rte_xmm_t){.u32 = {ALL_32_BITS, ALL_32_BITS, 0, 0} };
>
>         for (i = 0; i < nr_flow; i++) {
> +               uint8_t port = i % NUMBER_PORT_USED;
>                 struct ipv6_l3fwd_em_route entry;
>                 union ipv6_5tuple_host newkey;
>
> -               uint8_t a = (uint8_t)
> -                       ((i/NUMBER_PORT_USED)%BYTE_VALUE_MAX);
> -               uint8_t b = (uint8_t)
> -                       (((i/NUMBER_PORT_USED)/BYTE_VALUE_MAX)%BYTE_VALUE_MAX);
> -               uint8_t c = (uint8_t)
> -                       ((i/NUMBER_PORT_USED)/(BYTE_VALUE_MAX*BYTE_VALUE_MAX));
> -
>                 /* Create the ipv6 exact match flow */
>                 memset(&entry, 0, sizeof(entry));
> -               switch (i & (NUMBER_PORT_USED - 1)) {
> -               case 0:
> -                       entry = ipv6_l3fwd_em_route_array[0];
> -                       break;
> -               case 1:
> -                       entry = ipv6_l3fwd_em_route_array[1];
> -                       break;
> -               case 2:
> -                       entry = ipv6_l3fwd_em_route_array[2];
> -                       break;
> -               case 3:
> -                       entry = ipv6_l3fwd_em_route_array[3];
> -                       break;
> -               };
> -               entry.key.ip_dst[13] = c;
> -               entry.key.ip_dst[14] = b;
> -               entry.key.ip_dst[15] = a;
> +               entry = ipv6_l3fwd_em_route_array[port];
> +               entry.key.ip_dst[15] = (port + 1) % BYTE_VALUE_MAX;
>                 convert_ipv6_5tuple(&entry.key, &newkey);
>                 int32_t ret = rte_hash_add_key(h, (void *) &newkey);
>
> @@ -584,7 +574,7 @@ em_parse_ptype(struct rte_mbuf *m)
>                 hdr_len = rte_ipv4_hdr_len(ipv4_hdr);
>                 if (hdr_len == sizeof(struct rte_ipv4_hdr)) {
>                         packet_type |= RTE_PTYPE_L3_IPV4;
> -                       if (ipv4_hdr->next_proto_id == IPPROTO_TCP)
> +                       if (ipv4_hdr->next_proto_id == IPPROTO_UDP)

I don't understand the intention here.


>                                 packet_type |= RTE_PTYPE_L4_TCP;
>                         else if (ipv4_hdr->next_proto_id == IPPROTO_UDP)
>                                 packet_type |= RTE_PTYPE_L4_UDP;
> @@ -592,7 +582,7 @@ em_parse_ptype(struct rte_mbuf *m)
>                         packet_type |= RTE_PTYPE_L3_IPV4_EXT;
>         } else if (ether_type == rte_cpu_to_be_16(RTE_ETHER_TYPE_IPV6)) {
>                 ipv6_hdr = (struct rte_ipv6_hdr *)l3;
> -               if (ipv6_hdr->proto == IPPROTO_TCP)
> +               if (ipv6_hdr->proto == IPPROTO_UDP)
>                         packet_type |= RTE_PTYPE_L3_IPV6 | RTE_PTYPE_L4_TCP;

Idem.


>                 else if (ipv6_hdr->proto == IPPROTO_UDP)
>                         packet_type |= RTE_PTYPE_L3_IPV6 | RTE_PTYPE_L4_UDP;
> --
> 2.17.1
>


-- 
David Marchand


^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [dpdk-dev] [PATCH v4 1/3] examples/l3fwd: increase number of routes
  2021-10-03 20:24     ` [dpdk-dev] [PATCH v4 1/3] examples/l3fwd: increase number of routes pbhagavatula
  2021-10-03 20:24       ` [dpdk-dev] [PATCH v4 2/3] examples/l3fwd: print port bdf when adding routes pbhagavatula
  2021-10-03 20:24       ` [dpdk-dev] [PATCH v4 3/3] examples/l3fwd: use reserved addresses for EM mode pbhagavatula
@ 2021-11-04 10:28       ` Walsh, Conor
  2021-11-05  7:27         ` Pavan Nikhilesh Bhagavatula
  2021-11-05  8:38       ` [dpdk-dev] [PATCH v5 " pbhagavatula
  3 siblings, 1 reply; 26+ messages in thread
From: Walsh, Conor @ 2021-11-04 10:28 UTC (permalink / raw)
  To: pbhagavatula, david.marchand, jerinj; +Cc: dev

> From: dev <dev-bounces@dpdk.org> On Behalf Of
> pbhagavatula@marvell.com
> Sent: Sunday 3 October 2021 21:25
> To: david.marchand@redhat.com; jerinj@marvell.com
> Cc: dev@dpdk.org; Pavan Nikhilesh <pbhagavatula@marvell.com>
> Subject: [dpdk-dev] [PATCH v4 1/3] examples/l3fwd: increase number of
> routes
> 
> From: Pavan Nikhilesh <pbhagavatula@marvell.com>
> 
> Increase the number of routes from 8 to 16 that are statically added for
> lpm and em mode as most of the SoCs support more than 8 interfaces.
> The number of routes added is equal to the number of ethernet devices
> ports enabled through port mask.
> 
> Signed-off-by: Pavan Nikhilesh <pbhagavatula@marvell.com>
> ---

<snip>

>  /*
>   * 2001:200::/48 is IANA reserved range for IPv6 benchmarking (RFC5180).
> - * 2001:200:0:{0-7}::/64 = Port {0-7}
> + * 2001:200:0:{0-15}::/64 = Port {0-15}

Hi Pavan,

IPv6 addresses are given in hex so the above comment should be:
2001:200:0:{0-f}::/64 = Port {0-15}

The ipv6_l3fwd_route_array below is correct however.

Thanks,
Conor.

>   */
>  const struct ipv6_l3fwd_route ipv6_l3fwd_route_array[] = {
>  	{{32, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 64, 0},
> @@ -205,6 +213,14 @@ const struct ipv6_l3fwd_route
> ipv6_l3fwd_route_array[] = {
>  	{{32, 1, 2, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0}, 64, 5},
>  	{{32, 1, 2, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0}, 64, 6},
>  	{{32, 1, 2, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0}, 64, 7},
> +	{{32, 1, 2, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0}, 64, 8},
> +	{{32, 1, 2, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0}, 64, 9},
> +	{{32, 1, 2, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0}, 64, 10},
> +	{{32, 1, 2, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0}, 64, 11},
> +	{{32, 1, 2, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0}, 64, 12},
> +	{{32, 1, 2, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0}, 64, 13},
> +	{{32, 1, 2, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0}, 64, 14},
> +	{{32, 1, 2, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0}, 64, 15},
>  };



^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [dpdk-dev] [PATCH 2/3] examples/l3fwd: print port bdf when adding routes
  2021-10-03 20:11     ` [dpdk-dev] [PATCH 2/3] examples/l3fwd: print port bdf when adding routes pbhagavatula
@ 2021-11-04 10:28       ` Walsh, Conor
  2021-11-05  7:27         ` Pavan Nikhilesh Bhagavatula
  0 siblings, 1 reply; 26+ messages in thread
From: Walsh, Conor @ 2021-11-04 10:28 UTC (permalink / raw)
  To: pbhagavatula, jerinj; +Cc: dev

> From: dev <dev-bounces@dpdk.org> On Behalf Of
> pbhagavatula@marvell.com
> Sent: Sunday 3 October 2021 21:11
> To: jerinj@marvell.com
> Cc: dev@dpdk.org; Pavan Nikhilesh <pbhagavatula@marvell.com>
> Subject: [dpdk-dev] [PATCH 2/3] examples/l3fwd: print port bdf when
> adding routes
> 
> From: Pavan Nikhilesh <pbhagavatula@marvell.com>
> 
> Since the number of Ethernet ports have gone up, print the pci bdf along
> with the routes.
> This is also helpful for cases where allow listing order is not honored.
> 
> Signed-off-by: Pavan Nikhilesh <pbhagavatula@marvell.com>
> ---
>  examples/l3fwd/l3fwd_fib.c | 16 ++++++++++------
>  examples/l3fwd/l3fwd_lpm.c |  9 ++++++---
>  2 files changed, 16 insertions(+), 9 deletions(-)
> 
> diff --git a/examples/l3fwd/l3fwd_fib.c b/examples/l3fwd/l3fwd_fib.c
> index f8d6a3ac39..cc6054ca44 100644
> --- a/examples/l3fwd/l3fwd_fib.c
> +++ b/examples/l3fwd/l3fwd_fib.c
> @@ -439,6 +439,7 @@ setup_fib(const int socketid)
> 
>  	/* Populate the fib ipv4 table. */
>  	for (i = 0; i < RTE_DIM(ipv4_l3fwd_route_array); i++) {
> +		struct rte_eth_dev_info dev_info;
>  		struct in_addr in;
> 
>  		/* Skip unused ports. */
> @@ -446,6 +447,8 @@ setup_fib(const int socketid)
>  				enabled_port_mask) == 0)
>  			continue;
> 
> +		rte_eth_dev_info_get(ipv4_l3fwd_route_array[i].if_out,
> +				     &dev_info);
>  		ret = rte_fib_add(ipv4_l3fwd_fib_lookup_struct[socketid],
>  			ipv4_l3fwd_route_array[i].ip,
>  			ipv4_l3fwd_route_array[i].depth,
> @@ -459,13 +462,14 @@ setup_fib(const int socketid)
> 
>  		in.s_addr = htonl(ipv4_l3fwd_route_array[i].ip);
>  		if (inet_ntop(AF_INET, &in, abuf, sizeof(abuf)) != NULL) {
> -			printf("FIB: Adding route %s / %d (%d)\n",
> -				abuf,
> -				ipv4_l3fwd_route_array[i].depth,
> -				ipv4_l3fwd_route_array[i].if_out);
> +			printf("FIB: Adding route %s / %d (%d) [%s]\n", abuf,
> +			       ipv4_l3fwd_route_array[i].depth,
> +			       ipv4_l3fwd_route_array[i].if_out,
> +			       dev_info.device->name);
>  		} else {
> -			printf("FIB: IPv4 route added to port %d\n",
> -				ipv4_l3fwd_route_array[i].if_out);
> +			printf("FIB: IPv4 route added to port %d [%s]\n",
> +			       ipv4_l3fwd_route_array[i].if_out,
> +			       dev_info.device->name);
>  		}
>  	}
>  	/* >8 End of setup fib. */
> diff --git a/examples/l3fwd/l3fwd_lpm.c b/examples/l3fwd/l3fwd_lpm.c
> index 7200160164..582911c622 100644
> --- a/examples/l3fwd/l3fwd_lpm.c
> +++ b/examples/l3fwd/l3fwd_lpm.c
> @@ -451,6 +451,7 @@ setup_lpm(const int socketid)
> 
>  	/* populate the LPM table */
>  	for (i = 0; i < RTE_DIM(ipv4_l3fwd_route_array); i++) {
> +		struct rte_eth_dev_info dev_info;
>  		struct in_addr in;
> 
>  		/* skip unused ports */
> @@ -458,6 +459,8 @@ setup_lpm(const int socketid)
>  				enabled_port_mask) == 0)
>  			continue;
> 
> +		rte_eth_dev_info_get(ipv4_l3fwd_route_array[i].if_out,
> +				     &dev_info);
>  		ret = rte_lpm_add(ipv4_l3fwd_lpm_lookup_struct[socketid],
>  			ipv4_l3fwd_route_array[i].ip,
>  			ipv4_l3fwd_route_array[i].depth,
> @@ -470,10 +473,10 @@ setup_lpm(const int socketid)
>  		}
> 
>  		in.s_addr = htonl(ipv4_l3fwd_route_array[i].ip);
> -		printf("LPM: Adding route %s / %d (%d)\n",
> +		printf("LPM: Adding route %s / %d (%d) [%s]\n",
>  		       inet_ntop(AF_INET, &in, abuf, sizeof(abuf)),
> -			ipv4_l3fwd_route_array[i].depth,
> -			ipv4_l3fwd_route_array[i].if_out);
> +		       ipv4_l3fwd_route_array[i].depth,
> +		       ipv4_l3fwd_route_array[i].if_out, dev_info.device-
> >name);
>  	}
> 
>  	/* create the LPM6 table */

Hi Pavan,

If this is to be added it should probably print the BDF for the IPv6 routes as well as the IPv4 routes for consistency.
Otherwise I think this is a good addition.

Thanks,
Conor.

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [dpdk-dev] [PATCH 2/3] examples/l3fwd: print port bdf when adding routes
  2021-11-04 10:28       ` Walsh, Conor
@ 2021-11-05  7:27         ` Pavan Nikhilesh Bhagavatula
  0 siblings, 0 replies; 26+ messages in thread
From: Pavan Nikhilesh Bhagavatula @ 2021-11-05  7:27 UTC (permalink / raw)
  To: Walsh, Conor, Jerin Jacob Kollanukkaran; +Cc: dev

>> From: dev <dev-bounces@dpdk.org> On Behalf Of
>> pbhagavatula@marvell.com
>> Sent: Sunday 3 October 2021 21:11
>> To: jerinj@marvell.com
>> Cc: dev@dpdk.org; Pavan Nikhilesh <pbhagavatula@marvell.com>
>> Subject: [dpdk-dev] [PATCH 2/3] examples/l3fwd: print port bdf
>when
>> adding routes
>>
>> From: Pavan Nikhilesh <pbhagavatula@marvell.com>
>>
>> Since the number of Ethernet ports have gone up, print the pci bdf
>along
>> with the routes.
>> This is also helpful for cases where allow listing order is not honored.
>>
>> Signed-off-by: Pavan Nikhilesh <pbhagavatula@marvell.com>
>> ---
>>  examples/l3fwd/l3fwd_fib.c | 16 ++++++++++------
>>  examples/l3fwd/l3fwd_lpm.c |  9 ++++++---
>>  2 files changed, 16 insertions(+), 9 deletions(-)
>>
>> diff --git a/examples/l3fwd/l3fwd_fib.c
>b/examples/l3fwd/l3fwd_fib.c
>> index f8d6a3ac39..cc6054ca44 100644
>> --- a/examples/l3fwd/l3fwd_fib.c
>> +++ b/examples/l3fwd/l3fwd_fib.c
>> @@ -439,6 +439,7 @@ setup_fib(const int socketid)
>>
>>  	/* Populate the fib ipv4 table. */
>>  	for (i = 0; i < RTE_DIM(ipv4_l3fwd_route_array); i++) {
>> +		struct rte_eth_dev_info dev_info;
>>  		struct in_addr in;
>>
>>  		/* Skip unused ports. */
>> @@ -446,6 +447,8 @@ setup_fib(const int socketid)
>>  				enabled_port_mask) == 0)
>>  			continue;
>>
>> +
>	rte_eth_dev_info_get(ipv4_l3fwd_route_array[i].if_out,
>> +				     &dev_info);
>>  		ret =
>rte_fib_add(ipv4_l3fwd_fib_lookup_struct[socketid],
>>  			ipv4_l3fwd_route_array[i].ip,
>>  			ipv4_l3fwd_route_array[i].depth,
>> @@ -459,13 +462,14 @@ setup_fib(const int socketid)
>>
>>  		in.s_addr = htonl(ipv4_l3fwd_route_array[i].ip);
>>  		if (inet_ntop(AF_INET, &in, abuf, sizeof(abuf)) != NULL)
>{
>> -			printf("FIB: Adding route %s / %d (%d)\n",
>> -				abuf,
>> -				ipv4_l3fwd_route_array[i].depth,
>> -				ipv4_l3fwd_route_array[i].if_out);
>> +			printf("FIB: Adding route %s / %d (%d) [%s]\n",
>abuf,
>> +			       ipv4_l3fwd_route_array[i].depth,
>> +			       ipv4_l3fwd_route_array[i].if_out,
>> +			       dev_info.device->name);
>>  		} else {
>> -			printf("FIB: IPv4 route added to port %d\n",
>> -				ipv4_l3fwd_route_array[i].if_out);
>> +			printf("FIB: IPv4 route added to port %d
>[%s]\n",
>> +			       ipv4_l3fwd_route_array[i].if_out,
>> +			       dev_info.device->name);
>>  		}
>>  	}
>>  	/* >8 End of setup fib. */
>> diff --git a/examples/l3fwd/l3fwd_lpm.c
>b/examples/l3fwd/l3fwd_lpm.c
>> index 7200160164..582911c622 100644
>> --- a/examples/l3fwd/l3fwd_lpm.c
>> +++ b/examples/l3fwd/l3fwd_lpm.c
>> @@ -451,6 +451,7 @@ setup_lpm(const int socketid)
>>
>>  	/* populate the LPM table */
>>  	for (i = 0; i < RTE_DIM(ipv4_l3fwd_route_array); i++) {
>> +		struct rte_eth_dev_info dev_info;
>>  		struct in_addr in;
>>
>>  		/* skip unused ports */
>> @@ -458,6 +459,8 @@ setup_lpm(const int socketid)
>>  				enabled_port_mask) == 0)
>>  			continue;
>>
>> +
>	rte_eth_dev_info_get(ipv4_l3fwd_route_array[i].if_out,
>> +				     &dev_info);
>>  		ret =
>rte_lpm_add(ipv4_l3fwd_lpm_lookup_struct[socketid],
>>  			ipv4_l3fwd_route_array[i].ip,
>>  			ipv4_l3fwd_route_array[i].depth,
>> @@ -470,10 +473,10 @@ setup_lpm(const int socketid)
>>  		}
>>
>>  		in.s_addr = htonl(ipv4_l3fwd_route_array[i].ip);
>> -		printf("LPM: Adding route %s / %d (%d)\n",
>> +		printf("LPM: Adding route %s / %d (%d) [%s]\n",
>>  		       inet_ntop(AF_INET, &in, abuf, sizeof(abuf)),
>> -			ipv4_l3fwd_route_array[i].depth,
>> -			ipv4_l3fwd_route_array[i].if_out);
>> +		       ipv4_l3fwd_route_array[i].depth,
>> +		       ipv4_l3fwd_route_array[i].if_out, dev_info.device-
>> >name);
>>  	}
>>
>>  	/* create the LPM6 table */
>
>Hi Pavan,
>
>If this is to be added it should probably print the BDF for the IPv6 routes
>as well as the IPv4 routes for consistency.
>Otherwise I think this is a good addition.

Sure, I will add it in the next version.

>
>Thanks,
>Conor.

Thanks,
Pavan.

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [dpdk-dev] [PATCH v4 1/3] examples/l3fwd: increase number of routes
  2021-11-04 10:28       ` [dpdk-dev] [PATCH v4 1/3] examples/l3fwd: increase number of routes Walsh, Conor
@ 2021-11-05  7:27         ` Pavan Nikhilesh Bhagavatula
  0 siblings, 0 replies; 26+ messages in thread
From: Pavan Nikhilesh Bhagavatula @ 2021-11-05  7:27 UTC (permalink / raw)
  To: Walsh, Conor, david.marchand, Jerin Jacob Kollanukkaran; +Cc: dev

>> From: dev <dev-bounces@dpdk.org> On Behalf Of
>> pbhagavatula@marvell.com
>> Sent: Sunday 3 October 2021 21:25
>> To: david.marchand@redhat.com; jerinj@marvell.com
>> Cc: dev@dpdk.org; Pavan Nikhilesh <pbhagavatula@marvell.com>
>> Subject: [dpdk-dev] [PATCH v4 1/3] examples/l3fwd: increase
>number of
>> routes
>>
>> From: Pavan Nikhilesh <pbhagavatula@marvell.com>
>>
>> Increase the number of routes from 8 to 16 that are statically added
>for
>> lpm and em mode as most of the SoCs support more than 8
>interfaces.
>> The number of routes added is equal to the number of ethernet
>devices
>> ports enabled through port mask.
>>
>> Signed-off-by: Pavan Nikhilesh <pbhagavatula@marvell.com>
>> ---
>
><snip>
>
>>  /*
>>   * 2001:200::/48 is IANA reserved range for IPv6 benchmarking
>(RFC5180).
>> - * 2001:200:0:{0-7}::/64 = Port {0-7}
>> + * 2001:200:0:{0-15}::/64 = Port {0-15}
>
>Hi Pavan,
>
>IPv6 addresses are given in hex so the above comment should be:
>2001:200:0:{0-f}::/64 = Port {0-15}
>

Ack, I will fix the comment in the next version.

Thanks,
Pavan.

>The ipv6_l3fwd_route_array below is correct however.
>
>Thanks,
>Conor.
>
>>   */
>>  const struct ipv6_l3fwd_route ipv6_l3fwd_route_array[] = {
>>  	{{32, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 64, 0},
>> @@ -205,6 +213,14 @@ const struct ipv6_l3fwd_route
>> ipv6_l3fwd_route_array[] = {
>>  	{{32, 1, 2, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0}, 64, 5},
>>  	{{32, 1, 2, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0}, 64, 6},
>>  	{{32, 1, 2, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0}, 64, 7},
>> +	{{32, 1, 2, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0}, 64, 8},
>> +	{{32, 1, 2, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0}, 64, 9},
>> +	{{32, 1, 2, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0}, 64, 10},
>> +	{{32, 1, 2, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0}, 64, 11},
>> +	{{32, 1, 2, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0}, 64, 12},
>> +	{{32, 1, 2, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0}, 64, 13},
>> +	{{32, 1, 2, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0}, 64, 14},
>> +	{{32, 1, 2, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0}, 64, 15},
>>  };
>


^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [dpdk-dev] [EXT] Re: [PATCH v4 3/3] examples/l3fwd: use reserved addresses for EM mode
  2021-11-03 20:53         ` David Marchand
@ 2021-11-05  7:30           ` Pavan Nikhilesh Bhagavatula
  0 siblings, 0 replies; 26+ messages in thread
From: Pavan Nikhilesh Bhagavatula @ 2021-11-05  7:30 UTC (permalink / raw)
  To: David Marchand; +Cc: Jerin Jacob Kollanukkaran, dev, Ananyev, Konstantin

>On Sun, Oct 3, 2021 at 10:25 PM <pbhagavatula@marvell.com> wrote:
>>
>> From: Pavan Nikhilesh <pbhagavatula@marvell.com>
>>
>> The l3fwd example should use the reserved IPv4/v6 reserved address
>> ranges defined in RFC5735, RFC5180 and RFC863 discard protocol for
>> the port number in the exact match mode of L3 forwarding.
>>
>> Signed-off-by: Pavan Nikhilesh <pbhagavatula@marvell.com>
>> ---
>>  doc/guides/rel_notes/release_21_11.rst |   6 ++
>>  examples/l3fwd/l3fwd.h                 |   2 +-
>>  examples/l3fwd/l3fwd_em.c              | 142 ++++++++++++-------------
>>  3 files changed, 73 insertions(+), 77 deletions(-)
>>
>> diff --git a/doc/guides/rel_notes/release_21_11.rst
>b/doc/guides/rel_notes/release_21_11.rst
>> index 37dc1a7786..ccdfa47baa 100644
>> --- a/doc/guides/rel_notes/release_21_11.rst
>> +++ b/doc/guides/rel_notes/release_21_11.rst
>> @@ -125,6 +125,12 @@ New Features
>>    * Added tests to validate packets hard expiry.
>>    * Added tests to verify tunnel header verification in IPsec inbound.
>>
>> +* **Increase number of routes configured in l3fwd lpm, em and fib
>lookups.**
>> +
>> +  * Increase number of routes from 8 to 16 for all lookup modes of
>l3fwd, this
>> +    helps in validating SoC with more than 8 ethernet devices using
>l3fwd.
>
>It should be in patch1.
>

Ack.

>
>> +  * Update EM mode to use RFC2544 reserved IP address space.
>> +
>>
>>  Removed Items
>>  -------------
>> diff --git a/examples/l3fwd/l3fwd.h b/examples/l3fwd/l3fwd.h
>> index a808d60247..853a31d4c2 100644
>> --- a/examples/l3fwd/l3fwd.h
>> +++ b/examples/l3fwd/l3fwd.h
>> @@ -54,7 +54,7 @@
>>  /* 32-bit has less address-space for hugepage memory, limit to 1M
>entries */
>>  #define L3FWD_HASH_ENTRIES             (1024*1024*1)
>>  #endif
>> -#define HASH_ENTRY_NUMBER_DEFAULT      4
>> +#define HASH_ENTRY_NUMBER_DEFAULT      16
>>
>>  struct mbuf_table {
>>         uint16_t len;
>> diff --git a/examples/l3fwd/l3fwd_em.c
>b/examples/l3fwd/l3fwd_em.c
>> index 2a8ab6aab5..92998e26b2 100644
>> --- a/examples/l3fwd/l3fwd_em.c
>> +++ b/examples/l3fwd/l3fwd_em.c
>> @@ -99,33 +99,64 @@ struct ipv6_l3fwd_em_route {
>>         uint8_t if_out;
>>  };
>>
>> -static struct ipv4_l3fwd_em_route ipv4_l3fwd_em_route_array[] = {
>> -       {{RTE_IPV4(101, 0, 0, 0), RTE_IPV4(100, 10, 0, 1),  101, 11,
>IPPROTO_TCP}, 0},
>> -       {{RTE_IPV4(201, 0, 0, 0), RTE_IPV4(200, 20, 0, 1),  102, 12,
>IPPROTO_TCP}, 1},
>> -       {{RTE_IPV4(111, 0, 0, 0), RTE_IPV4(100, 30, 0, 1),  101, 11,
>IPPROTO_TCP}, 2},
>> -       {{RTE_IPV4(211, 0, 0, 0), RTE_IPV4(200, 40, 0, 1),  102, 12,
>IPPROTO_TCP}, 3},
>> +/* 198.18.0.0/16 are set aside for RFC2544 benchmarking (RFC5735).
>> + * Use RFC863 Discard Protocol.
>> + */
>> +static const struct ipv4_l3fwd_em_route
>ipv4_l3fwd_em_route_array[] = {
>> +       {{RTE_IPV4(198, 18, 0, 0), RTE_IPV4(198, 18, 0, 1),  9, 9,
>IPPROTO_UDP}, 0},
>> +       {{RTE_IPV4(198, 18, 1, 0), RTE_IPV4(198, 18, 1, 1),  9, 9,
>IPPROTO_UDP}, 1},
>> +       {{RTE_IPV4(198, 18, 2, 0), RTE_IPV4(198, 18, 2, 1),  9, 9,
>IPPROTO_UDP}, 2},
>> +       {{RTE_IPV4(198, 18, 3, 0), RTE_IPV4(198, 18, 3, 1),  9, 9,
>IPPROTO_UDP}, 3},
>> +       {{RTE_IPV4(198, 18, 4, 0), RTE_IPV4(198, 18, 4, 1),  9, 9,
>IPPROTO_UDP}, 4},
>> +       {{RTE_IPV4(198, 18, 5, 0), RTE_IPV4(198, 18, 5, 1),  9, 9,
>IPPROTO_UDP}, 5},
>> +       {{RTE_IPV4(198, 18, 6, 0), RTE_IPV4(198, 18, 6, 1),  9, 9,
>IPPROTO_UDP}, 6},
>> +       {{RTE_IPV4(198, 18, 7, 0), RTE_IPV4(198, 18, 7, 1),  9, 9,
>IPPROTO_UDP}, 7},
>> +       {{RTE_IPV4(198, 18, 8, 0), RTE_IPV4(198, 18, 8, 1),  9, 9,
>IPPROTO_UDP}, 8},
>> +       {{RTE_IPV4(198, 18, 9, 0), RTE_IPV4(198, 18, 9, 1),  9, 9,
>IPPROTO_UDP}, 9},
>> +       {{RTE_IPV4(198, 18, 10, 0), RTE_IPV4(198, 18, 10, 1),  9, 9,
>IPPROTO_UDP}, 10},
>> +       {{RTE_IPV4(198, 18, 11, 0), RTE_IPV4(198, 18, 11, 1),  9, 9,
>IPPROTO_UDP}, 11},
>> +       {{RTE_IPV4(198, 18, 12, 0), RTE_IPV4(198, 18, 12, 1),  9, 9,
>IPPROTO_UDP}, 12},
>> +       {{RTE_IPV4(198, 18, 13, 0), RTE_IPV4(198, 18, 13, 1),  9, 9,
>IPPROTO_UDP}, 13},
>> +       {{RTE_IPV4(198, 18, 14, 0), RTE_IPV4(198, 18, 14, 1),  9, 9,
>IPPROTO_UDP}, 14},
>> +       {{RTE_IPV4(198, 18, 15, 0), RTE_IPV4(198, 18, 15, 1),  9, 9,
>IPPROTO_UDP}, 15},
>>  };
>>
>> -static struct ipv6_l3fwd_em_route ipv6_l3fwd_em_route_array[] = {
>> -       {{
>> -       {0xfe, 0x80, 0, 0, 0, 0, 0, 0, 0x02, 0x1e, 0x67, 0xff, 0xfe, 0, 0, 0},
>> -       {0xfe, 0x80, 0, 0, 0, 0, 0, 0, 0x02, 0x1b, 0x21, 0xff, 0xfe, 0x91, 0x38,
>0x05},
>> -       101, 11, IPPROTO_TCP}, 0},
>> -
>> -       {{
>> -       {0xfe, 0x90, 0, 0, 0, 0, 0, 0, 0x02, 0x1e, 0x67, 0xff, 0xfe, 0, 0, 0},
>> -       {0xfe, 0x90, 0, 0, 0, 0, 0, 0, 0x02, 0x1b, 0x21, 0xff, 0xfe, 0x91, 0x38,
>0x05},
>> -       102, 12, IPPROTO_TCP}, 1},
>> -
>> -       {{
>> -       {0xfe, 0xa0, 0, 0, 0, 0, 0, 0, 0x02, 0x1e, 0x67, 0xff, 0xfe, 0, 0, 0},
>> -       {0xfe, 0xa0, 0, 0, 0, 0, 0, 0, 0x02, 0x1b, 0x21, 0xff, 0xfe, 0x91, 0x38,
>0x05},
>> -       101, 11, IPPROTO_TCP}, 2},
>> -
>> -       {{
>> -       {0xfe, 0xb0, 0, 0, 0, 0, 0, 0, 0x02, 0x1e, 0x67, 0xff, 0xfe, 0, 0, 0},
>> -       {0xfe, 0xb0, 0, 0, 0, 0, 0, 0, 0x02, 0x1b, 0x21, 0xff, 0xfe, 0x91, 0x38,
>0x05},
>> -       102, 12, IPPROTO_TCP}, 3},
>> +/* 2001:0200::/48 is IANA reserved range for IPv6 benchmarking
>(RFC5180).
>> + * Use RFC863 Discard Protocol.
>> + */
>> +static const struct ipv6_l3fwd_em_route
>ipv6_l3fwd_em_route_array[] = {
>> +       {{{32, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
>> +         {32, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, 9, 9, IPPROTO_UDP}, 0},
>> +       {{{32, 1, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
>> +         {32, 1, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1}, 9, 9, IPPROTO_UDP}, 1},
>> +       {{{32, 1, 2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0},
>> +         {32, 1, 2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 1}, 9, 9, IPPROTO_UDP}, 2},
>> +       {{{32, 1, 2, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0},
>> +         {32, 1, 2, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 1}, 9, 9, IPPROTO_UDP}, 3},
>> +       {{{32, 1, 2, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0},
>> +         {32, 1, 2, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 1}, 9, 9, IPPROTO_UDP}, 4},
>> +       {{{32, 1, 2, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0},
>> +         {32, 1, 2, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 1}, 9, 9, IPPROTO_UDP}, 5},
>> +       {{{32, 1, 2, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0},
>> +         {32, 1, 2, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 1}, 9, 9, IPPROTO_UDP}, 6},
>> +       {{{32, 1, 2, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0},
>> +         {32, 1, 2, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 1}, 9, 9, IPPROTO_UDP}, 7},
>> +       {{{32, 1, 2, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0},
>> +         {32, 1, 2, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 1}, 9, 9, IPPROTO_UDP}, 8},
>> +       {{{32, 1, 2, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0},
>> +         {32, 1, 2, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1}, 9, 9, IPPROTO_UDP}, 9},
>> +       {{{32, 1, 2, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0},
>> +         {32, 1, 2, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 1}, 9, 9, IPPROTO_UDP},
>10},
>> +       {{{32, 1, 2, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0},
>> +         {32, 1, 2, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 1}, 9, 9, IPPROTO_UDP},
>11},
>> +       {{{32, 1, 2, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0},
>> +         {32, 1, 2, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 1}, 9, 9, IPPROTO_UDP},
>12},
>> +       {{{32, 1, 2, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0},
>> +         {32, 1, 2, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 1}, 9, 9, IPPROTO_UDP},
>13},
>> +       {{{32, 1, 2, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0},
>> +         {32, 1, 2, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 1}, 9, 9, IPPROTO_UDP},
>14},
>> +       {{{32, 1, 2, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0},
>> +         {32, 1, 2, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 1}, 9, 9, IPPROTO_UDP},
>15},
>>  };
>>
>>  struct rte_hash *ipv4_l3fwd_em_lookup_struct[NB_SOCKETS];
>> @@ -405,7 +436,7 @@ populate_ipv6_few_flow_into_table(const
>struct rte_hash *h)
>>                 (uint64_t)IPV6_L3FWD_EM_NUM_ROUTES);
>>  }
>>
>> -#define NUMBER_PORT_USED 4
>> +#define NUMBER_PORT_USED 16
>>  static inline void
>>  populate_ipv4_many_flow_into_table(const struct rte_hash *h,
>>                 unsigned int nr_flow)
>> @@ -416,36 +447,16 @@
>populate_ipv4_many_flow_into_table(const struct rte_hash *h,
>>                                 ALL_32_BITS, ALL_32_BITS} };
>>
>>         for (i = 0; i < nr_flow; i++) {
>> +               uint8_t port = i % NUMBER_PORT_USED;
>>                 struct ipv4_l3fwd_em_route entry;
>>                 union ipv4_5tuple_host newkey;
>>
>> -               uint8_t a = (uint8_t)
>> -                       ((i/NUMBER_PORT_USED)%BYTE_VALUE_MAX);
>> -               uint8_t b = (uint8_t)
>> -
>(((i/NUMBER_PORT_USED)/BYTE_VALUE_MAX)%BYTE_VALUE_MAX);
>> -               uint8_t c = (uint8_t)
>> -
>((i/NUMBER_PORT_USED)/(BYTE_VALUE_MAX*BYTE_VALUE_MAX));
>> +               uint8_t a = (uint8_t)((port + 1) % BYTE_VALUE_MAX);
>>
>>                 /* Create the ipv4 exact match flow */
>>                 memset(&entry, 0, sizeof(entry));
>> -               switch (i & (NUMBER_PORT_USED - 1)) {
>> -               case 0:
>> -                       entry = ipv4_l3fwd_em_route_array[0];
>> -                       entry.key.ip_dst = RTE_IPV4(101, c, b, a);
>> -                       break;
>> -               case 1:
>> -                       entry = ipv4_l3fwd_em_route_array[1];
>> -                       entry.key.ip_dst = RTE_IPV4(201, c, b, a);
>> -                       break;
>> -               case 2:
>> -                       entry = ipv4_l3fwd_em_route_array[2];
>> -                       entry.key.ip_dst = RTE_IPV4(111, c, b, a);
>> -                       break;
>> -               case 3:
>> -                       entry = ipv4_l3fwd_em_route_array[3];
>> -                       entry.key.ip_dst = RTE_IPV4(211, c, b, a);
>> -                       break;
>> -               };
>> +               entry = ipv4_l3fwd_em_route_array[port];
>> +               entry.key.ip_dst = RTE_IPV4(198, 18, port, a);
>>                 convert_ipv4_5tuple(&entry.key, &newkey);
>>                 int32_t ret = rte_hash_add_key(h, (void *) &newkey);
>>
>> @@ -469,35 +480,14 @@
>populate_ipv6_many_flow_into_table(const struct rte_hash *h,
>>         mask2 = (rte_xmm_t){.u32 = {ALL_32_BITS, ALL_32_BITS, 0, 0} };
>>
>>         for (i = 0; i < nr_flow; i++) {
>> +               uint8_t port = i % NUMBER_PORT_USED;
>>                 struct ipv6_l3fwd_em_route entry;
>>                 union ipv6_5tuple_host newkey;
>>
>> -               uint8_t a = (uint8_t)
>> -                       ((i/NUMBER_PORT_USED)%BYTE_VALUE_MAX);
>> -               uint8_t b = (uint8_t)
>> -
>(((i/NUMBER_PORT_USED)/BYTE_VALUE_MAX)%BYTE_VALUE_MAX);
>> -               uint8_t c = (uint8_t)
>> -
>((i/NUMBER_PORT_USED)/(BYTE_VALUE_MAX*BYTE_VALUE_MAX));
>> -
>>                 /* Create the ipv6 exact match flow */
>>                 memset(&entry, 0, sizeof(entry));
>> -               switch (i & (NUMBER_PORT_USED - 1)) {
>> -               case 0:
>> -                       entry = ipv6_l3fwd_em_route_array[0];
>> -                       break;
>> -               case 1:
>> -                       entry = ipv6_l3fwd_em_route_array[1];
>> -                       break;
>> -               case 2:
>> -                       entry = ipv6_l3fwd_em_route_array[2];
>> -                       break;
>> -               case 3:
>> -                       entry = ipv6_l3fwd_em_route_array[3];
>> -                       break;
>> -               };
>> -               entry.key.ip_dst[13] = c;
>> -               entry.key.ip_dst[14] = b;
>> -               entry.key.ip_dst[15] = a;
>> +               entry = ipv6_l3fwd_em_route_array[port];
>> +               entry.key.ip_dst[15] = (port + 1) % BYTE_VALUE_MAX;
>>                 convert_ipv6_5tuple(&entry.key, &newkey);
>>                 int32_t ret = rte_hash_add_key(h, (void *) &newkey);
>>
>> @@ -584,7 +574,7 @@ em_parse_ptype(struct rte_mbuf *m)
>>                 hdr_len = rte_ipv4_hdr_len(ipv4_hdr);
>>                 if (hdr_len == sizeof(struct rte_ipv4_hdr)) {
>>                         packet_type |= RTE_PTYPE_L3_IPV4;
>> -                       if (ipv4_hdr->next_proto_id == IPPROTO_TCP)
>> +                       if (ipv4_hdr->next_proto_id == IPPROTO_UDP)
>
>I don't understand the intention here.

Routes are installed for UDP proto, I think this was an unintended substitution mistake, 
I will fix in next version.

Thanks,
Pavan.

>
>
>>                                 packet_type |= RTE_PTYPE_L4_TCP;
>>                         else if (ipv4_hdr->next_proto_id == IPPROTO_UDP)
>>                                 packet_type |= RTE_PTYPE_L4_UDP;
>> @@ -592,7 +582,7 @@ em_parse_ptype(struct rte_mbuf *m)
>>                         packet_type |= RTE_PTYPE_L3_IPV4_EXT;
>>         } else if (ether_type ==
>rte_cpu_to_be_16(RTE_ETHER_TYPE_IPV6)) {
>>                 ipv6_hdr = (struct rte_ipv6_hdr *)l3;
>> -               if (ipv6_hdr->proto == IPPROTO_TCP)
>> +               if (ipv6_hdr->proto == IPPROTO_UDP)
>>                         packet_type |= RTE_PTYPE_L3_IPV6 |
>RTE_PTYPE_L4_TCP;
>
>Idem.
>
>
>>                 else if (ipv6_hdr->proto == IPPROTO_UDP)
>>                         packet_type |= RTE_PTYPE_L3_IPV6 |
>RTE_PTYPE_L4_UDP;
>> --
>> 2.17.1
>>
>
>
>--
>David Marchand


^ permalink raw reply	[flat|nested] 26+ messages in thread

* [dpdk-dev] [PATCH v5 1/3] examples/l3fwd: increase number of routes
  2021-10-03 20:24     ` [dpdk-dev] [PATCH v4 1/3] examples/l3fwd: increase number of routes pbhagavatula
                         ` (2 preceding siblings ...)
  2021-11-04 10:28       ` [dpdk-dev] [PATCH v4 1/3] examples/l3fwd: increase number of routes Walsh, Conor
@ 2021-11-05  8:38       ` pbhagavatula
  2021-11-05  8:38         ` [dpdk-dev] [PATCH v5 2/3] examples/l3fwd: print port bdf when adding routes pbhagavatula
                           ` (2 more replies)
  3 siblings, 3 replies; 26+ messages in thread
From: pbhagavatula @ 2021-11-05  8:38 UTC (permalink / raw)
  To: conor.walsh, david.marchand, jerinj; +Cc: dev, Pavan Nikhilesh

From: Pavan Nikhilesh <pbhagavatula@marvell.com>

Increase the number of routes from 8 to 16 that are statically added for
lpm and em mode as most of the SoCs support more than 8 interfaces.
The number of routes added is equal to the number of ethernet devices
ports enabled through port mask.

Signed-off-by: Pavan Nikhilesh <pbhagavatula@marvell.com>
---
 v5 Changes:
 - Fix comments, missing IPv6 bdf prints (Conor).
 - Fix unintended change to em_parse_ptype (David).

 v4 Changes:
 - Use correct patch version and prefix.

 v3 Changes: (Finally!)
 - Add FIB to the list.
 - Update release notes.
 - Update EM route addition routine and use the correct IP addresses
   DTS need not be updated as EM test doesn't use IP addresses defined
   in l3fwd.

 v2 Changes:
 - Fixup for EM mode.

 doc/guides/rel_notes/release_21_11.rst |  6 ++++++
 examples/l3fwd/l3fwd_route.h           |  4 ++--
 examples/l3fwd/main.c                  | 20 ++++++++++++++++++--
 3 files changed, 26 insertions(+), 4 deletions(-)

diff --git a/doc/guides/rel_notes/release_21_11.rst b/doc/guides/rel_notes/release_21_11.rst
index d95bab5582..e8ee00d552 100644
--- a/doc/guides/rel_notes/release_21_11.rst
+++ b/doc/guides/rel_notes/release_21_11.rst
@@ -322,6 +322,12 @@ New Features
   overruns in C/C++ programs, and other similar errors, as well as
   printing out detailed debug information whenever an error is detected.

+* **Increase number of routes configured in l3fwd lpm, em and fib lookups.**
+
+  * Increase number of routes from 8 to 16 for all lookup modes of l3fwd, this
+    helps in validating SoC with more than 8 ethernet devices using l3fwd.
+  * Update EM mode to use RFC2544 reserved IP address space.
+

 Removed Items
 -------------
diff --git a/examples/l3fwd/l3fwd_route.h b/examples/l3fwd/l3fwd_route.h
index 89f8634443..c7eba06c4d 100644
--- a/examples/l3fwd/l3fwd_route.h
+++ b/examples/l3fwd/l3fwd_route.h
@@ -14,6 +14,6 @@ struct ipv6_l3fwd_route {
 	uint8_t if_out;
 };

-extern const struct ipv4_l3fwd_route ipv4_l3fwd_route_array[8];
+extern const struct ipv4_l3fwd_route ipv4_l3fwd_route_array[16];

-extern const struct ipv6_l3fwd_route ipv6_l3fwd_route_array[8];
+extern const struct ipv6_l3fwd_route ipv6_l3fwd_route_array[16];
diff --git a/examples/l3fwd/main.c b/examples/l3fwd/main.c
index d69373f881..eb68ffc5aa 100644
--- a/examples/l3fwd/main.c
+++ b/examples/l3fwd/main.c
@@ -180,7 +180,7 @@ static struct l3fwd_lkp_mode l3fwd_fib_lkp = {

 /*
  * 198.18.0.0/16 are set aside for RFC2544 benchmarking (RFC5735).
- * 198.18.{0-7}.0/24 = Port {0-7}
+ * 198.18.{0-15}.0/24 = Port {0-15}
  */
 const struct ipv4_l3fwd_route ipv4_l3fwd_route_array[] = {
 	{RTE_IPV4(198, 18, 0, 0), 24, 0},
@@ -191,11 +191,19 @@ const struct ipv4_l3fwd_route ipv4_l3fwd_route_array[] = {
 	{RTE_IPV4(198, 18, 5, 0), 24, 5},
 	{RTE_IPV4(198, 18, 6, 0), 24, 6},
 	{RTE_IPV4(198, 18, 7, 0), 24, 7},
+	{RTE_IPV4(198, 18, 8, 0), 24, 8},
+	{RTE_IPV4(198, 18, 9, 0), 24, 9},
+	{RTE_IPV4(198, 18, 10, 0), 24, 10},
+	{RTE_IPV4(198, 18, 11, 0), 24, 11},
+	{RTE_IPV4(198, 18, 12, 0), 24, 12},
+	{RTE_IPV4(198, 18, 13, 0), 24, 13},
+	{RTE_IPV4(198, 18, 14, 0), 24, 14},
+	{RTE_IPV4(198, 18, 15, 0), 24, 15},
 };

 /*
  * 2001:200::/48 is IANA reserved range for IPv6 benchmarking (RFC5180).
- * 2001:200:0:{0-7}::/64 = Port {0-7}
+ * 2001:200:0:{0-f}::/64 = Port {0-15}
  */
 const struct ipv6_l3fwd_route ipv6_l3fwd_route_array[] = {
 	{{32, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 64, 0},
@@ -206,6 +214,14 @@ const struct ipv6_l3fwd_route ipv6_l3fwd_route_array[] = {
 	{{32, 1, 2, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0}, 64, 5},
 	{{32, 1, 2, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0}, 64, 6},
 	{{32, 1, 2, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0}, 64, 7},
+	{{32, 1, 2, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0}, 64, 8},
+	{{32, 1, 2, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0}, 64, 9},
+	{{32, 1, 2, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0}, 64, 10},
+	{{32, 1, 2, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0}, 64, 11},
+	{{32, 1, 2, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0}, 64, 12},
+	{{32, 1, 2, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0}, 64, 13},
+	{{32, 1, 2, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0}, 64, 14},
+	{{32, 1, 2, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0}, 64, 15},
 };

 /*
--
2.17.1


^ permalink raw reply	[flat|nested] 26+ messages in thread

* [dpdk-dev] [PATCH v5 2/3] examples/l3fwd: print port bdf when adding routes
  2021-11-05  8:38       ` [dpdk-dev] [PATCH v5 " pbhagavatula
@ 2021-11-05  8:38         ` pbhagavatula
  2021-11-05  9:34           ` Walsh, Conor
  2021-11-05  8:38         ` [dpdk-dev] [PATCH v5 3/3] examples/l3fwd: use reserved addresses for EM mode pbhagavatula
  2021-11-05  9:28         ` [dpdk-dev] [PATCH v5 1/3] examples/l3fwd: increase number of routes Walsh, Conor
  2 siblings, 1 reply; 26+ messages in thread
From: pbhagavatula @ 2021-11-05  8:38 UTC (permalink / raw)
  To: conor.walsh, david.marchand, jerinj; +Cc: dev, Pavan Nikhilesh

From: Pavan Nikhilesh <pbhagavatula@marvell.com>

Since the number of Ethernet ports have gone up, print the pci bdf along
with the routes.
This is also helpful for cases where allow listing order is not honored.

Signed-off-by: Pavan Nikhilesh <pbhagavatula@marvell.com>
---
 examples/l3fwd/l3fwd_fib.c | 31 +++++++++++++++++++------------
 examples/l3fwd/l3fwd_lpm.c | 19 ++++++++++++-------
 2 files changed, 31 insertions(+), 19 deletions(-)

diff --git a/examples/l3fwd/l3fwd_fib.c b/examples/l3fwd/l3fwd_fib.c
index f5c685a4f3..2110459cc3 100644
--- a/examples/l3fwd/l3fwd_fib.c
+++ b/examples/l3fwd/l3fwd_fib.c
@@ -580,6 +580,7 @@ fib_event_main_loop_tx_q_burst_vector(__rte_unused void *dummy)
 void
 setup_fib(const int socketid)
 {
+	struct rte_eth_dev_info dev_info;
 	struct rte_fib6_conf config;
 	struct rte_fib_conf config_ipv4;
 	unsigned int i;
@@ -611,6 +612,8 @@ setup_fib(const int socketid)
 				enabled_port_mask) == 0)
 			continue;
 
+		rte_eth_dev_info_get(ipv4_l3fwd_route_array[i].if_out,
+				     &dev_info);
 		ret = rte_fib_add(ipv4_l3fwd_fib_lookup_struct[socketid],
 			ipv4_l3fwd_route_array[i].ip,
 			ipv4_l3fwd_route_array[i].depth,
@@ -624,13 +627,14 @@ setup_fib(const int socketid)
 
 		in.s_addr = htonl(ipv4_l3fwd_route_array[i].ip);
 		if (inet_ntop(AF_INET, &in, abuf, sizeof(abuf)) != NULL) {
-			printf("FIB: Adding route %s / %d (%d)\n",
-				abuf,
-				ipv4_l3fwd_route_array[i].depth,
-				ipv4_l3fwd_route_array[i].if_out);
+			printf("FIB: Adding route %s / %d (%d) [%s]\n", abuf,
+			       ipv4_l3fwd_route_array[i].depth,
+			       ipv4_l3fwd_route_array[i].if_out,
+			       dev_info.device->name);
 		} else {
-			printf("FIB: IPv4 route added to port %d\n",
-				ipv4_l3fwd_route_array[i].if_out);
+			printf("FIB: IPv4 route added to port %d [%s]\n",
+			       ipv4_l3fwd_route_array[i].if_out,
+			       dev_info.device->name);
 		}
 	}
 	/* >8 End of setup fib. */
@@ -659,6 +663,8 @@ setup_fib(const int socketid)
 				enabled_port_mask) == 0)
 			continue;
 
+		rte_eth_dev_info_get(ipv6_l3fwd_route_array[i].if_out,
+				     &dev_info);
 		ret = rte_fib6_add(ipv6_l3fwd_fib_lookup_struct[socketid],
 			ipv6_l3fwd_route_array[i].ip,
 			ipv6_l3fwd_route_array[i].depth,
@@ -672,13 +678,14 @@ setup_fib(const int socketid)
 
 		if (inet_ntop(AF_INET6, ipv6_l3fwd_route_array[i].ip,
 				abuf, sizeof(abuf)) != NULL) {
-			printf("FIB: Adding route %s / %d (%d)\n",
-				abuf,
-				ipv6_l3fwd_route_array[i].depth,
-				ipv6_l3fwd_route_array[i].if_out);
+			printf("FIB: Adding route %s / %d (%d) [%s]\n", abuf,
+			       ipv6_l3fwd_route_array[i].depth,
+			       ipv6_l3fwd_route_array[i].if_out,
+			       dev_info.device->name);
 		} else {
-			printf("FIB: IPv6 route added to port %d\n",
-				ipv6_l3fwd_route_array[i].if_out);
+			printf("FIB: IPv6 route added to port %d [%s]\n",
+			       ipv6_l3fwd_route_array[i].if_out,
+			       dev_info.device->name);
 		}
 	}
 }
diff --git a/examples/l3fwd/l3fwd_lpm.c b/examples/l3fwd/l3fwd_lpm.c
index 9ae288780c..a5b476ced3 100644
--- a/examples/l3fwd/l3fwd_lpm.c
+++ b/examples/l3fwd/l3fwd_lpm.c
@@ -551,6 +551,7 @@ lpm_event_main_loop_tx_q_burst_vector(__rte_unused void *dummy)
 void
 setup_lpm(const int socketid)
 {
+	struct rte_eth_dev_info dev_info;
 	struct rte_lpm6_config config;
 	struct rte_lpm_config config_ipv4;
 	unsigned i;
@@ -579,6 +580,8 @@ setup_lpm(const int socketid)
 				enabled_port_mask) == 0)
 			continue;
 
+		rte_eth_dev_info_get(ipv4_l3fwd_route_array[i].if_out,
+				     &dev_info);
 		ret = rte_lpm_add(ipv4_l3fwd_lpm_lookup_struct[socketid],
 			ipv4_l3fwd_route_array[i].ip,
 			ipv4_l3fwd_route_array[i].depth,
@@ -591,10 +594,10 @@ setup_lpm(const int socketid)
 		}
 
 		in.s_addr = htonl(ipv4_l3fwd_route_array[i].ip);
-		printf("LPM: Adding route %s / %d (%d)\n",
+		printf("LPM: Adding route %s / %d (%d) [%s]\n",
 		       inet_ntop(AF_INET, &in, abuf, sizeof(abuf)),
-			ipv4_l3fwd_route_array[i].depth,
-			ipv4_l3fwd_route_array[i].if_out);
+		       ipv4_l3fwd_route_array[i].depth,
+		       ipv4_l3fwd_route_array[i].if_out, dev_info.device->name);
 	}
 
 	/* create the LPM6 table */
@@ -618,6 +621,8 @@ setup_lpm(const int socketid)
 				enabled_port_mask) == 0)
 			continue;
 
+		rte_eth_dev_info_get(ipv4_l3fwd_route_array[i].if_out,
+				     &dev_info);
 		ret = rte_lpm6_add(ipv6_l3fwd_lpm_lookup_struct[socketid],
 			ipv6_l3fwd_route_array[i].ip,
 			ipv6_l3fwd_route_array[i].depth,
@@ -629,11 +634,11 @@ setup_lpm(const int socketid)
 				i, socketid);
 		}
 
-		printf("LPM: Adding route %s / %d (%d)\n",
-		       inet_ntop(AF_INET6, ipv6_l3fwd_route_array[i].ip,
-				 abuf, sizeof(abuf)),
+		printf("LPM: Adding route %s / %d (%d) [%s]\n",
+		       inet_ntop(AF_INET6, ipv6_l3fwd_route_array[i].ip, abuf,
+				 sizeof(abuf)),
 		       ipv6_l3fwd_route_array[i].depth,
-		       ipv6_l3fwd_route_array[i].if_out);
+		       ipv6_l3fwd_route_array[i].if_out, dev_info.device->name);
 	}
 }
 
-- 
2.17.1


^ permalink raw reply	[flat|nested] 26+ messages in thread

* [dpdk-dev] [PATCH v5 3/3] examples/l3fwd: use reserved addresses for EM mode
  2021-11-05  8:38       ` [dpdk-dev] [PATCH v5 " pbhagavatula
  2021-11-05  8:38         ` [dpdk-dev] [PATCH v5 2/3] examples/l3fwd: print port bdf when adding routes pbhagavatula
@ 2021-11-05  8:38         ` pbhagavatula
  2021-11-16 10:03           ` David Marchand
  2021-11-05  9:28         ` [dpdk-dev] [PATCH v5 1/3] examples/l3fwd: increase number of routes Walsh, Conor
  2 siblings, 1 reply; 26+ messages in thread
From: pbhagavatula @ 2021-11-05  8:38 UTC (permalink / raw)
  To: conor.walsh, david.marchand, jerinj; +Cc: dev, Pavan Nikhilesh

From: Pavan Nikhilesh <pbhagavatula@marvell.com>

The l3fwd example should use the reserved IPv4/v6 reserved address
ranges defined in RFC5735, RFC5180 and RFC863 discard protocol for
the port number in the exact match mode of L3 forwarding.

Signed-off-by: Pavan Nikhilesh <pbhagavatula@marvell.com>
---
 examples/l3fwd/l3fwd.h    |   2 +-
 examples/l3fwd/l3fwd_em.c | 138 ++++++++++++++++++--------------------
 2 files changed, 65 insertions(+), 75 deletions(-)

diff --git a/examples/l3fwd/l3fwd.h b/examples/l3fwd/l3fwd.h
index 9607ee0fbb..38ca19133c 100644
--- a/examples/l3fwd/l3fwd.h
+++ b/examples/l3fwd/l3fwd.h
@@ -56,7 +56,7 @@
 /* 32-bit has less address-space for hugepage memory, limit to 1M entries */
 #define L3FWD_HASH_ENTRIES		(1024*1024*1)
 #endif
-#define HASH_ENTRY_NUMBER_DEFAULT	4
+#define HASH_ENTRY_NUMBER_DEFAULT	16
 
 struct mbuf_table {
 	uint16_t len;
diff --git a/examples/l3fwd/l3fwd_em.c b/examples/l3fwd/l3fwd_em.c
index ff5e56766c..5cc4a4d979 100644
--- a/examples/l3fwd/l3fwd_em.c
+++ b/examples/l3fwd/l3fwd_em.c
@@ -99,33 +99,64 @@ struct ipv6_l3fwd_em_route {
 	uint8_t if_out;
 };
 
-static struct ipv4_l3fwd_em_route ipv4_l3fwd_em_route_array[] = {
-	{{RTE_IPV4(101, 0, 0, 0), RTE_IPV4(100, 10, 0, 1),  101, 11, IPPROTO_TCP}, 0},
-	{{RTE_IPV4(201, 0, 0, 0), RTE_IPV4(200, 20, 0, 1),  102, 12, IPPROTO_TCP}, 1},
-	{{RTE_IPV4(111, 0, 0, 0), RTE_IPV4(100, 30, 0, 1),  101, 11, IPPROTO_TCP}, 2},
-	{{RTE_IPV4(211, 0, 0, 0), RTE_IPV4(200, 40, 0, 1),  102, 12, IPPROTO_TCP}, 3},
+/* 198.18.0.0/16 are set aside for RFC2544 benchmarking (RFC5735).
+ * Use RFC863 Discard Protocol.
+ */
+static const struct ipv4_l3fwd_em_route ipv4_l3fwd_em_route_array[] = {
+	{{RTE_IPV4(198, 18, 0, 0), RTE_IPV4(198, 18, 0, 1),  9, 9, IPPROTO_UDP}, 0},
+	{{RTE_IPV4(198, 18, 1, 0), RTE_IPV4(198, 18, 1, 1),  9, 9, IPPROTO_UDP}, 1},
+	{{RTE_IPV4(198, 18, 2, 0), RTE_IPV4(198, 18, 2, 1),  9, 9, IPPROTO_UDP}, 2},
+	{{RTE_IPV4(198, 18, 3, 0), RTE_IPV4(198, 18, 3, 1),  9, 9, IPPROTO_UDP}, 3},
+	{{RTE_IPV4(198, 18, 4, 0), RTE_IPV4(198, 18, 4, 1),  9, 9, IPPROTO_UDP}, 4},
+	{{RTE_IPV4(198, 18, 5, 0), RTE_IPV4(198, 18, 5, 1),  9, 9, IPPROTO_UDP}, 5},
+	{{RTE_IPV4(198, 18, 6, 0), RTE_IPV4(198, 18, 6, 1),  9, 9, IPPROTO_UDP}, 6},
+	{{RTE_IPV4(198, 18, 7, 0), RTE_IPV4(198, 18, 7, 1),  9, 9, IPPROTO_UDP}, 7},
+	{{RTE_IPV4(198, 18, 8, 0), RTE_IPV4(198, 18, 8, 1),  9, 9, IPPROTO_UDP}, 8},
+	{{RTE_IPV4(198, 18, 9, 0), RTE_IPV4(198, 18, 9, 1),  9, 9, IPPROTO_UDP}, 9},
+	{{RTE_IPV4(198, 18, 10, 0), RTE_IPV4(198, 18, 10, 1),  9, 9, IPPROTO_UDP}, 10},
+	{{RTE_IPV4(198, 18, 11, 0), RTE_IPV4(198, 18, 11, 1),  9, 9, IPPROTO_UDP}, 11},
+	{{RTE_IPV4(198, 18, 12, 0), RTE_IPV4(198, 18, 12, 1),  9, 9, IPPROTO_UDP}, 12},
+	{{RTE_IPV4(198, 18, 13, 0), RTE_IPV4(198, 18, 13, 1),  9, 9, IPPROTO_UDP}, 13},
+	{{RTE_IPV4(198, 18, 14, 0), RTE_IPV4(198, 18, 14, 1),  9, 9, IPPROTO_UDP}, 14},
+	{{RTE_IPV4(198, 18, 15, 0), RTE_IPV4(198, 18, 15, 1),  9, 9, IPPROTO_UDP}, 15},
 };
 
-static struct ipv6_l3fwd_em_route ipv6_l3fwd_em_route_array[] = {
-	{{
-	{0xfe, 0x80, 0, 0, 0, 0, 0, 0, 0x02, 0x1e, 0x67, 0xff, 0xfe, 0, 0, 0},
-	{0xfe, 0x80, 0, 0, 0, 0, 0, 0, 0x02, 0x1b, 0x21, 0xff, 0xfe, 0x91, 0x38, 0x05},
-	101, 11, IPPROTO_TCP}, 0},
-
-	{{
-	{0xfe, 0x90, 0, 0, 0, 0, 0, 0, 0x02, 0x1e, 0x67, 0xff, 0xfe, 0, 0, 0},
-	{0xfe, 0x90, 0, 0, 0, 0, 0, 0, 0x02, 0x1b, 0x21, 0xff, 0xfe, 0x91, 0x38, 0x05},
-	102, 12, IPPROTO_TCP}, 1},
-
-	{{
-	{0xfe, 0xa0, 0, 0, 0, 0, 0, 0, 0x02, 0x1e, 0x67, 0xff, 0xfe, 0, 0, 0},
-	{0xfe, 0xa0, 0, 0, 0, 0, 0, 0, 0x02, 0x1b, 0x21, 0xff, 0xfe, 0x91, 0x38, 0x05},
-	101, 11, IPPROTO_TCP}, 2},
-
-	{{
-	{0xfe, 0xb0, 0, 0, 0, 0, 0, 0, 0x02, 0x1e, 0x67, 0xff, 0xfe, 0, 0, 0},
-	{0xfe, 0xb0, 0, 0, 0, 0, 0, 0, 0x02, 0x1b, 0x21, 0xff, 0xfe, 0x91, 0x38, 0x05},
-	102, 12, IPPROTO_TCP}, 3},
+/* 2001:0200::/48 is IANA reserved range for IPv6 benchmarking (RFC5180).
+ * Use RFC863 Discard Protocol.
+ */
+static const struct ipv6_l3fwd_em_route ipv6_l3fwd_em_route_array[] = {
+	{{{32, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+	  {32, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, 9, 9, IPPROTO_UDP}, 0},
+	{{{32, 1, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
+	  {32, 1, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1}, 9, 9, IPPROTO_UDP}, 1},
+	{{{32, 1, 2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0},
+	  {32, 1, 2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 1}, 9, 9, IPPROTO_UDP}, 2},
+	{{{32, 1, 2, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0},
+	  {32, 1, 2, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 1}, 9, 9, IPPROTO_UDP}, 3},
+	{{{32, 1, 2, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0},
+	  {32, 1, 2, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 1}, 9, 9, IPPROTO_UDP}, 4},
+	{{{32, 1, 2, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0},
+	  {32, 1, 2, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 1}, 9, 9, IPPROTO_UDP}, 5},
+	{{{32, 1, 2, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0},
+	  {32, 1, 2, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 1}, 9, 9, IPPROTO_UDP}, 6},
+	{{{32, 1, 2, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0},
+	  {32, 1, 2, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 1}, 9, 9, IPPROTO_UDP}, 7},
+	{{{32, 1, 2, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0},
+	  {32, 1, 2, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 1}, 9, 9, IPPROTO_UDP}, 8},
+	{{{32, 1, 2, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0},
+	  {32, 1, 2, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1}, 9, 9, IPPROTO_UDP}, 9},
+	{{{32, 1, 2, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0},
+	  {32, 1, 2, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 1}, 9, 9, IPPROTO_UDP}, 10},
+	{{{32, 1, 2, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0},
+	  {32, 1, 2, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 1}, 9, 9, IPPROTO_UDP}, 11},
+	{{{32, 1, 2, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0},
+	  {32, 1, 2, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 1}, 9, 9, IPPROTO_UDP}, 12},
+	{{{32, 1, 2, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0},
+	  {32, 1, 2, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 1}, 9, 9, IPPROTO_UDP}, 13},
+	{{{32, 1, 2, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0},
+	  {32, 1, 2, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 1}, 9, 9, IPPROTO_UDP}, 14},
+	{{{32, 1, 2, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0},
+	  {32, 1, 2, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 1}, 9, 9, IPPROTO_UDP}, 15},
 };
 
 struct rte_hash *ipv4_l3fwd_em_lookup_struct[NB_SOCKETS];
@@ -405,7 +436,7 @@ populate_ipv6_few_flow_into_table(const struct rte_hash *h)
 		(uint64_t)IPV6_L3FWD_EM_NUM_ROUTES);
 }
 
-#define NUMBER_PORT_USED 4
+#define NUMBER_PORT_USED 16
 static inline void
 populate_ipv4_many_flow_into_table(const struct rte_hash *h,
 		unsigned int nr_flow)
@@ -416,36 +447,16 @@ populate_ipv4_many_flow_into_table(const struct rte_hash *h,
 				ALL_32_BITS, ALL_32_BITS} };
 
 	for (i = 0; i < nr_flow; i++) {
+		uint8_t port = i % NUMBER_PORT_USED;
 		struct ipv4_l3fwd_em_route entry;
 		union ipv4_5tuple_host newkey;
 
-		uint8_t a = (uint8_t)
-			((i/NUMBER_PORT_USED)%BYTE_VALUE_MAX);
-		uint8_t b = (uint8_t)
-			(((i/NUMBER_PORT_USED)/BYTE_VALUE_MAX)%BYTE_VALUE_MAX);
-		uint8_t c = (uint8_t)
-			((i/NUMBER_PORT_USED)/(BYTE_VALUE_MAX*BYTE_VALUE_MAX));
+		uint8_t a = (uint8_t)((port + 1) % BYTE_VALUE_MAX);
 
 		/* Create the ipv4 exact match flow */
 		memset(&entry, 0, sizeof(entry));
-		switch (i & (NUMBER_PORT_USED - 1)) {
-		case 0:
-			entry = ipv4_l3fwd_em_route_array[0];
-			entry.key.ip_dst = RTE_IPV4(101, c, b, a);
-			break;
-		case 1:
-			entry = ipv4_l3fwd_em_route_array[1];
-			entry.key.ip_dst = RTE_IPV4(201, c, b, a);
-			break;
-		case 2:
-			entry = ipv4_l3fwd_em_route_array[2];
-			entry.key.ip_dst = RTE_IPV4(111, c, b, a);
-			break;
-		case 3:
-			entry = ipv4_l3fwd_em_route_array[3];
-			entry.key.ip_dst = RTE_IPV4(211, c, b, a);
-			break;
-		};
+		entry = ipv4_l3fwd_em_route_array[port];
+		entry.key.ip_dst = RTE_IPV4(198, 18, port, a);
 		convert_ipv4_5tuple(&entry.key, &newkey);
 		int32_t ret = rte_hash_add_key(h, (void *) &newkey);
 
@@ -469,35 +480,14 @@ populate_ipv6_many_flow_into_table(const struct rte_hash *h,
 	mask2 = (rte_xmm_t){.u32 = {ALL_32_BITS, ALL_32_BITS, 0, 0} };
 
 	for (i = 0; i < nr_flow; i++) {
+		uint8_t port = i % NUMBER_PORT_USED;
 		struct ipv6_l3fwd_em_route entry;
 		union ipv6_5tuple_host newkey;
 
-		uint8_t a = (uint8_t)
-			((i/NUMBER_PORT_USED)%BYTE_VALUE_MAX);
-		uint8_t b = (uint8_t)
-			(((i/NUMBER_PORT_USED)/BYTE_VALUE_MAX)%BYTE_VALUE_MAX);
-		uint8_t c = (uint8_t)
-			((i/NUMBER_PORT_USED)/(BYTE_VALUE_MAX*BYTE_VALUE_MAX));
-
 		/* Create the ipv6 exact match flow */
 		memset(&entry, 0, sizeof(entry));
-		switch (i & (NUMBER_PORT_USED - 1)) {
-		case 0:
-			entry = ipv6_l3fwd_em_route_array[0];
-			break;
-		case 1:
-			entry = ipv6_l3fwd_em_route_array[1];
-			break;
-		case 2:
-			entry = ipv6_l3fwd_em_route_array[2];
-			break;
-		case 3:
-			entry = ipv6_l3fwd_em_route_array[3];
-			break;
-		};
-		entry.key.ip_dst[13] = c;
-		entry.key.ip_dst[14] = b;
-		entry.key.ip_dst[15] = a;
+		entry = ipv6_l3fwd_em_route_array[port];
+		entry.key.ip_dst[15] = (port + 1) % BYTE_VALUE_MAX;
 		convert_ipv6_5tuple(&entry.key, &newkey);
 		int32_t ret = rte_hash_add_key(h, (void *) &newkey);
 
-- 
2.17.1


^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [dpdk-dev] [PATCH v5 1/3] examples/l3fwd: increase number of routes
  2021-11-05  8:38       ` [dpdk-dev] [PATCH v5 " pbhagavatula
  2021-11-05  8:38         ` [dpdk-dev] [PATCH v5 2/3] examples/l3fwd: print port bdf when adding routes pbhagavatula
  2021-11-05  8:38         ` [dpdk-dev] [PATCH v5 3/3] examples/l3fwd: use reserved addresses for EM mode pbhagavatula
@ 2021-11-05  9:28         ` Walsh, Conor
  2 siblings, 0 replies; 26+ messages in thread
From: Walsh, Conor @ 2021-11-05  9:28 UTC (permalink / raw)
  To: pbhagavatula, david.marchand, jerinj; +Cc: dev

> From: pbhagavatula@marvell.com <pbhagavatula@marvell.com>
> Sent: Friday 5 November 2021 08:39
> To: Walsh, Conor <conor.walsh@intel.com>; david.marchand@redhat.com;
> jerinj@marvell.com
> Cc: dev@dpdk.org; Pavan Nikhilesh <pbhagavatula@marvell.com>
> Subject: [dpdk-dev] [PATCH v5 1/3] examples/l3fwd: increase number of
> routes
> 
> From: Pavan Nikhilesh <pbhagavatula@marvell.com>
> 
> Increase the number of routes from 8 to 16 that are statically added for
> lpm and em mode as most of the SoCs support more than 8 interfaces.
> The number of routes added is equal to the number of ethernet devices
> ports enabled through port mask.
> 
> Signed-off-by: Pavan Nikhilesh <pbhagavatula@marvell.com>
> ---

Reviewed-by: Conor Walsh <conor.walsh@intel.com>

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [dpdk-dev] [PATCH v5 2/3] examples/l3fwd: print port bdf when adding routes
  2021-11-05  8:38         ` [dpdk-dev] [PATCH v5 2/3] examples/l3fwd: print port bdf when adding routes pbhagavatula
@ 2021-11-05  9:34           ` Walsh, Conor
  0 siblings, 0 replies; 26+ messages in thread
From: Walsh, Conor @ 2021-11-05  9:34 UTC (permalink / raw)
  To: pbhagavatula, david.marchand, jerinj; +Cc: dev

> From: pbhagavatula@marvell.com <pbhagavatula@marvell.com>
> Sent: Friday 5 November 2021 08:39
> To: Walsh, Conor <conor.walsh@intel.com>; david.marchand@redhat.com;
> jerinj@marvell.com
> Cc: dev@dpdk.org; Pavan Nikhilesh <pbhagavatula@marvell.com>
> Subject: [dpdk-dev] [PATCH v5 2/3] examples/l3fwd: print port bdf when
> adding routes
> 
> From: Pavan Nikhilesh <pbhagavatula@marvell.com>
> 
> Since the number of Ethernet ports have gone up, print the pci bdf along
> with the routes.
> This is also helpful for cases where allow listing order is not honored.
> 
> Signed-off-by: Pavan Nikhilesh <pbhagavatula@marvell.com>
> ---

Reviewed-by: Conor Walsh <conor.walsh@intel.com>

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [dpdk-dev] [PATCH v5 3/3] examples/l3fwd: use reserved addresses for EM mode
  2021-11-05  8:38         ` [dpdk-dev] [PATCH v5 3/3] examples/l3fwd: use reserved addresses for EM mode pbhagavatula
@ 2021-11-16 10:03           ` David Marchand
  0 siblings, 0 replies; 26+ messages in thread
From: David Marchand @ 2021-11-16 10:03 UTC (permalink / raw)
  To: Pavan Nikhilesh; +Cc: Conor Walsh, Jerin Jacob Kollanukkaran, dev

On Fri, Nov 5, 2021 at 9:39 AM <pbhagavatula@marvell.com> wrote:
>
> From: Pavan Nikhilesh <pbhagavatula@marvell.com>
>
> The l3fwd example should use the reserved IPv4/v6 reserved address
> ranges defined in RFC5735, RFC5180 and RFC863 discard protocol for
> the port number in the exact match mode of L3 forwarding.
>
> Signed-off-by: Pavan Nikhilesh <pbhagavatula@marvell.com>

For the series,
Reviewed-by: David Marchand <david.marchand@redhat.com>

I reworded a bit the RN update.
I also split the EM mention in the RN, from patch 1 to patch 3.

Applied, thanks.


-- 
David Marchand


^ permalink raw reply	[flat|nested] 26+ messages in thread

end of thread, other threads:[~2021-11-16 10:03 UTC | newest]

Thread overview: 26+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-10-30  5:23 [dpdk-dev] [PATCH 1/2] examples/l3fwd: increase number of routes pbhagavatula
2019-10-30  5:23 ` [dpdk-dev] [PATCH 2/2] examples/l3fwd: print port bdf when initializing routes pbhagavatula
2019-11-08  8:51 ` [dpdk-dev] [PATCH 1/2] examples/l3fwd: increase number of routes David Marchand
2020-08-02 18:16 ` [dpdk-dev] [PATCH v2 1/3] " pbhagavatula
2020-08-02 18:16   ` [dpdk-dev] [PATCH v2 2/3] examples/l3fwd: use IP reserved addresses for EM mode pbhagavatula
2020-10-23 14:11     ` David Marchand
2020-08-02 18:16   ` [dpdk-dev] [PATCH v2 3/3] examples/l3fwd: print port bdf when initializing routes pbhagavatula
2021-10-03 20:11   ` [dpdk-dev] [PATCH 1/3] examples/l3fwd: increase number of routes pbhagavatula
2021-10-03 20:11     ` [dpdk-dev] [PATCH 2/3] examples/l3fwd: print port bdf when adding routes pbhagavatula
2021-11-04 10:28       ` Walsh, Conor
2021-11-05  7:27         ` Pavan Nikhilesh Bhagavatula
2021-10-03 20:11     ` [dpdk-dev] [PATCH 3/3] examples/l3fwd: use reserved addresses for EM mode pbhagavatula
2021-10-03 20:24     ` [dpdk-dev] [PATCH v4 1/3] examples/l3fwd: increase number of routes pbhagavatula
2021-10-03 20:24       ` [dpdk-dev] [PATCH v4 2/3] examples/l3fwd: print port bdf when adding routes pbhagavatula
2021-10-03 20:24       ` [dpdk-dev] [PATCH v4 3/3] examples/l3fwd: use reserved addresses for EM mode pbhagavatula
2021-11-03 20:53         ` David Marchand
2021-11-05  7:30           ` [dpdk-dev] [EXT] " Pavan Nikhilesh Bhagavatula
2021-11-04 10:28       ` [dpdk-dev] [PATCH v4 1/3] examples/l3fwd: increase number of routes Walsh, Conor
2021-11-05  7:27         ` Pavan Nikhilesh Bhagavatula
2021-11-05  8:38       ` [dpdk-dev] [PATCH v5 " pbhagavatula
2021-11-05  8:38         ` [dpdk-dev] [PATCH v5 2/3] examples/l3fwd: print port bdf when adding routes pbhagavatula
2021-11-05  9:34           ` Walsh, Conor
2021-11-05  8:38         ` [dpdk-dev] [PATCH v5 3/3] examples/l3fwd: use reserved addresses for EM mode pbhagavatula
2021-11-16 10:03           ` David Marchand
2021-11-05  9:28         ` [dpdk-dev] [PATCH v5 1/3] examples/l3fwd: increase number of routes Walsh, Conor
2021-10-04 15:46     ` [dpdk-dev] [PATCH " Stephen Hemminger

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).