From patchwork Mon Sep 16 01:29:41 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: LIU CHANG X-Patchwork-Id: 1162579 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=openvswitch.org (client-ip=140.211.169.12; helo=mail.linuxfoundation.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=cmss.chinamobile.com Received: from mail.linuxfoundation.org (mail.linuxfoundation.org [140.211.169.12]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 46WpZl5CmZz9sNw for ; Mon, 16 Sep 2019 11:30:06 +1000 (AEST) Received: from mail.linux-foundation.org (localhost [127.0.0.1]) by mail.linuxfoundation.org (Postfix) with ESMTP id DCE9CB2F; Mon, 16 Sep 2019 01:30:02 +0000 (UTC) X-Original-To: ovs-dev@openvswitch.org Delivered-To: ovs-dev@mail.linuxfoundation.org Received: from smtp1.linuxfoundation.org (smtp1.linux-foundation.org [172.17.192.35]) by mail.linuxfoundation.org (Postfix) with ESMTPS id 310F9B1F for ; Mon, 16 Sep 2019 01:30:02 +0000 (UTC) X-Greylist: from auto-whitelisted by SQLgrey-1.7.6 Received: from cmccmta3.chinamobile.com (cmccmta3.chinamobile.com [221.176.66.81]) by smtp1.linuxfoundation.org (Postfix) with ESMTP id ACF0570D for ; Mon, 16 Sep 2019 01:29:59 +0000 (UTC) Received: from spf.mail.chinamobile.com (unknown[172.16.121.11]) by rmmx-syy-dmz-app09-12009 (RichMail) with SMTP id 2ee95d7ee58599a-3a43d; Mon, 16 Sep 2019 09:29:41 +0800 (CST) X-RM-TRANSID: 2ee95d7ee58599a-3a43d X-RM-TagInfo: emlType=0 X-RM-SPAM-FLAG: 00000000 Received: from LAPTOP-VJ5CCUVK (unknown[112.25.154.149]) by rmsmtp-syy-appsvr06-12006 (RichMail) with SMTP id 2ee65d7ee5820ea-6080f; Mon, 16 Sep 2019 09:29:40 +0800 (CST) X-RM-TRANSID: 2ee65d7ee5820ea-6080f MIME-Version: 1.0 x-PcFlag: 5f381c5c-5358-4e55-8e0a-5da84c400c25_5_9349 X-Mailer: PC_RICHMAIL 2.7.6 Date: 16 Sep 2019 09:29:41 +0800 From: Timo_Liu To: ovs-dev Message-ID: 201909160929411977787@cmss.chinamobile.com> X-Spam-Status: No, score=-2.0 required=5.0 tests=BAYES_00,HTML_MESSAGE, INVALID_MSGID,RCVD_IN_DNSWL_LOW autolearn=no version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on smtp1.linux-foundation.org X-Content-Filtered-By: Mailman/MimeDel 2.1.12 Subject: [ovs-dev] [PATCH v2] netdev-offload-dpdk : add ipv6 rte flow item support X-BeenThere: ovs-dev@openvswitch.org X-Mailman-Version: 2.1.12 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: ovs-dev-bounces@openvswitch.org Errors-To: ovs-dev-bounces@openvswitch.org Sorry , I forgot to reformat it in my mail sender. v1->v2: format patch in raw text Signed-off-by: Liu Chang (match->wc.masks.tp_src || 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 &&