Page MenuHomeVyOS Platform

Virtual-ethernet Interface vif mtu does not work
Closed, ResolvedPublicBUG

Description

For the vitual-interface changing mtu settings is wrongly implemented.

Vyos allows only mtu setting in the vif-interface. But it does not allow setting the mtu on the parent interface which is the virtual-interface itself.

So, this is implemented wrongly. The maintainer must allow to configure mtu at the base-interface level first, then v-if or sub-interface should automatically inherit that or allow the option to set it separately.

[edit interfaces virtual-ethernet veth2]
vyos@vyos# show
 peer-name veth200
 vif 10 {
     address 10.0.0.5/30
 }

Then if I try to set the mtu on the vif - 

[edit interfaces virtual-ethernet veth2]
vyos@vyos# compare
[veth2 vif 10]
+ mtu "9000"

As expected - the base interface here is - veth2 as it's mtu is 1500 and we cannot change it from vyos-cli it will fail -

Traceback (most recent call last):
  File "/usr/libexec/vyos/conf_mode/interfaces_virtual-ethernet.py", line 110, in <module>
    apply(c)
  File "/usr/libexec/vyos/conf_mode/interfaces_virtual-ethernet.py", line 100, in apply
    p.update(veth)
  File "/usr/lib/python3/dist-packages/vyos/ifconfig/interface.py", line 1944, in update
    vlan.update(vif_config)
  File "/usr/lib/python3/dist-packages/vyos/ifconfig/interface.py", line 1769, in update
    self.set_mtu(config.get('mtu'))
  File "/usr/lib/python3/dist-packages/vyos/ifconfig/interface.py", line 465, in set_mtu
    return self.set_interface('mtu', mtu)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/vyos/ifconfig/control.py", line 195, in set_interface
    return self._set_command(self.config, name, value)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/vyos/ifconfig/control.py", line 122, in _set_command
    return self._command_set[name].get('format', lambda _: _)(self._cmd(cmd))
                                                              ^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/vyos/ifconfig/control.py", line 64, in _cmd
    return cmd(command, self.debug)
           ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/vyos/utils/process.py", line 155, in cmd
    raise OSError(code, feedback)
FileNotFoundError: [Errno 2] failed to run command: ip link set dev veth2.10 mtu 9000
returned: 
exit code: 2

noteworthy:
cmd 'ip link set dev veth2.10 mtu 9000'
returned (out):

returned (err):
RTNETLINK answers: Numerical result out of range

[[interfaces virtual-ethernet veth2]] failed
Commit failed
[edit interfaces virtual-ethernet veth2]

But now - if I go to underlying linux and change the base-int mtu first, then I can chnage vif's mtu also.

root@vyos:~# echo 9000 > /sys/class/net/veth2/mtu

Now I can try the commit again, it will work because base interface mtu is changed.

vyos@vyos# compare
[veth2 vif 10]
+ mtu "9000"

[edit interfaces virtual-ethernet veth2]
vyos@vyos# commit
[edit interfaces virtual-ethernet veth2]
vyos@vyos#

Vyos maintainer kindly fix this. The developer just needs to implement an MTU command on the base interface.

Thanks in advance

Details

Version
VyOS 1.5-stream-2025-Q1
Is it a breaking change?
Perfectly compatible
Issue type
Bug (incorrect behavior)

Event Timeline

sajiby3k renamed this task from Virtual-Interface vif mtu does not work to Virtual-ethernet Interface vif mtu does not work.Fri, Mar 28, 7:02 PM
c-po changed the task status from Open to In progress.Fri, Mar 28, 7:44 PM
c-po claimed this task.
c-po triaged this task as Normal priority.
c-po moved this task from Open to Finished on the VyOS 1.5 Circinus board.
dmbaturin changed Is it a breaking change? from Unspecified (possibly destroys the router) to Perfectly compatible.