Reviewed: https://review.openstack.org/277657 Committed: https://git.openstack.org/cgit/openstack/neutron/commit/?id=7b5f01c2e58cd21ab3d46676ee6a3288012fbb45 Submitter: Jenkins Branch: master
commit 7b5f01c2e58cd21ab3d46676ee6a3288012fbb45 Author: Brian Haley <[email protected]> Date: Tue Jan 24 13:34:58 2017 -0500 Add IPv6 Prefix Delegation support for DVR Unlike Legacy routers, DVR Edge Routers have their gateway interfaces in the SNAT namespace as opposed to the router namespace. Added a new method to the router_info class, get_gw_ns_name(), so callers can determine which namespace the gateway device lives in. This can then be over-ridden in the DVR Edge router class. The Prefix Delegation code will also now listen on the update_router event from the l3-agent and reset the namespace name if it changes. Closes-Bug: #1541406 Change-Id: If6ada5027d0483fac7fc3ff935fee1edfc6e2759 ** Changed in: neutron Status: In Progress => Fix Released -- You received this bug notification because you are a member of Yahoo! Engineering Team, which is subscribed to neutron. https://bugs.launchpad.net/bugs/1541406 Title: IPv6 prefix delegation does not work with DVR Status in neutron: Fix Released Bug description: Using a recent single-node devstack install, I tried to enable IPv6 prefix delegation following the exact instructions in the advanced networking guide - http://docs.openstack.org/liberty/networking- guide/adv_config_ipv6.html $ neutron net-create ipv6-pd $ neutron subnet-create ipv6-pd --name ipv6-pd-1 --ip_version 6 --ipv6_ra_mode slaac --ipv6_address_mode slaac $ neutron router-interface-add ... The l3-agent threw an exception: 2016-02-02 10:28:07.014 23328 DEBUG neutron.agent.linux.utils [-] Running command (rootwrap daemon): ['ip', 'netns', 'exec', 'qrouter-f932415c-2cbd-4bcf-a54e-d7f7ee890908', 'ip', '-6', 'addr', 'add', 'fe80::f816:3eff:fe79:188c/64', 'scope', 'link', 'dev', 'qg-e4629b84-e8'] execute_rootwrap_daemon /opt/stack/neutron/neutron/agent/linux/utils.py:100 2016-02-02 10:28:07.068 23328 ERROR neutron.agent.linux.utils [-] Exit code: 1; Stdin: ; Stdout: ; Stderr: Cannot find device "qg-e4629b84-e8" 2016-02-02 10:28:07.069 23328 DEBUG oslo_concurrency.lockutils [-] Lock "l3-agent-pd" released by "neutron.agent.linux.pd.enable_subnet" :: held 0.055s inner /usr/local/lib/python2.7/dist-packages/oslo_concurrency/lockutils.py:282 2016-02-02 10:28:07.069 23328 ERROR neutron.agent.l3.router_info [-] Exit code: 1; Stdin: ; Stdout: ; Stderr: Cannot find device "qg-e4629b84-e8" 2016-02-02 10:28:07.069 23328 ERROR neutron.agent.l3.router_info Traceback (most recent call last): 2016-02-02 10:28:07.069 23328 ERROR neutron.agent.l3.router_info File "/opt/stack/neutron/neutron/common/utils.py", line 368, in call 2016-02-02 10:28:07.069 23328 ERROR neutron.agent.l3.router_info return func(*args, **kwargs) 2016-02-02 10:28:07.069 23328 ERROR neutron.agent.l3.router_info File "/opt/stack/neutron/neutron/agent/l3/router_info.py", line 736, in process 2016-02-02 10:28:07.069 23328 ERROR neutron.agent.l3.router_info self._process_internal_ports(agent.pd) 2016-02-02 10:28:07.069 23328 ERROR neutron.agent.l3.router_info File "/opt/stack/neutron/neutron/agent/l3/router_info.py", line 388, in _process_internal_ports 2016-02-02 10:28:07.069 23328 ERROR neutron.agent.l3.router_info interface_name, p['mac_address']) 2016-02-02 10:28:07.069 23328 ERROR neutron.agent.l3.router_info File "/usr/local/lib/python2.7/dist-packages/oslo_concurrency/lockutils.py", line 271, in inner 2016-02-02 10:28:07.069 23328 ERROR neutron.agent.l3.router_info return f(*args, **kwargs) 2016-02-02 10:28:07.069 23328 ERROR neutron.agent.l3.router_info File "/opt/stack/neutron/neutron/agent/linux/pd.py", line 81, in enable_subnet 2016-02-02 10:28:07.069 23328 ERROR neutron.agent.l3.router_info self._add_lla(router, pd_info.get_bind_lla_with_mask()) 2016-02-02 10:28:07.069 23328 ERROR neutron.agent.l3.router_info File "/opt/stack/neutron/neutron/agent/linux/pd.py", line 196, in _add_lla 2016-02-02 10:28:07.069 23328 ERROR neutron.agent.l3.router_info 'link') 2016-02-02 10:28:07.069 23328 ERROR neutron.agent.l3.router_info File "/opt/stack/neutron/neutron/agent/linux/interface.py", line 194, in add_ipv6_addr 2016-02-02 10:28:07.069 23328 ERROR neutron.agent.l3.router_info device.addr.add(str(net), scope) 2016-02-02 10:28:07.069 23328 ERROR neutron.agent.l3.router_info File "/opt/stack/neutron/neutron/agent/linux/ip_lib.py", line 532, in add 2016-02-02 10:28:07.069 23328 ERROR neutron.agent.l3.router_info self._as_root([net.version], tuple(args)) 2016-02-02 10:28:07.069 23328 ERROR neutron.agent.l3.router_info File "/opt/stack/neutron/neutron/agent/linux/ip_lib.py", line 322, in _as_root 2016-02-02 10:28:07.069 23328 ERROR neutron.agent.l3.router_info use_root_namespace=use_root_namespace) 2016-02-02 10:28:07.069 23328 ERROR neutron.agent.l3.router_info File "/opt/stack/neutron/neutron/agent/linux/ip_lib.py", line 95, in _as_root 2016-02-02 10:28:07.069 23328 ERROR neutron.agent.l3.router_info log_fail_as_error=self.log_fail_as_error) 2016-02-02 10:28:07.069 23328 ERROR neutron.agent.l3.router_info File "/opt/stack/neutron/neutron/agent/linux/ip_lib.py", line 104, in _execute 2016-02-02 10:28:07.069 23328 ERROR neutron.agent.l3.router_info log_fail_as_error=log_fail_as_error) 2016-02-02 10:28:07.069 23328 ERROR neutron.agent.l3.router_info File "/opt/stack/neutron/neutron/agent/linux/utils.py", line 140, in execute 2016-02-02 10:28:07.069 23328 ERROR neutron.agent.l3.router_info raise RuntimeError(msg) 2016-02-02 10:28:07.069 23328 ERROR neutron.agent.l3.router_info RuntimeError: Exit code: 1; Stdin: ; Stdout: ; Stderr: Cannot find device "qg-e4629b84-e8" 2016-02-02 10:28:07.069 23328 ERROR neutron.agent.l3.router_info 2016-02-02 10:28:07.069 23328 ERROR neutron.agent.l3.router_info 2016-02-02 10:28:07.075 23328 ERROR neutron.agent.l3.agent [-] Failed to process compatible router 'f932415c-2cbd-4bcf-a54e-d7f7ee890908' 2016-02-02 10:28:07.075 23328 ERROR neutron.agent.l3.agent Traceback (most recent call last): 2016-02-02 10:28:07.075 23328 ERROR neutron.agent.l3.agent File "/opt/stack/neutron/neutron/agent/l3/agent.py", line 497, in _process_router_update 2016-02-02 10:28:07.075 23328 ERROR neutron.agent.l3.agent self._process_router_if_compatible(router) 2016-02-02 10:28:07.075 23328 ERROR neutron.agent.l3.agent File "/opt/stack/neutron/neutron/agent/l3/agent.py", line 436, in _process_router_if_compatible 2016-02-02 10:28:07.075 23328 ERROR neutron.agent.l3.agent self._process_updated_router(router) 2016-02-02 10:28:07.075 23328 ERROR neutron.agent.l3.agent File "/opt/stack/neutron/neutron/agent/l3/agent.py", line 450, in _process_updated_router 2016-02-02 10:28:07.075 23328 ERROR neutron.agent.l3.agent ri.process(self) 2016-02-02 10:28:07.075 23328 ERROR neutron.agent.l3.agent File "/opt/stack/neutron/neutron/agent/l3/dvr_local_router.py", line 460, in process 2016-02-02 10:28:07.075 23328 ERROR neutron.agent.l3.agent super(DvrLocalRouter, self).process(agent) 2016-02-02 10:28:07.075 23328 ERROR neutron.agent.l3.agent File "/opt/stack/neutron/neutron/agent/l3/dvr_router_base.py", line 30, in process 2016-02-02 10:28:07.075 23328 ERROR neutron.agent.l3.agent super(DvrRouterBase, self).process(agent) 2016-02-02 10:28:07.075 23328 ERROR neutron.agent.l3.agent File "/opt/stack/neutron/neutron/common/utils.py", line 371, in call 2016-02-02 10:28:07.075 23328 ERROR neutron.agent.l3.agent self.logger(e) 2016-02-02 10:28:07.075 23328 ERROR neutron.agent.l3.agent File "/usr/local/lib/python2.7/dist-packages/oslo_utils/excutils.py", line 204, in __exit__ 2016-02-02 10:28:07.075 23328 ERROR neutron.agent.l3.agent six.reraise(self.type_, self.value, self.tb) 2016-02-02 10:28:07.075 23328 ERROR neutron.agent.l3.agent File "/opt/stack/neutron/neutron/common/utils.py", line 368, in call 2016-02-02 10:28:07.075 23328 ERROR neutron.agent.l3.agent return func(*args, **kwargs) 2016-02-02 10:28:07.075 23328 ERROR neutron.agent.l3.agent File "/opt/stack/neutron/neutron/agent/l3/router_info.py", line 736, in process 2016-02-02 10:28:07.075 23328 ERROR neutron.agent.l3.agent self._process_internal_ports(agent.pd) 2016-02-02 10:28:07.075 23328 ERROR neutron.agent.l3.agent File "/opt/stack/neutron/neutron/agent/l3/router_info.py", line 388, in _process_internal_ports 2016-02-02 10:28:07.075 23328 ERROR neutron.agent.l3.agent interface_name, p['mac_address']) 2016-02-02 10:28:07.075 23328 ERROR neutron.agent.l3.agent File "/usr/local/lib/python2.7/dist-packages/oslo_concurrency/lockutils.py", line 271, in inner 2016-02-02 10:28:07.075 23328 ERROR neutron.agent.l3.agent return f(*args, **kwargs) 2016-02-02 10:28:07.075 23328 ERROR neutron.agent.l3.agent File "/opt/stack/neutron/neutron/agent/linux/pd.py", line 81, in enable_subnet 2016-02-02 10:28:07.075 23328 ERROR neutron.agent.l3.agent self._add_lla(router, pd_info.get_bind_lla_with_mask()) 2016-02-02 10:28:07.075 23328 ERROR neutron.agent.l3.agent File "/opt/stack/neutron/neutron/agent/linux/pd.py", line 196, in _add_lla 2016-02-02 10:28:07.075 23328 ERROR neutron.agent.l3.agent 'link') 2016-02-02 10:28:07.075 23328 ERROR neutron.agent.l3.agent File "/opt/stack/neutron/neutron/agent/linux/interface.py", line 194, in add_ipv6_addr 2016-02-02 10:28:07.075 23328 ERROR neutron.agent.l3.agent device.addr.add(str(net), scope) 2016-02-02 10:28:07.075 23328 ERROR neutron.agent.l3.agent File "/opt/stack/neutron/neutron/agent/linux/ip_lib.py", line 532, in add 2016-02-02 10:28:07.075 23328 ERROR neutron.agent.l3.agent self._as_root([net.version], tuple(args)) 2016-02-02 10:28:07.075 23328 ERROR neutron.agent.l3.agent File "/opt/stack/neutron/neutron/agent/linux/ip_lib.py", line 322, in _as_root 2016-02-02 10:28:07.075 23328 ERROR neutron.agent.l3.agent use_root_namespace=use_root_namespace) 2016-02-02 10:28:07.075 23328 ERROR neutron.agent.l3.agent File "/opt/stack/neutron/neutron/agent/linux/ip_lib.py", line 95, in _as_root 2016-02-02 10:28:07.075 23328 ERROR neutron.agent.l3.agent log_fail_as_error=self.log_fail_as_error) 2016-02-02 10:28:07.075 23328 ERROR neutron.agent.l3.agent File "/opt/stack/neutron/neutron/agent/linux/ip_lib.py", line 104, in _execute 2016-02-02 10:28:07.075 23328 ERROR neutron.agent.l3.agent log_fail_as_error=log_fail_as_error) 2016-02-02 10:28:07.075 23328 ERROR neutron.agent.l3.agent File "/opt/stack/neutron/neutron/agent/linux/utils.py", line 140, in execute 2016-02-02 10:28:07.075 23328 ERROR neutron.agent.l3.agent raise RuntimeError(msg) 2016-02-02 10:28:07.075 23328 ERROR neutron.agent.l3.agent RuntimeError: Exit code: 1; Stdin: ; Stdout: ; Stderr: Cannot find device "qg-e4629b84-e8" 2016-02-02 10:28:07.075 23328 ERROR neutron.agent.l3.agent 2016-02-02 10:28:07.075 23328 ERROR neutron.agent.l3.agent That interface, qg-e4629b84-e8, lives in the SNAT namespace on a network node in dvr_snat mode. Looking into it. To manage notifications about this bug go to: https://bugs.launchpad.net/neutron/+bug/1541406/+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

