Hi Timo, Please try to format your patch in raw text.
Thanks, Yifeng On Wed, Sep 11, 2019 at 7:55 PM Timo_Liu <[email protected]> wrote: > > > > Nowadays some Nics support hw offloading via dpdk rte_flow lib. Many > layer2-layer4 fields can be offloaded to nics, including smac/dmac ipv4 > sip/dip etc. Also some nics(including intel X710) supports ipv6 header > offloading, but when we execute netdev_offload_dpdk_add_flow, there is no > IPV6 rte_flow pattern. > > > > > > This patch adds support for IPV6 header hw-offload rte_flow pattern, > including ipv6_label, nw_ttl, nw_proto, ipv6 sip and dip, also the > corresponding mask filed is added. > > > > > Signed-off-by: Liu Chang <[email protected]> > > > > > > > diff --git a/lib/netdev-offload-dpdk.c b/lib/netdev-offload-dpdk.c > > index 01e9004..ab3f82b 100644 > > --- a/lib/netdev-offload-dpdk.c > > +++ b/lib/netdev-offload-dpdk.c > > @@ -433,7 +433,10 @@ netdev_offload_dpdk_add_flow(struct netdev *netdev, > > struct flow_items { > > struct rte_flow_item_eth eth; > > struct rte_flow_item_vlan vlan; > > - struct rte_flow_item_ipv4 ipv4; > > + union { > > + struct rte_flow_item_ipv4 ipv4; > > + struct rte_flow_item_ipv6 ipv6; > > + }; > > union { > > struct rte_flow_item_tcp tcp; > > struct rte_flow_item_udp udp; > > @@ -503,6 +506,31 @@ netdev_offload_dpdk_add_flow(struct netdev *netdev, > > mask.ipv4.hdr.next_proto_id; > > } > > > > > + /* IP v6 */ > > + if (match->flow.dl_type == htons(ETH_TYPE_IPV6)) { > > + int i =0; > > + > > + spec.ipv6.hdr.vtc_flow = match->flow.ipv6_label; > > + spec.ipv6.hdr.proto = match->flow.nw_proto; > > + spec.ipv6.hdr.hop_limits = match->flow.nw_ttl; > > + > > + mask.ipv6.hdr.vtc_flow = match->wc.masks.ipv6_label; > > + mask.ipv6.hdr.proto = match->wc.masks.nw_proto; > > + mask.ipv6.hdr.hop_limits = match->wc.masks.nw_ttl; > > + > > > > + for (i = 0; i < 16; i++) { > > + spec.ipv6.hdr.src_addr[i] = match->flow.ipv6_src.s6_addr[i]; > > + spec.ipv6.hdr.dst_addr[i] = match->flow.ipv6_dst.s6_addr[i]; > > + > > + mask.ipv6.hdr.src_addr[i] = match->wc.masks.ipv6_src.s6_addr[i]; > > + mask.ipv6.hdr.dst_addr[i] = match->wc.masks.ipv6_dst.s6_addr[i]; > > + } > > + > > + add_flow_pattern(&patterns, RTE_FLOW_ITEM_TYPE_IPV6, > > + &spec.ipv6, &mask.ipv6); > > + > > + } > > + > > if (proto != IPPROTO_ICMP && proto != IPPROTO_UDP && > > proto != IPPROTO_SCTP && proto != IPPROTO_TCP && > > (match->wc.masks.tp_src || > > > > > > > > > Best Regards > > Timo_liu > _______________________________________________ > dev mailing list > [email protected] > https://mail.openvswitch.org/mailman/listinfo/ovs-dev _______________________________________________ dev mailing list [email protected] https://mail.openvswitch.org/mailman/listinfo/ovs-dev
