Re: [ovs-dev] [PATCH v2] netdev-offload-dpdk: Support offload of VLAN PUSH/POP actions
On Mon, Jun 22, 2020 at 5:28 PM Ilya Maximets wrote: > > On 5/29/20 8:33 AM, Sriharsha Basavapatna via dev wrote: > > Parse VLAN PUSH/POP OVS datapath actions and add respective RTE actions. > > > > Signed-off-by: Sriharsha Basavapatna > > > > --- > > v1->v2: > > * Updated dump_flow_action() to print VLAN Push/Pop actions > > * Updated NEWS, Documentation/howto/dpdk.rst files > > --- > > > > Thanks! > > I had to fix missed 'const' qualifiers flagged by sparse: > > lib/netdev-offload-dpdk.c:434:71: error: incorrect type in initializer > (different modifiers) > lib/netdev-offload-dpdk.c:434:71:expected struct > rte_flow_action_of_set_vlan_pcp *rte_vlan_pcp > lib/netdev-offload-dpdk.c:434:71:got void const *const conf > lib/netdev-offload-dpdk.c:443:71: error: incorrect type in initializer > (different modifiers) > lib/netdev-offload-dpdk.c:443:71:expected struct > rte_flow_action_of_set_vlan_vid *rte_vlan_vid > lib/netdev-offload-dpdk.c:443:71:got void const *const conf > > With this and a couple of minor style fixes applied to master. > > Best regards, Ilya Maximets. Thanks Ilya. -Harsha ___ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev
Re: [ovs-dev] [PATCH v2] netdev-offload-dpdk: Support offload of VLAN PUSH/POP actions
On 5/29/20 8:33 AM, Sriharsha Basavapatna via dev wrote: > Parse VLAN PUSH/POP OVS datapath actions and add respective RTE actions. > > Signed-off-by: Sriharsha Basavapatna > > --- > v1->v2: > * Updated dump_flow_action() to print VLAN Push/Pop actions > * Updated NEWS, Documentation/howto/dpdk.rst files > --- > Thanks! I had to fix missed 'const' qualifiers flagged by sparse: lib/netdev-offload-dpdk.c:434:71: error: incorrect type in initializer (different modifiers) lib/netdev-offload-dpdk.c:434:71:expected struct rte_flow_action_of_set_vlan_pcp *rte_vlan_pcp lib/netdev-offload-dpdk.c:434:71:got void const *const conf lib/netdev-offload-dpdk.c:443:71: error: incorrect type in initializer (different modifiers) lib/netdev-offload-dpdk.c:443:71:expected struct rte_flow_action_of_set_vlan_vid *rte_vlan_vid lib/netdev-offload-dpdk.c:443:71:got void const *const conf With this and a couple of minor style fixes applied to master. Best regards, Ilya Maximets. ___ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev
Re: [ovs-dev] [PATCH v2] netdev-offload-dpdk: Support offload of VLAN PUSH/POP actions
On Tue, Jun 16, 2020 at 12:19 AM Ilya Maximets wrote: > > On 6/12/20 5:50 AM, Sriharsha Basavapatna wrote: > > Hi Ilya, > > > > Can you please apply this to master ? > > Hi. Sorry for delays. And thanks for the patches and reviews! > > I'm going to look at various offload related patches this week. > This one is on my list. > > Best regards, Ilya Maximets. Ok, thanks Illya. -Harsha > > > > > Thanks, > > -Harsha > > > > On Wed, Jun 10, 2020 at 3:29 PM Sriharsha Basavapatna > > wrote: > >> > >> Just a gentle reminder on this patch. It has already been ack'd by Eli. > >> Thanks, > >> -Harsha > >> > >> On Tue, Jun 2, 2020 at 10:16 PM Sriharsha Basavapatna > >> wrote: > >>> > >>> If there are no other comments, can this be applied to master ? > >>> > >>> Thanks, > >>> -Harsha > >>> > >>> On Mon, Jun 1, 2020 at 7:54 PM Eli Britstein wrote: > > Acked-by: Eli Britstein > > On 5/29/2020 9:33 AM, Sriharsha Basavapatna wrote: > > Parse VLAN PUSH/POP OVS datapath actions and add respective RTE actions. > > > > Signed-off-by: Sriharsha Basavapatna > > > > --- > > v1->v2: > > * Updated dump_flow_action() to print VLAN Push/Pop actions > > * Updated NEWS, Documentation/howto/dpdk.rst files > > --- > > > > Documentation/howto/dpdk.rst | 1 + > > NEWS | 1 + > > lib/netdev-offload-dpdk.c| 64 > > 3 files changed, 66 insertions(+) > > > > diff --git a/Documentation/howto/dpdk.rst b/Documentation/howto/dpdk.rst > > index be950d7ce..c40fcafcb 100644 > > --- a/Documentation/howto/dpdk.rst > > +++ b/Documentation/howto/dpdk.rst > > @@ -395,6 +395,7 @@ Supported actions for hardware offload are: > > - Modification of Ethernet (mod_dl_src/mod_dl_dst). > > - Modification of IPv4 (mod_nw_src/mod_nw_dst/mod_nw_ttl). > > - Modification of TCP/UDP (mod_tp_src/mod_tp_dst). > > +- VLAN Push/Pop (push_vlan/pop_vlan). > > > > Further Reading > > --- > > diff --git a/NEWS b/NEWS > > index 3dbd8ec0e..c1311e366 100644 > > --- a/NEWS > > +++ b/NEWS > > @@ -9,6 +9,7 @@ Post-v2.13.0 > > - DPDK: > >* Deprecated DPDK pdump packet capture support removed. > >* Deprecated DPDK ring ports (dpdkr) are no longer supported. > > + * Add hardware offload support for VLAN Push/Pop actions > > (experimental). > > - Linux datapath: > >* Support for kernel versions up to 5.5.x. > > - AF_XDP: > > diff --git a/lib/netdev-offload-dpdk.c b/lib/netdev-offload-dpdk.c > > index f8c46bbaa..c57586a48 100644 > > --- a/lib/netdev-offload-dpdk.c > > +++ b/lib/netdev-offload-dpdk.c > > @@ -420,6 +420,36 @@ dump_flow_action(struct ds *s, const struct > > rte_flow_action *actions) > > } else { > > ds_put_format(s, " Set-%s-tcp/udp-port = null\n", > > dirstr); > > } > > +} else if (actions->type == RTE_FLOW_ACTION_TYPE_OF_PUSH_VLAN) { > > +const struct rte_flow_action_of_push_vlan *rte_push_vlan = > > +actions->conf; > > +ds_put_cstr(s, "rte flow push-vlan action:\n"); > > +if (rte_push_vlan) { > > +ds_put_format(s, " Push-vlan: 0x%"PRIx16"\n", > > + ntohs(rte_push_vlan->ethertype)); > > +} else { > > +ds_put_format(s, " Push-vlan = null\n"); > > +} > > +} else if (actions->type == RTE_FLOW_ACTION_TYPE_OF_SET_VLAN_PCP) { > > +struct rte_flow_action_of_set_vlan_pcp *rte_vlan_pcp = > > actions->conf; > > +ds_put_cstr(s, "rte flow set-vlan-pcp action:\n"); > > +if (rte_vlan_pcp) { > > +ds_put_format(s, " Set-vlan-pcp: %"PRIu8"\n", > > + rte_vlan_pcp->vlan_pcp); > > +} else { > > +ds_put_format(s, " Set-vlan-pcp = null\n"); > > +} > > +} else if (actions->type == RTE_FLOW_ACTION_TYPE_OF_SET_VLAN_VID) { > > +struct rte_flow_action_of_set_vlan_vid *rte_vlan_vid = > > actions->conf; > > +ds_put_cstr(s, "rte flow set-vlan-vid action:\n"); > > +if (rte_vlan_vid) { > > +ds_put_format(s, " Set-vlan-vid: %"PRIu16"\n", > > + ntohs(rte_vlan_vid->vlan_vid)); > > +} else { > > +ds_put_format(s, " Set-vlan-vid = null\n"); > > +} > > +} else if (actions->type == RTE_FLOW_ACTION_TYPE_OF_POP_VLAN) { > > +ds_put_cstr(s, "rte flow pop-vlan action\n"); > > } else { > > ds_put_format(s, "unknown rte flow action (%d)\n", > > actions->type); > > } > > @@ -970,6 +1000,33 @@ parse_set_actions(struct flow_actions *actions, > >
Re: [ovs-dev] [PATCH v2] netdev-offload-dpdk: Support offload of VLAN PUSH/POP actions
On 6/12/20 5:50 AM, Sriharsha Basavapatna wrote: > Hi Ilya, > > Can you please apply this to master ? Hi. Sorry for delays. And thanks for the patches and reviews! I'm going to look at various offload related patches this week. This one is on my list. Best regards, Ilya Maximets. > > Thanks, > -Harsha > > On Wed, Jun 10, 2020 at 3:29 PM Sriharsha Basavapatna > wrote: >> >> Just a gentle reminder on this patch. It has already been ack'd by Eli. >> Thanks, >> -Harsha >> >> On Tue, Jun 2, 2020 at 10:16 PM Sriharsha Basavapatna >> wrote: >>> >>> If there are no other comments, can this be applied to master ? >>> >>> Thanks, >>> -Harsha >>> >>> On Mon, Jun 1, 2020 at 7:54 PM Eli Britstein wrote: Acked-by: Eli Britstein On 5/29/2020 9:33 AM, Sriharsha Basavapatna wrote: > Parse VLAN PUSH/POP OVS datapath actions and add respective RTE actions. > > Signed-off-by: Sriharsha Basavapatna > --- > v1->v2: > * Updated dump_flow_action() to print VLAN Push/Pop actions > * Updated NEWS, Documentation/howto/dpdk.rst files > --- > > Documentation/howto/dpdk.rst | 1 + > NEWS | 1 + > lib/netdev-offload-dpdk.c| 64 > 3 files changed, 66 insertions(+) > > diff --git a/Documentation/howto/dpdk.rst b/Documentation/howto/dpdk.rst > index be950d7ce..c40fcafcb 100644 > --- a/Documentation/howto/dpdk.rst > +++ b/Documentation/howto/dpdk.rst > @@ -395,6 +395,7 @@ Supported actions for hardware offload are: > - Modification of Ethernet (mod_dl_src/mod_dl_dst). > - Modification of IPv4 (mod_nw_src/mod_nw_dst/mod_nw_ttl). > - Modification of TCP/UDP (mod_tp_src/mod_tp_dst). > +- VLAN Push/Pop (push_vlan/pop_vlan). > > Further Reading > --- > diff --git a/NEWS b/NEWS > index 3dbd8ec0e..c1311e366 100644 > --- a/NEWS > +++ b/NEWS > @@ -9,6 +9,7 @@ Post-v2.13.0 > - DPDK: >* Deprecated DPDK pdump packet capture support removed. >* Deprecated DPDK ring ports (dpdkr) are no longer supported. > + * Add hardware offload support for VLAN Push/Pop actions > (experimental). > - Linux datapath: >* Support for kernel versions up to 5.5.x. > - AF_XDP: > diff --git a/lib/netdev-offload-dpdk.c b/lib/netdev-offload-dpdk.c > index f8c46bbaa..c57586a48 100644 > --- a/lib/netdev-offload-dpdk.c > +++ b/lib/netdev-offload-dpdk.c > @@ -420,6 +420,36 @@ dump_flow_action(struct ds *s, const struct > rte_flow_action *actions) > } else { > ds_put_format(s, " Set-%s-tcp/udp-port = null\n", dirstr); > } > +} else if (actions->type == RTE_FLOW_ACTION_TYPE_OF_PUSH_VLAN) { > +const struct rte_flow_action_of_push_vlan *rte_push_vlan = > +actions->conf; > +ds_put_cstr(s, "rte flow push-vlan action:\n"); > +if (rte_push_vlan) { > +ds_put_format(s, " Push-vlan: 0x%"PRIx16"\n", > + ntohs(rte_push_vlan->ethertype)); > +} else { > +ds_put_format(s, " Push-vlan = null\n"); > +} > +} else if (actions->type == RTE_FLOW_ACTION_TYPE_OF_SET_VLAN_PCP) { > +struct rte_flow_action_of_set_vlan_pcp *rte_vlan_pcp = > actions->conf; > +ds_put_cstr(s, "rte flow set-vlan-pcp action:\n"); > +if (rte_vlan_pcp) { > +ds_put_format(s, " Set-vlan-pcp: %"PRIu8"\n", > + rte_vlan_pcp->vlan_pcp); > +} else { > +ds_put_format(s, " Set-vlan-pcp = null\n"); > +} > +} else if (actions->type == RTE_FLOW_ACTION_TYPE_OF_SET_VLAN_VID) { > +struct rte_flow_action_of_set_vlan_vid *rte_vlan_vid = > actions->conf; > +ds_put_cstr(s, "rte flow set-vlan-vid action:\n"); > +if (rte_vlan_vid) { > +ds_put_format(s, " Set-vlan-vid: %"PRIu16"\n", > + ntohs(rte_vlan_vid->vlan_vid)); > +} else { > +ds_put_format(s, " Set-vlan-vid = null\n"); > +} > +} else if (actions->type == RTE_FLOW_ACTION_TYPE_OF_POP_VLAN) { > +ds_put_cstr(s, "rte flow pop-vlan action\n"); > } else { > ds_put_format(s, "unknown rte flow action (%d)\n", > actions->type); > } > @@ -970,6 +1000,33 @@ parse_set_actions(struct flow_actions *actions, > return 0; > } > > +static int > +parse_vlan_push_action(struct flow_actions *actions, > + const struct ovs_action_push_vlan *vlan_push) > +{ > +struct rte_flow_action_of_push_vlan *rte_push_vlan; > +struct rte_flow_action_of_set_vlan_pcp *rte_vlan_pcp; > +
Re: [ovs-dev] [PATCH v2] netdev-offload-dpdk: Support offload of VLAN PUSH/POP actions
Hi Ilya, Can you please apply this to master ? Thanks, -Harsha On Wed, Jun 10, 2020 at 3:29 PM Sriharsha Basavapatna wrote: > > Just a gentle reminder on this patch. It has already been ack'd by Eli. > Thanks, > -Harsha > > On Tue, Jun 2, 2020 at 10:16 PM Sriharsha Basavapatna > wrote: > > > > If there are no other comments, can this be applied to master ? > > > > Thanks, > > -Harsha > > > > On Mon, Jun 1, 2020 at 7:54 PM Eli Britstein wrote: > > > > > > Acked-by: Eli Britstein > > > > > > On 5/29/2020 9:33 AM, Sriharsha Basavapatna wrote: > > > > Parse VLAN PUSH/POP OVS datapath actions and add respective RTE actions. > > > > > > > > Signed-off-by: Sriharsha Basavapatna > > > > > > > > --- > > > > v1->v2: > > > > * Updated dump_flow_action() to print VLAN Push/Pop actions > > > > * Updated NEWS, Documentation/howto/dpdk.rst files > > > > --- > > > > > > > > Documentation/howto/dpdk.rst | 1 + > > > > NEWS | 1 + > > > > lib/netdev-offload-dpdk.c| 64 > > > > 3 files changed, 66 insertions(+) > > > > > > > > diff --git a/Documentation/howto/dpdk.rst b/Documentation/howto/dpdk.rst > > > > index be950d7ce..c40fcafcb 100644 > > > > --- a/Documentation/howto/dpdk.rst > > > > +++ b/Documentation/howto/dpdk.rst > > > > @@ -395,6 +395,7 @@ Supported actions for hardware offload are: > > > > - Modification of Ethernet (mod_dl_src/mod_dl_dst). > > > > - Modification of IPv4 (mod_nw_src/mod_nw_dst/mod_nw_ttl). > > > > - Modification of TCP/UDP (mod_tp_src/mod_tp_dst). > > > > +- VLAN Push/Pop (push_vlan/pop_vlan). > > > > > > > > Further Reading > > > > --- > > > > diff --git a/NEWS b/NEWS > > > > index 3dbd8ec0e..c1311e366 100644 > > > > --- a/NEWS > > > > +++ b/NEWS > > > > @@ -9,6 +9,7 @@ Post-v2.13.0 > > > > - DPDK: > > > >* Deprecated DPDK pdump packet capture support removed. > > > >* Deprecated DPDK ring ports (dpdkr) are no longer supported. > > > > + * Add hardware offload support for VLAN Push/Pop actions > > > > (experimental). > > > > - Linux datapath: > > > >* Support for kernel versions up to 5.5.x. > > > > - AF_XDP: > > > > diff --git a/lib/netdev-offload-dpdk.c b/lib/netdev-offload-dpdk.c > > > > index f8c46bbaa..c57586a48 100644 > > > > --- a/lib/netdev-offload-dpdk.c > > > > +++ b/lib/netdev-offload-dpdk.c > > > > @@ -420,6 +420,36 @@ dump_flow_action(struct ds *s, const struct > > > > rte_flow_action *actions) > > > > } else { > > > > ds_put_format(s, " Set-%s-tcp/udp-port = null\n", > > > > dirstr); > > > > } > > > > +} else if (actions->type == RTE_FLOW_ACTION_TYPE_OF_PUSH_VLAN) { > > > > +const struct rte_flow_action_of_push_vlan *rte_push_vlan = > > > > +actions->conf; > > > > +ds_put_cstr(s, "rte flow push-vlan action:\n"); > > > > +if (rte_push_vlan) { > > > > +ds_put_format(s, " Push-vlan: 0x%"PRIx16"\n", > > > > + ntohs(rte_push_vlan->ethertype)); > > > > +} else { > > > > +ds_put_format(s, " Push-vlan = null\n"); > > > > +} > > > > +} else if (actions->type == RTE_FLOW_ACTION_TYPE_OF_SET_VLAN_PCP) { > > > > +struct rte_flow_action_of_set_vlan_pcp *rte_vlan_pcp = > > > > actions->conf; > > > > +ds_put_cstr(s, "rte flow set-vlan-pcp action:\n"); > > > > +if (rte_vlan_pcp) { > > > > +ds_put_format(s, " Set-vlan-pcp: %"PRIu8"\n", > > > > + rte_vlan_pcp->vlan_pcp); > > > > +} else { > > > > +ds_put_format(s, " Set-vlan-pcp = null\n"); > > > > +} > > > > +} else if (actions->type == RTE_FLOW_ACTION_TYPE_OF_SET_VLAN_VID) { > > > > +struct rte_flow_action_of_set_vlan_vid *rte_vlan_vid = > > > > actions->conf; > > > > +ds_put_cstr(s, "rte flow set-vlan-vid action:\n"); > > > > +if (rte_vlan_vid) { > > > > +ds_put_format(s, " Set-vlan-vid: %"PRIu16"\n", > > > > + ntohs(rte_vlan_vid->vlan_vid)); > > > > +} else { > > > > +ds_put_format(s, " Set-vlan-vid = null\n"); > > > > +} > > > > +} else if (actions->type == RTE_FLOW_ACTION_TYPE_OF_POP_VLAN) { > > > > +ds_put_cstr(s, "rte flow pop-vlan action\n"); > > > > } else { > > > > ds_put_format(s, "unknown rte flow action (%d)\n", > > > > actions->type); > > > > } > > > > @@ -970,6 +1000,33 @@ parse_set_actions(struct flow_actions *actions, > > > > return 0; > > > > } > > > > > > > > +static int > > > > +parse_vlan_push_action(struct flow_actions *actions, > > > > + const struct ovs_action_push_vlan *vlan_push) > > > > +{ > > > > +struct rte_flow_action_of_push_vlan *rte_push_vlan; > > > > +struct rte_flow_action_of_set_vlan_pcp *rte_vlan_pcp; > > > > +struct rte_flow_action_of_set_vlan_vid
Re: [ovs-dev] [PATCH v2] netdev-offload-dpdk: Support offload of VLAN PUSH/POP actions
Just a gentle reminder on this patch. It has already been ack'd by Eli. Thanks, -Harsha On Tue, Jun 2, 2020 at 10:16 PM Sriharsha Basavapatna wrote: > > If there are no other comments, can this be applied to master ? > > Thanks, > -Harsha > > On Mon, Jun 1, 2020 at 7:54 PM Eli Britstein wrote: > > > > Acked-by: Eli Britstein > > > > On 5/29/2020 9:33 AM, Sriharsha Basavapatna wrote: > > > Parse VLAN PUSH/POP OVS datapath actions and add respective RTE actions. > > > > > > Signed-off-by: Sriharsha Basavapatna > > > --- > > > v1->v2: > > > * Updated dump_flow_action() to print VLAN Push/Pop actions > > > * Updated NEWS, Documentation/howto/dpdk.rst files > > > --- > > > > > > Documentation/howto/dpdk.rst | 1 + > > > NEWS | 1 + > > > lib/netdev-offload-dpdk.c| 64 > > > 3 files changed, 66 insertions(+) > > > > > > diff --git a/Documentation/howto/dpdk.rst b/Documentation/howto/dpdk.rst > > > index be950d7ce..c40fcafcb 100644 > > > --- a/Documentation/howto/dpdk.rst > > > +++ b/Documentation/howto/dpdk.rst > > > @@ -395,6 +395,7 @@ Supported actions for hardware offload are: > > > - Modification of Ethernet (mod_dl_src/mod_dl_dst). > > > - Modification of IPv4 (mod_nw_src/mod_nw_dst/mod_nw_ttl). > > > - Modification of TCP/UDP (mod_tp_src/mod_tp_dst). > > > +- VLAN Push/Pop (push_vlan/pop_vlan). > > > > > > Further Reading > > > --- > > > diff --git a/NEWS b/NEWS > > > index 3dbd8ec0e..c1311e366 100644 > > > --- a/NEWS > > > +++ b/NEWS > > > @@ -9,6 +9,7 @@ Post-v2.13.0 > > > - DPDK: > > >* Deprecated DPDK pdump packet capture support removed. > > >* Deprecated DPDK ring ports (dpdkr) are no longer supported. > > > + * Add hardware offload support for VLAN Push/Pop actions > > > (experimental). > > > - Linux datapath: > > >* Support for kernel versions up to 5.5.x. > > > - AF_XDP: > > > diff --git a/lib/netdev-offload-dpdk.c b/lib/netdev-offload-dpdk.c > > > index f8c46bbaa..c57586a48 100644 > > > --- a/lib/netdev-offload-dpdk.c > > > +++ b/lib/netdev-offload-dpdk.c > > > @@ -420,6 +420,36 @@ dump_flow_action(struct ds *s, const struct > > > rte_flow_action *actions) > > > } else { > > > ds_put_format(s, " Set-%s-tcp/udp-port = null\n", dirstr); > > > } > > > +} else if (actions->type == RTE_FLOW_ACTION_TYPE_OF_PUSH_VLAN) { > > > +const struct rte_flow_action_of_push_vlan *rte_push_vlan = > > > +actions->conf; > > > +ds_put_cstr(s, "rte flow push-vlan action:\n"); > > > +if (rte_push_vlan) { > > > +ds_put_format(s, " Push-vlan: 0x%"PRIx16"\n", > > > + ntohs(rte_push_vlan->ethertype)); > > > +} else { > > > +ds_put_format(s, " Push-vlan = null\n"); > > > +} > > > +} else if (actions->type == RTE_FLOW_ACTION_TYPE_OF_SET_VLAN_PCP) { > > > +struct rte_flow_action_of_set_vlan_pcp *rte_vlan_pcp = > > > actions->conf; > > > +ds_put_cstr(s, "rte flow set-vlan-pcp action:\n"); > > > +if (rte_vlan_pcp) { > > > +ds_put_format(s, " Set-vlan-pcp: %"PRIu8"\n", > > > + rte_vlan_pcp->vlan_pcp); > > > +} else { > > > +ds_put_format(s, " Set-vlan-pcp = null\n"); > > > +} > > > +} else if (actions->type == RTE_FLOW_ACTION_TYPE_OF_SET_VLAN_VID) { > > > +struct rte_flow_action_of_set_vlan_vid *rte_vlan_vid = > > > actions->conf; > > > +ds_put_cstr(s, "rte flow set-vlan-vid action:\n"); > > > +if (rte_vlan_vid) { > > > +ds_put_format(s, " Set-vlan-vid: %"PRIu16"\n", > > > + ntohs(rte_vlan_vid->vlan_vid)); > > > +} else { > > > +ds_put_format(s, " Set-vlan-vid = null\n"); > > > +} > > > +} else if (actions->type == RTE_FLOW_ACTION_TYPE_OF_POP_VLAN) { > > > +ds_put_cstr(s, "rte flow pop-vlan action\n"); > > > } else { > > > ds_put_format(s, "unknown rte flow action (%d)\n", > > > actions->type); > > > } > > > @@ -970,6 +1000,33 @@ parse_set_actions(struct flow_actions *actions, > > > return 0; > > > } > > > > > > +static int > > > +parse_vlan_push_action(struct flow_actions *actions, > > > + const struct ovs_action_push_vlan *vlan_push) > > > +{ > > > +struct rte_flow_action_of_push_vlan *rte_push_vlan; > > > +struct rte_flow_action_of_set_vlan_pcp *rte_vlan_pcp; > > > +struct rte_flow_action_of_set_vlan_vid *rte_vlan_vid; > > > + > > > +rte_push_vlan = xzalloc(sizeof *rte_push_vlan); > > > +rte_push_vlan->ethertype = vlan_push->vlan_tpid; > > > +add_flow_action(actions, RTE_FLOW_ACTION_TYPE_OF_PUSH_VLAN, > > > +rte_push_vlan); > > > + > > > +rte_vlan_pcp = xzalloc(sizeof *rte_vlan_pcp); > > > +rte_vlan_pcp->vlan_pcp =
Re: [ovs-dev] [PATCH v2] netdev-offload-dpdk: Support offload of VLAN PUSH/POP actions
If there are no other comments, can this be applied to master ? Thanks, -Harsha On Mon, Jun 1, 2020 at 7:54 PM Eli Britstein wrote: > > Acked-by: Eli Britstein > > On 5/29/2020 9:33 AM, Sriharsha Basavapatna wrote: > > Parse VLAN PUSH/POP OVS datapath actions and add respective RTE actions. > > > > Signed-off-by: Sriharsha Basavapatna > > --- > > v1->v2: > > * Updated dump_flow_action() to print VLAN Push/Pop actions > > * Updated NEWS, Documentation/howto/dpdk.rst files > > --- > > > > Documentation/howto/dpdk.rst | 1 + > > NEWS | 1 + > > lib/netdev-offload-dpdk.c| 64 > > 3 files changed, 66 insertions(+) > > > > diff --git a/Documentation/howto/dpdk.rst b/Documentation/howto/dpdk.rst > > index be950d7ce..c40fcafcb 100644 > > --- a/Documentation/howto/dpdk.rst > > +++ b/Documentation/howto/dpdk.rst > > @@ -395,6 +395,7 @@ Supported actions for hardware offload are: > > - Modification of Ethernet (mod_dl_src/mod_dl_dst). > > - Modification of IPv4 (mod_nw_src/mod_nw_dst/mod_nw_ttl). > > - Modification of TCP/UDP (mod_tp_src/mod_tp_dst). > > +- VLAN Push/Pop (push_vlan/pop_vlan). > > > > Further Reading > > --- > > diff --git a/NEWS b/NEWS > > index 3dbd8ec0e..c1311e366 100644 > > --- a/NEWS > > +++ b/NEWS > > @@ -9,6 +9,7 @@ Post-v2.13.0 > > - DPDK: > >* Deprecated DPDK pdump packet capture support removed. > >* Deprecated DPDK ring ports (dpdkr) are no longer supported. > > + * Add hardware offload support for VLAN Push/Pop actions > > (experimental). > > - Linux datapath: > >* Support for kernel versions up to 5.5.x. > > - AF_XDP: > > diff --git a/lib/netdev-offload-dpdk.c b/lib/netdev-offload-dpdk.c > > index f8c46bbaa..c57586a48 100644 > > --- a/lib/netdev-offload-dpdk.c > > +++ b/lib/netdev-offload-dpdk.c > > @@ -420,6 +420,36 @@ dump_flow_action(struct ds *s, const struct > > rte_flow_action *actions) > > } else { > > ds_put_format(s, " Set-%s-tcp/udp-port = null\n", dirstr); > > } > > +} else if (actions->type == RTE_FLOW_ACTION_TYPE_OF_PUSH_VLAN) { > > +const struct rte_flow_action_of_push_vlan *rte_push_vlan = > > +actions->conf; > > +ds_put_cstr(s, "rte flow push-vlan action:\n"); > > +if (rte_push_vlan) { > > +ds_put_format(s, " Push-vlan: 0x%"PRIx16"\n", > > + ntohs(rte_push_vlan->ethertype)); > > +} else { > > +ds_put_format(s, " Push-vlan = null\n"); > > +} > > +} else if (actions->type == RTE_FLOW_ACTION_TYPE_OF_SET_VLAN_PCP) { > > +struct rte_flow_action_of_set_vlan_pcp *rte_vlan_pcp = > > actions->conf; > > +ds_put_cstr(s, "rte flow set-vlan-pcp action:\n"); > > +if (rte_vlan_pcp) { > > +ds_put_format(s, " Set-vlan-pcp: %"PRIu8"\n", > > + rte_vlan_pcp->vlan_pcp); > > +} else { > > +ds_put_format(s, " Set-vlan-pcp = null\n"); > > +} > > +} else if (actions->type == RTE_FLOW_ACTION_TYPE_OF_SET_VLAN_VID) { > > +struct rte_flow_action_of_set_vlan_vid *rte_vlan_vid = > > actions->conf; > > +ds_put_cstr(s, "rte flow set-vlan-vid action:\n"); > > +if (rte_vlan_vid) { > > +ds_put_format(s, " Set-vlan-vid: %"PRIu16"\n", > > + ntohs(rte_vlan_vid->vlan_vid)); > > +} else { > > +ds_put_format(s, " Set-vlan-vid = null\n"); > > +} > > +} else if (actions->type == RTE_FLOW_ACTION_TYPE_OF_POP_VLAN) { > > +ds_put_cstr(s, "rte flow pop-vlan action\n"); > > } else { > > ds_put_format(s, "unknown rte flow action (%d)\n", actions->type); > > } > > @@ -970,6 +1000,33 @@ parse_set_actions(struct flow_actions *actions, > > return 0; > > } > > > > +static int > > +parse_vlan_push_action(struct flow_actions *actions, > > + const struct ovs_action_push_vlan *vlan_push) > > +{ > > +struct rte_flow_action_of_push_vlan *rte_push_vlan; > > +struct rte_flow_action_of_set_vlan_pcp *rte_vlan_pcp; > > +struct rte_flow_action_of_set_vlan_vid *rte_vlan_vid; > > + > > +rte_push_vlan = xzalloc(sizeof *rte_push_vlan); > > +rte_push_vlan->ethertype = vlan_push->vlan_tpid; > > +add_flow_action(actions, RTE_FLOW_ACTION_TYPE_OF_PUSH_VLAN, > > +rte_push_vlan); > > + > > +rte_vlan_pcp = xzalloc(sizeof *rte_vlan_pcp); > > +rte_vlan_pcp->vlan_pcp = vlan_tci_to_pcp(vlan_push->vlan_tci); > > +add_flow_action(actions, RTE_FLOW_ACTION_TYPE_OF_SET_VLAN_PCP, > > +rte_vlan_pcp); > > + > > +rte_vlan_vid = xzalloc(sizeof *rte_vlan_vid); > > +rte_vlan_vid->vlan_vid = > > +rte_cpu_to_be_16(vlan_tci_to_vid(vlan_push->vlan_tci)); > > +add_flow_action(actions, RTE_FLOW_ACTION_TYPE_OF_SET_VLAN_VID, > > +
Re: [ovs-dev] [PATCH v2] netdev-offload-dpdk: Support offload of VLAN PUSH/POP actions
Acked-by: Eli Britstein On 5/29/2020 9:33 AM, Sriharsha Basavapatna wrote: Parse VLAN PUSH/POP OVS datapath actions and add respective RTE actions. Signed-off-by: Sriharsha Basavapatna --- v1->v2: * Updated dump_flow_action() to print VLAN Push/Pop actions * Updated NEWS, Documentation/howto/dpdk.rst files --- Documentation/howto/dpdk.rst | 1 + NEWS | 1 + lib/netdev-offload-dpdk.c| 64 3 files changed, 66 insertions(+) diff --git a/Documentation/howto/dpdk.rst b/Documentation/howto/dpdk.rst index be950d7ce..c40fcafcb 100644 --- a/Documentation/howto/dpdk.rst +++ b/Documentation/howto/dpdk.rst @@ -395,6 +395,7 @@ Supported actions for hardware offload are: - Modification of Ethernet (mod_dl_src/mod_dl_dst). - Modification of IPv4 (mod_nw_src/mod_nw_dst/mod_nw_ttl). - Modification of TCP/UDP (mod_tp_src/mod_tp_dst). +- VLAN Push/Pop (push_vlan/pop_vlan). Further Reading --- diff --git a/NEWS b/NEWS index 3dbd8ec0e..c1311e366 100644 --- a/NEWS +++ b/NEWS @@ -9,6 +9,7 @@ Post-v2.13.0 - DPDK: * Deprecated DPDK pdump packet capture support removed. * Deprecated DPDK ring ports (dpdkr) are no longer supported. + * Add hardware offload support for VLAN Push/Pop actions (experimental). - Linux datapath: * Support for kernel versions up to 5.5.x. - AF_XDP: diff --git a/lib/netdev-offload-dpdk.c b/lib/netdev-offload-dpdk.c index f8c46bbaa..c57586a48 100644 --- a/lib/netdev-offload-dpdk.c +++ b/lib/netdev-offload-dpdk.c @@ -420,6 +420,36 @@ dump_flow_action(struct ds *s, const struct rte_flow_action *actions) } else { ds_put_format(s, " Set-%s-tcp/udp-port = null\n", dirstr); } +} else if (actions->type == RTE_FLOW_ACTION_TYPE_OF_PUSH_VLAN) { +const struct rte_flow_action_of_push_vlan *rte_push_vlan = +actions->conf; +ds_put_cstr(s, "rte flow push-vlan action:\n"); +if (rte_push_vlan) { +ds_put_format(s, " Push-vlan: 0x%"PRIx16"\n", + ntohs(rte_push_vlan->ethertype)); +} else { +ds_put_format(s, " Push-vlan = null\n"); +} +} else if (actions->type == RTE_FLOW_ACTION_TYPE_OF_SET_VLAN_PCP) { +struct rte_flow_action_of_set_vlan_pcp *rte_vlan_pcp = actions->conf; +ds_put_cstr(s, "rte flow set-vlan-pcp action:\n"); +if (rte_vlan_pcp) { +ds_put_format(s, " Set-vlan-pcp: %"PRIu8"\n", + rte_vlan_pcp->vlan_pcp); +} else { +ds_put_format(s, " Set-vlan-pcp = null\n"); +} +} else if (actions->type == RTE_FLOW_ACTION_TYPE_OF_SET_VLAN_VID) { +struct rte_flow_action_of_set_vlan_vid *rte_vlan_vid = actions->conf; +ds_put_cstr(s, "rte flow set-vlan-vid action:\n"); +if (rte_vlan_vid) { +ds_put_format(s, " Set-vlan-vid: %"PRIu16"\n", + ntohs(rte_vlan_vid->vlan_vid)); +} else { +ds_put_format(s, " Set-vlan-vid = null\n"); +} +} else if (actions->type == RTE_FLOW_ACTION_TYPE_OF_POP_VLAN) { +ds_put_cstr(s, "rte flow pop-vlan action\n"); } else { ds_put_format(s, "unknown rte flow action (%d)\n", actions->type); } @@ -970,6 +1000,33 @@ parse_set_actions(struct flow_actions *actions, return 0; } +static int +parse_vlan_push_action(struct flow_actions *actions, + const struct ovs_action_push_vlan *vlan_push) +{ +struct rte_flow_action_of_push_vlan *rte_push_vlan; +struct rte_flow_action_of_set_vlan_pcp *rte_vlan_pcp; +struct rte_flow_action_of_set_vlan_vid *rte_vlan_vid; + +rte_push_vlan = xzalloc(sizeof *rte_push_vlan); +rte_push_vlan->ethertype = vlan_push->vlan_tpid; +add_flow_action(actions, RTE_FLOW_ACTION_TYPE_OF_PUSH_VLAN, +rte_push_vlan); + +rte_vlan_pcp = xzalloc(sizeof *rte_vlan_pcp); +rte_vlan_pcp->vlan_pcp = vlan_tci_to_pcp(vlan_push->vlan_tci); +add_flow_action(actions, RTE_FLOW_ACTION_TYPE_OF_SET_VLAN_PCP, +rte_vlan_pcp); + +rte_vlan_vid = xzalloc(sizeof *rte_vlan_vid); +rte_vlan_vid->vlan_vid = +rte_cpu_to_be_16(vlan_tci_to_vid(vlan_push->vlan_tci)); +add_flow_action(actions, RTE_FLOW_ACTION_TYPE_OF_SET_VLAN_VID, +rte_vlan_vid); + +return 0; +} + static int parse_flow_actions(struct netdev *netdev, struct flow_actions *actions, @@ -998,6 +1055,13 @@ parse_flow_actions(struct netdev *netdev, masked)) { return -1; } +} else if (nl_attr_type(nla) == OVS_ACTION_ATTR_PUSH_VLAN) { +const struct ovs_action_push_vlan *vlan = nl_attr_get(nla); +if (parse_vlan_push_action(actions, vlan)) { +return -1; +} +} else if