This appears to be a bug in the cisco enic driver. It will always report 10000baseT/Full, regardless of the link speed itself. It has always been like this in mainline, and I am also not supprised if the upstream driver is also similarly broken.
static int enic_get_ksettings(struct net_device *netdev, struct ethtool_link_ksettings *ecmd) { [...] ethtool_link_ksettings_add_link_mode(ecmd, supported, 10000baseT_Full); ethtool_link_ksettings_add_link_mode(ecmd, supported, FIBRE); ethtool_link_ksettings_add_link_mode(ecmd, advertising, 10000baseT_Full); ethtool_link_ksettings_add_link_mode(ecmd, advertising, FIBRE); base->port = PORT_FIBRE;
if (netif_carrier_ok(netdev)) { base->speed = vnic_dev_port_speed(enic->vdev); base->duplex = DUPLEX_FULL; } else { base->speed = SPEED_UNKNOWN; base->duplex = DUPLEX_UNKNOWN; } [...] }
This appears to be a bug in the cisco enic driver. It will always report 10000baseT/Full, regardless of the link speed itself. It has always been like this in mainline, and I am also not supprised if the upstream driver is also similarly broken.
static int enic_get_ ksettings( struct net_device *netdev,
struct ethtool_ link_ksettings *ecmd)
ethtool_ link_ksettings_ add_link_ mode(ecmd, supported,
10000baseT_ Full);
ethtool_ link_ksettings_ add_link_ mode(ecmd, supported, FIBRE);
ethtool_ link_ksettings_ add_link_ mode(ecmd, advertising,
10000baseT_ Full);
ethtool_ link_ksettings_ add_link_ mode(ecmd, advertising, FIBRE);
{
[...]
base->port = PORT_FIBRE;
if (netif_ carrier_ ok(netdev) ) {
base- >speed = vnic_dev_ port_speed( enic->vdev) ;
base- >duplex = DUPLEX_FULL;
base- >speed = SPEED_UNKNOWN;
base- >duplex = DUPLEX_UNKNOWN;
} else {
}
[...]
}