Public bug reported: Neutron dynamic routing needs to be fixed in the iteration to obtain address_scope linked to a provider network with multiple subnets. A network can be linked to more than one subnet (e.g. ipv4 and ipv6), but if one of them does not have an address_scope, a null object element access failure occurs.
Fix proposed in the neutron-dynamic-routing project [1]. [1] - https://review.opendev.org/c/openstack/neutron-dynamic- routing/+/863708 Steps to reproduce: #1 - IPv6 address scope openstack address scope create --share --ip-version 6 bgp #2 - self-service subnet pool openstack subnet pool create --address-scope address-scope-ipv6 --share --default --pool-prefix 2001:db9:1234::/48 --default-prefix-length 64 --max-prefix-length 64 default-pool-ipv6 #3 - provider subnet pool openstack subnet pool create --address-scope address-scope-ipv6 --pool-prefix 2001:db9:4321:42::/64 --default-prefix-length 64 public-pool-ipv6 #4 - Provider network openstack network create provider --external --provider-physical-network \ provider --provider-network-type flat #5 - provider subnet openstack subnet create --ip-version 6 --subnet-pool public-pool-ipv6 --network provider --ipv6-address-mode dhcpv6-stateful --ipv6-ra-mode dhcpv6-stateful provider1-v6 openstack subnet create --ip-version 4 --network provider --dhcp --host-route destination=200.201.0.0/24,gateway=200.201.0.1 --subnet-range 200.201.0.0/24 provider1-v4 #6 - self-service network openstack network create self-service #7 - self-service subnet openstack subnet create --ip-version 6 --subnet-pool default-pool-ipv6 --network self-service --ipv6-address-mode dhcpv6-stateful --ipv6-ra-mode dhcpv6-stateful self-service-v6 openstack subnet create --ip-version 4 --network self-service --dhcp --host-route destination=192.168.0.0/24,gateway=192.168.0.1 --subnet-range 192.168.0.0/24 self-service-v4 #8 - create router openstack router create router1 #9 - add self-service subnet as an interface on the router openstack router add subnet router1 self-service-v4 openstack router add subnet router1 self-service-v6 #10 - Add the provider network as a gateway on each router. openstack router set --external-gateway provider router1 #11 - create bgp speaker openstack bgp speaker create --ip-version 6 --local-as 65000 bgpspeaker openstack bgp speaker add network bgpspeaker provider #12 - create a vm on the self-service network openstack server create --image cirros --flavor 1vcpu --network=self-service --security-group cf2e7d53-0db7-4873-82ab-cf67eceda937 vm1 # We can see the messages below in the neutron log: Nov 07 14:20:00 os-infra-1-neutron-server-container-819795c0 neutron-server[3698]: 2022-11-07 14:20:00.472 3698 ERROR neutron_lib.callbacks.manager [req-24fe543c-7122-4869-b52d-21ecb782ea0e 8c140d00a7754295beae4ac85c5beecc 115a2ce896ad4958a26e3a4d624902a5 - default default] Error during notification for neutron_dynamic_routing.services.bgp.bgp_plugin.BgpPlugin.port_callback-950729 port, after_update: AttributeError: 'NoneType' object has no attribute 'address_scope_id' 2022-11-07 14:20:00.472 3698 ERROR neutron_lib.callbacks.manager Traceback (most recent call last): 2022-11-07 14:20:00.472 3698 ERROR neutron_lib.callbacks.manager File "/usr/lib/python3/dist-packages/neutron_lib/callbacks/manager.py", line 181, in _notify_loop 2022-11-07 14:20:00.472 3698 ERROR neutron_lib.callbacks.manager callback(resource, event, trigger, payload=payload) 2022-11-07 14:20:00.472 3698 ERROR neutron_lib.callbacks.manager File "/usr/lib/python3/dist-packages/neutron_dynamic_routing/services/bgp/bgp_plugin.py", line 375, in port_callback 2022-11-07 14:20:00.472 3698 ERROR neutron_lib.callbacks.manager ext_nets = self.get_external_networks_for_port(ctx, 2022-11-07 14:20:00.472 3698 ERROR neutron_lib.callbacks.manager File "/usr/lib/python3/dist-packages/neutron_dynamic_routing/db/bgp_db.py", line 1190, in get_external_networks_for_port 2022-11-07 14:20:00.472 3698 ERROR neutron_lib.callbacks.manager ext_scope_set.add(ext_pool.address_scope_id) 2022-11-07 14:20:00.472 3698 ERROR neutron_lib.callbacks.manager AttributeError: 'NoneType' object has no attribute 'address_scope_id' 2022-11-07 14:20:00.472 3698 ERROR neutron_lib.callbacks.manager ** Affects: neutron Importance: Undecided Status: New -- You received this bug notification because you are a member of Yahoo! Engineering Team, which is subscribed to neutron. https://bugs.launchpad.net/bugs/1998104 Title: dynamic-routing: address_scope calculation error Status in neutron: New Bug description: Neutron dynamic routing needs to be fixed in the iteration to obtain address_scope linked to a provider network with multiple subnets. A network can be linked to more than one subnet (e.g. ipv4 and ipv6), but if one of them does not have an address_scope, a null object element access failure occurs. Fix proposed in the neutron-dynamic-routing project [1]. [1] - https://review.opendev.org/c/openstack/neutron-dynamic- routing/+/863708 Steps to reproduce: #1 - IPv6 address scope openstack address scope create --share --ip-version 6 bgp #2 - self-service subnet pool openstack subnet pool create --address-scope address-scope-ipv6 --share --default --pool-prefix 2001:db9:1234::/48 --default-prefix-length 64 --max-prefix-length 64 default-pool-ipv6 #3 - provider subnet pool openstack subnet pool create --address-scope address-scope-ipv6 --pool-prefix 2001:db9:4321:42::/64 --default-prefix-length 64 public-pool-ipv6 #4 - Provider network openstack network create provider --external --provider-physical-network \ provider --provider-network-type flat #5 - provider subnet openstack subnet create --ip-version 6 --subnet-pool public-pool-ipv6 --network provider --ipv6-address-mode dhcpv6-stateful --ipv6-ra-mode dhcpv6-stateful provider1-v6 openstack subnet create --ip-version 4 --network provider --dhcp --host-route destination=200.201.0.0/24,gateway=200.201.0.1 --subnet-range 200.201.0.0/24 provider1-v4 #6 - self-service network openstack network create self-service #7 - self-service subnet openstack subnet create --ip-version 6 --subnet-pool default-pool-ipv6 --network self-service --ipv6-address-mode dhcpv6-stateful --ipv6-ra-mode dhcpv6-stateful self-service-v6 openstack subnet create --ip-version 4 --network self-service --dhcp --host-route destination=192.168.0.0/24,gateway=192.168.0.1 --subnet-range 192.168.0.0/24 self-service-v4 #8 - create router openstack router create router1 #9 - add self-service subnet as an interface on the router openstack router add subnet router1 self-service-v4 openstack router add subnet router1 self-service-v6 #10 - Add the provider network as a gateway on each router. openstack router set --external-gateway provider router1 #11 - create bgp speaker openstack bgp speaker create --ip-version 6 --local-as 65000 bgpspeaker openstack bgp speaker add network bgpspeaker provider #12 - create a vm on the self-service network openstack server create --image cirros --flavor 1vcpu --network=self-service --security-group cf2e7d53-0db7-4873-82ab-cf67eceda937 vm1 # We can see the messages below in the neutron log: Nov 07 14:20:00 os-infra-1-neutron-server-container-819795c0 neutron-server[3698]: 2022-11-07 14:20:00.472 3698 ERROR neutron_lib.callbacks.manager [req-24fe543c-7122-4869-b52d-21ecb782ea0e 8c140d00a7754295beae4ac85c5beecc 115a2ce896ad4958a26e3a4d624902a5 - default default] Error during notification for neutron_dynamic_routing.services.bgp.bgp_plugin.BgpPlugin.port_callback-950729 port, after_update: AttributeError: 'NoneType' object has no attribute 'address_scope_id' 2022-11-07 14:20:00.472 3698 ERROR neutron_lib.callbacks.manager Traceback (most recent call last): 2022-11-07 14:20:00.472 3698 ERROR neutron_lib.callbacks.manager File "/usr/lib/python3/dist-packages/neutron_lib/callbacks/manager.py", line 181, in _notify_loop 2022-11-07 14:20:00.472 3698 ERROR neutron_lib.callbacks.manager callback(resource, event, trigger, payload=payload) 2022-11-07 14:20:00.472 3698 ERROR neutron_lib.callbacks.manager File "/usr/lib/python3/dist-packages/neutron_dynamic_routing/services/bgp/bgp_plugin.py", line 375, in port_callback 2022-11-07 14:20:00.472 3698 ERROR neutron_lib.callbacks.manager ext_nets = self.get_external_networks_for_port(ctx, 2022-11-07 14:20:00.472 3698 ERROR neutron_lib.callbacks.manager File "/usr/lib/python3/dist-packages/neutron_dynamic_routing/db/bgp_db.py", line 1190, in get_external_networks_for_port 2022-11-07 14:20:00.472 3698 ERROR neutron_lib.callbacks.manager ext_scope_set.add(ext_pool.address_scope_id) 2022-11-07 14:20:00.472 3698 ERROR neutron_lib.callbacks.manager AttributeError: 'NoneType' object has no attribute 'address_scope_id' 2022-11-07 14:20:00.472 3698 ERROR neutron_lib.callbacks.manager To manage notifications about this bug go to: https://bugs.launchpad.net/neutron/+bug/1998104/+subscriptions -- Mailing list: https://launchpad.net/~yahoo-eng-team Post to : [email protected] Unsubscribe : https://launchpad.net/~yahoo-eng-team More help : https://help.launchpad.net/ListHelp

