I have an Intel E810 card (supported by the "ice" driver). I have the 4 port, 25gbps version.
The ice driver does not support changing speed, duplex, or autonegotiation settings (I have no idea why, but it doesn't). I pasted the driver README on this at the end of the report. I am running VYOS in libvirt, and am handing it VF's (so vyos is using iavf rather than ice) but it inherits the same limitation. If i pass through the physical port so vyos uses the ice driver directly, it has the same issue (plus it does not set up the DDP).
VYOS appears to append speed=auto, duplex=auto to configs before processing them with ifconfig/ethernet.py. As a result, it tries to change the autonegotiation state on the card when i run commit, and when it fails, you can't save. This is noted in the docs as a default, so not surprising.
If i modify config.boot directly, it works fine.
The inability to change speed/duplex appears to have happened before :). If i add iavf to the list of drivers in ethtool.py not support speed, auto, all works correctly.
iavf only supports cards that use the i40e and ice drivers. The i40e driver has the same limitation of not setting speed/duplex and same note in the readme file. So i will add i40e (and ice) to the list as well. I have tested ice, but i can't test i40e easily.
For completeness I've pasted a log showing what happens. The printout you see before "VYOS had an issue completing a command" is me adding print(config) right before the speed/duplex processing in ethernet.py when i was trying to figure out what was going on.
Log of VYOS:
vyos@router:~$ configure
s[edit]
vyos@router# show interfaces ethernet
ethernet eth0 {
address dhcp
description OUTSIDE
}
ethernet eth1 {
address 192.168.0.4/22
description INSIDE
}
[edit]
vyos@router# show interfaces ethernet eth
eth0 eth1
[edit]
vyos@router# show interfaces ethernet eth0
address dhcp
description OUTSIDE
[edit]
vyos@router# exit
exit
vyos@router:~$ configure
[edit]
vyos@router# set interfaces ethernet eth0 offload tso
[edit]
vyos@router# commit
[ interfaces ethernet eth0 ]
{'address': ['dhcp'], 'description': 'OUTSIDE', 'offload': {'tso': {}}, 'ifname': 'eth0', 'dhcp_options': {'default_route_distance': '210'}, 'ip': {'arp_cache_timeout': '3
0'}, 'duplex': 'auto', 'mtu': '1500', 'speed': 'auto'}
VyOS had an issue completing a command.
We are sorry that you encountered a problem while using VyOS.
There are a few things you can do to help us (and yourself):
- Contact us using the online help desk if you have a subscription:
https://support.vyos.io/
- Make sure you are running the latest version of VyOS available at:
https://vyos.net/get/
- Consult the community forum to see how to handle this issue:
https://forum.vyos.io
- Join us on Slack where our users exchange help and advice:
https://vyos.slack.com
When reporting problems, please include as much information as possible:
- do not obfuscate any data (feel free to contact us privately if your
business policy requires it)
- and include all the information presented below
Report time: 2022-03-11 02:17:25
Image version: VyOS 1.4-rolling-202203080319
Release train: sagitta
Built by: autobuild@vyos.net
Built on: Tue 08 Mar 2022 03:19 UTC
Build UUID: 01c39384-2c6e-4e45-9436-33b26290bf68
Build commit ID: b2ca3389494c35
Architecture: x86_64
Boot via: installed image
System type: KVM guest
Hardware vendor: Red Hat
Hardware model: KVM
Hardware S/N:
Hardware UUID: c2ab4f4d-45bc-4b85-ba35-89d12dda2047
Traceback (most recent call last):
File "/usr/libexec/vyos/conf_mode/interfaces-ethernet.py", line 212, in <module>
apply(c)
File "/usr/libexec/vyos/conf_mode/interfaces-ethernet.py", line 201, in apply
e.update(ethernet)
File "/usr/lib/python3/dist-packages/vyos/ifconfig/ethernet.py", line 348, in update
self.set_speed_duplex(speed, duplex)
File "/usr/lib/python3/dist-packages/vyos/ifconfig/ethernet.py", line 177, in set_speed_duplex
return self._cmd(cmd)
File "/usr/lib/python3/dist-packages/vyos/ifconfig/control.py", line 52, in _cmd
return cmd(command, self.debug)
File "/usr/lib/python3/dist-packages/vyos/util.py", line 161, in cmd
raise OSError(code, feedback)
PermissionError: [Errno 1] failed to run command: ethtool --change eth0 autoneg on
returned:
exit code: 1
noteworthy:
cmd 'ethtool --show-pause eth0'
returned (out):
returned (err):
netlink error: Operation not supported
cmd 'ethtool --show-pause eth0'
returned (out):
returned (err):
netlink error: Operation not supported
cmd 'ethtool --change eth0 autoneg on'
returned (out):
returned (err):From the driver readme:
Speed and Duplex Configuration ------------------------------ You cannot set speed, duplex, or autonegotiation settings using ethtool. To see the speed configurations your device supports, run the following: # ethtool <ethX> To have your device advertise supported speeds, use the following: # ethtool -s <ethX> advertise N Where N is a bitmask of the desired speeds. For example, to have your device advertise 10000baseSR Full, use: # ethtool -s <ethX> advertise 0x80000000000 For more details, please refer to the ethtool man page.