Skip to content

Commit

Permalink
ST: Configure Service Instances routes in primary RI of left vn/SC
Browse files Browse the repository at this point in the history
This enhancement will eliminate the case of duplicate routes getting populated in routers.
This fix will also remove any existing service ris  already created by the old software.

Change-Id: I8e62f6d91580a0805efaa844cc2b7fc01952129c
Closes-Bug: #1554175
  • Loading branch information
sbalineni committed Apr 8, 2016
1 parent e5eaa83 commit 17dd6f9
Showing 1 changed file with 21 additions and 11 deletions.
32 changes: 21 additions & 11 deletions src/config/schema-transformer/to_bgp.py
Original file line number Diff line number Diff line change
Expand Up @@ -186,7 +186,6 @@ def __init__(self, name, obj=None, acl_dict=None, ri_dict=None):
self._route_target = 0
self.route_table_refs = set()
self.route_table = {}
self.service_chains = {}
prop = self.obj.get_virtual_network_properties(
) or VirtualNetworkType()
self.allow_transit = prop.allow_transit
Expand Down Expand Up @@ -223,6 +222,7 @@ def __init__(self, name, obj=None, acl_dict=None, ri_dict=None):
for policy in NetworkPolicyST.values():
if policy.internal and name in policy.network_back_ref:
self.add_policy(policy.name)
self.service_chains = ServiceChain.find_service_chains(self.name)
self.uve_send()
# end __init__

Expand Down Expand Up @@ -1523,6 +1523,20 @@ def __eq__(self, other):
return True
# end __eq__

@classmethod
def find_service_chains(cls, vn):
sc_map = {}
for sc in ServiceChain.values():
remote_vn = None
if (vn == sc.left_vn):
remote_vn = sc.right_vn
if (vn == sc.right_vn):
remote_vn = sc.left_vn
if remote_vn and vn != remote_vn:
sc_map.setdefault(remote_vn, []).append(sc)
return sc_map
# end find_service_chains

@classmethod
def find(cls, left_vn, right_vn, direction, sp_list, dp_list, protocol):
for sc in ServiceChain.values():
Expand Down Expand Up @@ -3069,18 +3083,16 @@ def add_service_instance_properties(self, idents, meta):
vn1 = VirtualNetworkST.get(left_vn_str)
if vn1:
self.current_network_set.add(left_vn_str)
if right_vn_str:
vn2 = VirtualNetworkST.get(right_vn_str)
if vn2:
self.current_network_set.add(right_vn_str)
vn2 = VirtualNetworkST.get(right_vn_str)
if vn2:
self.current_network_set.add(right_vn_str)
if not siprops.auto_policy:
self.delete_service_instance_properties(idents, meta)
return
except NoIdError:
_sandesh._logger.error("NoIdError while reading service "
"instance %s", si_name)
return
if not si_props.auto_policy:
self.delete_service_instance_properties(idents, meta)
return
si_props = si.get_service_instance_properties()
policy_name = "_internal_" + si_name
policy = NetworkPolicyST.locate(policy_name)
addr1 = AddressType(virtual_network=left_vn_str)
Expand All @@ -3097,10 +3109,8 @@ def add_service_instance_properties(self, idents, meta):
policy.network_back_ref = set([left_vn_str, right_vn_str])
policy.internal = True
policy.add_rules(pentry)
vn1 = VirtualNetworkST.get(left_vn_str)
if vn1:
vn1.add_policy(policy_name)
vn2 = VirtualNetworkST.get(right_vn_str)
if vn2:
vn2.add_policy(policy_name)
# end add_service_instance_properties
Expand Down

0 comments on commit 17dd6f9

Please sign in to comment.