Page MenuHomeVyOS Platform

Loading vyos on a system without xdp installed fails
Closed, ResolvedPublicBUG

Description

When vyos is loading on a system that does not have XDP installed it will fail loading and give a horrible error message to the user:

Traceback (most recent call last):
  File "/usr/libexec/vyos/vyos-boot-config-loader.py", line 143, in <module>
    commit_out = session.commit()
  File "/usr/lib/python3/dist-packages/vyos/configsession.py", line 164, in commit
    out = self.__run_command([COMMIT])
  File "/usr/lib/python3/dist-packages/vyos/configsession.py", line 136, in __run_command
    raise ConfigSessionError(output)
vyos.configsession.ConfigSessionError: [ interfaces loopback lo ]
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):
- Make sure you are running the latest version of the code available at
  https://downloads.vyos.io/rolling/current/amd64/vyos-rolling-latest.iso
- Consult the forum to see how to handle this issue
  https://forum.vyos.io
- Join our community 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:      2019-02-14 10:12:56
Image Version:    VyOS 1.4-rolling-202103160721
Release Train:    sagitta
Built by:         [email protected]
Built on:         Tue 16 Mar 2021 07:21 UTC
Build UUID:       f3fdb8f4-5c67-4411-af75-a134a9d94ede
Build Commit ID:  e758a269e84509-dirty
Architecture:     aarch64
Boot via:         installed image
System type:      bare metal
Hardware vendor:  
Hardware model:   
Hardware S/N:     100000000077598c
Hardware UUID:    30303031-3030-3030-3030-373735393863
Traceback (most recent call last):
  File "/usr/libexec/vyos/conf_mode/interfaces-loopback.py", line 61, in <module>
    apply(c)
  File "/usr/libexec/vyos/conf_mode/interfaces-loopback.py", line 52, in apply
    l.update(loopback)
  File "/usr/lib/python3/dist-packages/vyos/ifconfig/loopback.py", line 68, in update
    super().update(config)
  File "/usr/lib/python3/dist-packages/vyos/ifconfig/interface.py", line 1240, in update
    self.set_xdp('xdp' in config)
  File "/usr/lib/python3/dist-packages/vyos/ifconfig/interface.py", line 1064, in set_xdp
    return self._cmd(cmd)
  File "/usr/lib/python3/dist-packages/vyos/ifconfig/control.py", line 51, in _cmd
    return cmd(command, self.debug)
  File "/usr/lib/python3/dist-packages/vyos/util.py", line 179, in cmd
    raise OSError(code, feedback)
OSError: [Errno 127] failed to run command: xdp_loader -d lo -U --auto-mode
returned: 
exit code: 127
noteworthy:
cmd 'xdp_loader -d lo -U --auto-mode'
returned (out):
returned (err):
/bin/sh: xdp_loader: command not found
[[interfaces loopback lo]] failed
[ interfaces ethernet eth0 ]
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):
- Make sure you are running the latest version of the code available at
  https://downloads.vyos.io/rolling/current/amd64/vyos-rolling-latest.iso
- Consult the forum to see how to handle this issue
  https://forum.vyos.io
- Join our community 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:      2019-02-14 10:12:59
Image Version:    VyOS 1.4-rolling-202103160721
Release Train:    sagitta
Built by:         [email protected]
Built on:         Tue 16 Mar 2021 07:21 UTC
Build UUID:       f3fdb8f4-5c67-4411-af75-a134a9d94ede
Build Commit ID:  e758a269e84509-dirty
Architecture:     aarch64
Boot via:         installed image
System type:      bare metal
Hardware vendor:  
Hardware model:   
Hardware S/N:     100000000077598c
Hardware UUID:    30303031-3030-3030-3030-373735393863
Traceback (most recent call last):
  File "/usr/libexec/vyos/conf_mode/interfaces-ethernet.py", line 157, in <module>
    apply(c)
  File "/usr/libexec/vyos/conf_mode/interfaces-ethernet.py", line 146, in apply
    e.update(ethernet)
  File "/usr/lib/python3/dist-packages/vyos/ifconfig/ethernet.py", line 355, in update
    super().update(config)
  File "/usr/lib/python3/dist-packages/vyos/ifconfig/interface.py", line 1240, in update
    self.set_xdp('xdp' in config)
  File "/usr/lib/python3/dist-packages/vyos/ifconfig/interface.py", line 1064, in set_xdp
    return self._cmd(cmd)
  File "/usr/lib/python3/dist-packages/vyos/ifconfig/control.py", line 51, in _cmd
    return cmd(command, self.debug)
  File "/usr/lib/python3/dist-packages/vyos/util.py", line 179, in cmd
    raise OSError(code, feedback)
OSError: [Errno 127] failed to run command: xdp_loader -d eth0 -U --auto-mode
returned: 
exit code: 127
noteworthy:
cmd 'ethtool -g eth0'
returned (out):
Ring parameters for eth0:
returned (err):
Cannot get device ring settings: Operation not supported
cmd 'ethtool --show-pause eth0'
returned (out):
Pause parameters for eth0:
returned (err):
Cannot get device pause settings: Operation not supported
cmd 'ethtool -K eth0 tso off'
returned (out):
returned (err):
Cannot change tcp-segmentation-offload
cmd 'ethtool -K eth0 ufo off'
returned (out):
returned (err):
Cannot change udp-fragmentation-offload
cmd 'ethtool eth0'
returned (out):
Settings for eth0:
    Supports Wake-on: gsf
    Wake-on: d
        SecureOn password: 00:00:00:00:00:00
    Current message level: 0x00000007 (7)
                   drv probe link
    Link detected: no
returned (err):
Cannot get device settings: Invalid argument
cmd 'ethtool -s eth0 autoneg on'
returned (out):
returned (err):
Cannot get current device settings: Invalid argument
  not setting autoneg
cmd 'xdp_loader -d eth0 -U --auto-mode'
returned (out):
returned (err):
/bin/sh: xdp_loader: command not found
[[interfaces ethernet eth0]] failed
Commit failed

There is a hotfix for fixing this issue:

diff --git a/python/vyos/ifconfig/interface.py b/python/vyos/ifconfig/interface.py
index fe6a3c95..be26694c 100644
--- a/python/vyos/ifconfig/interface.py
+++ b/python/vyos/ifconfig/interface.py
@@ -1048,6 +1048,8 @@ class Interface(Control):
         >>> i = Interface('eth0')
         >>> i.set_xdp(True)
         """
+        if not os.path.exists('/usr/sbin/xdp_loader'):
+            return
         if not isinstance(state, bool):
             raise ValueError("Value out of range")

This fix works for fixing the imminent issue , but a more correct way for fixing this should be implemented..

This is an issue on arm platforms where XDP is not easily built as for now.

Details

Difficulty level
Unknown (require assessment)
Version
1.4 (on arm)
Why the issue appeared?
Will be filled on close
Is it a breaking change?
Perfectly compatible

Event Timeline

runar renamed this task from Loading vyos on a non-xdp system fails to Loading vyos on a system without xdp installed fails.Mar 30 2021, 7:52 AM
runar created this task.
c-po claimed this task.
c-po triaged this task as Low priority.