@@ -650,13 +650,12 @@ dpdk_eth_dev_queue_setup(struct netdev_dpdk *dev, int n_rxq, int n_txq)
int i;
struct rte_eth_conf conf = port_conf;
+ /* For some NICs (e.g. Niantic), scatter_rx mode needs to be explicitly
+ * enabled. */
if (dev->mtu > ETHER_MTU) {
- conf.rxmode.jumbo_frame = 1;
- conf.rxmode.max_rx_pkt_len = dev->max_packet_len;
- } else {
- conf.rxmode.jumbo_frame = 0;
- conf.rxmode.max_rx_pkt_len = 0;
+ conf.rxmode.enable_scatter = 1;
}
+
conf.rxmode.hw_ip_checksum = (dev->hw_ol_features &
NETDEV_RX_CHECKSUM_OFFLOAD) != 0;
/* A device may report more queues than it makes available (this has
@@ -676,6 +675,13 @@ dpdk_eth_dev_queue_setup(struct netdev_dpdk *dev, int n_rxq, int n_txq)
break;
}
+ diag = rte_eth_dev_set_mtu(dev->port_id, dev->mtu);
+ if (diag) {
+ VLOG_ERR("Interface %s MTU (%d) setup error: %s",
+ dev->up.name, dev->mtu, rte_strerror(-diag));
+ break;
+ }
+
for (i = 0; i < n_txq; i++) {
diag = rte_eth_tx_queue_setup(dev->port_id, i, dev->txq_size,
dev->socket_id, NULL);