jpirko / libteam

team netdevice library
GNU Lesser General Public License v2.1
231 stars 59 forks source link

link speed -1? #81

Open uli42 opened 6 days ago

uli42 commented 6 days ago

We are using teamd on RockyLinux 8.10 and on some nodes we see link speed -1 for the first interface of an lacp team:

$ teamdctl team0 state dump | grep  -e  ens -e speed
        "ens1f0": {
                "ifname": "ens1f0"
                "speed": -1,
        "ens1f1": {
                "ifname": "ens1f1"
                "speed": 10000,

Full output:

$ teamdctl team0 state dump
{
    "ports": {
        "ens1f0": {
            "ifinfo": {
                "dev_addr": "aa:bb:cc:dd:ee:ff",
                "dev_addr_len": 6,
                "ifindex": 6,
                "ifname": "ens1f0"
            },
            "link": {
                "duplex": "full",
                "speed": -1,
                "up": true
            },
            "link_watches": {
                "list": {
                    "link_watch_0": {
                        "delay_down": 0,
                        "delay_up": 0,
                        "down_count": 0,
                        "name": "ethtool",
                        "up": true
                    }
                },
                "up": true
            },
            "runner": {
                "actor_lacpdu_info": {
                    "key": 0,
                    "port": 6,
                    "port_priority": 255,
                    "state": 63,
                    "system": "aa:bb:cc:dd:ee:ff",
                    "system_priority": 65535
                },
                "aggregator": {
                    "id": 6,
                    "selected": true
                },
                "key": 0,
                "partner_lacpdu_info": {
                    "key": 19,
                    "port": 22,
                    "port_priority": 32768,
                    "state": 61,
                    "system": "fa:fb:fc:fd:fe:ff",
                    "system_priority": 32768
                },
                "prio": 255,
                "selected": true,
                "state": "current"
            }
        },
        "ens1f1": {
            "ifinfo": {
                "dev_addr": "aa:bb:cc:dd:ee:ff",
                "dev_addr_len": 6,
                "ifindex": 7,
                "ifname": "ens1f1"
            },
            "link": {
                "duplex": "full",
                "speed": 10000,
                "up": true
            },
            "link_watches": {
                "list": {
                    "link_watch_0": {
                        "delay_down": 0,
                        "delay_up": 0,
                        "down_count": 1,
                        "name": "ethtool",
                        "up": true
                    }
                },
                "up": true
            },
            "runner": {
                "actor_lacpdu_info": {
                    "key": 0,
                    "port": 7,
                    "port_priority": 255,
                    "state": 63,
                    "system": "aa:bb:cc:dd:ee:ff",
                    "system_priority": 65535
                },
                "aggregator": {
                    "id": 6,
                    "selected": true
                },
                "key": 0,
                "partner_lacpdu_info": {
                    "key": 19,
                    "port": 128,
                    "port_priority": 32768,
                    "state": 61,
                    "system": "fa:fb:fc:fd:fe:ff",
                    "system_priority": 32768
                },
                "prio": 255,
                "selected": true,
                "state": "current"
            }
        }
    },
    "runner": {
        "active": true,
        "fast_rate": true,
        "select_policy": "lacp_prio",
        "sys_prio": 65535
    },
    "setup": {
        "daemonized": false,
        "dbus_enabled": true,
        "debug_level": 0,
        "kernel_team_mode_name": "loadbalance",
        "pid": 2772,
        "pid_file": "/var/run/teamd/team0.pid",
        "runner_name": "lacp",
        "zmq_enabled": false
    },
    "team_device": {
        "ifinfo": {
            "dev_addr": "aa:bb:cc:dd:ee:ff",
            "dev_addr_len": 6,
            "ifindex": 12,
            "ifname": "team0"
        }
    }
}

(MACs obfuscated).

The speed for the first interface ens1f0 is shown as -1. We can also see that teamnl shows weird values:

$ teamnl team0 ports
 7: ens1f1: up 10000Mbit FD 
 6: ens1f0: up 4294967295Mbit FD 

BUT: ethtool looks fine:

ethtool ens1f0
Settings for ens1f0:
    Supported ports: [ FIBRE ]
    Supported link modes:   10000baseT/Full
    Supported pause frame use: Symmetric
    Supports auto-negotiation: No
    Supported FEC modes: Not reported
    Advertised link modes:  10000baseT/Full
    Advertised pause frame use: Symmetric
    Advertised auto-negotiation: No
    Advertised FEC modes: Not reported
    Speed: 10000Mb/s
    Duplex: Full
    Auto-negotiation: off
    Port: FIBRE
    PHYAD: 0
    Transceiver: internal
    Supports Wake-on: d
    Wake-on: d
        Current message level: 0x00000007 (7)
                               drv probe link
    Link detected: yes

It looks like ethtool reports wrong values or they get parsed incorrectly:

$ teamdctl team0 state view -v | grep -e ethtool -e  ens
  ens1f0
    ethtool link: -1mbit/fullduplex/up
        name: ethtool
  ens1f1
    ethtool link: 10000mbit/fullduplex/up
        name: ethtool

Full output:

$ teamdctl team0 state view -v
setup:
  runner: lacp
  kernel team mode: loadbalance
  D-BUS enabled: yes
  ZeroMQ enabled: no
  debug level: 0
  daemonized: no
  PID: 2772
  PID file: /var/run/teamd/team0.pid
ports:
  ens1f0
    ifindex: 6
    addr: aa:bb:cc:dd:ee:ff
    ethtool link: -1mbit/fullduplex/up
    link watches:
      link summary: up
      instance[link_watch_0]:
        name: ethtool
        link: up
        down count: 0
        link up delay: 0
        link down delay: 0
    runner:
      aggregator ID: 6, Selected
      selected: yes
      state: current
      key: 0
      priority: 255
      actor LACPDU info:
        system priority: 65535
        system: aa:bb:cc:dd:ee:ff
        key: 0
        port_priority: 255
        port: 6
        state: 0x3f
      partner LACPDU info:
        system priority: 32768
        system: fa:fb:fc:fd:fe:ff
        key: 19
        port_priority: 32768
        port: 22
        state: 0x3d

Versions:

$ rpm -qf `which teamdctl`
teamd-1.31-4.el8.x86_64
$rpm -qf `which teamnl`
libteam-1.31-4.el8.x86_64
$ rpm -qf `which teamd`
teamd-1.31-4.el8.x86_64

Is this expected behaviour in some situations? Or is it bug?