Commit 7bce196c authored by jvelazquezm's avatar jvelazquezm
Browse files

Merge branch 'feat/1-challenge-1-nsc-tfs-integration' of...

Merge branch 'feat/1-challenge-1-nsc-tfs-integration' of https://labs.etsi.org/rep/tfs/nsc into feat/1-challenge-1-nsc-tfs-integration
parents 4b4ae601 1a650c30
Loading
Loading
Loading
Loading
+33 −32
Original line number Diff line number Diff line
@@ -494,6 +494,7 @@ class NSController:
                "setup_time": self.setup_time
            }
            # Add slice details to the response
            logging.info(self.answer)
            for subnet in self.answer:
                slice_info = {
                    "id": subnet,
@@ -824,7 +825,6 @@ class NSController:
            logging.warning(f"Unsupported controller: {controller}. Defaulting to TFS L2VPN realization.")
            realizing_request = self.__tfs_l2vpn(ietf_intent)
        return realizing_request
    
    def __tfs_l2vpn(self, ietf_intent):
       """
       Translate slice intent into a TeraFlow service request.
@@ -847,26 +847,27 @@ class NSController:
        # Hardcoded router endpoints
        # TODO (should be dynamically determined)
        origin_router_id = ietf_intent["ietf-network-slice-service:network-slice-services"]["slice-service"][0]["sdps"]["sdp"][0]["attachment-circuits"]["attachment-circuit"][0]["sdp-peering"]["peer-sap-id"]
        origin_router_if = '0/0/0-GigabitEthernet0/0/0/0'
        origin_router_if = 'eth2'
        destination_router_id = ietf_intent["ietf-network-slice-service:network-slice-services"]["slice-service"][0]["sdps"]["sdp"][1]["attachment-circuits"]["attachment-circuit"][0]["sdp-peering"]["peer-sap-id"]
        destination_router_if = '0/0/0-GigabitEthernet0/0/0/0'

       # Extract QoS Profile from intent
       QoSProfile = ietf_intent["ietf-network-slice-service:network-slice-services"]["slo-sle-templates"]["slo-sle-template"][0]["id"]

       vlan_value = 0
        
        # Load L2VPN service template
        self.__load_template(2, os.path.join(TEMPLATES_PATH, "L2-VPN_template_empty.json"))
        tfs_request = json.loads(str(self.__teraflow_template))["services"][0]

        # Generate unique service UUID
        tfs_request["service_id"]["service_uuid"]["uuid"] += "-" + str(int(datetime.now().timestamp() * 1e7))

        # Configure service endpoints
        for endpoint in tfs_request["service_endpoint_ids"]:
            endpoint["device_id"]["device_uuid"]["uuid"] = origin_router_id if endpoint is tfs_request["service_endpoint_ids"][0] else destination_router_id
            endpoint["endpoint_uuid"]["uuid"] = origin_router_if if endpoint is tfs_request["service_endpoint_ids"][0] else destination_router_if
       self.__load_template(2, os.path.join(TEMPLATES_PATH, "ietfL2VPN_template.json"))
       tfs_request = json.loads(str(self.__teraflow_template))
       full_id = ietf_intent["ietf-network-slice-service:network-slice-services"]["slice-service"][0]["id"]
       uuid_only = full_id.split("slice-service-")[-1]
       tfs_request["ietf-l2vpn-svc:vpn-service"][0]["vpn-id"] = uuid_only
       for site in tfs_request["ietf-l2vpn-svc:vpn-service"][0]["site"]:
           if site is tfs_request["ietf-l2vpn-svc:vpn-service"][0]["site"][0]:
               site["site-id"] = origin_router_id
               site["site-location"] = ietf_intent["ietf-network-slice-service:network-slice-services"]["slice-service"][0]["sdps"]["sdp"][0]["node-id"]
               site["site-network-access"]["interface"]["ip-address"] = ietf_intent["ietf-network-slice-service:network-slice-services"]["slice-service"][0]["sdps"]["sdp"][0]["sdp-ip-address"]
           else:
               site["site-id"] = destination_router_id
               site["site-location"] = ietf_intent["ietf-network-slice-service:network-slice-services"]["slice-service"][0]["sdps"]["sdp"][1]["node-id"]
               site["site-network-access"]["interface"]["ip-address"] = ietf_intent["ietf-network-slice-service:network-slice-services"]["slice-service"][0]["sdps"]["sdp"][1]["sdp-ip-address"]

        self.answer[self.subnet]["QoS Requirements"] = []
        # Add service constraints
@@ -992,7 +993,7 @@ class NSController:
            dict: A TeraFlow service request for L3VPN configuration.
        """
        # Hardcoded router endpoints
        # TODO should be dynamically determined
        # TODO (should be dynamically determined)
        origin_router_id = ietf_intent["ietf-network-slice-service:network-slice-services"]["slice-service"][0]["sdps"]["sdp"][0]["attachment-circuits"]["attachment-circuit"][0]["sdp-peering"]["peer-sap-id"]
        origin_router_if = '0/0/0-GigabitEthernet0/0/0/0'
        destination_router_id = ietf_intent["ietf-network-slice-service:network-slice-services"]["slice-service"][0]["sdps"]["sdp"][1]["attachment-circuits"]["attachment-circuit"][0]["sdp-peering"]["peer-sap-id"]