[v8,5/5] examples/l3fwd-power: support virtio/vhost
Checks
Commit Message
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 | 15 ++++++++++++++-
1 file changed, 14 insertions(+), 1 deletion(-)
Comments
On 10/25/2021 3:47 PM, Miao Li wrote:
> - /* this is checked in H/W */
> + /* if this is not checked in H/W, check it. */
> + if ((port_conf.rxmode.offloads & DEV_RX_OFFLOAD_IPV4_CKSUM) == 0) {
s/DEV_RX_OFFLOAD_IPV4_CKSUM/RTE_ETH_RX_OFFLOAD_IPV4_CKSUM/
> + 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 = ETH_MQ_RX_NONE;
s/ETH_MQ_RX_NONE/RTE_ETH_MQ_RX_NONE/
Both will be updated in next-net
@@ -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 & DEV_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 = 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)