> +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