net/e1000: set min and max MTU
authorIan Stokes <ian.stokes@intel.com>
Fri, 29 Mar 2019 17:52:18 +0000 (17:52 +0000)
committerFerruh Yigit <ferruh.yigit@intel.com>
Fri, 29 Mar 2019 18:00:35 +0000 (19:00 +0100)
This commit sets the min and max supported MTU values for igb devices
via the eth_igb_info_get() function. Min MTU supported is set to
ETHER_MIN_MTU and max MTU is calculated as the max packet length
supported minus the transport overhead. To aid in these calculations
a new MACRO 'E1000_ETH_OVERHEAD' has been introduced to consolidate
overhead calculation and avoid duplication.

Signed-off-by: Ian Stokes <ian.stokes@intel.com>
Reviewed-by: Ferruh Yigit <ferruh.yigit@intel.com>
drivers/net/e1000/e1000_ethdev.h
drivers/net/e1000/igb_ethdev.c

index 94edff0..3e74cd8 100644 (file)
        ETH_RSS_IPV6_TCP_EX | \
        ETH_RSS_IPV6_UDP_EX)
 
+/*
+ * The overhead from MTU to max frame size.
+ * Considering VLAN so a tag needs to be counted.
+ */
+#define E1000_ETH_OVERHEAD (ETHER_HDR_LEN + ETHER_CRC_LEN + VLAN_TAG_SIZE)
+
 /*
  * Maximum number of Ring Descriptors.
  *
index 87c9aed..b897e8a 100644 (file)
@@ -2283,6 +2283,10 @@ eth_igb_infos_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info)
        dev_info->speed_capa = ETH_LINK_SPEED_10M_HD | ETH_LINK_SPEED_10M |
                        ETH_LINK_SPEED_100M_HD | ETH_LINK_SPEED_100M |
                        ETH_LINK_SPEED_1G;
+
+       dev_info->max_mtu = dev_info->max_rx_pktlen - E1000_ETH_OVERHEAD;
+       dev_info->min_mtu = ETHER_MIN_MTU;
+
 }
 
 static const uint32_t *
@@ -4466,8 +4470,7 @@ eth_igb_mtu_set(struct rte_eth_dev *dev, uint16_t mtu)
        uint32_t rctl;
        struct e1000_hw *hw;
        struct rte_eth_dev_info dev_info;
-       uint32_t frame_size = mtu + (ETHER_HDR_LEN + ETHER_CRC_LEN +
-                                    VLAN_TAG_SIZE);
+       uint32_t frame_size = mtu + E1000_ETH_OVERHEAD;
 
        hw = E1000_DEV_PRIVATE_TO_HW(dev->data->dev_private);