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/ice: support L4 for QinQ switch filter
[dpdk.git]
/
drivers
/
net
/
enic
/
enic_fm_flow.c
diff --git
a/drivers/net/enic/enic_fm_flow.c
b/drivers/net/enic/enic_fm_flow.c
index
96ec360
..
cd364ee
100644
(file)
--- a/
drivers/net/enic/enic_fm_flow.c
+++ b/
drivers/net/enic/enic_fm_flow.c
@@
-5,7
+5,7
@@
#include <errno.h>
#include <stdint.h>
#include <rte_log.h>
#include <errno.h>
#include <stdint.h>
#include <rte_log.h>
-#include <
rte_
ethdev_driver.h>
+#include <ethdev_driver.h>
#include <rte_flow_driver.h>
#include <rte_ether.h>
#include <rte_hash.h>
#include <rte_flow_driver.h>
#include <rte_ether.h>
#include <rte_hash.h>
@@
-368,8
+368,8
@@
enic_fm_copy_item_eth(struct copy_item_args *arg)
fm_mask = &entry->ftm_mask.fk_hdrset[lvl];
fm_data->fk_header_select |= FKH_ETHER;
fm_mask->fk_header_select |= FKH_ETHER;
fm_mask = &entry->ftm_mask.fk_hdrset[lvl];
fm_data->fk_header_select |= FKH_ETHER;
fm_mask->fk_header_select |= FKH_ETHER;
- memcpy(&fm_data->l2.eth, spec, sizeof(
*spec
));
- memcpy(&fm_mask->l2.eth, mask, sizeof(
*mask
));
+ memcpy(&fm_data->l2.eth, spec, sizeof(
struct rte_ether_hdr
));
+ memcpy(&fm_mask->l2.eth, mask, sizeof(
struct rte_ether_hdr
));
return 0;
}
return 0;
}
@@
-479,8
+479,8
@@
enic_fm_copy_item_ipv6(struct copy_item_args *arg)
fm_data->fk_header_select |= FKH_IPV6;
fm_mask->fk_header_select |= FKH_IPV6;
fm_data->fk_header_select |= FKH_IPV6;
fm_mask->fk_header_select |= FKH_IPV6;
- memcpy(&fm_data->l3.ip6, spec, sizeof(
*spec
));
- memcpy(&fm_mask->l3.ip6, mask, sizeof(
*mask
));
+ memcpy(&fm_data->l3.ip6, spec, sizeof(
struct rte_ipv6_hdr
));
+ memcpy(&fm_mask->l3.ip6, mask, sizeof(
struct rte_ipv6_hdr
));
return 0;
}
return 0;
}
@@
-1047,7
+1047,7
@@
enic_fm_copy_vxlan_encap(struct enic_flowman *fm,
eth = (struct rte_ether_hdr *)template;
ethertype = ð->ether_type;
append_template(&template, &off, item->spec,
eth = (struct rte_ether_hdr *)template;
ethertype = ð->ether_type;
append_template(&template, &off, item->spec,
- sizeof(struct rte_
flow_item_eth
));
+ sizeof(struct rte_
ether_hdr
));
item++;
flow_item_skip_void(&item);
/* Optional VLAN */
item++;
flow_item_skip_void(&item);
/* Optional VLAN */
@@
-1314,6
+1314,8
@@
enic_fm_copy_action(struct enic_flowman *fm,
const struct rte_flow_action_mark *mark =
actions->conf;
const struct rte_flow_action_mark *mark =
actions->conf;
+ if (enic->use_noscatter_vec_rx_handler)
+ goto unsupported;
if (mark->id >= ENIC_MAGIC_FILTER_ID - 1)
return rte_flow_error_set(error, EINVAL,
RTE_FLOW_ERROR_TYPE_ACTION,
if (mark->id >= ENIC_MAGIC_FILTER_ID - 1)
return rte_flow_error_set(error, EINVAL,
RTE_FLOW_ERROR_TYPE_ACTION,
@@
-1327,6
+1329,8
@@
enic_fm_copy_action(struct enic_flowman *fm,
break;
}
case RTE_FLOW_ACTION_TYPE_FLAG: {
break;
}
case RTE_FLOW_ACTION_TYPE_FLAG: {
+ if (enic->use_noscatter_vec_rx_handler)
+ goto unsupported;
/* ENIC_MAGIC_FILTER_ID is reserved for flagging */
memset(&fm_op, 0, sizeof(fm_op));
fm_op.fa_op = FMOP_MARK;
/* ENIC_MAGIC_FILTER_ID is reserved for flagging */
memset(&fm_op, 0, sizeof(fm_op));
fm_op.fa_op = FMOP_MARK;
@@
-2232,7
+2236,11
@@
enic_action_handle_get(struct enic_flowman *fm, struct fm_action *action_in,
error_with_action_handle:
args[0] = FM_ACTION_FREE;
args[1] = ah->handle;
error_with_action_handle:
args[0] = FM_ACTION_FREE;
args[1] = ah->handle;
- flowman_cmd(fm, args, 2);
+ ret = flowman_cmd(fm, args, 2);
+ if (ret != 0)
+ rte_flow_error_set(error, -ret,
+ RTE_FLOW_ERROR_TYPE_UNSPECIFIED,
+ NULL, "enic: devcmd(action-free)");
error_with_ah:
free(ah);
return ret;
error_with_ah:
free(ah);
return ret;
@@
-2882,7
+2890,7
@@
enic_fm_init(struct enic *enic)
rc = enic_fm_init_actions(fm);
if (rc) {
ENICPMD_LOG(ERR, "cannot create action hash, error:%d", rc);
rc = enic_fm_init_actions(fm);
if (rc) {
ENICPMD_LOG(ERR, "cannot create action hash, error:%d", rc);
- goto error_
table
s;
+ goto error_
counter
s;
}
/*
* One default exact match table for each direction. We hold onto
}
/*
* One default exact match table for each direction. We hold onto
@@
-2891,7
+2899,7
@@
enic_fm_init(struct enic *enic)
rc = enic_fet_alloc(fm, 1, NULL, 128, &fm->default_ig_fet);
if (rc) {
ENICPMD_LOG(ERR, "cannot alloc default IG exact match table");
rc = enic_fet_alloc(fm, 1, NULL, 128, &fm->default_ig_fet);
if (rc) {
ENICPMD_LOG(ERR, "cannot alloc default IG exact match table");
- goto error_
counter
s;
+ goto error_
action
s;
}
fm->default_ig_fet->ref = 1;
rc = enic_fet_alloc(fm, 0, NULL, 128, &fm->default_eg_fet);
}
fm->default_ig_fet->ref = 1;
rc = enic_fet_alloc(fm, 0, NULL, 128, &fm->default_eg_fet);
@@
-2906,6
+2914,8
@@
enic_fm_init(struct enic *enic)
error_ig_fet:
enic_fet_free(fm, fm->default_ig_fet);
error_ig_fet:
enic_fet_free(fm, fm->default_ig_fet);
+error_actions:
+ rte_hash_free(fm->action_hash);
error_counters:
enic_fm_free_all_counters(fm);
error_tables:
error_counters:
enic_fm_free_all_counters(fm);
error_tables: