From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by dpdk.org (Postfix) with ESMTP id C2C337CB6 for ; Mon, 2 Apr 2018 06:29:12 +0200 (CEST) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga007.fm.intel.com ([10.253.24.52]) by fmsmga105.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 01 Apr 2018 21:29:12 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.48,393,1517904000"; d="scan'208";a="28812574" Received: from dpdk27.sh.intel.com ([10.67.111.90]) by fmsmga007.fm.intel.com with ESMTP; 01 Apr 2018 21:29:10 -0700 From: Qi Zhang To: adrien.mazarguil@6wind.com Cc: dev@dpdk.org, declan.doherty@intel.com, sugesh.chandran@intel.com, michael.j.glynn@intel.com, yu.y.liu@intel.com, konstantin.ananyev@intel.com, bruce.richardson@intel.com, Qi Zhang Date: Sun, 1 Apr 2018 17:19:21 -0400 Message-Id: <1522617562-25940-4-git-send-email-qi.z.zhang@intel.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1522617562-25940-1-git-send-email-qi.z.zhang@intel.com> References: <1522279780-34842-1-git-send-email-qi.z.zhang@intel.com> <1522617562-25940-1-git-send-email-qi.z.zhang@intel.com> Subject: [dpdk-dev] [PATCH v2 3/4] ether: add more protocol support in flow API 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: , X-List-Received-Date: Mon, 02 Apr 2018 04:29:13 -0000 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 | 160 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 160 insertions(+) diff --git a/lib/librte_ether/rte_flow.h b/lib/librte_ether/rte_flow.h index 8f75db0..a8ec780 100644 --- a/lib/librte_ether/rte_flow.h +++ b/lib/librte_ether/rte_flow.h @@ -323,6 +323,49 @@ enum rte_flow_item_type { * See struct rte_flow_item_geneve. */ RTE_FLOW_ITEM_TYPE_GENEVE, + + /** + * 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 Target Link-Layer Address. + * + * See struct rte_flow_item_icmpv6_tll. + */ + RTE_FLOW_ITEM_TYPE_ICMPV6_TLL, + }; /** @@ -815,6 +858,123 @@ static const struct rte_flow_item_geneve rte_flow_item_geneve_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\xff\xff\xff\xff" + "\xff\xff\xff\xff\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 -- 2.7.4