Comment 0 for bug 1374663

Revision history for this message
Lars Kellogg-Stedman (larsks) wrote : agent/linux/ip_lib.py does not correctly handle output from 'iproute2' command

The get_devices() method in neutron/agent/linux/ip_lib.py chokes if 'iproute2' presents interface names containing '@', such as ipip tunnels:

    513: tunl0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN mode DEFAULT group default
        link/ipip 0.0.0.0 brd 0.0.0.0

And macvlan devices:

    4: clone@eth0: <BROADCAST,MULTICAST> mtu 1454 qdisc noop state DOWN mode DEFAULT group default
        link/ether c6:dd:66:a5:f6:5c brd ff:ff:ff:ff:ff:ff

Consider the follow sample code:

    from neutron.agent.linux.ip_lib import IPWrapper

    ip = IPWrapper()
    for iface in ip.get_devices():
        print iface.name, iface.addr.list()

The mere presence of one of the above interface names will cause the
code to fail with:

    RuntimeError:
    Command: ['ip', 'addr', 'show', 'tunl0@NONE']
    Exit code: 1
    Stdout: ''
    Stderr: 'Device "tunl0@NONE" does not exist.\n'

This can cause failures in, e.g.,
neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py, which
performs almost exactly the same iteration in the
get_interface_by_ip() method.