Resolve "(TID) Creation of IP link with supporting coherent pluggable to pluggable connection"

Closes #161 (closed)

Merge request reports

Loading
+8 −0
Changes for proto/context.proto: 8 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ package context;
import "google/protobuf/any.proto";

import "acl.proto";
import "ip_link.proto";
import "kpi_sample_types.proto";

service ContextService {
@@ -347,6 +348,7 @@ enum ServiceTypeEnum {
  SERVICETYPE_L1NM = 8;
  SERVICETYPE_INT = 9;
  SERVICETYPE_ACL = 10;
  SERVICETYPE_IP_LINK = 11;
}

enum ServiceStatusEnum {
@@ -560,11 +562,17 @@ message ConfigRule_ACL {
  acl.AclRuleSet rule_set = 2;
}

message ConfigRule_IP_LINK {
  EndPointId endpoint_id           = 1;
  ip_link.IpLinkRuleSet rule_set = 2;
}

message ConfigRule {
  ConfigActionEnum action = 1;
  oneof config_rule {
    ConfigRule_Custom custom  = 2;
    ConfigRule_ACL acl        = 3;
    ConfigRule_IP_LINK ip_link = 4;
  }
}

proto/ip_link.proto

0 → 100644
+22 −0
Changes for proto/ip_link.proto: 22 added lines, 0 removed lines.
Original line number Diff line number Diff line
// Copyright 2022-2025 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//      http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

syntax = "proto3";
package ip_link;

message IpLinkRuleSet {
  string  ip   = 1;
  string  mask = 3;
  string  vlan = 4;
}
+10 −0
Changes for src/common/tools/object_factory/Service.py: 10 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -93,3 +93,13 @@ def json_service_p4_planned(
        service_uuid, ServiceTypeEnum.SERVICETYPE_L1NM, context_id=json_context_id(context_uuid),
        status=ServiceStatusEnum.SERVICESTATUS_PLANNED, endpoint_ids=endpoint_ids, constraints=constraints,
        config_rules=config_rules)
    
def json_service_iplink_planned(
        service_uuid : str, endpoint_ids : List[Dict] = [], constraints : List[Dict] = [],
        config_rules : List[Dict] = [], context_uuid : str = DEFAULT_CONTEXT_NAME
    ):

    return json_service(
        service_uuid, ServiceTypeEnum.SERVICETYPE_IP_LINK, context_id=json_context_id(context_uuid),
        status=ServiceStatusEnum.SERVICESTATUS_PLANNED, endpoint_ids=endpoint_ids, constraints=constraints,
        config_rules=config_rules)
+2 −0
Changes for src/common/type_checkers/Assertions.py: 2 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -113,6 +113,7 @@ def validate_service_type_enum(message):
        'SERVICETYPE_TAPI_CONNECTIVITY_SERVICE',
        'SERVICETYPE_TE',
        'SERVICETYPE_E2E',
        'SERVICETYPE_IP_LINK'
        'SERVICETYPE_OPTICAL_CONNECTIVITY',
        'SERVICETYPE_QKD',
    ]
@@ -152,6 +153,7 @@ def validate_uuid(message, allow_empty=False):
CONFIG_RULE_TYPES = {
    'custom',
    'acl',
    'ip_link'
}
def validate_config_rule(message):
    assert isinstance(message, dict)
+2 −1
Changes for src/context/service/database/models/enums/ServiceType.py: 2 added lines, 1 removed line.
Original line number Diff line number Diff line
@@ -25,14 +25,15 @@ class ORM_ServiceTypeEnum(enum.Enum):
    UNKNOWN                   = ServiceTypeEnum.SERVICETYPE_UNKNOWN
    L3NM                      = ServiceTypeEnum.SERVICETYPE_L3NM
    L2NM                      = ServiceTypeEnum.SERVICETYPE_L2NM
    L1NM                      = ServiceTypeEnum.SERVICETYPE_L1NM
    TAPI_CONNECTIVITY_SERVICE = ServiceTypeEnum.SERVICETYPE_TAPI_CONNECTIVITY_SERVICE
    TE                        = ServiceTypeEnum.SERVICETYPE_TE
    E2E                       = ServiceTypeEnum.SERVICETYPE_E2E
    OPTICAL_CONNECTIVITY      = ServiceTypeEnum.SERVICETYPE_OPTICAL_CONNECTIVITY
    QKD                       = ServiceTypeEnum.SERVICETYPE_QKD
    L1NM                      = ServiceTypeEnum.SERVICETYPE_L1NM
    INT                       = ServiceTypeEnum.SERVICETYPE_INT
    ACL                       = ServiceTypeEnum.SERVICETYPE_ACL
    IP_LINK                   = ServiceTypeEnum.SERVICETYPE_IP_LINK

grpc_to_enum__service_type = functools.partial(
    grpc_to_enum, ServiceTypeEnum, ORM_ServiceTypeEnum)
Loading
Loading