ethdev: move flexible filter type to e1000 driver
net/e1000 driver is the only user of the struct rte_eth_flex_filter and helper defines. Move it to the driver and use igb_ prefix instead of rte_eth_. Signed-off-by: Andrew Rybchenko <arybchenko@solarflare.com> Acked-by: Haiyue Wang <haiyue.wang@intel.com> Reviewed-by: Ferruh Yigit <ferruh.yigit@intel.com>
This commit is contained in:
parent
2be70bcdb8
commit
8d1a709b6f
@ -331,10 +331,28 @@ struct igb_eth_syn_filter_ele {
|
||||
struct rte_eth_syn_filter filter_info;
|
||||
};
|
||||
|
||||
#define IGB_FLEX_FILTER_MAXLEN 128 /**< bytes to use in flex filter. */
|
||||
#define IGB_FLEX_FILTER_MASK_SIZE \
|
||||
(RTE_ALIGN(IGB_FLEX_FILTER_MAXLEN, CHAR_BIT) / CHAR_BIT)
|
||||
/**< mask bytes in flex filter. */
|
||||
|
||||
/**
|
||||
* A structure used to define the flex filter entry
|
||||
* to support RTE_ETH_FILTER_FLEXIBLE data representation.
|
||||
*/
|
||||
struct igb_flex_filter {
|
||||
uint16_t len;
|
||||
uint8_t bytes[IGB_FLEX_FILTER_MAXLEN]; /**< flex bytes in big endian. */
|
||||
uint8_t mask[IGB_FLEX_FILTER_MASK_SIZE];
|
||||
/**< if mask bit is 1b, do not compare corresponding byte. */
|
||||
uint8_t priority;
|
||||
uint16_t queue; /**< Queue assigned to when match. */
|
||||
};
|
||||
|
||||
/* flex filter list structure */
|
||||
struct igb_flex_filter_ele {
|
||||
TAILQ_ENTRY(igb_flex_filter_ele) entries;
|
||||
struct rte_eth_flex_filter filter_info;
|
||||
struct igb_flex_filter filter_info;
|
||||
};
|
||||
|
||||
/* rss filter list structure */
|
||||
@ -515,7 +533,7 @@ int eth_igb_syn_filter_set(struct rte_eth_dev *dev,
|
||||
struct rte_eth_syn_filter *filter,
|
||||
bool add);
|
||||
int eth_igb_add_del_flex_filter(struct rte_eth_dev *dev,
|
||||
struct rte_eth_flex_filter *filter,
|
||||
struct igb_flex_filter *filter,
|
||||
bool add);
|
||||
int igb_rss_conf_init(struct rte_eth_dev *dev,
|
||||
struct igb_rte_flow_rss_conf *out,
|
||||
|
@ -4050,7 +4050,7 @@ igb_remove_flex_filter(struct rte_eth_dev *dev,
|
||||
|
||||
int
|
||||
eth_igb_add_del_flex_filter(struct rte_eth_dev *dev,
|
||||
struct rte_eth_flex_filter *filter,
|
||||
struct igb_flex_filter *filter,
|
||||
bool add)
|
||||
{
|
||||
struct e1000_filter_info *filter_info =
|
||||
|
@ -1041,7 +1041,7 @@ static int
|
||||
cons_parse_flex_filter(const struct rte_flow_attr *attr,
|
||||
const struct rte_flow_item pattern[],
|
||||
const struct rte_flow_action actions[],
|
||||
struct rte_eth_flex_filter *filter,
|
||||
struct igb_flex_filter *filter,
|
||||
struct rte_flow_error *error)
|
||||
{
|
||||
const struct rte_flow_item *item;
|
||||
@ -1102,7 +1102,7 @@ cons_parse_flex_filter(const struct rte_flow_attr *attr,
|
||||
|
||||
if (!raw_mask->length ||
|
||||
!raw_mask->relative) {
|
||||
memset(filter, 0, sizeof(struct rte_eth_flex_filter));
|
||||
memset(filter, 0, sizeof(struct igb_flex_filter));
|
||||
rte_flow_error_set(error, EINVAL,
|
||||
RTE_FLOW_ERROR_TYPE_ITEM,
|
||||
item, "Not supported by flex filter");
|
||||
@ -1116,7 +1116,7 @@ cons_parse_flex_filter(const struct rte_flow_attr *attr,
|
||||
|
||||
for (j = 0; j < raw_spec->length; j++) {
|
||||
if (raw_mask->pattern[j] != 0xFF) {
|
||||
memset(filter, 0, sizeof(struct rte_eth_flex_filter));
|
||||
memset(filter, 0, sizeof(struct igb_flex_filter));
|
||||
rte_flow_error_set(error, EINVAL,
|
||||
RTE_FLOW_ERROR_TYPE_ITEM,
|
||||
item, "Not supported by flex filter");
|
||||
@ -1140,8 +1140,8 @@ cons_parse_flex_filter(const struct rte_flow_attr *attr,
|
||||
}
|
||||
|
||||
if ((raw_spec->length + offset + total_offset) >
|
||||
RTE_FLEX_FILTER_MAXLEN) {
|
||||
memset(filter, 0, sizeof(struct rte_eth_flex_filter));
|
||||
IGB_FLEX_FILTER_MAXLEN) {
|
||||
memset(filter, 0, sizeof(struct igb_flex_filter));
|
||||
rte_flow_error_set(error, EINVAL,
|
||||
RTE_FLOW_ERROR_TYPE_ITEM,
|
||||
item, "Not supported by flex filter");
|
||||
@ -1204,7 +1204,7 @@ cons_parse_flex_filter(const struct rte_flow_attr *attr,
|
||||
/* check if the first not void action is QUEUE. */
|
||||
NEXT_ITEM_OF_ACTION(act, actions, index);
|
||||
if (act->type != RTE_FLOW_ACTION_TYPE_QUEUE) {
|
||||
memset(filter, 0, sizeof(struct rte_eth_flex_filter));
|
||||
memset(filter, 0, sizeof(struct igb_flex_filter));
|
||||
rte_flow_error_set(error, EINVAL,
|
||||
RTE_FLOW_ERROR_TYPE_ACTION,
|
||||
act, "Not supported action.");
|
||||
@ -1218,7 +1218,7 @@ cons_parse_flex_filter(const struct rte_flow_attr *attr,
|
||||
index++;
|
||||
NEXT_ITEM_OF_ACTION(act, actions, index);
|
||||
if (act->type != RTE_FLOW_ACTION_TYPE_END) {
|
||||
memset(filter, 0, sizeof(struct rte_eth_flex_filter));
|
||||
memset(filter, 0, sizeof(struct igb_flex_filter));
|
||||
rte_flow_error_set(error, EINVAL,
|
||||
RTE_FLOW_ERROR_TYPE_ACTION,
|
||||
act, "Not supported action.");
|
||||
@ -1228,7 +1228,7 @@ cons_parse_flex_filter(const struct rte_flow_attr *attr,
|
||||
/* parse attr */
|
||||
/* must be input direction */
|
||||
if (!attr->ingress) {
|
||||
memset(filter, 0, sizeof(struct rte_eth_flex_filter));
|
||||
memset(filter, 0, sizeof(struct igb_flex_filter));
|
||||
rte_flow_error_set(error, EINVAL,
|
||||
RTE_FLOW_ERROR_TYPE_ATTR_INGRESS,
|
||||
attr, "Only support ingress.");
|
||||
@ -1237,7 +1237,7 @@ cons_parse_flex_filter(const struct rte_flow_attr *attr,
|
||||
|
||||
/* not supported */
|
||||
if (attr->egress) {
|
||||
memset(filter, 0, sizeof(struct rte_eth_flex_filter));
|
||||
memset(filter, 0, sizeof(struct igb_flex_filter));
|
||||
rte_flow_error_set(error, EINVAL,
|
||||
RTE_FLOW_ERROR_TYPE_ATTR_EGRESS,
|
||||
attr, "Not support egress.");
|
||||
@ -1246,7 +1246,7 @@ cons_parse_flex_filter(const struct rte_flow_attr *attr,
|
||||
|
||||
/* not supported */
|
||||
if (attr->transfer) {
|
||||
memset(filter, 0, sizeof(struct rte_eth_flex_filter));
|
||||
memset(filter, 0, sizeof(struct igb_flex_filter));
|
||||
rte_flow_error_set(error, EINVAL,
|
||||
RTE_FLOW_ERROR_TYPE_ATTR_TRANSFER,
|
||||
attr, "No support for transfer.");
|
||||
@ -1254,7 +1254,7 @@ cons_parse_flex_filter(const struct rte_flow_attr *attr,
|
||||
}
|
||||
|
||||
if (attr->priority > 0xFFFF) {
|
||||
memset(filter, 0, sizeof(struct rte_eth_flex_filter));
|
||||
memset(filter, 0, sizeof(struct igb_flex_filter));
|
||||
rte_flow_error_set(error, EINVAL,
|
||||
RTE_FLOW_ERROR_TYPE_ATTR_PRIORITY,
|
||||
attr, "Error priority.");
|
||||
@ -1271,7 +1271,7 @@ igb_parse_flex_filter(struct rte_eth_dev *dev,
|
||||
const struct rte_flow_attr *attr,
|
||||
const struct rte_flow_item pattern[],
|
||||
const struct rte_flow_action actions[],
|
||||
struct rte_eth_flex_filter *filter,
|
||||
struct igb_flex_filter *filter,
|
||||
struct rte_flow_error *error)
|
||||
{
|
||||
struct e1000_hw *hw = E1000_DEV_PRIVATE_TO_HW(dev->data->dev_private);
|
||||
@ -1283,7 +1283,7 @@ igb_parse_flex_filter(struct rte_eth_dev *dev,
|
||||
actions, filter, error);
|
||||
|
||||
if (filter->queue >= IGB_MAX_RX_QUEUE_NUM) {
|
||||
memset(filter, 0, sizeof(struct rte_eth_flex_filter));
|
||||
memset(filter, 0, sizeof(struct igb_flex_filter));
|
||||
rte_flow_error_set(error, EINVAL,
|
||||
RTE_FLOW_ERROR_TYPE_ITEM,
|
||||
NULL, "queue number not supported by flex filter");
|
||||
@ -1444,7 +1444,7 @@ igb_flow_create(struct rte_eth_dev *dev,
|
||||
struct rte_eth_ntuple_filter ntuple_filter;
|
||||
struct rte_eth_ethertype_filter ethertype_filter;
|
||||
struct rte_eth_syn_filter syn_filter;
|
||||
struct rte_eth_flex_filter flex_filter;
|
||||
struct igb_flex_filter flex_filter;
|
||||
struct igb_rte_flow_rss_conf rss_conf;
|
||||
struct rte_flow *flow = NULL;
|
||||
struct igb_ntuple_filter_ele *ntuple_filter_ptr;
|
||||
@ -1549,7 +1549,7 @@ igb_flow_create(struct rte_eth_dev *dev,
|
||||
goto out;
|
||||
}
|
||||
|
||||
memset(&flex_filter, 0, sizeof(struct rte_eth_flex_filter));
|
||||
memset(&flex_filter, 0, sizeof(struct igb_flex_filter));
|
||||
ret = igb_parse_flex_filter(dev, attr, pattern,
|
||||
actions, &flex_filter, error);
|
||||
if (!ret) {
|
||||
@ -1564,7 +1564,7 @@ igb_flow_create(struct rte_eth_dev *dev,
|
||||
|
||||
rte_memcpy(&flex_filter_ptr->filter_info,
|
||||
&flex_filter,
|
||||
sizeof(struct rte_eth_flex_filter));
|
||||
sizeof(struct igb_flex_filter));
|
||||
TAILQ_INSERT_TAIL(&igb_filter_flex_list,
|
||||
flex_filter_ptr, entries);
|
||||
flow->rule = flex_filter_ptr;
|
||||
@ -1621,7 +1621,7 @@ igb_flow_validate(__rte_unused struct rte_eth_dev *dev,
|
||||
struct rte_eth_ntuple_filter ntuple_filter;
|
||||
struct rte_eth_ethertype_filter ethertype_filter;
|
||||
struct rte_eth_syn_filter syn_filter;
|
||||
struct rte_eth_flex_filter flex_filter;
|
||||
struct igb_flex_filter flex_filter;
|
||||
struct igb_rte_flow_rss_conf rss_conf;
|
||||
int ret;
|
||||
|
||||
@ -1643,7 +1643,7 @@ igb_flow_validate(__rte_unused struct rte_eth_dev *dev,
|
||||
if (!ret)
|
||||
return 0;
|
||||
|
||||
memset(&flex_filter, 0, sizeof(struct rte_eth_flex_filter));
|
||||
memset(&flex_filter, 0, sizeof(struct igb_flex_filter));
|
||||
ret = igb_parse_flex_filter(dev, attr, pattern,
|
||||
actions, &flex_filter, error);
|
||||
if (!ret)
|
||||
|
@ -56,25 +56,6 @@ enum rte_filter_op {
|
||||
RTE_ETH_FILTER_OP_MAX
|
||||
};
|
||||
|
||||
#define RTE_FLEX_FILTER_MAXLEN 128 /**< bytes to use in flex filter. */
|
||||
#define RTE_FLEX_FILTER_MASK_SIZE \
|
||||
(RTE_ALIGN(RTE_FLEX_FILTER_MAXLEN, CHAR_BIT) / CHAR_BIT)
|
||||
/**< mask bytes in flex filter. */
|
||||
|
||||
/**
|
||||
* A structure used to define the flex filter entry
|
||||
* to support RTE_ETH_FILTER_FLEXIBLE with RTE_ETH_FILTER_ADD,
|
||||
* RTE_ETH_FILTER_DELETE and RTE_ETH_FILTER_GET operations.
|
||||
*/
|
||||
struct rte_eth_flex_filter {
|
||||
uint16_t len;
|
||||
uint8_t bytes[RTE_FLEX_FILTER_MAXLEN]; /**< flex bytes in big endian.*/
|
||||
uint8_t mask[RTE_FLEX_FILTER_MASK_SIZE]; /**< if mask bit is 1b, do
|
||||
not compare corresponding byte. */
|
||||
uint8_t priority;
|
||||
uint16_t queue; /**< Queue assigned to when match. */
|
||||
};
|
||||
|
||||
/**
|
||||
* A structure used to define the TCP syn filter entry
|
||||
* to support RTE_ETH_FILTER_SYN with RTE_ETH_FILTER_ADD,
|
||||
|
Loading…
Reference in New Issue
Block a user