OpenStack Queens from UCA (xenial, GA kernel, deployed via OpenStack charms), 2 external subnets (one routed provider network), 1 tenant subnet, all subnets in the same address scope to trigger "fast exit" logic.
# ------
# Doesn't work the other way around - as a fip namespace does not get created before a tenant network is attached
openstack router create --disable --no-ha --distributed pubrouter
Overall, similar scenario to https:/ /bugs.launchpad .net/neutron/ +bug/1759956 but a different problem.
OpenStack Queens from UCA (xenial, GA kernel, deployed via OpenStack charms), 2 external subnets (one routed provider network), 1 tenant subnet, all subnets in the same address scope to trigger "fast exit" logic.
Tenant subnet cidr: 192.168.100.0/24
openstack address scope create dev physical- network physnet1 --provider- network- type flat pubnet 4466-4a45- 972c-45ffcec9f6 bc 232.17. 0,end=10. 232.17. 255 --dns-nameserver 10.232.36.101 --ip-version 4 --network pubnet --network-segment segment1 pubsubnetl1 232.41. 0,end=10. 232.41. 255 --dns-nameserver 10.232.36.101 --ip-version 4 --network pubnet --network-segment segment2 pubsubnetl2 network- type vxlan tenantnet
openstack subnet pool create --address-scope dev --pool-prefix 10.232.40.0/21 --pool-prefix 10.232.16.0/21 dev
openstack subnet pool create --address-scope dev --pool-prefix 192.168.100.0/24 tenant
openstack network create --external --provider-
openstack network segment set --name segment1 d8391bfb-
openstack network segment create --physical-network physnet2 --network-type flat --network pubnet segment2
openstack subnet create --no-dhcp --subnet-pool dev --subnet-range 10.232.16.0/21 --allocation-pool start=10.
openstack subnet create --gateway 10.232.40.100 --no-dhcp --subnet-pool dev --subnet-range 10.232.40.0/21 --allocation-pool start=10.
openstack network create --internal --provider-
openstack subnet create --dhcp --ip-version 4 --subnet-range 192.168.100.0/24 --subnet-pool tenant --dns-nameserver 10.232.36.101 --network tenantnet tenantsubnet
# -------
# Works in this order when an external network is attached first
openstack router create --disable --no-ha --distributed pubrouter
openstack router set --disable-snat --external-gateway pubnet --enable pubrouter
openstack router add subnet pubrouter tenantsubnet
2018-03-29 23:30:48.933 2050638 DEBUG neutron. agent.linux. utils [-] Running command: ['sudo', 'neutron-rootwrap', '/etc/neutron/ rootwrap. conf', 'ip', 'ne dc45-4237- 9ce0-a9e1977735 eb', 'ip', '-4', 'route', 'replace', '192.168.100.0/24', 'via', '169.254.106.114', 'dev', 'fpr-09fd1 python2. 7/dist- packages/ neutron/ agent/linux/ utils.py: 92
tns', 'exec', 'fip-d0f008fc-
424-7'] create_process /usr/lib/
# ------
# Doesn't work the other way around - as a fip namespace does not get created before a tenant network is attached
openstack router create --disable --no-ha --distributed pubrouter
openstack router add subnet pubrouter tenantsubnet
openstack router set --disable-snat --external-gateway pubnet --enable pubrouter
# to "fix" this we need to re-trigger the right code path
openstack router remove subnet pubrouter tenantsubnet
openstack router add subnet pubrouter tenantsubnet
The right code path seems to be in dvr_local_router.py /github. com/openstack/ neutron/ blob/stable/ queens/ neutron/ agent/l3/ dvr_local_ router. py#L413 /github. com/openstack/ neutron/ blob/stable/ queens/ neutron/ agent/l3/ dvr_local_ router. py#L623- L632
https:/
https:/
Based on a quick grep nothing in dvr_fip_ns.py calls internal_ network_ added so this never gets triggered.
neutron/ agent/l3/ dvr_edge_ ha_router. py|40| def internal_ network_ added(self, port): agent/l3/ dvr_edge_ ha_router. py|41| # Call RouterInfo's internal_ network_ added (Plugs the port, adds IP) agent/l3/ dvr_edge_ ha_router. py|42| router_ info.RouterInfo .internal_ network_ added(self, port) agent/l3/ dvr_edge_ router. py|96| def internal_ network_ added(self, port): agent/l3/ dvr_edge_ router. py|97| super(DvrEdgeRo uter, self).internal_ network_ added(port) agent/l3/ dvr_edge_ router. py|110| self._internal_ network_ added( agent/l3/ dvr_edge_ router. py|142| self._internal_ network_ added( agent/l3/ dvr_local_ router. py|398| def internal_ network_ added(self, port): agent/l3/ dvr_local_ router. py|399| super(DvrLocalR outer, self).internal_ network_ added(port) agent/l3/ ha_router. py|331| def internal_ network_ added(self, port): agent/l3/ router_ info.py| 441| def _internal_ network_ added(self, ns_name, network_id, port_id, agent/l3/ router_ info.py| 458| def internal_ network_ added(self, port): agent/l3/ router_ info.py| 466| self._internal_ network_ added(self. ns_name, agent/l3/ router_ info.py| 556| self.internal_ network_ added(p)
neutron/
neutron/
neutron/
neutron/
neutron/
neutron/
neutron/
neutron/
neutron/
neutron/
neutron/
neutron/
neutron/
https:/ /github. com/openstack/ neutron/ blob/stable/ queens/ neutron/ agent/l3/ dvr_fip_ ns.py