]> git.droids-corp.org - dpdk.git/commitdiff
examples/l3fwd-power: support virtio/vhost
authorMiao Li <miao.li@intel.com>
Mon, 25 Oct 2021 14:47:25 +0000 (14:47 +0000)
committerMaxime Coquelin <maxime.coquelin@redhat.com>
Fri, 29 Oct 2021 10:32:29 +0000 (12:32 +0200)
In l3fwd-power, there is default port configuration which requires
RSS and IPv4/UDP/TCP checksum. Once device does not support these,
the l3fwd-power will exit and report an error.
This patch updates the port configuration based on device capabilities
after getting the device information to support devices like virtio
and vhost.

Signed-off-by: Miao Li <miao.li@intel.com>
Reviewed-by: Chenbo Xia <chenbo.xia@intel.com>
Acked-by: David Hunt <david.hunt@intel.com>
examples/l3fwd-power/main.c

index 21c79567b1f7c3c52614398b1402b2fb718db052..6988a0ed34bdd68f727778d9e4b0d5b558500c96 100644 (file)
@@ -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
@@ -2652,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)