[dpdk-stable] patch 'net/enic: generate VXLAN src port if it is zero in template' has been queued to stable release 19.11.6

luca.boccassi at gmail.com luca.boccassi at gmail.com
Wed Oct 28 11:43:34 CET 2020


Hi,

FYI, your patch has been queued to stable release 19.11.6

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/30/20. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the
patch applied to the branch. This will indicate if there was any rebasing
needed to apply to the stable branch. If there were code changes for rebasing
(ie: not only metadata diffs), please double check that the rebase was
correctly done.

Thanks.

Luca Boccassi

---
>From af788d5aaf465b40e4112d19200ccb8eb283bd68 Mon Sep 17 00:00:00 2001
From: Hyong Youb Kim <hyonkim at cisco.com>
Date: Wed, 9 Sep 2020 07:00:05 -0700
Subject: [PATCH] net/enic: generate VXLAN src port if it is zero in template

[ upstream commit d52054e70f8982d7d72edec14b5875c2a0ed23da ]

When VXLAN source port in the template is zero, the adapter is
expected to generate a value based on the inner packet flow, when it
performs encapsulation. Flow Manager in the VIC adapter currently
lacks such ability. So, generate a random port when creating a flow if
the port is zero, to avoid transmitting packets with source port 0.

Fixes: ea7768b5bba8 ("net/enic: add flow implementation based on Flow Manager API")

Signed-off-by: Hyong Youb Kim <hyonkim at cisco.com>
Reviewed-by: John Daley <johndale at cisco.com>
---
 drivers/net/enic/enic_fm_flow.c | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)

diff --git a/drivers/net/enic/enic_fm_flow.c b/drivers/net/enic/enic_fm_flow.c
index 5b456f20d4..ab008c7356 100644
--- a/drivers/net/enic/enic_fm_flow.c
+++ b/drivers/net/enic/enic_fm_flow.c
@@ -929,6 +929,17 @@ enic_fm_copy_vxlan_decap(struct enic_flowman *fm,
 	return enic_fm_append_action_op(fm, &fm_op, error);
 }
 
+/* Generate a reasonable source port number */
+static uint16_t
+gen_src_port(void)
+{
+	/* Min/max below are the default values in OVS-DPDK and Linux */
+	uint16_t p = rte_rand();
+	p = RTE_MAX(p, 32768);
+	p = RTE_MIN(p, 61000);
+	return rte_cpu_to_be_16(p);
+}
+
 /* VXLAN encap is done via flowman compound action */
 static int
 enic_fm_copy_vxlan_encap(struct enic_flowman *fm,
@@ -937,6 +948,7 @@ enic_fm_copy_vxlan_encap(struct enic_flowman *fm,
 {
 	struct fm_action_op fm_op;
 	struct rte_ether_hdr *eth;
+	struct rte_udp_hdr *udp;
 	uint16_t *ethertype;
 	void *template;
 	uint8_t off;
@@ -1035,8 +1047,17 @@ enic_fm_copy_vxlan_encap(struct enic_flowman *fm,
 		off + offsetof(struct rte_udp_hdr, dgram_len);
 	fm_op.encap.len2_delta =
 		sizeof(struct rte_udp_hdr) + sizeof(struct rte_vxlan_hdr);
+	udp = (struct rte_udp_hdr *)template;
 	append_template(&template, &off, item->spec,
 			sizeof(struct rte_udp_hdr));
+	/*
+	 * Firmware does not hash/fill source port yet. Generate a
+	 * random port, as there is *usually* one rte_flow for the
+	 * given inner packet stream (i.e. a single stream has one
+	 * random port).
+	 */
+	if (udp->src_port == 0)
+		udp->src_port = gen_src_port();
 	item++;
 	flow_item_skip_void(&item);
 
-- 
2.20.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2020-10-28 10:35:13.493182983 +0000
+++ 0055-net-enic-generate-VXLAN-src-port-if-it-is-zero-in-te.patch	2020-10-28 10:35:11.520830259 +0000
@@ -1,8 +1,10 @@
-From d52054e70f8982d7d72edec14b5875c2a0ed23da Mon Sep 17 00:00:00 2001
+From af788d5aaf465b40e4112d19200ccb8eb283bd68 Mon Sep 17 00:00:00 2001
 From: Hyong Youb Kim <hyonkim at cisco.com>
 Date: Wed, 9 Sep 2020 07:00:05 -0700
 Subject: [PATCH] net/enic: generate VXLAN src port if it is zero in template
 
+[ upstream commit d52054e70f8982d7d72edec14b5875c2a0ed23da ]
+
 When VXLAN source port in the template is zero, the adapter is
 expected to generate a value based on the inner packet flow, when it
 performs encapsulation. Flow Manager in the VIC adapter currently
@@ -10,7 +12,6 @@
 the port is zero, to avoid transmitting packets with source port 0.
 
 Fixes: ea7768b5bba8 ("net/enic: add flow implementation based on Flow Manager API")
-Cc: stable at dpdk.org
 
 Signed-off-by: Hyong Youb Kim <hyonkim at cisco.com>
 Reviewed-by: John Daley <johndale at cisco.com>
@@ -19,10 +20,10 @@
  1 file changed, 21 insertions(+)
 
 diff --git a/drivers/net/enic/enic_fm_flow.c b/drivers/net/enic/enic_fm_flow.c
-index 94e39a94bf..8e5eb4d743 100644
+index 5b456f20d4..ab008c7356 100644
 --- a/drivers/net/enic/enic_fm_flow.c
 +++ b/drivers/net/enic/enic_fm_flow.c
-@@ -978,6 +978,17 @@ enic_fm_copy_vxlan_decap(struct enic_flowman *fm,
+@@ -929,6 +929,17 @@ enic_fm_copy_vxlan_decap(struct enic_flowman *fm,
  	return enic_fm_append_action_op(fm, &fm_op, error);
  }
  
@@ -40,7 +41,7 @@
  /* VXLAN encap is done via flowman compound action */
  static int
  enic_fm_copy_vxlan_encap(struct enic_flowman *fm,
-@@ -986,6 +997,7 @@ enic_fm_copy_vxlan_encap(struct enic_flowman *fm,
+@@ -937,6 +948,7 @@ enic_fm_copy_vxlan_encap(struct enic_flowman *fm,
  {
  	struct fm_action_op fm_op;
  	struct rte_ether_hdr *eth;
@@ -48,7 +49,7 @@
  	uint16_t *ethertype;
  	void *template;
  	uint8_t off;
-@@ -1084,8 +1096,17 @@ enic_fm_copy_vxlan_encap(struct enic_flowman *fm,
+@@ -1035,8 +1047,17 @@ enic_fm_copy_vxlan_encap(struct enic_flowman *fm,
  		off + offsetof(struct rte_udp_hdr, dgram_len);
  	fm_op.encap.len2_delta =
  		sizeof(struct rte_udp_hdr) + sizeof(struct rte_vxlan_hdr);


More information about the stable mailing list