Comment 33 for bug 1904730

Revision history for this message
Billy Olsen (billy-olsen) wrote :

For bionic, the provided test case needs some tweaks as the neutron version on bionic does not have the provided functions. Instead, I've written a quick test script that will exercise the pyroute2 code path to exercise the errors. Still requires enabling vfs as James did.

Simple script is:

#!/usr/bin/python3
import pyroute2

ip = pyroute2.IPRoute()
devname = 'enp3s0f0'
link_idx = ip.link_lookup(ifname=devname)[0]
link = ip.link('get', index=link_idx, ext_mask=1)[0]

num_vfs = link.get_attr('IFLA_NUM_VF')
print(num_vfs)

Running test on bionic without this fix to prove its enough to show the error:

$ dpkg -l | grep python3-pyroute2
ii python3-pyroute2 0.4.21-0.1ubuntu2 all Python3 Netlink library

$ sudo ./lp1904730-test.py
Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/pyroute2/netlink/__init__.py", line 1232, in _ft_decode_generic
    self.decode_nlas(offset)
  File "/usr/lib/python3/dist-packages/pyroute2/netlink/__init__.py", line 1357, in decode_nlas
    offset)
struct.error: unpack_from requires a buffer of at least 4 bytes

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "./lp1904730-test.py", line 7, in <module>
    link = ip.link('get', index=link_idx, ext_mask=1)[0]
  File "/usr/lib/python3/dist-packages/pyroute2/iproute.py", line 1310, in link
    msg_flags=msg_flags)
  File "/usr/lib/python3/dist-packages/pyroute2/netlink/nlsocket.py", line 804, in nlm_request
    return do_try()
  File "/usr/lib/python3/dist-packages/pyroute2/netlink/nlsocket.py", line 783, in do_try
    callback=callback)
  File "/usr/lib/python3/dist-packages/pyroute2/netlink/nlsocket.py", line 648, in get
    raise msg['header']['error']
  File "/usr/lib/python3/dist-packages/pyroute2/netlink/nlsocket.py", line 171, in parse
    msg.decode()
  File "/usr/lib/python3/dist-packages/pyroute2/netlink/__init__.py", line 941, in decode
    self._ft_decode(self, offset)
  File "/usr/lib/python3/dist-packages/pyroute2/netlink/__init__.py", line 1235, in _ft_decode_generic
    raise NetlinkNLADecodeError(e)
pyroute2.netlink.exceptions.NetlinkNLADecodeError: unpack_from requires a buffer of at least 4 bytes

Running with the proposed patch:

$ dpkg -l | grep python3-pyroute2
ii python3-pyroute2 0.4.21-0.1ubuntu2.1 all Python3 Netlink library
$ sudo ./lp1904730-test.py
63