Cannot add tap interface to the bridge when bridge mappings is not provided (Linux bridge)

Bug #1495161 reported by Kahou Lei
14
This bug affects 2 people
Affects Status Importance Assigned to Milestone
neutron
Fix Released
Undecided
Kahou Lei

Bug Description

I am using linux bridge and I cannot add dhcp tap interface when the bridge mappings is not provided.

Steps to reproduce:

1. Create a network
2. Create a subnet under that network
3. Observe that the dhcp port is DOWN

From the linux bridge log:

2015-09-12 18:25:28.857 ERROR neutron.plugins.ml2.drivers.linuxbridge.agent.linuxbridge_neutron_agent [req-9cf39db9-
5071-4b9a-bcb6-908f759de0f4 None None] Error in agent loop. Devices info: {'current': set(['tap895fe52f-0d', 'tapb2d
9e954-de', 'tap20a094ab-24', 'tap8aebc9c0-89', 'tap108580e4-6f', 'tapd4feefc5-f4']), 'removed': set([]), 'added': se
t(['tap895fe52f-0d', 'tapb2d9e954-de', 'tap20a094ab-24', 'tap8aebc9c0-89', 'tap108580e4-6f', 'tapd4feefc5-f4']), 'up
dated': set([])}
2015-09-12 18:25:28.857 TRACE neutron.plugins.ml2.drivers.linuxbridge.agent.linuxbridge_neutron_agent Traceback (mos
t recent call last):
2015-09-12 18:25:28.857 TRACE neutron.plugins.ml2.drivers.linuxbridge.agent.linuxbridge_neutron_agent File "/opt/s
tack/neutron/neutron/plugins/ml2/drivers/linuxbridge/agent/linuxbridge_neutron_agent.py", line 1110, in daemon_loop
2015-09-12 18:25:28.857 TRACE neutron.plugins.ml2.drivers.linuxbridge.agent.linuxbridge_neutron_agent sync = sel
f.process_network_devices(device_info)
2015-09-12 18:25:28.857 TRACE neutron.plugins.ml2.drivers.linuxbridge.agent.linuxbridge_neutron_agent File "/opt/s
tack/neutron/neutron/plugins/ml2/drivers/linuxbridge/agent/linuxbridge_neutron_agent.py", line 959, in process_netwo
rk_devices
2015-09-12 18:25:28.857 TRACE neutron.plugins.ml2.drivers.linuxbridge.agent.linuxbridge_neutron_agent resync_a =
 self.treat_devices_added_updated(devices_added_updated)
2015-09-12 18:25:28.857 TRACE neutron.plugins.ml2.drivers.linuxbridge.agent.linuxbridge_neutron_agent File "/opt/s
tack/neutron/neutron/plugins/ml2/drivers/linuxbridge/agent/linuxbridge_neutron_agent.py", line 998, in treat_devices
_added_updated
2015-09-12 18:25:28.857 TRACE neutron.plugins.ml2.drivers.linuxbridge.agent.linuxbridge_neutron_agent device_det
ails['port_id']):
2015-09-12 18:25:28.857 TRACE neutron.plugins.ml2.drivers.linuxbridge.agent.linuxbridge_neutron_agent File "/opt/s
tack/neutron/neutron/plugins/ml2/drivers/linuxbridge/agent/linuxbridge_neutron_agent.py", line 501, in add_interface
2015-09-12 18:25:28.857 TRACE neutron.plugins.ml2.drivers.linuxbridge.agent.linuxbridge_neutron_agent tap_device
_name)
2015-09-12 18:25:28.857 TRACE neutron.plugins.ml2.drivers.linuxbridge.agent.linuxbridge_neutron_agent File "/opt/s
tack/neutron/neutron/plugins/ml2/drivers/linuxbridge/agent/linuxbridge_neutron_agent.py", line 479, in add_tap_inter
face
2015-09-12 18:25:28.857 TRACE neutron.plugins.ml2.drivers.linuxbridge.agent.linuxbridge_neutron_agent if bridge_
lib.BridgeDevice(bridge_name).addif(tap_device_name):
2015-09-12 18:25:28.857 TRACE neutron.plugins.ml2.drivers.linuxbridge.agent.linuxbridge_neutron_agent File "/opt/s
tack/neutron/neutron/agent/linux/bridge_lib.py", line 38, in addif
2015-09-12 18:25:28.857 TRACE neutron.plugins.ml2.drivers.linuxbridge.agent.linuxbridge_neutron_agent return sel
f._brctl(['addif', self.name, interface])
2015-09-12 18:25:28.857 TRACE neutron.plugins.ml2.drivers.linuxbridge.agent.linuxbridge_neutron_agent File "/opt/s
tack/neutron/neutron/agent/linux/bridge_lib.py", line 26, in _brctl
2015-09-12 18:25:28.857 TRACE neutron.plugins.ml2.drivers.linuxbridge.agent.linuxbridge_neutron_agent return ip_
wrapper.netns.execute(cmd, run_as_root=True)
2015-09-12 18:25:28.857 TRACE neutron.plugins.ml2.drivers.linuxbridge.agent.linuxbridge_neutron_agent File "/opt/s
tack/neutron/neutron/agent/linux/ip_lib.py", line 795, in execute
2015-09-12 18:25:28.857 TRACE neutron.plugins.ml2.drivers.linuxbridge.agent.linuxbridge_neutron_agent extra_ok_c
odes=extra_ok_codes, **kwargs)
2015-09-12 18:25:28.857 TRACE neutron.plugins.ml2.drivers.linuxbridge.agent.linuxbridge_neutron_agent File "/opt/s
tack/neutron/neutron/agent/linux/utils.py", line 160, in execute
2015-09-12 18:25:28.857 TRACE neutron.plugins.ml2.drivers.linuxbridge.agent.linuxbridge_neutron_agent raise Runt
imeError(m)
2015-09-12 18:25:28.857 TRACE neutron.plugins.ml2.drivers.linuxbridge.agent.linuxbridge_neutron_agent RuntimeError:
2015-09-12 18:25:28.857 TRACE neutron.plugins.ml2.drivers.linuxbridge.agent.linuxbridge_neutron_agent Command: ['brc
tl', 'addif', None, u'tapb2d9e954-de']

From the code, looks like we need to provide bridge mapping when the interface mapping is provided:

https://github.com/openstack/neutron/blob/master/neutron/plugins/ml2/drivers/linuxbridge/agent/linuxbridge_neutron_agent.py#L456-L459

But this is not the case as it works in Kilo as bridge mapping option doesn't exist until Liberty.

Neutron version : Liberty

Attached local.conf here

Revision history for this message
Kahou Lei (kahou82) wrote :
Kahou Lei (kahou82)
Changed in neutron:
assignee: nobody → Kahou Lei (kahou82)
summary: Cannot add tap interface to the bridge when bridge mappings is not
- provided
+ provided (Linux bridge)
Revision history for this message
OpenStack Infra (hudson-openstack) wrote : Fix proposed to neutron (master)

Fix proposed to branch: master
Review: https://review.openstack.org/222895

Changed in neutron:
status: New → In Progress
Revision history for this message
Carl Baldwin (carl-baldwin) wrote :

Seems like a regression

Changed in neutron:
milestone: none → liberty-rc1
Revision history for this message
OpenStack Infra (hudson-openstack) wrote : Fix merged to neutron (master)

Reviewed: https://review.openstack.org/222895
Committed: https://git.openstack.org/cgit/openstack/neutron/commit/?id=7bde637eac621b90adebc26434e9924fd7ca64e5
Submitter: Jenkins
Branch: master

commit 7bde637eac621b90adebc26434e9924fd7ca64e5
Author: Kahou Lei <email address hidden>
Date: Sat Sep 12 18:48:04 2015 -0700

    Fix adding tap failure if bridge mapping is not provided

    When bridge mapping option is not provided, tap interface cannot be
    added properly. The root cause is that linux bridge agent is expecting
    bridge mapping option is provided if physical network is presented.

    However it is not always the case as Kilo was working fine
    without existing bridge mapping

    Change-Id: Ie43905887a9bc60858e3edae7fc339a7e0485716
    Closes-bug: #1495161

Changed in neutron:
status: In Progress → Fix Committed
Thierry Carrez (ttx)
Changed in neutron:
status: Fix Committed → Fix Released
Thierry Carrez (ttx)
Changed in neutron:
milestone: liberty-rc1 → 7.0.0
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Duplicates of this bug

Other bug subscribers

Bug attachments

Remote bug watches

Bug watches keep track of this bug in other bug trackers.