git.droids-corp.org
/
dpdk.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
net/sfc: add verify method to flow validate path
[dpdk.git]
/
drivers
/
net
/
sfc
/
sfc_flow.h
diff --git
a/drivers/net/sfc/sfc_flow.h
b/drivers/net/sfc/sfc_flow.h
index
0a87924
..
164e9f9
100644
(file)
--- a/
drivers/net/sfc/sfc_flow.h
+++ b/
drivers/net/sfc/sfc_flow.h
@@
-1,7
+1,7
@@
/* SPDX-License-Identifier: BSD-3-Clause
*
/* SPDX-License-Identifier: BSD-3-Clause
*
- * Copyright
(c) 2017-2018 Solarflare Communications
Inc.
- *
All rights reserved
.
+ * Copyright
(c) 2019-2020 Xilinx,
Inc.
+ *
Copyright(c) 2017-2019 Solarflare Communications Inc
.
*
* This software was jointly developed between OKTET Labs (under contract
* for Solarflare) and Solarflare Communications, Inc.
*
* This software was jointly developed between OKTET Labs (under contract
* for Solarflare) and Solarflare Communications, Inc.
@@
-38,6
+38,7
@@
struct sfc_flow_rss {
/* Flow engines supported by the implementation */
enum sfc_flow_spec_type {
SFC_FLOW_SPEC_FILTER = 0,
/* Flow engines supported by the implementation */
enum sfc_flow_spec_type {
SFC_FLOW_SPEC_FILTER = 0,
+ SFC_FLOW_SPEC_MAE,
SFC_FLOW_SPEC_NTYPES
};
SFC_FLOW_SPEC_NTYPES
};
@@
-52,10
+53,20
@@
struct sfc_flow_spec_filter {
unsigned int count;
/* RSS toggle */
boolean_t rss;
unsigned int count;
/* RSS toggle */
boolean_t rss;
+ /* RSS hash toggle */
+ boolean_t rss_hash_required;
/* RSS configuration */
struct sfc_flow_rss rss_conf;
};
/* RSS configuration */
struct sfc_flow_rss rss_conf;
};
+/* MAE-specific flow specification */
+struct sfc_flow_spec_mae {
+ /* Desired priority level */
+ unsigned int priority;
+ /* EFX match specification */
+ efx_mae_match_spec_t *match_spec;
+};
+
/* Flow specification */
struct sfc_flow_spec {
/* Flow specification type (engine-based) */
/* Flow specification */
struct sfc_flow_spec {
/* Flow specification type (engine-based) */
@@
-65,6
+76,8
@@
struct sfc_flow_spec {
union {
/* Filter-based (VNIC level flows) specification */
struct sfc_flow_spec_filter filter;
union {
/* Filter-based (VNIC level flows) specification */
struct sfc_flow_spec_filter filter;
+ /* MAE-based (lower-level HW switch flows) specification */
+ struct sfc_flow_spec_mae mae;
};
};
};
};
@@
-89,6
+102,7
@@
enum sfc_flow_item_layers {
/* Flow parse context types */
enum sfc_flow_parse_ctx_type {
SFC_FLOW_PARSE_CTX_FILTER = 0,
/* Flow parse context types */
enum sfc_flow_parse_ctx_type {
SFC_FLOW_PARSE_CTX_FILTER = 0,
+ SFC_FLOW_PARSE_CTX_MAE,
SFC_FLOW_PARSE_CTX_NTYPES
};
SFC_FLOW_PARSE_CTX_NTYPES
};
@@
-101,6
+115,8
@@
struct sfc_flow_parse_ctx {
union {
/* Context pointer valid for filter-based (VNIC) flows */
efx_filter_spec_t *filter;
union {
/* Context pointer valid for filter-based (VNIC) flows */
efx_filter_spec_t *filter;
+ /* Context pointer valid for MAE-based flows */
+ struct sfc_mae_parse_ctx *mae;
};
};
};
};
@@
-143,6
+159,12
@@
typedef int (sfc_flow_parse_cb_t)(struct rte_eth_dev *dev,
struct rte_flow *flow,
struct rte_flow_error *error);
struct rte_flow *flow,
struct rte_flow_error *error);
+typedef int (sfc_flow_verify_cb_t)(struct sfc_adapter *sa,
+ struct rte_flow *flow);
+
+typedef void (sfc_flow_cleanup_cb_t)(struct sfc_adapter *sa,
+ struct rte_flow *flow);
+
typedef int (sfc_flow_insert_cb_t)(struct sfc_adapter *sa,
struct rte_flow *flow);
typedef int (sfc_flow_insert_cb_t)(struct sfc_adapter *sa,
struct rte_flow *flow);