Clean up port initialization 11/66711/1
authorXavier Simonart <xavier.simonart@intel.com>
Wed, 23 Jan 2019 12:49:58 +0000 (13:49 +0100)
committerXavier Simonart <xavier.simonart@intel.com>
Wed, 23 Jan 2019 12:49:58 +0000 (13:49 +0100)
Change-Id: Ia9df816d522e5db460d9129109525d5d345d997f
Signed-off-by: Xavier Simonart <xavier.simonart@intel.com>
VNFs/DPPD-PROX/prox_port_cfg.c

index 5c5ca58..ede481b 100644 (file)
@@ -309,71 +309,8 @@ uint8_t init_rte_ring_dev(void)
        return nb_ring_dev;
 }
 
-static void init_port(struct prox_port_cfg *port_cfg)
+static void print_port_capa(struct prox_port_cfg *port_cfg)
 {
-       static char dummy_pool_name[] = "0_dummy";
-       struct rte_eth_link link;
-       uint8_t port_id;
-       int ret;
-
-       port_id = port_cfg - prox_port_cfg;
-       plog_info("\t*** Initializing port %u ***\n", port_id);
-       plog_info("\t\tPort name is set to %s\n", port_cfg->name);
-       plog_info("\t\tPort max RX/TX queue is %u/%u\n", port_cfg->max_rxq, port_cfg->max_txq);
-       plog_info("\t\tPort driver is %s\n", port_cfg->driver_name);
-#if RTE_VERSION >= RTE_VERSION_NUM(16,4,0,0)
-       plog_info("\t\tSupported speed mask = 0x%x\n", port_cfg->dev_info.speed_capa);
-#endif
-
-       PROX_PANIC(port_cfg->n_rxq == 0 && port_cfg->n_txq == 0,
-                  "\t\t port %u is enabled but no RX or TX queues have been configured", port_id);
-
-       if (port_cfg->n_rxq == 0) {
-               /* not receiving on this port */
-               plog_info("\t\tPort %u had no RX queues, setting to 1\n", port_id);
-               port_cfg->n_rxq = 1;
-               uint32_t mbuf_size = TX_MBUF_SIZE;
-               plog_info("\t\tAllocating dummy memory pool on socket %u with %u elements of size %u\n",
-                         port_cfg->socket, port_cfg->n_rxd, mbuf_size);
-               port_cfg->pool[0] = rte_mempool_create(dummy_pool_name, port_cfg->n_rxd, mbuf_size,
-                                                      0,
-                                                      sizeof(struct rte_pktmbuf_pool_private),
-                                                      rte_pktmbuf_pool_init, NULL,
-                                                      prox_pktmbuf_init, 0,
-                                                      port_cfg->socket, 0);
-               PROX_PANIC(port_cfg->pool[0] == NULL, "Failed to allocate dummy memory pool on socket %u with %u elements\n",
-                          port_cfg->socket, port_cfg->n_rxd);
-               dummy_pool_name[0]++;
-       } else {
-               // Most pmd should now support setting mtu
-               if (port_cfg->mtu + ETHER_HDR_LEN + ETHER_CRC_LEN > port_cfg->max_rx_pkt_len) {
-                       plog_info("\t\tMTU is too big for the port, reducing MTU from %d to %d\n", port_cfg->mtu, port_cfg->max_rx_pkt_len);
-                       port_cfg->mtu = port_cfg->max_rx_pkt_len;
-               }
-               plog_info("\t\tSetting MTU size to %u for port %u ...\n", port_cfg->mtu, port_id);
-               ret = rte_eth_dev_set_mtu(port_id, port_cfg->mtu);
-               if (ret)
-                       plog_err("\t\t\trte_eth_dev_set_mtu() failed on port %u: error %d\n", port_id, ret);
-
-               if (port_cfg->n_txq == 0) {
-                       /* not sending on this port */
-                       plog_info("\t\tPort %u had no TX queues, setting to 1\n", port_id);
-                       port_cfg->n_txq = 1;
-               }
-       }
-
-       if (port_cfg->n_rxq > 1)  {
-               // Enable RSS if multiple receive queues
-               port_cfg->port_conf.rxmode.mq_mode                      |= ETH_MQ_RX_RSS;
-               port_cfg->port_conf.rx_adv_conf.rss_conf.rss_key        = toeplitz_init_key;
-               port_cfg->port_conf.rx_adv_conf.rss_conf.rss_key_len    = TOEPLITZ_KEY_LEN;
-#if RTE_VERSION >= RTE_VERSION_NUM(2,0,0,0)
-               port_cfg->port_conf.rx_adv_conf.rss_conf.rss_hf         = ETH_RSS_IPV4|ETH_RSS_NONFRAG_IPV4_UDP;
-#else
-               port_cfg->port_conf.rx_adv_conf.rss_conf.rss_hf         = ETH_RSS_IPV4|ETH_RSS_NONF_IPV4_UDP;
-#endif
-       }
-
 #if RTE_VERSION >= RTE_VERSION_NUM(18,8,0,1)
        plog_info("\t\tRX offload capa = 0x%lx = ", port_cfg->dev_info.rx_offload_capa);
        if (port_cfg->dev_info.rx_offload_capa & DEV_RX_OFFLOAD_VLAN_STRIP)
@@ -457,6 +394,73 @@ static void init_port(struct prox_port_cfg *port_cfg)
        plog_info("\t\tdefault RX port conf: burst_size = %d, ring_size = %d, nb_queues = %d\n", port_cfg->dev_info.default_rxportconf.burst_size, port_cfg->dev_info.default_rxportconf.ring_size, port_cfg->dev_info.default_rxportconf.nb_queues);
        plog_info("\t\tdefault TX port conf: burst_size = %d, ring_size = %d, nb_queues = %d\n", port_cfg->dev_info.default_txportconf.burst_size, port_cfg->dev_info.default_txportconf.ring_size, port_cfg->dev_info.default_txportconf.nb_queues);
 #endif
+}
+
+static void init_port(struct prox_port_cfg *port_cfg)
+{
+       static char dummy_pool_name[] = "0_dummy";
+       struct rte_eth_link link;
+       uint8_t port_id;
+       int ret;
+
+       port_id = port_cfg - prox_port_cfg;
+       plog_info("\t*** Initializing port %u ***\n", port_id);
+       plog_info("\t\tPort name is set to %s\n", port_cfg->name);
+       plog_info("\t\tPort max RX/TX queue is %u/%u\n", port_cfg->max_rxq, port_cfg->max_txq);
+       plog_info("\t\tPort driver is %s\n", port_cfg->driver_name);
+#if RTE_VERSION >= RTE_VERSION_NUM(16,4,0,0)
+       plog_info("\t\tSupported speed mask = 0x%x\n", port_cfg->dev_info.speed_capa);
+#endif
+
+       PROX_PANIC(port_cfg->n_rxq == 0 && port_cfg->n_txq == 0,
+                  "\t\t port %u is enabled but no RX or TX queues have been configured", port_id);
+
+       if (port_cfg->n_rxq == 0) {
+               /* not receiving on this port */
+               plog_info("\t\tPort %u had no RX queues, setting to 1\n", port_id);
+               port_cfg->n_rxq = 1;
+               uint32_t mbuf_size = TX_MBUF_SIZE;
+               plog_info("\t\tAllocating dummy memory pool on socket %u with %u elements of size %u\n",
+                         port_cfg->socket, port_cfg->n_rxd, mbuf_size);
+               port_cfg->pool[0] = rte_mempool_create(dummy_pool_name, port_cfg->n_rxd, mbuf_size,
+                                                      0,
+                                                      sizeof(struct rte_pktmbuf_pool_private),
+                                                      rte_pktmbuf_pool_init, NULL,
+                                                      prox_pktmbuf_init, 0,
+                                                      port_cfg->socket, 0);
+               PROX_PANIC(port_cfg->pool[0] == NULL, "Failed to allocate dummy memory pool on socket %u with %u elements\n",
+                          port_cfg->socket, port_cfg->n_rxd);
+               dummy_pool_name[0]++;
+       } else {
+               // Most pmd should now support setting mtu
+               if (port_cfg->mtu + ETHER_HDR_LEN + ETHER_CRC_LEN > port_cfg->max_rx_pkt_len) {
+                       plog_info("\t\tMTU is too big for the port, reducing MTU from %d to %d\n", port_cfg->mtu, port_cfg->max_rx_pkt_len);
+                       port_cfg->mtu = port_cfg->max_rx_pkt_len;
+               }
+               plog_info("\t\tSetting MTU size to %u for port %u ...\n", port_cfg->mtu, port_id);
+               ret = rte_eth_dev_set_mtu(port_id, port_cfg->mtu);
+               if (ret)
+                       plog_err("\t\t\trte_eth_dev_set_mtu() failed on port %u: error %d\n", port_id, ret);
+
+               if (port_cfg->n_txq == 0) {
+                       /* not sending on this port */
+                       plog_info("\t\tPort %u had no TX queues, setting to 1\n", port_id);
+                       port_cfg->n_txq = 1;
+               }
+       }
+
+       if (port_cfg->n_rxq > 1)  {
+               // Enable RSS if multiple receive queues
+               port_cfg->port_conf.rxmode.mq_mode                      |= ETH_MQ_RX_RSS;
+               port_cfg->port_conf.rx_adv_conf.rss_conf.rss_key        = toeplitz_init_key;
+               port_cfg->port_conf.rx_adv_conf.rss_conf.rss_key_len    = TOEPLITZ_KEY_LEN;
+#if RTE_VERSION >= RTE_VERSION_NUM(2,0,0,0)
+               port_cfg->port_conf.rx_adv_conf.rss_conf.rss_hf         = ETH_RSS_IPV4|ETH_RSS_NONFRAG_IPV4_UDP;
+#else
+               port_cfg->port_conf.rx_adv_conf.rss_conf.rss_hf         = ETH_RSS_IPV4|ETH_RSS_NONF_IPV4_UDP;
+#endif
+       }
+       print_port_capa(port_cfg);
 
        // rxmode such as hw src strip
 #if RTE_VERSION >= RTE_VERSION_NUM(18,8,0,1)
@@ -490,19 +494,6 @@ static void init_port(struct prox_port_cfg *port_cfg)
        // Multi Segments
 #if RTE_VERSION >= RTE_VERSION_NUM(18,8,0,1)
        CONFIGURE_TX_OFFLOAD(DEV_TX_OFFLOAD_MULTI_SEGS);
-       //if (port_cfg->requested_tx_offload & DEV_TX_OFFLOAD_MULTI_SEGS) {
-               //if (port_cfg->dev_info.tx_offload_capa & DEV_TX_OFFLOAD_MULTI_SEGS) {
-                       //port_cfg->port_conf.txmode.offloads |= DEV_TX_OFFLOAD_MULTI_SEGS;
-                       //plog_info("\t\tMULTI SEGS TX offloads enabled on port)\n");
-               //} else if (port_cfg->dev_info.tx_queue_offload_capa & DEV_TX_OFFLOAD_MULTI_SEGS) {
-                       //port_cfg->tx_conf.offloads |= DEV_TX_OFFLOAD_MULTI_SEGS;
-                       //plog_info("\t\tMULTI SEGS TX offloads enabled on queue)\n");
-               //} else {
-                       //port_cfg->requested_tx_offload &= ~DEV_TX_OFFLOAD_MULTI_SEGS;
-                       //plog_info("\t\tMULTI SEGS TX offloads disabled) as neither port or queue supports it\n");
-               //}
-       //} else
-               //plog_info("\t\tMULTI SEGS TX offloads disabled)\n");
 #else
        if (!strcmp(port_cfg->short_name, "vmxnet3")) {
                port_cfg->tx_conf.txq_flags |= ETH_TXQ_FLAGS_NOMULTSEGS;