Re: [ovs-dev] [PATCH v6 7/9] tc: Add vxlan encap action with gbp option offload

2023-07-04 Thread Roi Dayan via dev



On 29/06/2023 11:50, Eelco Chaudron wrote:
> 
> 
> On 27 Jun 2023, at 12:48, Roi Dayan wrote:
> 
>> From: Gavin Li 
>>
>> Add TC offload support for vxlan encap with gbp option
>>
>> Signed-off-by: Gavin Li 
>> Reviewed-by: Gavi Teitz 
>> Reviewed-by: Roi Dayan 
>> Reviewed-by: Simon Horman 
>> Acked-by: Eelco Chaudron 
>> ---
> 
> I already ACKed the v5, but Ilya mentioned we should probably add a NEWS 
> section.
> 
> What about I add the following when merging?
> 
> diff --git a/NEWS b/NEWS
> index 66d5a4ea3..bd21f3aaf 100644
> --- a/NEWS
> +++ b/NEWS
> @@ -40,6 +40,8 @@ Post-v3.1.0
>   * IP and L4 checksum offload support is now enabled by default for
> interfaces that support it.  See the 'status' column in the 
> 'interface'
> table to check the status.
> +   - Linux TC offload:
> + * Add support for offloading VXLAN tunnels with the GBP extensions.
> 
> 

skipped it somehow. you can add it. thanks!

> Cheers,
> 
> 
> Eelco
> 
___
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev


Re: [ovs-dev] [PATCH v6 7/9] tc: Add vxlan encap action with gbp option offload

2023-06-29 Thread Eelco Chaudron



On 27 Jun 2023, at 12:48, Roi Dayan wrote:

> From: Gavin Li 
>
> Add TC offload support for vxlan encap with gbp option
>
> Signed-off-by: Gavin Li 
> Reviewed-by: Gavi Teitz 
> Reviewed-by: Roi Dayan 
> Reviewed-by: Simon Horman 
> Acked-by: Eelco Chaudron 
> ---

I already ACKed the v5, but Ilya mentioned we should probably add a NEWS 
section.

What about I add the following when merging?

diff --git a/NEWS b/NEWS
index 66d5a4ea3..bd21f3aaf 100644
--- a/NEWS
+++ b/NEWS
@@ -40,6 +40,8 @@ Post-v3.1.0
  * IP and L4 checksum offload support is now enabled by default for
interfaces that support it.  See the 'status' column in the 'interface'
table to check the status.
+   - Linux TC offload:
+ * Add support for offloading VXLAN tunnels with the GBP extensions.


Cheers,


Eelco

___
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev


[ovs-dev] [PATCH v6 7/9] tc: Add vxlan encap action with gbp option offload

2023-06-27 Thread Roi Dayan via dev
From: Gavin Li 

Add TC offload support for vxlan encap with gbp option

Signed-off-by: Gavin Li 
Reviewed-by: Gavi Teitz 
Reviewed-by: Roi Dayan 
Reviewed-by: Simon Horman 
Acked-by: Eelco Chaudron 
---
 acinclude.m4 |  7 
 include/linux/tc_act/tc_tunnel_key.h | 17 +++-
 lib/netdev-offload-tc.c  | 30 +-
 lib/odp-util.c   | 42 +---
 lib/odp-util.h   |  3 ++
 lib/tc.c | 58 +++-
 lib/tc.h |  1 +
 7 files changed, 141 insertions(+), 17 deletions(-)

diff --git a/acinclude.m4 b/acinclude.m4
index ac1eab790041..690a13c25967 100644
--- a/acinclude.m4
+++ b/acinclude.m4
@@ -191,6 +191,13 @@ AC_DEFUN([OVS_CHECK_LINUX_TC], [
 [AC_DEFINE([HAVE_TCA_TUNNEL_KEY_ENC_TTL], [1],
[Define to 1 if TCA_TUNNEL_KEY_ENC_TTL is available.])])
 
+  AC_COMPILE_IFELSE([
+AC_LANG_PROGRAM([#include ], [
+int x = TCA_TUNNEL_KEY_ENC_OPTS_VXLAN;
+])],
+[AC_DEFINE([HAVE_TCA_TUNNEL_KEY_ENC_OPTS_VXLAN], [1],
+   [Define to 1 if TCA_TUNNEL_KEY_ENC_OPTS_VXLAN is available.])])
+
   AC_COMPILE_IFELSE([
 AC_LANG_PROGRAM([#include ], [
 int x = TCA_PEDIT_KEY_EX_HDR_TYPE_UDP;
diff --git a/include/linux/tc_act/tc_tunnel_key.h 
b/include/linux/tc_act/tc_tunnel_key.h
index f13acf17dd75..17291b90bf3c 100644
--- a/include/linux/tc_act/tc_tunnel_key.h
+++ b/include/linux/tc_act/tc_tunnel_key.h
@@ -1,7 +1,7 @@
 #ifndef __LINUX_TC_ACT_TC_TUNNEL_KEY_WRAPPER_H
 #define __LINUX_TC_ACT_TC_TUNNEL_KEY_WRAPPER_H 1
 
-#if defined(__KERNEL__) || defined(HAVE_TCA_TUNNEL_KEY_ENC_TTL)
+#if defined(__KERNEL__) || defined(HAVE_TCA_TUNNEL_KEY_ENC_OPTS_VXLAN)
 #include_next 
 #else
 
@@ -53,6 +53,10 @@ enum {
 * TCA_TUNNEL_KEY_ENC_OPTS_GENEVE
 * attributes
 */
+   TCA_TUNNEL_KEY_ENC_OPTS_VXLAN,  /* Nested
+* TCA_TUNNEL_KEY_ENC_OPTS_VXLAN
+* attributes
+*/
__TCA_TUNNEL_KEY_ENC_OPTS_MAX,
 };
 
@@ -70,6 +74,15 @@ enum {
 #define TCA_TUNNEL_KEY_ENC_OPT_GENEVE_MAX \
(__TCA_TUNNEL_KEY_ENC_OPT_GENEVE_MAX - 1)
 
-#endif /* __KERNEL__ || HAVE_TCA_TUNNEL_KEY_ENC_TTL */
+enum {
+   TCA_TUNNEL_KEY_ENC_OPT_VXLAN_UNSPEC,
+   TCA_TUNNEL_KEY_ENC_OPT_VXLAN_GBP,   /* u32 */
+   __TCA_TUNNEL_KEY_ENC_OPT_VXLAN_MAX,
+};
+
+#define TCA_TUNNEL_KEY_ENC_OPT_VXLAN_MAX \
+   (__TCA_TUNNEL_KEY_ENC_OPT_VXLAN_MAX - 1)
+
+#endif /* __KERNEL__ || HAVE_TCA_TUNNEL_KEY_ENC_OPTS_VXLAN */
 
 #endif /* __LINUX_TC_ACT_TC_TUNNEL_KEY_WRAPPER_H */
diff --git a/lib/netdev-offload-tc.c b/lib/netdev-offload-tc.c
index 1c97681bc92b..c43eacd4d94f 100644
--- a/lib/netdev-offload-tc.c
+++ b/lib/netdev-offload-tc.c
@@ -668,6 +668,23 @@ static void parse_tc_flower_geneve_opts(struct tc_action 
*action,
 nl_msg_end_nested(buf, geneve_off);
 }
 
+static void
+parse_tc_flower_vxlan_tun_opts(struct tc_action *action, struct ofpbuf *buf)
+{
+size_t gbp_off;
+uint32_t gbp_raw;
+
+if (!action->encap.gbp.id_present) {
+return;
+}
+
+gbp_off = nl_msg_start_nested(buf, OVS_TUNNEL_KEY_ATTR_VXLAN_OPTS);
+gbp_raw = odp_encode_gbp_raw(action->encap.gbp.flags,
+ action->encap.gbp.id);
+nl_msg_put_u32(buf, OVS_VXLAN_EXT_GBP, gbp_raw);
+nl_msg_end_nested(buf, gbp_off);
+}
+
 static void
 flower_tun_opt_to_match(struct match *match, struct tc_flower *flower)
 {
@@ -863,7 +880,7 @@ parse_tc_flower_to_actions__(struct tc_flower *flower, 
struct ofpbuf *buf,
 if (!action->encap.no_csum) {
 nl_msg_put_flag(buf, OVS_TUNNEL_KEY_ATTR_CSUM);
 }
-
+parse_tc_flower_vxlan_tun_opts(action, buf);
 parse_tc_flower_geneve_opts(action, buf);
 nl_msg_end_nested(buf, tunnel_offset);
 nl_msg_end_nested(buf, set_offset);
@@ -1552,6 +1569,7 @@ parse_put_flow_set_action(struct tc_flower *flower, 
struct tc_action *action,
 
 action->type = TC_ACT_ENCAP;
 action->encap.id_present = false;
+action->encap.gbp.id_present = false;
 action->encap.no_csum = 1;
 flower->action_count++;
 NL_ATTR_FOR_EACH_UNSAFE(tun_attr, tun_left, tunnel, tunnel_len) {
@@ -1613,6 +1631,16 @@ parse_put_flow_set_action(struct tc_flower *flower, 
struct tc_action *action,
 action->encap.data.present.len = nl_attr_get_size(tun_attr);
 }
 break;
+case OVS_TUNNEL_KEY_ATTR_VXLAN_OPTS: {
+if (odp_vxlan_tun_opts_from_attr(tun_attr,
+ >encap.gbp.id,
+ >encap.gbp.flags,
+ >encap.gbp.id_present)) {
+