From patchwork Thu Dec 21 02:35:18 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qi Zhang X-Patchwork-Id: 32553 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 38A311B265; Thu, 21 Dec 2017 10:45:07 +0100 (CET) Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by dpdk.org (Postfix) with ESMTP id 0FAD41B245 for ; Thu, 21 Dec 2017 10:44:59 +0100 (CET) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga006.fm.intel.com ([10.253.24.20]) by orsmga103.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 21 Dec 2017 01:44:59 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.45,435,1508828400"; d="scan'208";a="188920504" Received: from dpdk27.sh.intel.com ([10.67.111.90]) by fmsmga006.fm.intel.com with ESMTP; 21 Dec 2017 01:44:58 -0800 From: Qi Zhang To: adrien.mazarguil@6wind.com Cc: dev@dpdk.org, declan.doherty@intel.com, Qi Zhang Date: Wed, 20 Dec 2017 21:35:18 -0500 Message-Id: <1513823719-36066-5-git-send-email-qi.z.zhang@intel.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1513823719-36066-1-git-send-email-qi.z.zhang@intel.com> References: <1513823719-36066-1-git-send-email-qi.z.zhang@intel.com> Subject: [dpdk-dev] [RFC v2 4/5] ether: add more protocol support in rte_flow X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Add new protocol header match support as below RTE_FLOW_ITEM_TYPE_ARP - match IPv4 ARP header. RTE_FLOW_ITEM_TYPE_EXT_HDR_ANY - match any IPv6 extension header. RTE_FLOW_ITEM_TYPE_ICMPV6 - match IPv6 ICMP header. RTE_FLOW_ITEM_TYPE_ICMPV6_TGT_ADDR - match IPv6 ICMP Target address RTE_FLOW_ITEM_TYPE_ICMPV6_SSL - match IPv6 ICMP Source Link-layer address RTE_FLOW_ITEM_TYPE_ICMPV6_TTL - match IPv6 ICMP Target Link-layer address Signed-off-by: Qi Zhang --- lib/librte_ether/rte_flow.h | 156 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 156 insertions(+) diff --git a/lib/librte_ether/rte_flow.h b/lib/librte_ether/rte_flow.h index e09e07f..4ee2b62 100644 --- a/lib/librte_ether/rte_flow.h +++ b/lib/librte_ether/rte_flow.h @@ -348,6 +348,49 @@ enum rte_flow_item_type { * See struct rte_flow_item_esp. */ RTE_FLOW_ITEM_TYPE_ESP, + + /** + * Matches ARP IPv4 header. + * + * See struct rte_flow_item_arp. + */ + RTE_FLOW_ITEM_TYPE_ARP, + + /** + * Matches any IPv6 Extension header. + * + * See struct rte_flow_item_ipv6_ext_any. + */ + RTE_FLOW_ITEM_TYPE_IPV6_EXT_HDR_ANY, + + /** + * Matches ICMPv6 header. + * + * See struct rte_flow_item_icmpv6 + */ + RTE_FLOW_ITEM_TYPE_ICMPV6, + + /** + * Match ICMPv6 target address. + * + * See struct rte_flow_item_icmpv6_tgt_addr. + */ + RTE_FLOW_ITEM_TYPE_ICMPV6_TGT_ADDR, + + /** + * Match ICMPv6 Source Link-Layer Address. + * + * See struct rte_flow_item_icmpv6_sll. + */ + RTE_FLOW_ITEM_TYPE_ICMPV6_SLL, + + /** + * Match ICMPv6 Source Link-Layer Address. + * + * See struct rte_flow_item_icmpv6_tll. + */ + RTE_FLOW_ITEM_TYPE_ICMPV6_TLL, + }; /** @@ -817,6 +860,119 @@ static const struct rte_flow_item_esp rte_flow_item_esp_mask = { #endif /** + * RTE_FLOW_ITEM_TYPE_ARP + * + * Matches IPv4 ARP packet header + */ +struct rte_flow_item_arp { + struct arp_hdr hdr; +}; + +/** Default mask for RTE_FLOW_ITEM_TYPE_ARP. */ +#ifndef __cplusplus +static const struct rte_flow_item_arp rte_flow_item_arp_mask = { + .hdr = { + .arp_data = { + .arp_sha = { + .addr_bytes = "\xff\xff\xff\xff\xff\xff", + }, + .arp_sip = RTE_BE32(0xffffffff), + .arp_tha = { + .addr_bytes = "\xff\xff\xff\xff\xff\xff", + }, + .arp_tip = RTE_BE32(0xffffffff), + }, + }, +}; +#endif + +/** + * RTE_FLOW_ITEM_TYPE_IPV6_EXT_HDR_ANY + * + * Matches any IPv6 extension header. + */ +struct rte_flow_item_ipv6_ext_hdr_any { + uint8_t next_hdr; +}; + +/** Default mask for RTE_FLOW_ITEM_TYPE_IPV6_EXT_HDR_ANY. */ +#ifndef __cplusplus +static const struct rte_flow_item_ipv6_ext_hdr_any rte_flow_item_ipv6_ext_any_mask = { + .next_hdr = 0xff, +}; +#endif + +/** + * RTE_FLOW_ITEM_TYPE_ICMPV6 + * + * Matches ICMPv6 header. + */ +struct rte_flow_item_icmpv6 { + uint8_t type; + uint8_t code; + uint16_t checksum; +}; + +/** Default mask for RTE_FLOW_ITEM_TYPE_ICMPV6 */ +#ifndef __cplusplus +static const struct rte_flow_item_icmpv6 rte_flow_item_icmpv6_mask = { + .type = 0xff, + .code = 0xff, + .checksum = RTE_BE16(0xffff), +}; +#endif + +/** + * RTE_FLOW_ITEM_TYPE_ICMPV6_TGT_ADDR + * + * Matches ICMPv6's Target Address. + */ +struct rte_flow_item_icmpv6_tgt_addr { + uint8_t addr[16]; +}; + +/** Default mask for RTE_FLOW_ITEM_TYPE_ICMPV6_TGT_ADDR */ +#ifndef __cplusplus +static const struct rte_flow_item_icmpv6_tgt_addr rte_flow_item_icmpv6_tgt_addr_mask = { + .addr = "\xff\xff\xff\xff", +}; +#endif + +/** + * RTE_FLOW_ITEM_TYPE_ICPMV6_SLL. + * + * Matches ICMPv6 Source Link-Layer address. + */ +struct rte_flow_item_icmpv6_sll { + struct ether_addr addr; +}; +/** Default mask for RTE_FLOW_ITEM_TYPE_ICMPV6_SLL */ +#ifndef __cplusplus +static const struct rte_flow_item_icmpv6_sll rte_flow_item_icmpv6_sll_mask = { + .addr = { + .addr_bytes = "\xff\xff\xff\xff\xff\xff", + } +}; +#endif + +/** + * RTE_FLOW_ITEM_TYPE_ICMPV6_TLL. + * + * Matches ICMPv6 Target Link-Layer address. + */ +struct rte_flow_item_icmpv6_tll { + struct ether_addr addr; +}; +/** Default mask for RTE_FLOW_ITEM_TYPE_ICMPV6_TLL */ +#ifndef __cplusplus +static const struct rte_flow_item_icmpv6_tll rte_flow_item_icmpv6_tll_mask = { + .addr = { + .addr_bytes = "\xff\xff\xff\xff\xff\xff", + } +}; +#endif + +/** * Matching pattern item definition. * * A pattern is formed by stacking items starting from the lowest protocol