diff --git a/src/config/device-manager/device_manager/db.py b/src/config/device-manager/device_manager/db.py index 84ded59193f..12fd48ed9c4 100644 --- a/src/config/device-manager/device_manager/db.py +++ b/src/config/device-manager/device_manager/db.py @@ -210,11 +210,9 @@ def push_config(self): else: vn_dict[vn_id] = [li.name] - #for now, assume service port ifls unit numbers are always starts with 0 and goes on - service_port_id = 1 for vn_id, interfaces in vn_dict.items(): vn_obj = VirtualNetworkDM.get(vn_id) - if vn_obj is None or vn_obj.vxlan_vni is None: + if vn_obj is None or vn_obj.vxlan_vni is None or vn_obj.vn_network_id is None: continue export_set = None import_set = None @@ -264,14 +262,17 @@ def push_config(self): break if export_set is not None and self.is_junos_service_ports_enabled() and len(vn_obj.instance_ip_map) > 0: - vrf_name = vrf_name[:123] + '-nat' - interfaces = [] - service_ports = self.junos_service_ports.get('service_port') - interfaces.append(service_ports[0] + "." + str(service_port_id)) - service_port_id = service_port_id + 1 - interfaces.append(service_ports[0] + "." + str(service_port_id)) - service_port_id = service_port_id + 1 - self.config_manager.add_routing_instance(vrf_name, + service_port_id = 2*vn_obj.vn_network_id - 1 + if self.is_service_port_id_valid(service_port_id) == False: + self._logger.error("DM can't allocate service interfaces for \ + (vn, vn-id)=(%s,%s)" % (vn_obj.fq_name, vn_obj.vn_network_id)) + else: + vrf_name = vrf_name[:123] + '-nat' + interfaces = [] + service_ports = self.junos_service_ports.get('service_port') + interfaces.append(service_ports[0] + "." + str(service_port_id)) + interfaces.append(service_ports[0] + "." + str(service_port_id + 1)) + self.config_manager.add_routing_instance(vrf_name, import_set, export_set, None, @@ -285,6 +286,13 @@ def push_config(self): self.uve_send() # end push_config + def is_service_port_id_valid(self, service_port_id): + #mx allowed ifl unit number range is (1, 16385) for service ports + if service_port_id < 1 or service_port_id > 16384: + return False + return True + #end is_service_port_id_valid + def uve_send(self, deleted=False): pr_trace = UvePhysicalRouterConfig(name=self.name, ip_address=self.management_ip, @@ -593,6 +601,7 @@ def update(self, obj=None): self.router_external = obj['router_external'] except KeyError: self.router_external = False + self.vn_network_id = obj.get('virtual_network_network_id') self.set_vxlan_vni(obj) self.routing_instances = set([ri['uuid'] for ri in obj.get('routing_instances', [])]) diff --git a/src/config/device-manager/device_manager/physical_router_config.py b/src/config/device-manager/device_manager/physical_router_config.py index 18a80bcc1fa..3b210cc844a 100644 --- a/src/config/device-manager/device_manager/physical_router_config.py +++ b/src/config/device-manager/device_manager/physical_router_config.py @@ -272,7 +272,7 @@ def add_routing_instance(self, ri_name, import_targets, export_targets, etree.SubElement(then_, "accept") term = etree.Element("term") - etree.SubElement(term, "name").text= "term-" + ri_name[:19] + etree.SubElement(term, "name").text= "term-" + ri_name[:59] if prefixes: from_ = etree.SubElement(term, "from") etree.SubElement(from_, "destination-address").text = ';'.join(prefixes) @@ -288,13 +288,14 @@ def add_routing_instance(self, ri_name, import_targets, export_targets, f = etree.SubElement(inet, "filter") etree.SubElement(f, "name").text = "redirect_to_" + ri_name[:46] + "_vrf" term = etree.SubElement(f, "term") - etree.SubElement(term, "name").text= "t1" + etree.SubElement(term, "name").text= "term-" + ri_name[:59] from_ = etree.SubElement(term, "from") - etree.SubElement(from_, "destination-address").text = ';'.join(fip_map.keys()) + for fip_user_ip in fip_map.keys(): + etree.SubElement(from_, "source-address").text = fip_user_ip then_ = etree.SubElement(term, "then") etree.SubElement(then_, "routing-instance").text = ri_name term = etree.SubElement(f, "term") - etree.SubElement(term, "name").text= "t2" + etree.SubElement(term, "name").text= "default-term" then_ = etree.SubElement(term, "then") etree.SubElement(then_, "accept")