On 7/27/2020 2:01 PM, Andrew Lunn wrote:
> Here are the netlink messages.
>
> sending genetlink packet (32 bytes):
> msg length 32 genl-ctrl
> CTRL_CMD_GETFAMILY
> CTRL_ATTR_FAMILY_NAME = "ethtool"
> ...
> ...
> sending genetlink packet (36 bytes):
> msg length 36 ethool ETHTOOL_MSG_LINKMODES_GET
> ETHTOOL_MSG_LINKMODES_GET
> ETHTOOL_A_LINKMODES_HEADER
> ETHTOOL_A_HEADER_DEV_NAME = "green"
> received genetlink packet (572 bytes):
> msg length 572 ethool ETHTOOL_MSG_LINKMODES_GET_REPLY
> ETHTOOL_MSG_LINKMODES_GET_REPLY
> ETHTOOL_A_LINKMODES_HEADER
> ETHTOOL_A_HEADER_DEV_INDEX = 8
> ETHTOOL_A_HEADER_DEV_NAME = "green"
> ETHTOOL_A_LINKMODES_AUTONEG = on
> ETHTOOL_A_LINKMODES_OURS
> ETHTOOL_A_BITSET_SIZE = 90
> ETHTOOL_A_BITSET_BITS
> ETHTOOL_A_BITSET_BITS_BIT
> ETHTOOL_A_BITSET_BIT_INDEX = 0
> ETHTOOL_A_BITSET_BIT_NAME = "10baseT/Half"
> ETHTOOL_A_BITSET_BIT_VALUE = true
> ETHTOOL_A_BITSET_BITS_BIT
> ETHTOOL_A_BITSET_BIT_INDEX = 1
> ETHTOOL_A_BITSET_BIT_NAME = "10baseT/Full"
> ETHTOOL_A_BITSET_BIT_VALUE = true
> ETHTOOL_A_BITSET_BITS_BIT
> ETHTOOL_A_BITSET_BIT_INDEX = 2
> ETHTOOL_A_BITSET_BIT_NAME = "100baseT/Half"
> ETHTOOL_A_BITSET_BIT_VALUE = true
> ETHTOOL_A_BITSET_BITS_BIT
> ETHTOOL_A_BITSET_BIT_INDEX = 3
> ETHTOOL_A_BITSET_BIT_NAME = "100baseT/Full"
> ETHTOOL_A_BITSET_BIT_VALUE = true
> ETHTOOL_A_BITSET_BITS_BIT
> ETHTOOL_A_BITSET_BIT_INDEX = 5
> ETHTOOL_A_BITSET_BIT_NAME = "1000baseT/Full"
> ETHTOOL_A_BITSET_BIT_VALUE = true
> ETHTOOL_A_BITSET_BITS_BIT
> ETHTOOL_A_BITSET_BIT_INDEX = 6
> ETHTOOL_A_BITSET_BIT_NAME = "Autoneg"
> ETHTOOL_A_BITSET_BIT_VALUE = true
> ETHTOOL_A_BITSET_BITS_BIT
> ETHTOOL_A_BITSET_BIT_INDEX = 7
> ETHTOOL_A_BITSET_BIT_NAME = "TP"
> ETHTOOL_A_BITSET_BIT_VALUE = true
> ETHTOOL_A_BITSET_BITS_BIT
> ETHTOOL_A_BITSET_BIT_INDEX = 9
> ETHTOOL_A_BITSET_BIT_NAME = "MII"
> ETHTOOL_A_BITSET_BIT_VALUE = true
> ETHTOOL_A_BITSET_BITS_BIT
> ETHTOOL_A_BITSET_BIT_INDEX = 13
> ETHTOOL_A_BITSET_BIT_NAME = "Pause"
> ETHTOOL_A_BITSET_BIT_VALUE = true
> ETHTOOL_A_LINKMODES_PEER
> ETHTOOL_A_BITSET_NOMASK = true
> ETHTOOL_A_BITSET_SIZE = 90
> ETHTOOL_A_BITSET_BITS
> ETHTOOL_A_BITSET_BITS_BIT
> ETHTOOL_A_BITSET_BIT_INDEX = 0
> ETHTOOL_A_BITSET_BIT_NAME = "10baseT/Half"
> ETHTOOL_A_BITSET_BITS_BIT
> ETHTOOL_A_BITSET_BIT_INDEX = 1
> ETHTOOL_A_BITSET_BIT_NAME = "10baseT/Full"
> ETHTOOL_A_BITSET_BITS_BIT
> ETHTOOL_A_BITSET_BIT_INDEX = 2
> ETHTOOL_A_BITSET_BIT_NAME = "100baseT/Half"
> ETHTOOL_A_BITSET_BITS_BIT
> ETHTOOL_A_BITSET_BIT_INDEX = 3
> ETHTOOL_A_BITSET_BIT_NAME = "100baseT/Full"
> ETHTOOL_A_BITSET_BITS_BIT
> ETHTOOL_A_BITSET_BIT_INDEX = 5
> ETHTOOL_A_BITSET_BIT_NAME = "1000baseT/Full"
> ETHTOOL_A_BITSET_BITS_BIT
> ETHTOOL_A_BITSET_BIT_INDEX = 6
> ETHTOOL_A_BITSET_BIT_NAME = "Autoneg"
> ETHTOOL_A_LINKMODES_SPEED = 1000
> ETHTOOL_A_LINKMODES_DUPLEX = 1
Based on the netlink contents here it looks like a bug at
netlink/settings.c:357, where we check for ETHTOOL_A_BITSET_BIT_VALUE,
but these aren't sent when you send the bitset using a individual
BIT_INDEX/BIT_NAME like this. I think that's a bug.
I'm working up a simple to verify this and if my suspicion is confirmed
I can write up a patch.
Thanks,
Jake