diff mbox series

[ovs-dev,v4,3/4] netdev-offload-dpdk: Support tnl_pop for gre tunnel

Message ID 1634807897-98819-4-git-send-email-nanteby@nvidia.com
State Accepted
Commit 5f60741dcfb1180b27d3efc18861a08be854fe91
Headers show
Series netdev datapath hardware offload support for GRE flows | expand

Checks

Context Check Description
ovsrobot/apply-robot success apply and check: success
ovsrobot/github-robot-_Build_and_Test fail github build: failed

Commit Message

Nir Anteby Oct. 21, 2021, 9:18 a.m. UTC
Add support for tnl_pop action for gre vport.

Signed-off-by: Nir Anteby <nanteby@nvidia.com>
---
 lib/netdev-offload-dpdk.c | 12 ++++++++++++
 1 file changed, 12 insertions(+)

Comments

Maxime Coquelin Oct. 21, 2021, 2:16 p.m. UTC | #1
On 10/21/21 11:18, Nir Anteby via dev wrote:
> Add support for tnl_pop action for gre vport.
> 
> Signed-off-by: Nir Anteby <nanteby@nvidia.com>
> ---
>   lib/netdev-offload-dpdk.c | 12 ++++++++++++
>   1 file changed, 12 insertions(+)
> 
> diff --git a/lib/netdev-offload-dpdk.c b/lib/netdev-offload-dpdk.c
> index af56491..a2d7c85 100644
> --- a/lib/netdev-offload-dpdk.c
> +++ b/lib/netdev-offload-dpdk.c
> @@ -908,6 +908,12 @@ vport_to_rte_tunnel(struct netdev *vport,
>               ds_put_format(s_tnl, "flow tunnel create %d type vxlan; ",
>                             netdev_dpdk_get_port_id(netdev));
>           }
> +    } else if (!strcmp(netdev_get_type(vport), "gre")) {
> +        tunnel->type = RTE_FLOW_ITEM_TYPE_GRE;
> +        if (!VLOG_DROP_DBG(&rl)) {
> +            ds_put_format(s_tnl, "flow tunnel create %d type gre; ",
> +                          netdev_dpdk_get_port_id(netdev));
> +        }
>       } else {
>           VLOG_DBG_RL(&rl, "vport type '%s' is not supported",
>                       netdev_get_type(vport));
> @@ -2236,6 +2242,9 @@ get_vport_netdev_cb(struct netdev *netdev,
>       if (!aux->type || strcmp(netdev_get_type(netdev), aux->type)) {
>           return false;
>       }
> +    if (!strcmp(netdev_get_type(netdev), "gre")) {
> +        goto out;
> +    }
>   
>       tnl_cfg = netdev_get_tunnel_config(netdev);
>       if (!tnl_cfg) {
> @@ -2248,6 +2257,7 @@ get_vport_netdev_cb(struct netdev *netdev,
>           return false;
>       }
>   
> +out:
>       /* Found the netdev. Store the results and stop the traversing. */
>       aux->vport = netdev_ref(netdev);
>       *aux->odp_port = odp_port;
> @@ -2269,6 +2279,8 @@ get_vport_netdev(const char *dpif_type,
>   
>       if (tunnel->type == RTE_FLOW_ITEM_TYPE_VXLAN) {
>           aux.type = "vxlan";
> +    } else if (tunnel->type == RTE_FLOW_ITEM_TYPE_GRE) {
> +        aux.type = "gre";
>       }
>       netdev_ports_traverse(dpif_type, get_vport_netdev_cb, &aux);
>   
> 

With the change in patch 1, aux->vport and aux->odp_port are now
properly set:

Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>

Thanks,
Maxime
diff mbox series

Patch

diff --git a/lib/netdev-offload-dpdk.c b/lib/netdev-offload-dpdk.c
index af56491..a2d7c85 100644
--- a/lib/netdev-offload-dpdk.c
+++ b/lib/netdev-offload-dpdk.c
@@ -908,6 +908,12 @@  vport_to_rte_tunnel(struct netdev *vport,
             ds_put_format(s_tnl, "flow tunnel create %d type vxlan; ",
                           netdev_dpdk_get_port_id(netdev));
         }
+    } else if (!strcmp(netdev_get_type(vport), "gre")) {
+        tunnel->type = RTE_FLOW_ITEM_TYPE_GRE;
+        if (!VLOG_DROP_DBG(&rl)) {
+            ds_put_format(s_tnl, "flow tunnel create %d type gre; ",
+                          netdev_dpdk_get_port_id(netdev));
+        }
     } else {
         VLOG_DBG_RL(&rl, "vport type '%s' is not supported",
                     netdev_get_type(vport));
@@ -2236,6 +2242,9 @@  get_vport_netdev_cb(struct netdev *netdev,
     if (!aux->type || strcmp(netdev_get_type(netdev), aux->type)) {
         return false;
     }
+    if (!strcmp(netdev_get_type(netdev), "gre")) {
+        goto out;
+    }
 
     tnl_cfg = netdev_get_tunnel_config(netdev);
     if (!tnl_cfg) {
@@ -2248,6 +2257,7 @@  get_vport_netdev_cb(struct netdev *netdev,
         return false;
     }
 
+out:
     /* Found the netdev. Store the results and stop the traversing. */
     aux->vport = netdev_ref(netdev);
     *aux->odp_port = odp_port;
@@ -2269,6 +2279,8 @@  get_vport_netdev(const char *dpif_type,
 
     if (tunnel->type == RTE_FLOW_ITEM_TYPE_VXLAN) {
         aux.type = "vxlan";
+    } else if (tunnel->type == RTE_FLOW_ITEM_TYPE_GRE) {
+        aux.type = "gre";
     }
     netdev_ports_traverse(dpif_type, get_vport_netdev_cb, &aux);