X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=examples%2Fdistributor%2Fmain.c;h=62831a05c7a73fcf7008ef7dc6aaf8abae0c3211;hb=8728ccf37615904cf23fb8763895b05c9a3c6b0c;hp=87603d03910c7cb1468becf3d89da9ac8850145f;hpb=60efb44f73c9a5f3f19cc78ba2d6eaf398ab51dc;p=dpdk.git diff --git a/examples/distributor/main.c b/examples/distributor/main.c index 87603d0391..62831a05c7 100644 --- a/examples/distributor/main.c +++ b/examples/distributor/main.c @@ -1,33 +1,5 @@ -/*- - * BSD LICENSE - * - * Copyright(c) 2010-2017 Intel Corporation. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Intel Corporation nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright(c) 2010-2017 Intel Corporation */ #include @@ -45,8 +17,8 @@ #include #include -#define RX_RING_SIZE 512 -#define TX_RING_SIZE 512 +#define RX_RING_SIZE 1024 +#define TX_RING_SIZE 1024 #define NUM_MBUFS ((64*1024)-1) #define MBUF_CACHE_SIZE 128 #define BURST_SIZE 64 @@ -108,6 +80,7 @@ static const struct rte_eth_conf port_conf_default = { .rxmode = { .mq_mode = ETH_MQ_RX_RSS, .max_rx_pkt_len = ETHER_MAX_LEN, + .ignore_offload_bitfield = 1, }, .txmode = { .mq_mode = ETH_MQ_TX_NONE, @@ -132,7 +105,7 @@ static void print_stats(void); * coming from the mbuf_pool passed as parameter */ static inline int -port_init(uint8_t port, struct rte_mempool *mbuf_pool) +port_init(uint16_t port, struct rte_mempool *mbuf_pool) { struct rte_eth_conf port_conf = port_conf_default; const uint16_t rxRings = 1, txRings = rte_lcore_count() - 1; @@ -140,10 +113,17 @@ port_init(uint8_t port, struct rte_mempool *mbuf_pool) uint16_t q; uint16_t nb_rxd = RX_RING_SIZE; uint16_t nb_txd = TX_RING_SIZE; + struct rte_eth_dev_info dev_info; + struct rte_eth_txconf txconf; if (port >= rte_eth_dev_count()) return -1; + rte_eth_dev_info_get(port, &dev_info); + if (dev_info.tx_offload_capa & DEV_TX_OFFLOAD_MBUF_FAST_FREE) + port_conf.txmode.offloads |= + DEV_TX_OFFLOAD_MBUF_FAST_FREE; + retval = rte_eth_dev_configure(port, rxRings, txRings, &port_conf); if (retval != 0) return retval; @@ -160,10 +140,13 @@ port_init(uint8_t port, struct rte_mempool *mbuf_pool) return retval; } + txconf = dev_info.default_txconf; + txconf.txq_flags = ETH_TXQ_FLAGS_IGNORE; + txconf.offloads = port_conf.txmode.offloads; for (q = 0; q < txRings; q++) { retval = rte_eth_tx_queue_setup(port, q, nb_txd, rte_eth_dev_socket_id(port), - NULL); + &txconf); if (retval < 0) return retval; } @@ -175,13 +158,13 @@ port_init(uint8_t port, struct rte_mempool *mbuf_pool) struct rte_eth_link link; rte_eth_link_get_nowait(port, &link); while (!link.link_status) { - printf("Waiting for Link up on port %"PRIu8"\n", port); + printf("Waiting for Link up on port %"PRIu16"\n", port); sleep(1); rte_eth_link_get_nowait(port, &link); } if (!link.link_status) { - printf("Link down on port %"PRIu8"\n", port); + printf("Link down on port %"PRIu16"\n", port); return 0; } @@ -189,7 +172,7 @@ port_init(uint8_t port, struct rte_mempool *mbuf_pool) rte_eth_macaddr_get(port, &addr); printf("Port %u MAC: %02"PRIx8" %02"PRIx8" %02"PRIx8 " %02"PRIx8" %02"PRIx8" %02"PRIx8"\n", - (unsigned)port, + port, addr.addr_bytes[0], addr.addr_bytes[1], addr.addr_bytes[2], addr.addr_bytes[3], addr.addr_bytes[4], addr.addr_bytes[5]); @@ -210,12 +193,12 @@ struct lcore_params { static int lcore_rx(struct lcore_params *p) { - const uint8_t nb_ports = rte_eth_dev_count(); + const uint16_t nb_ports = rte_eth_dev_count(); const int socket_id = rte_socket_id(); - uint8_t port; + uint16_t port; struct rte_mbuf *bufs[BURST_SIZE*2]; - for (port = 0; port < nb_ports; port++) { + RTE_ETH_FOREACH_DEV(port) { /* skip ports that are not enabled */ if ((enabled_port_mask & (1 << port)) == 0) continue; @@ -312,11 +295,11 @@ flush_one_port(struct output_buffer *outbuf, uint8_t outp) } static inline void -flush_all_ports(struct output_buffer *tx_buffers, uint8_t nb_ports) +flush_all_ports(struct output_buffer *tx_buffers) { - uint8_t outp; + uint16_t outp; - for (outp = 0; outp < nb_ports; outp++) { + RTE_ETH_FOREACH_DEV(outp) { /* skip ports that are not enabled */ if ((enabled_port_mask & (1 << outp)) == 0) continue; @@ -384,11 +367,10 @@ static int lcore_tx(struct rte_ring *in_r) { static struct output_buffer tx_buffers[RTE_MAX_ETHPORTS]; - const uint8_t nb_ports = rte_eth_dev_count(); const int socket_id = rte_socket_id(); - uint8_t port; + uint16_t port; - for (port = 0; port < nb_ports; port++) { + RTE_ETH_FOREACH_DEV(port) { /* skip ports that are not enabled */ if ((enabled_port_mask & (1 << port)) == 0) continue; @@ -403,7 +385,7 @@ lcore_tx(struct rte_ring *in_r) printf("\nCore %u doing packet TX.\n", rte_lcore_id()); while (!quit_signal) { - for (port = 0; port < nb_ports; port++) { + RTE_ETH_FOREACH_DEV(port) { /* skip ports that are not enabled */ if ((enabled_port_mask & (1 << port)) == 0) continue; @@ -415,7 +397,7 @@ lcore_tx(struct rte_ring *in_r) /* if we get no traffic, flush anything we have */ if (unlikely(nb_rx == 0)) { - flush_all_ports(tx_buffers, nb_ports); + flush_all_ports(tx_buffers); continue; } @@ -463,14 +445,14 @@ print_stats(void) unsigned int i, j; const unsigned int num_workers = rte_lcore_count() - 4; - for (i = 0; i < rte_eth_dev_count(); i++) { + RTE_ETH_FOREACH_DEV(i) { rte_eth_stats_get(i, ð_stats); app_stats.port_rx_pkts[i] = eth_stats.ipackets; app_stats.port_tx_pkts[i] = eth_stats.opackets; } printf("\n\nRX Thread:\n"); - for (i = 0; i < rte_eth_dev_count(); i++) { + RTE_ETH_FOREACH_DEV(i) { printf("Port %u Pktsin : %5.2f\n", i, (app_stats.port_rx_pkts[i] - prev_app_stats.port_rx_pkts[i])/1000000.0); @@ -509,7 +491,7 @@ print_stats(void) printf(" - Dequeued: %5.2f\n", (app_stats.tx.dequeue_pkts - prev_app_stats.tx.dequeue_pkts)/1000000.0); - for (i = 0; i < rte_eth_dev_count(); i++) { + RTE_ETH_FOREACH_DEV(i) { printf("Port %u Pktsout: %5.2f\n", i, (app_stats.port_tx_pkts[i] - prev_app_stats.port_tx_pkts[i])/1000000.0); @@ -668,8 +650,8 @@ main(int argc, char *argv[]) struct rte_ring *rx_dist_ring; unsigned lcore_id, worker_id = 0; unsigned nb_ports; - uint8_t portid; - uint8_t nb_ports_available; + uint16_t portid; + uint16_t nb_ports_available; uint64_t t, freq; /* catch ctrl-c so we can print on exit */ @@ -711,7 +693,7 @@ main(int argc, char *argv[]) nb_ports_available = nb_ports; /* initialize all ports */ - for (portid = 0; portid < nb_ports; portid++) { + RTE_ETH_FOREACH_DEV(portid) { /* skip ports that are not enabled */ if ((enabled_port_mask & (1 << portid)) == 0) { printf("\nSkipping disabled port %d\n", portid); @@ -719,10 +701,10 @@ main(int argc, char *argv[]) continue; } /* init port */ - printf("Initializing port %u... done\n", (unsigned) portid); + printf("Initializing port %u... done\n", portid); if (port_init(portid, mbuf_pool) != 0) - rte_exit(EXIT_FAILURE, "Cannot initialize port %"PRIu8"\n", + rte_exit(EXIT_FAILURE, "Cannot initialize port %u\n", portid); }