net/cnxk: get flow operations
This patch adds flow ops get operation to enable rte_flow_ops.A This patch also add support for flow dev dump API. Every flow rule added will be dumped in the below format. MCAM Index:1881 Interface :NIX-RX (0) Priority :1 NPC RX Action:0X00000000404001 ActionOp:NIX_RX_ACTIONOP_UCAST (1) PF_FUNC: 0X400 RQ Index:0X004 Match Id:0000 Flow Key Alg:0 NPC RX VTAG Action:0X00000000008100 VTAG0:relptr:0 lid:0X1 type:0 Patterns: NPC_PARSE_NIBBLE_CHAN:000 NPC_PARSE_NIBBLE_LA_LTYPE:LA_ETHER NPC_PARSE_NIBBLE_LB_LTYPE:NONE NPC_PARSE_NIBBLE_LC_LTYPE:LC_IP NPC_PARSE_NIBBLE_LD_LTYPE:LD_TCP NPC_PARSE_NIBBLE_LE_LTYPE:NONE LA_ETHER, hdr offset:0, len:0X6, key offset:0X8,\ Data:0X4AE124FC7FFF, Mask:0XFFFFFFFFFFFF LA_ETHER, hdr offset:0XC, len:0X2, key offset:0X4, Data:0XCA5A,\ Mask:0XFFFF LC_IP, hdr offset:0XC, len:0X8, key offset:0X10,\ Data:0X0A01010300000000, Mask:0XFFFFFFFF00000000 LD_TCP, hdr offset:0, len:0X4, key offset:0X18, Data:0X03450000,\ Mask:0XFFFF0000 MCAM Raw Data : DW0 :0000CA5A01202000 DW0_Mask:0000FFFF0FF0F000 DW1 :00004AE124FC7FFF DW1_Mask:0000FFFFFFFFFFFF DW2 :0A01010300000000 DW2_Mask:FFFFFFFF00000000 DW3 :0000000003450000 DW3_Mask:00000000FFFF0000 DW4 :0000000000000000 DW4_Mask:0000000000000000 DW5 :0000000000000000 DW5_Mask:0000000000000000 DW6 :0000000000000000 DW6_Mask:0000000000000000 Signed-off-by: Satheesh Paul <psatheesh@marvell.com> Reviewed-by: Kiran Kumar K <kirankumark@marvell.com>
This commit is contained in:
parent
8c009b4505
commit
d43a7bee1a
@ -1009,6 +1009,8 @@ roc_npc_flow_create(struct roc_npc *roc_npc, const struct roc_npc_attr *attr,
|
||||
struct npc_flow_list *list;
|
||||
int rc;
|
||||
|
||||
npc->channel = roc_npc->channel;
|
||||
|
||||
flow = plt_zmalloc(sizeof(*flow), 0);
|
||||
if (flow == NULL) {
|
||||
*errcode = NPC_ERR_NO_MEM;
|
||||
|
@ -819,6 +819,8 @@ cnxk_nix_configure(struct rte_eth_dev *eth_dev)
|
||||
goto fail_configure;
|
||||
}
|
||||
|
||||
dev->npc.channel = roc_nix_get_base_chan(nix);
|
||||
|
||||
nb_rxq = data->nb_rx_queues;
|
||||
nb_txq = data->nb_tx_queues;
|
||||
rc = -ENOMEM;
|
||||
@ -1223,6 +1225,7 @@ struct eth_dev_ops cnxk_eth_dev_ops = {
|
||||
.rxq_info_get = cnxk_nix_rxq_info_get,
|
||||
.txq_info_get = cnxk_nix_txq_info_get,
|
||||
.tx_done_cleanup = cnxk_nix_tx_done_cleanup,
|
||||
.flow_ops_get = cnxk_nix_flow_ops_get,
|
||||
};
|
||||
|
||||
static int
|
||||
|
@ -273,7 +273,8 @@ int cnxk_nix_rx_queue_intr_disable(struct rte_eth_dev *eth_dev,
|
||||
uint16_t rx_queue_id);
|
||||
int cnxk_nix_pool_ops_supported(struct rte_eth_dev *eth_dev, const char *pool);
|
||||
int cnxk_nix_tx_done_cleanup(void *txq, uint32_t free_cnt);
|
||||
|
||||
int cnxk_nix_flow_ops_get(struct rte_eth_dev *eth_dev,
|
||||
const struct rte_flow_ops **ops);
|
||||
int cnxk_nix_configure(struct rte_eth_dev *eth_dev);
|
||||
int cnxk_nix_tx_queue_setup(struct rte_eth_dev *eth_dev, uint16_t qid,
|
||||
uint16_t nb_desc, uint16_t fp_tx_q_sz,
|
||||
|
@ -299,6 +299,16 @@ cnxk_nix_flow_ctrl_set(struct rte_eth_dev *eth_dev,
|
||||
return rc;
|
||||
}
|
||||
|
||||
int
|
||||
cnxk_nix_flow_ops_get(struct rte_eth_dev *eth_dev,
|
||||
const struct rte_flow_ops **ops)
|
||||
{
|
||||
RTE_SET_USED(eth_dev);
|
||||
|
||||
*ops = &cnxk_flow_ops;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
cnxk_nix_mac_addr_set(struct rte_eth_dev *eth_dev, struct rte_ether_addr *addr)
|
||||
{
|
||||
|
@ -322,9 +322,37 @@ cnxk_flow_isolate(struct rte_eth_dev *eth_dev __rte_unused,
|
||||
return -rte_errno;
|
||||
}
|
||||
|
||||
static int
|
||||
cnxk_flow_dev_dump(struct rte_eth_dev *eth_dev, struct rte_flow *flow,
|
||||
FILE *file, struct rte_flow_error *error)
|
||||
{
|
||||
struct cnxk_eth_dev *dev = cnxk_eth_pmd_priv(eth_dev);
|
||||
struct roc_npc *npc = &dev->npc;
|
||||
|
||||
if (file == NULL) {
|
||||
rte_flow_error_set(error, EINVAL,
|
||||
RTE_FLOW_ERROR_TYPE_UNSPECIFIED, NULL,
|
||||
"Invalid file");
|
||||
return -rte_errno;
|
||||
}
|
||||
|
||||
if (flow != NULL) {
|
||||
rte_flow_error_set(error, EINVAL,
|
||||
RTE_FLOW_ERROR_TYPE_HANDLE,
|
||||
NULL,
|
||||
"Invalid argument");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
roc_npc_flow_dump(file, npc);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
struct rte_flow_ops cnxk_flow_ops = {
|
||||
.validate = cnxk_flow_validate,
|
||||
.flush = cnxk_flow_flush,
|
||||
.query = cnxk_flow_query,
|
||||
.isolate = cnxk_flow_isolate,
|
||||
.dev_dump = cnxk_flow_dev_dump,
|
||||
};
|
||||
|
Loading…
x
Reference in New Issue
Block a user