examples: take promiscuous mode switch result into account
[dpdk.git] / examples / load_balancer / init.c
index 6aa079c..4d49c95 100644 (file)
@@ -45,8 +45,7 @@ static struct rte_eth_conf port_conf = {
        .rxmode = {
                .mq_mode        = ETH_MQ_RX_RSS,
                .split_hdr_size = 0,
-               .offloads = (DEV_RX_OFFLOAD_CHECKSUM |
-                            DEV_RX_OFFLOAD_CRC_STRIP),
+               .offloads = DEV_RX_OFFLOAD_CHECKSUM,
        },
        .rx_adv_conf = {
                .rss_conf = {
@@ -412,10 +411,27 @@ app_init_nics(void)
 
                /* Init port */
                printf("Initializing NIC port %u ...\n", port);
-               rte_eth_dev_info_get(port, &dev_info);
+
+               ret = rte_eth_dev_info_get(port, &dev_info);
+               if (ret != 0)
+                       rte_panic("Error during getting device (port %u) info: %s\n",
+                               port, strerror(-ret));
+
                if (dev_info.tx_offload_capa & DEV_TX_OFFLOAD_MBUF_FAST_FREE)
                        local_port_conf.txmode.offloads |=
                                DEV_TX_OFFLOAD_MBUF_FAST_FREE;
+
+               local_port_conf.rx_adv_conf.rss_conf.rss_hf &=
+                       dev_info.flow_type_rss_offloads;
+               if (local_port_conf.rx_adv_conf.rss_conf.rss_hf !=
+                               port_conf.rx_adv_conf.rss_conf.rss_hf) {
+                       printf("Port %u modified RSS hash function based on hardware support,"
+                               "requested:%#"PRIx64" configured:%#"PRIx64"\n",
+                               port,
+                               port_conf.rx_adv_conf.rss_conf.rss_hf,
+                               local_port_conf.rx_adv_conf.rss_conf.rss_hf);
+               }
+
                ret = rte_eth_dev_configure(
                        port,
                        (uint8_t) n_rx_queues,
@@ -424,7 +440,11 @@ app_init_nics(void)
                if (ret < 0) {
                        rte_panic("Cannot init NIC port %u (%d)\n", port, ret);
                }
-               rte_eth_promiscuous_enable(port);
+
+               ret = rte_eth_promiscuous_enable(port);
+               if (ret != 0)
+                       rte_panic("Cannot enable promiscuous mode on port %u (%s)\n",
+                               port, rte_strerror(-ret));
 
                nic_rx_ring_size = app.nic_rx_ring_size;
                nic_tx_ring_size = app.nic_tx_ring_size;