net/softnic: implement start and stop

Implements softnic start and stop function.

Signed-off-by: Cristian Dumitrescu <cristian.dumitrescu@intel.com>
Signed-off-by: Jasvinder Singh <jasvinder.singh@intel.com>
This commit is contained in:
Jasvinder Singh 2018-07-06 18:21:14 +01:00 committed by Cristian Dumitrescu
parent 41575f6d5a
commit bef50bcb1c
4 changed files with 73 additions and 10 deletions

View File

@ -153,6 +153,26 @@ pmd_tx_queue_setup(struct rte_eth_dev *dev,
static int
pmd_dev_start(struct rte_eth_dev *dev)
{
struct pmd_internals *p = dev->data->dev_private;
int status;
/* TM */
if (tm_used(dev)) {
status = tm_start(p);
if (status)
return status;
}
/* Firmware */
status = softnic_cli_script_process(p,
p->params.firmware,
conn_params_default.msg_in_len_max,
conn_params_default.msg_out_len_max);
if (status)
return status;
/* Link UP */
dev->data->dev_link.link_status = ETH_LINK_UP;
return 0;
@ -161,21 +181,30 @@ pmd_dev_start(struct rte_eth_dev *dev)
static void
pmd_dev_stop(struct rte_eth_dev *dev)
{
struct pmd_internals *p = dev->data->dev_private;
/* Link DOWN */
dev->data->dev_link.link_status = ETH_LINK_DOWN;
/* Firmware */
softnic_pipeline_disable_all(p);
softnic_pipeline_free(p);
softnic_table_action_profile_free(p);
softnic_port_in_action_profile_free(p);
softnic_tap_free(p);
softnic_tmgr_free(p);
softnic_link_free(p);
softnic_softnic_swq_free_keep_rxq_txq(p);
softnic_mempool_free(p);
/* TM */
tm_stop(p);
}
static void
pmd_dev_close(struct rte_eth_dev *dev)
pmd_dev_close(struct rte_eth_dev *dev __rte_unused)
{
uint32_t i;
/* RX queues */
for (i = 0; i < dev->data->nb_rx_queues; i++)
rte_ring_free((struct rte_ring *)dev->data->rx_queues[i]);
/* TX queues */
for (i = 0; i < dev->data->nb_tx_queues; i++)
rte_ring_free((struct rte_ring *)dev->data->tx_queues[i]);
return;
}
static int

View File

@ -530,6 +530,9 @@ softnic_swq_init(struct pmd_internals *p);
void
softnic_swq_free(struct pmd_internals *p);
void
softnic_softnic_swq_free_keep_rxq_txq(struct pmd_internals *p);
struct softnic_swq *
softnic_swq_find(struct pmd_internals *p,
const char *name);
@ -659,6 +662,9 @@ softnic_pipeline_init(struct pmd_internals *p);
void
softnic_pipeline_free(struct pmd_internals *p);
void
softnic_pipeline_disable_all(struct pmd_internals *p);
struct pipeline *
softnic_pipeline_find(struct pmd_internals *p, const char *name);

View File

@ -61,6 +61,18 @@ softnic_pipeline_free(struct pmd_internals *p)
}
}
void
softnic_pipeline_disable_all(struct pmd_internals *p)
{
struct pipeline *pipeline;
TAILQ_FOREACH(pipeline, &p->pipeline_list, node)
if (pipeline->enabled)
softnic_thread_pipeline_disable(p,
pipeline->thread_id,
pipeline->name);
}
struct pipeline *
softnic_pipeline_find(struct pmd_internals *p,
const char *name)

View File

@ -33,6 +33,22 @@ softnic_swq_free(struct pmd_internals *p)
}
}
void
softnic_softnic_swq_free_keep_rxq_txq(struct pmd_internals *p)
{
struct softnic_swq *swq;
TAILQ_FOREACH(swq, &p->swq_list, node) {
if ((strncmp(swq->name, "RXQ", strlen("RXQ")) == 0) ||
(strncmp(swq->name, "TXQ", strlen("TXQ")) == 0))
continue;
TAILQ_REMOVE(&p->swq_list, swq, node);
rte_ring_free(swq->r);
free(swq);
}
}
struct softnic_swq *
softnic_swq_find(struct pmd_internals *p,
const char *name)