Comment 1 for bug 1682871

Revision history for this message
Scott Moser (smoser) wrote : Re: attempts to rename vlans / get_interfaces_by_mac does not filter vlans

It seems that this only reproduces on kernel 4.8, but does on 4.4.
The change put in to ignore certain nics was done based on 'addr_assign_type'
(/sys/class/net/<name>/addr_assign_type).
On 4.4 for a vlan, that shows as '0', (permanent address).
On 4.8, it (correctly) shows as '2' (stolen from another device)

To recreate this you can run the attached script.

$ MODE=vlan ./btest-launch.sh yakkety-server-cloudimg-amd64-proposed.img
...log in as ubuntu:password ...

Note, I can see this fail on xenial with 0.7.9-90-g61eb03fe-0ubuntu1~16.04.1
but cannot see it fail in yakkety I

## xenial
$ uname -r
4.4.0-72-generic
$ python3 -c 'from cloudinit.net import get_interfaces_by_mac; print(get_interfaces_by_mac())'
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/usr/lib/python3/dist-packages/cloudinit/net/__init__.py", line 403, in get_interfaces_by_mac
    (name, ret[mac], mac))
RuntimeError: duplicate mac found! both 'interface1.108' and 'interface1' have mac '52:54:00:12:34:02'

$ grep -r . /sys/class/net/*/ 2>/dev/null | grep addr_assign_type
/sys/class/net/interface0/addr_assign_type:0
/sys/class/net/interface1/addr_assign_type:0
/sys/class/net/interface1.108/addr_assign_type:0
/sys/class/net/lo/addr_assign_type:0

### yakkety
$ python3 -c 'from cloudinit.net import get_interfaces_by_mac; print(get_interfaces_by_mac())'
{'00:00:00:00:00:00': 'lo', '52:54:00:12:34:00': 'interface0', '52:54:00:12:34:02': 'interface1'}

$ uname -r
4.8.0-46-generic

$ grep -r . /sys/class/net/*/ 2>/dev/null | grep addr_assign_type
/sys/class/net/interface0/addr_assign_type:0
/sys/class/net/interface1/addr_assign_type:0
/sys/class/net/interface1.108/addr_assign_type:2
/sys/class/net/lo/addr_assign_type:0