net/mvpp2: support forwarding bad packets
Extend the config file with option to forward packets that were marked as "l2 bad pkts". By default the driver drop those packets Signed-off-by: Dana Vardi <danat@marvell.com> Reviewed-by: Liron Himi <lironh@marvell.com>
This commit is contained in:
parent
21aa25e033
commit
ef08031fc1
@ -217,6 +217,7 @@ Configuration syntax
|
||||
|
||||
[port <portnum> default]
|
||||
start_hdr = <start_hdr>
|
||||
forward_bad_frames = <forward_bad_frames>
|
||||
default_tc = <default_tc>
|
||||
mapping_priority = <mapping_priority>
|
||||
|
||||
@ -263,6 +264,8 @@ Where:
|
||||
|
||||
- ``<start_hdr>``: Indicate what is the start header mode (`none` (eth), `dsa`, `ext_dsa` or `custom`).
|
||||
|
||||
- ``<forward_bad_frames>``: Indicate whether to forward or drop l2 bad packets (0 or 1).
|
||||
|
||||
- ``<default_tc>``: Default traffic class (e.g. 0)
|
||||
|
||||
- ``<mapping_priority>``: QoS priority for mapping (`ip`, `vlan`, `ip/vlan` or `vlan/ip`).
|
||||
|
@ -813,9 +813,14 @@ mrvl_dev_start(struct rte_eth_dev *dev)
|
||||
priv->pp_id, priv->ppio_id);
|
||||
priv->ppio_params.match = match;
|
||||
priv->ppio_params.eth_start_hdr = PP2_PPIO_HDR_ETH;
|
||||
if (mrvl_cfg)
|
||||
priv->forward_bad_frames = 0;
|
||||
|
||||
if (mrvl_cfg) {
|
||||
priv->ppio_params.eth_start_hdr =
|
||||
mrvl_cfg->port[dev->data->port_id].eth_start_hdr;
|
||||
priv->forward_bad_frames =
|
||||
mrvl_cfg->port[dev->data->port_id].forward_bad_frames;
|
||||
}
|
||||
|
||||
/*
|
||||
* Calculate the minimum bpool size for refill feature as follows:
|
||||
@ -2622,7 +2627,8 @@ mrvl_rx_pkt_burst(void *rxq, struct rte_mbuf **rx_pkts, uint16_t nb_pkts)
|
||||
|
||||
/* drop packet in case of mac, overrun or resource error */
|
||||
status = pp2_ppio_inq_desc_get_l2_pkt_error(&descs[i]);
|
||||
if (unlikely(status != PP2_DESC_ERR_OK)) {
|
||||
if ((unlikely(status != PP2_DESC_ERR_OK)) &&
|
||||
!(q->priv->forward_bad_frames)) {
|
||||
struct pp2_buff_inf binf = {
|
||||
.addr = rte_mbuf_data_iova_default(mbuf),
|
||||
.cookie = (uint64_t)mbuf,
|
||||
|
@ -181,6 +181,8 @@ struct mrvl_priv {
|
||||
LIST_HEAD(shaper_profiles, mrvl_tm_shaper_profile) shaper_profiles;
|
||||
LIST_HEAD(nodes, mrvl_tm_node) nodes;
|
||||
uint64_t rate_max;
|
||||
|
||||
uint8_t forward_bad_frames;
|
||||
};
|
||||
|
||||
/** Flow operations forward declaration. */
|
||||
|
@ -76,6 +76,8 @@
|
||||
#define MRVL_TOK_PARSER_UDF_PROTO_UDP "udp"
|
||||
#define MRVL_TOK_PARSER_UDF_FIELD_UDP_DPORT "dport"
|
||||
|
||||
/* parser forward bad frames tokens */
|
||||
#define MRVL_TOK_FWD_BAD_FRAMES "forward_bad_frames"
|
||||
|
||||
/** Number of tokens in range a-b = 2. */
|
||||
#define MAX_RNG_TOKENS 2
|
||||
@ -872,6 +874,21 @@ mrvl_get_cfg(const char *key __rte_unused, const char *path, void *extra_args)
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
/* Parse forward bad frames option */
|
||||
entry = rte_cfgfile_get_entry(file, sec_name,
|
||||
MRVL_TOK_FWD_BAD_FRAMES);
|
||||
if (entry) {
|
||||
if (get_val_securely(entry, &val) < 0) {
|
||||
MRVL_LOG(ERR,
|
||||
"Error in parsing %s value (%s)!\n",
|
||||
MRVL_TOK_FWD_BAD_FRAMES, entry);
|
||||
return -1;
|
||||
}
|
||||
(*cfg)->port[n].forward_bad_frames = (uint8_t)val;
|
||||
} else {
|
||||
(*cfg)->port[n].forward_bad_frames = 0;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
@ -48,6 +48,7 @@ struct mrvl_cfg {
|
||||
uint8_t use_global_defaults;
|
||||
struct pp2_cls_plcr_params policer_params;
|
||||
uint8_t setup_policer;
|
||||
uint8_t forward_bad_frames;
|
||||
} port[RTE_MAX_ETHPORTS];
|
||||
};
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user