mirror of https://github.com/F-Stack/f-stack.git
commit
b7d857a29d
|
@ -162,7 +162,7 @@ static struct lcore_conf lcore_conf;
|
||||||
|
|
||||||
static struct rte_mempool *pktmbuf_pool[NB_SOCKETS];
|
static struct rte_mempool *pktmbuf_pool[NB_SOCKETS];
|
||||||
|
|
||||||
static struct rte_ring **arp_ring[RTE_MAX_LCORE];
|
static struct rte_ring **arp_ring[RTE_MAX_ETHPORTS];
|
||||||
|
|
||||||
static uint16_t rss_reta_size[RTE_MAX_ETHPORTS];
|
static uint16_t rss_reta_size[RTE_MAX_ETHPORTS];
|
||||||
|
|
||||||
|
@ -420,43 +420,40 @@ create_ring(const char *name, unsigned count, int socket_id, unsigned flags)
|
||||||
static int
|
static int
|
||||||
init_arp_ring(void)
|
init_arp_ring(void)
|
||||||
{
|
{
|
||||||
int i, j, ret;
|
int j;
|
||||||
char name_buf[RTE_RING_NAMESIZE];
|
char name_buf[RTE_RING_NAMESIZE];
|
||||||
int nb_procs = ff_global_cfg.dpdk.nb_procs;
|
int queueid;
|
||||||
int proc_id = ff_global_cfg.dpdk.proc_id;
|
|
||||||
|
|
||||||
/* Allocate arp ring ptr according to eth dev count. */
|
|
||||||
int nb_dev_ports = rte_eth_dev_count();
|
|
||||||
for(i = 0; i < nb_procs; ++i) {
|
|
||||||
snprintf(name_buf, RTE_RING_NAMESIZE, "ring_ptr_%d_%d",
|
|
||||||
proc_id, i);
|
|
||||||
|
|
||||||
arp_ring[i] = rte_zmalloc(name_buf,
|
|
||||||
sizeof(struct rte_ring *) * nb_dev_ports,
|
|
||||||
RTE_CACHE_LINE_SIZE);
|
|
||||||
if (arp_ring[i] == NULL) {
|
|
||||||
rte_exit(EXIT_FAILURE, "rte_zmalloc(%s (struct rte_ring*)) "
|
|
||||||
"failed\n", name_buf);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
unsigned socketid = lcore_conf.socket_id;
|
unsigned socketid = lcore_conf.socket_id;
|
||||||
|
|
||||||
/* Create ring according to ports actually being used. */
|
/* Create ring according to ports actually being used. */
|
||||||
int nb_ports = ff_global_cfg.dpdk.nb_ports;
|
int nb_ports = ff_global_cfg.dpdk.nb_ports;
|
||||||
for (j = 0; j < nb_ports; j++) {
|
for (j = 0; j < nb_ports; j++) {
|
||||||
uint16_t port_id = ff_global_cfg.dpdk.portid_list[j];
|
uint16_t portid = ff_global_cfg.dpdk.portid_list[j];
|
||||||
|
struct ff_port_cfg *pconf = &ff_global_cfg.dpdk.port_cfgs[portid];
|
||||||
|
int nb_queues = pconf->nb_lcores;
|
||||||
|
if (arp_ring[portid] == NULL) {
|
||||||
|
snprintf(name_buf, RTE_RING_NAMESIZE, "ring_ptr_p%d", portid);
|
||||||
|
|
||||||
for(i = 0; i < nb_procs; ++i) {
|
arp_ring[portid] = rte_zmalloc(name_buf,
|
||||||
snprintf(name_buf, RTE_RING_NAMESIZE, "arp_ring_%d_%d", i, port_id);
|
sizeof(struct rte_ring *) * nb_queues,
|
||||||
arp_ring[i][port_id] = create_ring(name_buf, ARP_RING_SIZE,
|
RTE_CACHE_LINE_SIZE);
|
||||||
|
if (arp_ring[portid] == NULL) {
|
||||||
|
rte_exit(EXIT_FAILURE, "rte_zmalloc(%s (struct rte_ring*)) "
|
||||||
|
"failed\n", name_buf);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for(queueid = 0; queueid < nb_queues; ++queueid) {
|
||||||
|
snprintf(name_buf, RTE_RING_NAMESIZE, "arp_ring_p%d_q%d", portid, queueid);
|
||||||
|
arp_ring[portid][queueid] = create_ring(name_buf, ARP_RING_SIZE,
|
||||||
socketid, RING_F_SC_DEQ);
|
socketid, RING_F_SC_DEQ);
|
||||||
|
|
||||||
if (arp_ring[i][port_id] == NULL)
|
if (arp_ring[portid][queueid] == NULL)
|
||||||
rte_panic("create ring:%s failed!\n", name_buf);
|
rte_panic("create ring:%s failed!\n", name_buf);
|
||||||
|
|
||||||
printf("create ring:%s success, %u ring entries are now free!\n",
|
printf("create ring:%s success, %u ring entries are now free!\n",
|
||||||
name_buf, rte_ring_free_count(arp_ring[i][port_id]));
|
name_buf, rte_ring_free_count(arp_ring[portid][queueid]));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -931,7 +928,7 @@ process_packets(uint8_t port_id, uint16_t queue_id, struct rte_mbuf **bufs,
|
||||||
mbuf_pool = pktmbuf_pool[socket_id];
|
mbuf_pool = pktmbuf_pool[socket_id];
|
||||||
mbuf_clone = rte_pktmbuf_clone(rtem, mbuf_pool);
|
mbuf_clone = rte_pktmbuf_clone(rtem, mbuf_pool);
|
||||||
if(mbuf_clone) {
|
if(mbuf_clone) {
|
||||||
int ret = rte_ring_enqueue(arp_ring[i][port_id], mbuf_clone);
|
int ret = rte_ring_enqueue(arp_ring[port_id][i], mbuf_clone);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
rte_pktmbuf_free(mbuf_clone);
|
rte_pktmbuf_free(mbuf_clone);
|
||||||
}
|
}
|
||||||
|
@ -962,7 +959,7 @@ process_arp_ring(uint8_t port_id, uint16_t queue_id,
|
||||||
{
|
{
|
||||||
/* read packet from ring buf and to process */
|
/* read packet from ring buf and to process */
|
||||||
uint16_t nb_rb;
|
uint16_t nb_rb;
|
||||||
nb_rb = rte_ring_dequeue_burst(arp_ring[queue_id][port_id],
|
nb_rb = rte_ring_dequeue_burst(arp_ring[port_id][queue_id],
|
||||||
(void **)pkts_burst, MAX_PKT_BURST);
|
(void **)pkts_burst, MAX_PKT_BURST);
|
||||||
|
|
||||||
if(nb_rb > 0) {
|
if(nb_rb > 0) {
|
||||||
|
|
Loading…
Reference in New Issue