spacepaste

  1.  
  2. --- a/neutron/agent/l3/router_info.py 2017-01-26 15:02:57.275514546 -0600
  3. +++ b/neutron/agent/l3/router_info.py 2017-01-26 15:04:12.064516288 -0600
  4. @@ -28,6 +28,8 @@
  5. from neutron.common import utils as common_utils
  6. from neutron.ipam import utils as ipam_utils
  7. +import six
  8. +
  9. LOG = logging.getLogger(__name__)
  10. INTERNAL_DEV_PREFIX = namespaces.INTERNAL_DEV_PREFIX
  11. EXTERNAL_DEV_PREFIX = namespaces.EXTERNAL_DEV_PREFIX
  12. @@ -52,6 +54,7 @@
  13. self._snat_enabled = None
  14. self.fip_map = {}
  15. self.internal_ports = []
  16. + self.pd_subnets = {}
  17. self.floating_ips = set()
  18. # Invoke the setter for establishing initial SNAT action
  19. self.router = router
  20. @@ -212,6 +215,19 @@
  21. self.iptables_manager.apply()
  22. + def _process_pd_iptables_rules(self, prefix, subnet_id):
  23. + """Configure iptables rules for prefix delegated subnets"""
  24. + ext_scope = self._get_external_address_scope()
  25. + ext_scope_mark = self.get_address_scope_mark_mask(ext_scope)
  26. + ex_gw_device = self.get_external_device_name(
  27. + self.get_ex_gw_port()['id'])
  28. + scope_rule = self.address_scope_mangle_rule(ex_gw_device,
  29. + ext_scope_mark)
  30. + self.iptables_manager.ipv6['mangle'].add_rule(
  31. + 'scope',
  32. + '-d %s ' % prefix + scope_rule,
  33. + tag=('prefix_delegation_%s' % subnet_id))
  34. +
  35. def process_floating_ip_address_scope_rules(self):
  36. """Configure address scope related iptables rules for the router's
  37. floating IPs.
  38. @@ -527,6 +543,7 @@
  39. for subnet in p['subnets']:
  40. if ipv6_utils.is_ipv6_pd_enabled(subnet):
  41. pd.disable_subnet(self.router_id, subnet['id'])
  42. + del self.pd_subnets[subnet['id']]
  43. updated_cidrs = []
  44. if updated_ports:
  45. @@ -554,6 +571,7 @@
  46. subnet['cidr'],
  47. old_prefix,
  48. updated_cidrs)
  49. + self.pd_subnets[subnet['id']] = subnet['cidr']
  50. enable_ra = True
  51. # Enable RA
  52. @@ -983,6 +1001,9 @@
  53. iptables['filter'].add_rule(
  54. 'scope',
  55. self.address_scope_filter_rule(device_name, mark))
  56. + for subnet_id, prefix in six.iteritems(self.pd_subnets):
  57. + if prefix != n_const.PROVISIONAL_IPV6_PD_PREFIX:
  58. + self._process_pd_iptables_rules(prefix, subnet_id)
  59. def process_ports_address_scope_iptables(self):
  60. ports_scopemark = self._get_address_scope_mark()
  61.