+static int nsim_get_link_ksettings(struct net_device *dev,
+ struct ethtool_link_ksettings *cmd)
+{
+ struct netdevsim *ns = netdev_priv(dev);
+
+ cmd->base.speed = ns->ethtool.speed;
+ cmd->base.duplex = ns->ethtool.duplex;
+ cmd->base.port = PORT_OTHER;
+ cmd->base.autoneg = AUTONEG_DISABLE;
Here you hard code autoneg as disabled.
+static int nsim_set_link_ksettings(struct net_device *dev,
+ const struct ethtool_link_ksettings *cmd)
+{
+ struct netdevsim *ns = netdev_priv(dev);
+
+ if (cmd->base.speed > NSIM_LINK_SPEED_MAX)
+ return -EINVAL;
+
+ return ethtool_virtdev_set_link_ksettings(dev, cmd, &ns->ethtool.speed,
+ &ns->ethtool.duplex);
but here you don't appear to block enabling autoneg. I would expect a
test and EOPNOTSUPP.
Andrew