From patchwork Mon Sep 16 08:32:45 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: LIU CHANG X-Patchwork-Id: 1162675 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 46Wzz34Jzfz9sNf for ; Mon, 16 Sep 2019 18:33:18 +1000 (AEST) Received: from mail.linux-foundation.org (localhost [127.0.0.1]) by mail.linuxfoundation.org (Postfix) with ESMTP id AAA32115D; Mon, 16 Sep 2019 08:33:14 +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 326CE115A for ; Mon, 16 Sep 2019 08:33:13 +0000 (UTC) X-Greylist: from auto-whitelisted by SQLgrey-1.7.6 Received: from cmccmta1.chinamobile.com (cmccmta1.chinamobile.com [221.176.66.79]) by smtp1.linuxfoundation.org (Postfix) with ESMTP id DC84E8B5 for ; Mon, 16 Sep 2019 08:33:11 +0000 (UTC) Received: from spf.mail.chinamobile.com (unknown[172.16.121.17]) by rmmx-syy-dmz-app04-12004 (RichMail) with SMTP id 2ee45d7f48aca36-4636b; Mon, 16 Sep 2019 16:32:44 +0800 (CST) X-RM-TRANSID: 2ee45d7f48aca36-4636b X-RM-TagInfo: emlType=0 X-RM-SPAM-FLAG: 00000000 Received: from LAPTOP-VJ5CCUVK (unknown[112.25.154.149]) by rmsmtp-syy-appsvr09-12009 (RichMail) with SMTP id 2ee95d7f48ac6a2-834e6; Mon, 16 Sep 2019 16:32:44 +0800 (CST) X-RM-TRANSID: 2ee95d7f48ac6a2-834e6 MIME-Version: 1.0 x-PcFlag: 8813ddbe-2f33-45fc-bbf5-4acab4a9127b_5_9370 X-Mailer: PC_RICHMAIL 2.7.6 Date: 16 Sep 2019 16:32:45 +0800 From: Timo_Liu To: ovs-dev Cc: Message-ID: 2019091616324527354544@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 v3] 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 v2->v3: reformat patch from git record Signed-off-by: Liu Chang 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 ||