|
@@ -1419,17 +1419,6 @@ static const struct ethtool_ops virtnet_ethtool_ops = {
|
|
|
.set_settings = virtnet_set_settings,
|
|
|
};
|
|
|
|
|
|
-#define MIN_MTU 68
|
|
|
-#define MAX_MTU 65535
|
|
|
-
|
|
|
-static int virtnet_change_mtu(struct net_device *dev, int new_mtu)
|
|
|
-{
|
|
|
- if (new_mtu < MIN_MTU || new_mtu > MAX_MTU)
|
|
|
- return -EINVAL;
|
|
|
- dev->mtu = new_mtu;
|
|
|
- return 0;
|
|
|
-}
|
|
|
-
|
|
|
static const struct net_device_ops virtnet_netdev = {
|
|
|
.ndo_open = virtnet_open,
|
|
|
.ndo_stop = virtnet_close,
|
|
@@ -1437,7 +1426,6 @@ static const struct net_device_ops virtnet_netdev = {
|
|
|
.ndo_validate_addr = eth_validate_addr,
|
|
|
.ndo_set_mac_address = virtnet_set_mac_address,
|
|
|
.ndo_set_rx_mode = virtnet_set_rx_mode,
|
|
|
- .ndo_change_mtu = virtnet_change_mtu,
|
|
|
.ndo_get_stats64 = virtnet_stats,
|
|
|
.ndo_vlan_rx_add_vid = virtnet_vlan_rx_add_vid,
|
|
|
.ndo_vlan_rx_kill_vid = virtnet_vlan_rx_kill_vid,
|
|
@@ -1748,6 +1736,9 @@ static bool virtnet_validate_features(struct virtio_device *vdev)
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
+#define MIN_MTU ETH_MIN_MTU
|
|
|
+#define MAX_MTU ETH_MAX_MTU
|
|
|
+
|
|
|
static int virtnet_probe(struct virtio_device *vdev)
|
|
|
{
|
|
|
int i, err;
|
|
@@ -1821,6 +1812,10 @@ static int virtnet_probe(struct virtio_device *vdev)
|
|
|
|
|
|
dev->vlan_features = dev->features;
|
|
|
|
|
|
+ /* MTU range: 68 - 65535 */
|
|
|
+ dev->min_mtu = MIN_MTU;
|
|
|
+ dev->max_mtu = MAX_MTU;
|
|
|
+
|
|
|
/* Configuration may specify what MAC to use. Otherwise random. */
|
|
|
if (virtio_has_feature(vdev, VIRTIO_NET_F_MAC))
|
|
|
virtio_cread_bytes(vdev,
|
|
@@ -1875,8 +1870,10 @@ static int virtnet_probe(struct virtio_device *vdev)
|
|
|
mtu = virtio_cread16(vdev,
|
|
|
offsetof(struct virtio_net_config,
|
|
|
mtu));
|
|
|
- if (virtnet_change_mtu(dev, mtu))
|
|
|
+ if (mtu < dev->min_mtu || mtu > dev->max_mtu)
|
|
|
__virtio_clear_bit(vdev, VIRTIO_NET_F_MTU);
|
|
|
+ else
|
|
|
+ dev->mtu = mtu;
|
|
|
}
|
|
|
|
|
|
if (vi->any_header_sg)
|