doc: add GRE option flow item to feature list
[dpdk.git] / examples / l3fwd-power / main.c
index 9402644..20e5b59 100644 (file)
@@ -249,18 +249,18 @@ uint16_t nb_lcore_params = RTE_DIM(lcore_params_array_default);
 
 static struct rte_eth_conf port_conf = {
        .rxmode = {
-               .mq_mode        = ETH_MQ_RX_RSS,
+               .mq_mode        = RTE_ETH_MQ_RX_RSS,
                .split_hdr_size = 0,
-               .offloads = DEV_RX_OFFLOAD_CHECKSUM,
+               .offloads = RTE_ETH_RX_OFFLOAD_CHECKSUM,
        },
        .rx_adv_conf = {
                .rss_conf = {
                        .rss_key = NULL,
-                       .rss_hf = ETH_RSS_UDP,
+                       .rss_hf = RTE_ETH_RSS_UDP,
                },
        },
        .txmode = {
-               .mq_mode = ETH_MQ_TX_NONE,
+               .mq_mode = RTE_ETH_MQ_TX_NONE,
        }
 };
 
@@ -433,7 +433,7 @@ signal_exit_now(int sigtype)
 
 }
 
-/*  Freqency scale down timer callback */
+/*  Frequency scale down timer callback */
 static void
 power_timer_cb(__rte_unused struct rte_timer *tim,
                          __rte_unused void *arg)
@@ -505,7 +505,15 @@ is_valid_ipv4_pkt(struct rte_ipv4_hdr *pkt, uint32_t link_len)
                return -1;
 
        /* 2. The IP checksum must be correct. */
-       /* this is checked in H/W */
+       /* if this is not checked in H/W, check it. */
+       if ((port_conf.rxmode.offloads & RTE_ETH_RX_OFFLOAD_IPV4_CKSUM) == 0) {
+               uint16_t actual_cksum, expected_cksum;
+               actual_cksum = pkt->hdr_checksum;
+               pkt->hdr_checksum = 0;
+               expected_cksum = rte_ipv4_cksum(pkt);
+               if (actual_cksum != expected_cksum)
+                       return -2;
+       }
 
        /*
         * 3. The IP version number must be 4. If the version number is not 4
@@ -2196,7 +2204,7 @@ check_all_ports_link_status(uint32_t port_mask)
                                continue;
                        }
                        /* clear all_ports_up flag if any link down */
-                       if (link.link_status == ETH_LINK_DOWN) {
+                       if (link.link_status == RTE_ETH_LINK_DOWN) {
                                all_ports_up = 0;
                                break;
                        }
@@ -2350,7 +2358,7 @@ update_telemetry(__rte_unused struct rte_timer *tim,
        ret = rte_metrics_update_values(RTE_METRICS_GLOBAL, telstats_index,
                                        values, RTE_DIM(values));
        if (ret < 0)
-               RTE_LOG(WARNING, POWER, "failed to update metrcis\n");
+               RTE_LOG(WARNING, POWER, "failed to update metrics\n");
 }
 
 static int
@@ -2508,10 +2516,8 @@ config_port_max_pkt_len(struct rte_eth_conf *conf,
                        dev_info->max_mtu);
        conf->rxmode.mtu = max_pkt_len - overhead_len;
 
-       if (conf->rxmode.mtu > RTE_ETHER_MTU) {
-               conf->txmode.offloads |= DEV_TX_OFFLOAD_MULTI_SEGS;
-               conf->rxmode.offloads |= DEV_RX_OFFLOAD_JUMBO_FRAME;
-       }
+       if (conf->rxmode.mtu > RTE_ETHER_MTU)
+               conf->txmode.offloads |= RTE_ETH_TX_OFFLOAD_MULTI_SEGS;
 
        return 0;
 }
@@ -2534,9 +2540,6 @@ main(int argc, char **argv)
        uint16_t portid;
        const char *ptr_strings[NUM_TELSTATS];
 
-       /* catch SIGINT and restore cpufreq governor to ondemand */
-       signal(SIGINT, signal_exit_now);
-
        /* init EAL */
        ret = rte_eal_init(argc, argv);
        if (ret < 0)
@@ -2544,6 +2547,9 @@ main(int argc, char **argv)
        argc -= ret;
        argv += ret;
 
+       /* catch SIGINT and restore cpufreq governor to ondemand */
+       signal(SIGINT, signal_exit_now);
+
        /* init RTE timer library to be used late */
        rte_timer_subsystem_init();
 
@@ -2639,9 +2645,9 @@ main(int argc, char **argv)
                                "Invalid max packet length: %u (port %u)\n",
                                max_pkt_len, portid);
 
-               if (dev_info.tx_offload_capa & DEV_TX_OFFLOAD_MBUF_FAST_FREE)
+               if (dev_info.tx_offload_capa & RTE_ETH_TX_OFFLOAD_MBUF_FAST_FREE)
                        local_port_conf.txmode.offloads |=
-                               DEV_TX_OFFLOAD_MBUF_FAST_FREE;
+                               RTE_ETH_TX_OFFLOAD_MBUF_FAST_FREE;
 
                local_port_conf.rx_adv_conf.rss_conf.rss_hf &=
                        dev_info.flow_type_rss_offloads;
@@ -2654,6 +2660,11 @@ main(int argc, char **argv)
                                local_port_conf.rx_adv_conf.rss_conf.rss_hf);
                }
 
+               if (local_port_conf.rx_adv_conf.rss_conf.rss_hf == 0)
+                       local_port_conf.rxmode.mq_mode = RTE_ETH_MQ_RX_NONE;
+               local_port_conf.rxmode.offloads &= dev_info.rx_offload_capa;
+               port_conf.rxmode.offloads = local_port_conf.rxmode.offloads;
+
                ret = rte_eth_dev_configure(portid, nb_rx_queue,
                                        (uint16_t)n_tx_queue, &local_port_conf);
                if (ret < 0)