So, when Neutron loads a pre-existed user-defined bridge called 'br-eth1' and would like to let it connect the instances, it will fail because Nova writes 'brq-net-id' into libvirt conf file.
A good design is that, when creating port, Neutron sends bridge name back to Nova and Nova just makes it effective (write it into libvirt).
Nova hard-code 'brq' + net-id as bridge name in libvirt configuration, so it is impossible for neutron to define bridge name for instances.
nova/network/ neutronv2/ api.py:
def _nw_info_ build_network( self, port, networks, subnets):
1530 elif vif_type == network_ model.VIF_ TYPE_BRIDGE:
1531 bridge = "brq" + port['network_id']
So, when Neutron loads a pre-existed user-defined bridge called 'br-eth1' and would like to let it connect the instances, it will fail because Nova writes 'brq-net-id' into libvirt conf file.
A good design is that, when creating port, Neutron sends bridge name back to Nova and Nova just makes it effective (write it into libvirt).