Skip to content

Commit

Permalink
DM: Use VN network-id for configuring service interface ifls
Browse files Browse the repository at this point in the history
Each private VN needs two service interfaces
ifl unit numbers are allocated based on VN network-id as
follows:
inside service interface : <service-ifd>.(2*vn_id -1)
outisde service interface : <service-ifd>.(2*vn)

Alos, fixed user-ip firewall filter xml config.
Each ip should tagged in seperate <source-address>

Change-Id: I360335e70c9efa732c60fe8af04a499aea839521
Closes-Bug: #1466721
  • Loading branch information
sbalineni committed Jun 23, 2015
1 parent aec4924 commit 3357677
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 15 deletions.
31 changes: 20 additions & 11 deletions src/config/device-manager/device_manager/db.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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,
Expand All @@ -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,
Expand Down Expand Up @@ -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', [])])
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -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")

Expand Down

0 comments on commit 3357677

Please sign in to comment.