X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=code%2Fnetwork-topology-instance-generator%2Fmodel%2Fpython%2Ftapi_topology.py;h=a80e873131919d5b0622ac44399d364cad12009a;hb=refs%2Fchanges%2F91%2F9391%2F2;hp=803dd1bb99cc2deec5f98ac12a653c9ec33cd650;hpb=c3b5ba6a8b36c41d550b9b0faf3e1bc316b34a21;p=oam.git diff --git a/code/network-topology-instance-generator/model/python/tapi_topology.py b/code/network-topology-instance-generator/model/python/tapi_topology.py index 803dd1b..a80e873 100644 --- a/code/network-topology-instance-generator/model/python/tapi_topology.py +++ b/code/network-topology-instance-generator/model/python/tapi_topology.py @@ -25,6 +25,8 @@ from model.python.tapi_node import TapiNode from model.python.tapi_node_smo import TapiNodeSmo from model.python.tapi_node_o_cloud import TapiNodeOCloud from model.python.tapi_node_near_rt_ric import TapiNodeNearRtRic +from model.python.tapi_node_amf import TapiNodeAmf +from model.python.tapi_node_upf import TapiNodeUpf from model.python.tapi_node_o_cu_cp import TapiNodeOCuCp from model.python.tapi_node_o_cu_up import TapiNodeOCuUp from model.python.tapi_node_o_du import TapiNodeODu @@ -45,12 +47,16 @@ class TapiTopology(Top): # constructor def __init__(self, configuration: dict): super().__init__(configuration) + name = "o-ran-sc-topology-view" + if "name" in configuration['network']: + name = configuration['network']['name'] + self.__configuration = configuration self.__data = { "uuid": str(uuid.uuid4()), "name": [{ "value-name": "network-name", - "value": configuration['network']['name']}], + "value": name}], "layer-protocol-name": ["ETH"], "node": [], "link": []} @@ -170,22 +176,24 @@ class TapiTopology(Top): padding = 0 # self.FONTSIZE width_unit = (2 * 2 * self.FONTSIZE + padding) - ru = (pattern['user-equipment']-1) * width_unit / 2 + ru = (pattern['user-equipment']-1) * width_unit - 2*self.FONTSIZE fhgw = (pattern['o-ru'] * - pattern['user-equipment'] - 1) * width_unit / 2 + pattern['user-equipment'] - 1) * width_unit - 2*self.FONTSIZE odu = (pattern['fronthaul-gateway'] * pattern['o-ru'] * pattern['user-equipment'] - - 1) * width_unit/2 + - 1) * width_unit - 2*self.FONTSIZE ocu = (pattern['o-du'] * pattern['fronthaul-gateway'] * pattern['o-ru'] * pattern['user-equipment'] - - 1) * width_unit / 2 + - 1) * width_unit - 2*self.FONTSIZE ric = (pattern['near-rt-ric'] * pattern['o-du'] * pattern['fronthaul-gateway'] * pattern['o-ru'] * pattern['user-equipment'] - - 1) * width_unit / 2 + - 1) * width_unit - 2*self.FONTSIZE smo = (pattern['smo'] * pattern['near-rt-ric'] * pattern['o-du'] * pattern['fronthaul-gateway'] * pattern['o-ru'] * pattern['user-equipment'] - -0.5) * width_unit + -0.5) * width_unit * 2 - 2*self.FONTSIZE x_mapping: Dict[type, int] = { TapiNodeSmo: smo, TapiNodeOCloud: ric, TapiNodeNearRtRic: ric, + TapiNodeAmf: ric + 16*self.FONTSIZE, + TapiNodeUpf: ric + 24*self.FONTSIZE, TapiNodeOCuCp: ocu - 12.5*self.FONTSIZE, TapiNodeOCuUp: ocu + 12.5*self.FONTSIZE, TapiNodeODu: odu, @@ -206,15 +214,17 @@ class TapiTopology(Top): pattern = self.configuration()['network']['pattern'] width_unit = (2 * 2 * self.FONTSIZE + padding) x_mapping: Dict[type, int] = { - TapiNodeSmo: pattern['near-rt-ric'] * pattern['o-cu'] * pattern['o-du'] * pattern['fronthaul-gateway'] * pattern['o-ru'] * pattern['user-equipment'], - TapiNodeOCloud: pattern['o-cu'] * pattern['o-du'] * pattern['fronthaul-gateway'] * pattern['o-ru'] * pattern['user-equipment'], - TapiNodeNearRtRic: pattern['o-cu'] * pattern['o-du'] * pattern['fronthaul-gateway'] * pattern['o-ru'] * pattern['user-equipment'], - TapiNodeOCuCp: pattern['o-du'] * pattern['fronthaul-gateway'] * pattern['o-ru'] * pattern['user-equipment'], - TapiNodeOCuUp: pattern['o-du'] * pattern['fronthaul-gateway'] * pattern['o-ru'] * pattern['user-equipment'], - TapiNodeODu: pattern['fronthaul-gateway'] * pattern['o-ru'] * pattern['user-equipment'], - TapiNodeFronthaulGateway: pattern['o-ru'] * pattern['user-equipment'], - TapiNodeORu: pattern['user-equipment'], - TapiNodeUserEquipment: 1 + TapiNodeSmo: pattern['near-rt-ric'] * pattern['o-cu'] * pattern['o-du'] * pattern['fronthaul-gateway'] * pattern['o-ru'] * pattern['user-equipment']*2, + TapiNodeOCloud: pattern['o-cu'] * pattern['o-du'] * pattern['fronthaul-gateway'] * pattern['o-ru'] * pattern['user-equipment']*2, + TapiNodeNearRtRic: pattern['o-cu'] * pattern['o-du'] * pattern['fronthaul-gateway'] * pattern['o-ru'] * pattern['user-equipment']*2, + TapiNodeAmf: pattern['o-cu'] * pattern['o-du'] * pattern['fronthaul-gateway'] * pattern['o-ru'] * pattern['user-equipment']*2, + TapiNodeUpf: pattern['o-cu'] * pattern['o-du'] * pattern['fronthaul-gateway'] * pattern['o-ru'] * pattern['user-equipment']*2, + TapiNodeOCuCp: pattern['o-du'] * pattern['fronthaul-gateway'] * pattern['o-ru'] * pattern['user-equipment']*2, + TapiNodeOCuUp: pattern['o-du'] * pattern['fronthaul-gateway'] * pattern['o-ru'] * pattern['user-equipment']*2, + TapiNodeODu: pattern['fronthaul-gateway'] * pattern['o-ru'] * pattern['user-equipment']*2, + TapiNodeFronthaulGateway: pattern['o-ru'] * pattern['user-equipment']*2, + TapiNodeORu: pattern['user-equipment']*2, + TapiNodeUserEquipment: 2 } if node_type in x_mapping: return x_mapping[node_type] * width_unit @@ -230,6 +240,8 @@ class TapiTopology(Top): TapiNodeSmo: 0 * offset, TapiNodeOCloud: 1 * offset, TapiNodeNearRtRic: 2 * offset, + TapiNodeAmf: 2 * offset, + TapiNodeUpf: 2 * offset, TapiNodeOCuCp: 3.5 * offset - 4 * self.FONTSIZE, TapiNodeOCuUp: 3.5 * offset + 4 * self.FONTSIZE, TapiNodeODu: 5 * offset, @@ -258,6 +270,21 @@ class TapiTopology(Top): self.__data["link"].append(link) return self + def find_node(self, type_name:str, client_local_id:str) -> TapiNode: + """ + Method finding the parent no in the hierarchy based on the node type name + and the client local identifier. + :param type_name: the TAPI NODE Type name of interest. + :param client_local_id: which starts with the parent node local id. + :re + turn TAPI Node object. + """ + for node in self.__data["node"]: + if type(node).__name__ == type_name: + if client_local_id.startswith(node.local_id()): + return node + return # ERROR 404 + def __create_smos(self, parent: TapiNode, topology_structure: dict, count: int): """ Method adding a TAPI node to TAPI Topology. @@ -343,6 +370,30 @@ class TapiTopology(Top): prefix = "" if parent is not None: prefix = parent.json()["name"][1]["value"] + + # hardcoded rule! + # create 1 5G-Core AMF and 1 5G-Core UPF instance per Near-RT-RIC + + # 5G-Core AMF + current_type = "access-and-mobility-management-function" + function = "o-ran-sc-topology-common:"+current_type + node_configuration = {"node": {"localId": prefix + str(local_id), + "type": current_type, + "function": function}} + node = TapiNodeAmf(parent, node_configuration) + self.add_node(node) + + # 5G-Core UPF + current_type = "user-plane-function" + function = "o-ran-sc-topology-common:"+current_type + node_configuration = {"node": {"localId": prefix + str(local_id), + "type": current_type, + "function": function}} + node = TapiNodeUpf(parent, node_configuration) + self.add_node(node) + + # Near-RT-RIC + current_type = "near-rt-ric" function = "o-ran-sc-topology-common:"+current_type node_configuration = {"node": {"localId": prefix + str(local_id), "type": current_type, @@ -437,7 +488,7 @@ class TapiTopology(Top): # E2 link_configuration = { "topology_reference": self.data()["uuid"], - "name_prefix": "e2-rest", + "name_prefix": "e2-sctp", "provider": node[plane], "consumer": parent } @@ -480,6 +531,24 @@ class TapiTopology(Top): } self.add_link(TapiLink(link_configuration)) + # N2 Interface between O-CU-CP and AMF + link_configuration = { + "topology_reference": self.data()["uuid"], + "name_prefix": "n2-nas", + "provider": self.find_node("TapiNodeAmf", node["cp"].local_id()), + "consumer": node["cp"] + } + self.add_link(TapiLink(link_configuration)) + + # N3 Interface between O-CU-UP and UPF + link_configuration = { + "topology_reference": self.data()["uuid"], + "name_prefix": "n3-nas", + "provider": self.find_node("TapiNodeUpf", node["up"].local_id()), + "consumer": node["up"] + } + self.add_link(TapiLink(link_configuration)) + if next_type in topology_structure: structure = topology_structure.copy() if current_type in structure: @@ -514,7 +583,7 @@ class TapiTopology(Top): # E2 link_configuration = { "topology_reference": self.data()["uuid"], - "name_prefix": "e2-rest", + "name_prefix": "e2-sctp", "provider": node, "consumer": parent.parent() } @@ -687,15 +756,24 @@ class TapiTopology(Top): self.add_node(node) # add links - # Uu unknown + # Uu radio link_configuration = { "topology_reference": self.data()["uuid"], - "name_prefix": "uu-unknown", + "name_prefix": "uu-radio", "provider": parent, "consumer": node } self.add_link(TapiLink(link_configuration)) + # N! to 5G-Core AMF + link_configuration = { + "topology_reference": self.data()["uuid"], + "name_prefix": "n1-nas", + "provider": self.find_node("TapiNodeAmf", node.local_id()), + "consumer": node + } + self.add_link(TapiLink(link_configuration)) + if "key" in topology_structure: print("Implement missing topology level.")