From: Wei Zhao <wei.zhao1@intel.com>
To: dev@dpdk.org
Cc: qi.z.zhang@intel.com, nannan.lu@intel.com, qi.fu@intel.com,
yuan.peng@intel.com, Wei Zhao <wei.zhao1@intel.com>
Subject: [dpdk-dev] [PATCH v4 02/13] net/ice: support for more PPPoE input set
Date: Fri, 3 Apr 2020 12:45:58 +0800 [thread overview]
Message-ID: <20200403044609.27512-3-wei.zhao1@intel.com> (raw)
In-Reply-To: <20200403044609.27512-1-wei.zhao1@intel.com>
This patch add more support for PPPoE packet,
it enable swicth filter to direct PPPoE packet base on
session id and PPP protocol type.
Signed-off-by: Wei Zhao <wei.zhao1@intel.com>
---
drivers/net/ice/ice_generic_flow.c | 13 +++++
drivers/net/ice/ice_generic_flow.h | 9 ++++
drivers/net/ice/ice_switch_filter.c | 82 +++++++++++++++++++++++++++--
3 files changed, 99 insertions(+), 5 deletions(-)
diff --git a/drivers/net/ice/ice_generic_flow.c b/drivers/net/ice/ice_generic_flow.c
index c0420797e..0fdc7e617 100644
--- a/drivers/net/ice/ice_generic_flow.c
+++ b/drivers/net/ice/ice_generic_flow.c
@@ -1122,12 +1122,25 @@ enum rte_flow_item_type pattern_eth_pppoes[] = {
RTE_FLOW_ITEM_TYPE_PPPOES,
RTE_FLOW_ITEM_TYPE_END,
};
+enum rte_flow_item_type pattern_eth_pppoes_proto[] = {
+ RTE_FLOW_ITEM_TYPE_ETH,
+ RTE_FLOW_ITEM_TYPE_PPPOES,
+ RTE_FLOW_ITEM_TYPE_PPPOE_PROTO_ID,
+ RTE_FLOW_ITEM_TYPE_END,
+};
enum rte_flow_item_type pattern_eth_vlan_pppoes[] = {
RTE_FLOW_ITEM_TYPE_ETH,
RTE_FLOW_ITEM_TYPE_VLAN,
RTE_FLOW_ITEM_TYPE_PPPOES,
RTE_FLOW_ITEM_TYPE_END,
};
+enum rte_flow_item_type pattern_eth_vlan_pppoes_proto[] = {
+ RTE_FLOW_ITEM_TYPE_ETH,
+ RTE_FLOW_ITEM_TYPE_VLAN,
+ RTE_FLOW_ITEM_TYPE_PPPOES,
+ RTE_FLOW_ITEM_TYPE_PPPOE_PROTO_ID,
+ RTE_FLOW_ITEM_TYPE_END,
+};
enum rte_flow_item_type pattern_eth_qinq_pppoes[] = {
RTE_FLOW_ITEM_TYPE_ETH,
RTE_FLOW_ITEM_TYPE_VLAN,
diff --git a/drivers/net/ice/ice_generic_flow.h b/drivers/net/ice/ice_generic_flow.h
index ede6ec824..3361ecbd9 100644
--- a/drivers/net/ice/ice_generic_flow.h
+++ b/drivers/net/ice/ice_generic_flow.h
@@ -30,6 +30,7 @@
#define ICE_PROT_VXLAN (1ULL << 19)
#define ICE_PROT_NVGRE (1ULL << 20)
#define ICE_PROT_GTPU (1ULL << 21)
+#define ICE_PROT_PPPOE_S (1ULL << 22)
/* field */
@@ -49,6 +50,8 @@
#define ICE_NVGRE_TNI (1ULL << 50)
#define ICE_GTPU_TEID (1ULL << 49)
#define ICE_GTPU_QFI (1ULL << 48)
+#define ICE_PPPOE_SESSION (1ULL << 47)
+#define ICE_PPPOE_PROTO (1ULL << 46)
/* input set */
@@ -177,6 +180,10 @@
(ICE_PROT_GTPU | ICE_GTPU_TEID)
#define ICE_INSET_GTPU_QFI \
(ICE_PROT_GTPU | ICE_GTPU_QFI)
+#define ICE_INSET_PPPOE_SESSION \
+ (ICE_PROT_PPPOE_S | ICE_PPPOE_SESSION)
+#define ICE_INSET_PPPOE_PROTO \
+ (ICE_PROT_PPPOE_S | ICE_PPPOE_PROTO)
/* empty pattern */
extern enum rte_flow_item_type pattern_empty[];
@@ -349,7 +356,9 @@ extern enum rte_flow_item_type pattern_eth_pppoed[];
extern enum rte_flow_item_type pattern_eth_vlan_pppoed[];
extern enum rte_flow_item_type pattern_eth_qinq_pppoed[];
extern enum rte_flow_item_type pattern_eth_pppoes[];
+extern enum rte_flow_item_type pattern_eth_pppoes_proto[];
extern enum rte_flow_item_type pattern_eth_vlan_pppoes[];
+extern enum rte_flow_item_type pattern_eth_vlan_pppoes_proto[];
extern enum rte_flow_item_type pattern_eth_qinq_pppoes[];
extern enum rte_flow_item_type pattern_eth_pppoes_ipv4[];
extern enum rte_flow_item_type pattern_eth_vlan_pppoes_ipv4[];
diff --git a/drivers/net/ice/ice_switch_filter.c b/drivers/net/ice/ice_switch_filter.c
index 4db8f1471..add66e683 100644
--- a/drivers/net/ice/ice_switch_filter.c
+++ b/drivers/net/ice/ice_switch_filter.c
@@ -87,7 +87,11 @@
ICE_INSET_TUN_IPV4_TOS)
#define ICE_SW_INSET_MAC_PPPOE ( \
ICE_INSET_VLAN_OUTER | ICE_INSET_VLAN_INNER | \
- ICE_INSET_DMAC | ICE_INSET_ETHERTYPE)
+ ICE_INSET_DMAC | ICE_INSET_ETHERTYPE | ICE_INSET_PPPOE_SESSION)
+#define ICE_SW_INSET_MAC_PPPOE_PROTO ( \
+ ICE_INSET_VLAN_OUTER | ICE_INSET_VLAN_INNER | \
+ ICE_INSET_DMAC | ICE_INSET_ETHERTYPE | ICE_INSET_PPPOE_SESSION | \
+ ICE_INSET_PPPOE_PROTO)
struct sw_meta {
struct ice_adv_lkup_elem *list;
@@ -135,6 +139,10 @@ ice_pattern_match_item ice_switch_pattern_dist_comms[] = {
ICE_SW_INSET_MAC_PPPOE, ICE_INSET_NONE},
{pattern_eth_vlan_pppoes,
ICE_SW_INSET_MAC_PPPOE, ICE_INSET_NONE},
+ {pattern_eth_pppoes_proto,
+ ICE_SW_INSET_MAC_PPPOE_PROTO, ICE_INSET_NONE},
+ {pattern_eth_vlan_pppoes_proto,
+ ICE_SW_INSET_MAC_PPPOE_PROTO, ICE_INSET_NONE},
};
static struct
@@ -316,12 +324,15 @@ ice_switch_inset_get(const struct rte_flow_item pattern[],
const struct rte_flow_item_vxlan *vxlan_spec, *vxlan_mask;
const struct rte_flow_item_vlan *vlan_spec, *vlan_mask;
const struct rte_flow_item_pppoe *pppoe_spec, *pppoe_mask;
+ const struct rte_flow_item_pppoe_proto_id *pppoe_proto_spec,
+ *pppoe_proto_mask;
uint8_t ipv6_addr_mask[16] = {
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
uint64_t input_set = ICE_INSET_NONE;
uint16_t j, t = 0;
uint16_t tunnel_valid = 0;
+ uint16_t pppoe_valid = 0;
for (item = pattern; item->type !=
@@ -885,14 +896,75 @@ ice_switch_inset_get(const struct rte_flow_item pattern[],
pppoe_mask = item->mask;
/* Check if PPPoE item is used to describe protocol.
* If yes, both spec and mask should be NULL.
+ * If no, both spec and mask shouldn't be NULL.
*/
- if (pppoe_spec || pppoe_mask) {
+ if ((!pppoe_spec && pppoe_mask) ||
+ (pppoe_spec && !pppoe_mask)) {
rte_flow_error_set(error, EINVAL,
- RTE_FLOW_ERROR_TYPE_ITEM,
- item,
- "Invalid pppoe item");
+ RTE_FLOW_ERROR_TYPE_ITEM,
+ item,
+ "Invalid pppoe item");
return 0;
}
+ if (pppoe_spec && pppoe_mask) {
+ /* Check pppoe mask and update input set */
+ if (pppoe_mask->length ||
+ pppoe_mask->code ||
+ pppoe_mask->version_type) {
+ rte_flow_error_set(error, EINVAL,
+ RTE_FLOW_ERROR_TYPE_ITEM,
+ item,
+ "Invalid pppoe mask");
+ return 0;
+ }
+ list[t].type = ICE_PPPOE;
+ if (pppoe_mask->session_id == UINT16_MAX) {
+ list[t].h_u.pppoe_hdr.session_id =
+ pppoe_spec->session_id;
+ list[t].m_u.pppoe_hdr.session_id =
+ UINT16_MAX;
+ input_set |= ICE_INSET_PPPOE_SESSION;
+ }
+ t++;
+ pppoe_valid = 1;
+ } else if (!pppoe_spec && !pppoe_mask) {
+ list[t].type = ICE_PPPOE;
+ }
+
+ break;
+
+ case RTE_FLOW_ITEM_TYPE_PPPOE_PROTO_ID:
+ pppoe_proto_spec = item->spec;
+ pppoe_proto_mask = item->mask;
+ /* Check if PPPoE optional proto_id item
+ * is used to describe protocol.
+ * If yes, both spec and mask should be NULL.
+ * If no, both spec and mask shouldn't be NULL.
+ */
+ if ((!pppoe_proto_spec && pppoe_proto_mask) ||
+ (pppoe_proto_spec && !pppoe_proto_mask)) {
+ rte_flow_error_set(error, EINVAL,
+ RTE_FLOW_ERROR_TYPE_ITEM,
+ item,
+ "Invalid pppoe proto item");
+ return 0;
+ }
+ if (pppoe_proto_spec && pppoe_proto_mask) {
+ if (pppoe_valid)
+ t--;
+ list[t].type = ICE_PPPOE;
+ if (pppoe_proto_mask->proto_id == UINT16_MAX) {
+ list[t].h_u.pppoe_hdr.ppp_prot_id =
+ pppoe_proto_spec->proto_id;
+ list[t].m_u.pppoe_hdr.ppp_prot_id =
+ UINT16_MAX;
+ input_set |= ICE_INSET_PPPOE_PROTO;
+ }
+ t++;
+ } else if (!pppoe_proto_spec && !pppoe_proto_mask) {
+ list[t].type = ICE_PPPOE;
+ }
+
break;
case RTE_FLOW_ITEM_TYPE_VOID:
--
2.19.1
next prev parent reply other threads:[~2020-04-03 5:07 UTC|newest]
Thread overview: 68+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-03-13 2:07 [dpdk-dev] [PATCH 0/7] add switch filter support for intel DCF Wei Zhao
2020-03-13 2:08 ` [dpdk-dev] [PATCH 1/7] net/ice: enable switch flow on DCF Wei Zhao
2020-03-13 2:08 ` [dpdk-dev] [PATCH 2/7] net/ice: support for more PPPoE input set Wei Zhao
2020-03-13 2:08 ` [dpdk-dev] [PATCH 3/7] net/ice: change swicth parser to support flexible mask Wei Zhao
2020-03-13 2:08 ` [dpdk-dev] [PATCH 4/7] net/ice: add support for MAC VLAN rule Wei Zhao
2020-03-13 2:08 ` [dpdk-dev] [PATCH 5/7] net/ice: change default tunnle type Wei Zhao
2020-03-13 2:08 ` [dpdk-dev] [PATCH 6/7] net/ice: add action number check for swicth Wei Zhao
2020-03-13 2:08 ` [dpdk-dev] [PATCH 7/7] net/ice: fix input set of VLAN item Wei Zhao
2020-04-02 6:46 ` [dpdk-dev] [PATCH v2 00/13]add switch filter support for intel DCF Wei Zhao
2020-04-02 6:46 ` [dpdk-dev] [PATCH v2 01/13] net/ice: enable switch flow on DCF Wei Zhao
2020-04-02 6:46 ` [dpdk-dev] [PATCH v2 02/13] net/ice: support for more PPPoE input set Wei Zhao
2020-04-02 9:31 ` Lu, Nannan
2020-04-02 6:46 ` [dpdk-dev] [PATCH v2 03/13] net/ice: change swicth parser to support flexible mask Wei Zhao
2020-04-02 6:46 ` [dpdk-dev] [PATCH v2 04/13] net/ice: add support for MAC VLAN rule Wei Zhao
2020-04-02 9:21 ` Lu, Nannan
2020-04-02 6:46 ` [dpdk-dev] [PATCH v2 05/13] net/ice: change default tunnle type Wei Zhao
2020-04-02 6:46 ` [dpdk-dev] [PATCH v2 06/13] net/ice: add action number check for swicth Wei Zhao
2020-04-02 8:29 ` Zhang, Qi Z
2020-04-02 8:31 ` Zhao1, Wei
2020-04-03 1:49 ` Lu, Nannan
2020-04-02 6:46 ` [dpdk-dev] [PATCH v2 07/13] net/ice: add support for ESP/AH/L2TP Wei Zhao
2020-04-02 6:46 ` [dpdk-dev] [PATCH v2 08/13] net/ice: add support for PFCP Wei Zhao
2020-04-02 6:46 ` [dpdk-dev] [PATCH v2 09/13] net/ice: add support for NAT-T Wei Zhao
2020-04-02 8:45 ` Zhang, Qi Z
2020-04-02 23:37 ` Zhao1, Wei
2020-04-02 6:46 ` [dpdk-dev] [PATCH v2 10/13] net/ice: add more flow support for permit mode Wei Zhao
2020-04-02 8:45 ` Zhang, Qi Z
2020-04-02 9:41 ` Zhao1, Wei
2020-04-02 6:46 ` [dpdk-dev] [PATCH v2 11/13] net/ice: fix input set of VLAN item Wei Zhao
2020-04-02 6:46 ` [dpdk-dev] [PATCH v2 12/13] net/ice: enable flow redirect on switch Wei Zhao
2020-04-02 7:34 ` Wang, Haiyue
2020-04-02 7:38 ` Xing, Beilei
2020-04-02 6:46 ` [dpdk-dev] [PATCH v2 13/13] net/ice: redirect switch rule to new VSI Wei Zhao
2020-04-02 7:32 ` Wang, Haiyue
2020-04-03 2:43 ` [dpdk-dev] [PATCH v3 00/13] add switch filter support for intel DCF Wei Zhao
2020-04-03 2:43 ` [dpdk-dev] [PATCH v3 01/13] net/ice: enable switch flow on DCF Wei Zhao
2020-04-03 2:43 ` [dpdk-dev] [PATCH v3 02/13] net/ice: support for more PPPoE input set Wei Zhao
2020-04-03 2:43 ` [dpdk-dev] [PATCH v3 03/13] net/ice: change swicth parser to support flexible mask Wei Zhao
2020-04-03 2:43 ` [dpdk-dev] [PATCH v3 04/13] net/ice: add support for MAC VLAN rule Wei Zhao
2020-04-03 2:43 ` [dpdk-dev] [PATCH v3 05/13] net/ice: change default tunnle type Wei Zhao
2020-04-03 2:43 ` [dpdk-dev] [PATCH v3 06/13] net/ice: add action number check for swicth Wei Zhao
2020-04-03 3:15 ` Zhang, Qi Z
2020-04-03 2:43 ` [dpdk-dev] [PATCH v3 07/13] net/ice: add support for ESP/AH/L2TP Wei Zhao
2020-04-03 2:43 ` [dpdk-dev] [PATCH v3 08/13] net/ice: add support for PFCP Wei Zhao
2020-04-03 3:16 ` Zhang, Qi Z
2020-04-03 3:18 ` Zhao1, Wei
2020-04-03 2:43 ` [dpdk-dev] [PATCH v3 09/13] net/ice: add support for IPv6 NAT-T Wei Zhao
2020-04-03 2:43 ` [dpdk-dev] [PATCH v3 10/13] net/ice: add more flow support for permit stage Wei Zhao
2020-04-03 3:20 ` Zhang, Qi Z
2020-04-03 2:43 ` [dpdk-dev] [PATCH v3 11/13] net/ice: fix input set of VLAN item Wei Zhao
2020-04-03 2:43 ` [dpdk-dev] [PATCH v3 12/13] net/ice: enable flow redirect on switch Wei Zhao
2020-04-03 2:43 ` [dpdk-dev] [PATCH v3 13/13] net/ice: redirect switch rule to new VSI Wei Zhao
2020-04-03 4:45 ` [dpdk-dev] [PATCH v4 00/13] add switch filter support for intel DCF Wei Zhao
2020-04-03 4:45 ` [dpdk-dev] [PATCH v4 01/13] net/ice: enable switch flow on DCF Wei Zhao
2020-04-03 4:45 ` Wei Zhao [this message]
2020-04-03 4:45 ` [dpdk-dev] [PATCH v4 03/13] net/ice: change swicth parser to support flexible mask Wei Zhao
2020-04-03 4:46 ` [dpdk-dev] [PATCH v4 04/13] net/ice: add support for MAC VLAN rule Wei Zhao
2020-04-03 4:46 ` [dpdk-dev] [PATCH v4 05/13] net/ice: change default tunnle type Wei Zhao
2020-04-03 4:46 ` [dpdk-dev] [PATCH v4 06/13] net/ice: add action number check for swicth Wei Zhao
2020-04-03 4:46 ` [dpdk-dev] [PATCH v4 07/13] net/ice: add support for ESP/AH/L2TP Wei Zhao
2020-04-03 4:46 ` [dpdk-dev] [PATCH v4 08/13] net/ice: add support for PFCP Wei Zhao
2020-04-03 4:46 ` [dpdk-dev] [PATCH v4 09/13] net/ice: add support for IPv6 NAT-T Wei Zhao
2020-04-03 4:46 ` [dpdk-dev] [PATCH v4 10/13] net/ice: add more flow support for permission stage Wei Zhao
2020-04-03 4:46 ` [dpdk-dev] [PATCH v4 11/13] net/ice: fix input set of VLAN item Wei Zhao
2020-04-03 4:46 ` [dpdk-dev] [PATCH v4 12/13] net/ice: enable flow redirect on switch Wei Zhao
2020-04-03 4:46 ` [dpdk-dev] [PATCH v4 13/13] net/ice: redirect switch rule to new VSI Wei Zhao
2020-04-03 5:09 ` [dpdk-dev] [PATCH v4 00/13] add switch filter support for intel DCF Zhang, Qi Z
2020-04-04 6:17 ` Ye Xiaolong
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200403044609.27512-3-wei.zhao1@intel.com \
--to=wei.zhao1@intel.com \
--cc=dev@dpdk.org \
--cc=nannan.lu@intel.com \
--cc=qi.fu@intel.com \
--cc=qi.z.zhang@intel.com \
--cc=yuan.peng@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).