Commit b694d9e5 authored by Pablo Armingol's avatar Pablo Armingol
Browse files

feat: update intent parsing logic and introduce transceiver configuration schema for IPoWDM slices

parent 5c13c237
Loading
Loading
Loading
Loading
Loading
+20 −53
Original line number Diff line number Diff line
@@ -87,65 +87,32 @@ def l3ipowdm_slice(rules):
            logging.debug(f"Sending Media Channel Service to Orchestrator: {tfs_request}")
            tfs_requests.append(tfs_request)

        elif rule["type"] == "ACTIVATE_TRANSCEIVER":
            params = {
                "router_id": rule["content"]["node-uuid"],
                "router_tp": rule["content"]["termination-point-uuid"],
                "frequency": rule["content"]["frequency-ghz"],
                "power":     rule["content"]["tx-power-dbm"]
            }
            transceiver_params.append(params)
        elif rule["type"] == "CONFIG_VPNL3":
            src_router_id  = rule["content"]["src-node-uuid"]
        elif rule["type"] == "XR_AGENT_ACTIVATE_TRANSCEIVER":
            transceiver_params = rule["content"]["components"]

            if src_router_id == transceiver_params[0]["router_id"]:
                src_power = transceiver_params[0]["power"]
                src_frequency = transceiver_params[0]["frequency"]
                dst_power = transceiver_params[1]["power"]
                dst_frequency = transceiver_params[1]["frequency"]
            else:
                src_power = transceiver_params[1]["power"]
                src_frequency = transceiver_params[1]["frequency"]
                dst_power = transceiver_params[0]["power"]
                dst_frequency = transceiver_params[0]["frequency"]

            src_router_id  = rule["content"]["src-node-uuid"]
            src_ip_address = rule["content"]["src-ip-address"]
            src_ip_mask    = rule["content"]["src-ip-mask"]
            src_vlan_id    = rule["content"]["src-vlan-id"]
        elif rule["type"] == "CONFIG_VPNL3":
            service_uuid = rule["content"]["tunnel-uuid"]

            dst_router_id  = rule["content"]["dest-node-uuid"]
            dst_ip_address = rule["content"]["dest-ip-address"]
            dst_ip_mask    = rule["content"]["dest-ip-mask"]
            dst_vlan_id    = rule["content"]["dest-vlan-id"]
            src = [rule["content"]["src-node-uuid"]]

            service_uuid = rule["content"]["tunnel-uuid"]
            dst = []
            i = 1
            while f"dest{i}-node-uuid" in rule["content"]:
                dst.append(rule["content"][f"dest{i}-node-uuid"])
                i += 1

            tfs_request = load_template(os.path.join(TEMPLATES_PATH, "IPoWDM_orchestrator.json"))
            tfs_request["services"][0]["service_id"]["service_uuid"]["uuid"] = service_uuid
            
            config_rules = tfs_request["services"][0]["service_config"]["config_rules"][0]
            src = config_rules["ipowdm"]["rule_set"]["src"]
            src.append({
                'uuid': src_router_id,
                'ip_address': src_ip_address,
                'ip_mask': src_ip_mask,
                'vlan_id': src_vlan_id,
                'power': src_power,
                'frequency': src_frequency
            })

            dst = config_rules["ipowdm"]["rule_set"]["dst"]
            dst.append({
                'uuid': dst_router_id,
                'ip_address': dst_ip_address,
                'ip_mask': dst_ip_mask,
                'vlan_id': dst_vlan_id,
                'power': dst_power,
                'frequency': dst_frequency
            })

            config_rules["ipowdm"]["rule_set"]["bw"]        = bandwidth
            config_rules["ipowdm"]["rule_set"]["uuid"]      = service_uuid
            config_rules["action"] = 1
            config_rules["ipowdm"]["name"] = service_uuid
            config_rules["ipowdm"]["rule_set"]["src"] = src
            config_rules["ipowdm"]["rule_set"]["dst"] = dst
            config_rules["ipowdm"]["rule_set"]["transceiver"] = {
                "components": transceiver_params
            }
            config_rules["ipowdm"]["rule_set"]["l3vpn"] = rule["content"]

            logging.debug(f"Sending IPoWDM Service to Orchestrator: {tfs_request}")
            tfs_requests.append(tfs_request)
+1 −1
Original line number Diff line number Diff line
@@ -60,7 +60,7 @@ def send_controller(controller_type, requests):
        response = ixia_connect(requests, current_app.config["IXIA_IP"])
        logging.info("Requests sent to Ixia")
    elif controller_type == "E2E":
        response = e2e_connect(requests, current_app.config["TFS_E2E"])
        response = e2e_connect(requests, current_app.config["TFS_E2E_IP"])
        logging.info("Requests sent to Teraflow E2E")
    elif controller_type == "RESTCONF":
        response = restconf_connect(requests, current_app.config["RESTCONF_IP"])
+3 −1
Original line number Diff line number Diff line
@@ -55,7 +55,9 @@ def build_response(intent, response, controller_type = None):
    qos_requirements = []

    # Populate response with QoS requirements and VLAN from intent
    slo_policy = safe_get(intent, ["ietf-network-slice-service:network-slice-services","slo-sle-templates","slo-sle-template",0,"slo-policy"])
    slo_policy = safe_get(intent, ["ietf-network-slice-service:network-slice-services", "slice-service", 0, "service-slo-sle-policy", "slo-policy"])
    if not slo_policy:
        slo_policy = safe_get(intent, ["ietf-network-slice-service:network-slice-services","slo-sle-templates","slo-sle-template",0,"slo-policy"]) or {}

    # Process metrics
    for metric in slo_policy.get("metric-bound", []):