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; 14+ 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] 14+ 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; 14+ 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] 14+ 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; 14+ 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] 14+ 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; 14+ 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] 14+ 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; 14+ 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] 14+ 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; 14+ 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] 14+ 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; 14+ 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] 14+ 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; 14+ 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] 14+ 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-10-03 20:11     ` [dpdk-dev] [PATCH 3/3] examples/l3fwd: use reserved addresses for EM mode pbhagavatula
                       ` (2 subsequent siblings)
  3 siblings, 0 replies; 14+ 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] 14+ 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 1/3] examples/l3fwd: increase number of routes Stephen Hemminger
  3 siblings, 0 replies; 14+ 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] 14+ 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
  2021-10-03 20:24       ` [dpdk-dev] [PATCH v4 3/3] examples/l3fwd: use reserved addresses for EM mode pbhagavatula
  2021-10-04 15:46     ` [dpdk-dev] [PATCH 1/3] examples/l3fwd: increase number of routes Stephen Hemminger
  3 siblings, 2 replies; 14+ 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] 14+ 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
  1 sibling, 0 replies; 14+ 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] 14+ 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
  1 sibling, 0 replies; 14+ 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] 14+ 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; 14+ 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] 14+ messages in thread

end of thread, other threads:[~2021-10-04 15:46 UTC | newest]

Thread overview: 14+ 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-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-10-04 15:46     ` [dpdk-dev] [PATCH 1/3] examples/l3fwd: increase number of routes Stephen Hemminger

DPDK patches and discussions

This inbox may be cloned and mirrored by anyone:

	git clone --mirror https://inbox.dpdk.org/dev/0 dev/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 dev dev/ https://inbox.dpdk.org/dev \
		dev@dpdk.org
	public-inbox-index dev

Example config snippet for mirrors.
Newsgroup available over NNTP:
	nntp://inbox.dpdk.org/inbox.dpdk.dev


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git