ietf-ccamp-wg / ietf-ccamp-yang-otn-slicing

Repository for draft-ietf-ccamp-yang-otn-slicing
0 stars 2 forks source link

YANG model for OTN-SC NBI #14

Open aguoietf opened 3 years ago

aguoietf commented 3 years ago

Meeting minutes from 10-01-2021 related to OTN-SC NBI modeling:

We discussed an initial proposal for OTN-SC NBI which is targeted to merge vn-yang, draft-liu and possibly teas-ns into a single base model and augment it to create the OTN-SC NBI model. In the proposal:

We discussed the ongoing mailing list discussion regarding teas network slicing, in which

Please feel free to add your comments. Discussion slides for today are attached and are also uploaded to github.

aguoietf commented 3 years ago

It was proposed on the last meeting (10/07/2021) that we create a base model for transport network slicing, which can be augmented for OTN, WDM and other technology-specific slicing in the transport network domain.

Below is a draft proposal of such model (named as ietf-transport-network-slicing). Note that the network topology container is recreated based on the draft-liu model by copying all of the constructs from draft-liu, as I was unsure how draft-liu could be somehow "copied" or schema mounted. Also, the schema mount RFC (RFC8528) indicated that it supports only run-time or server-implemented mounting and does not support design-time mounting, which means it may be not suitable for this scenario.

Please have a look at the proposal and share your comments.

module: ietf-transport-network-slice
  +--rw access-points
  |  +--rw access-point* [ap-id]
  |     +--rw ap-id         string
  |     +--rw pe-node-id?   string
  +--rw network-slices
     +--rw network-slice* [ns-id]
        +--rw ns-id                    string
        +--rw ns-description?          string
        +--rw customer-name*           string
        +--rw slo
        |  +--rw optimization-criterion?   identityref
        |  +--rw delay-tolerance?          boolean
        |  +--rw periodicity*              uint64
        |  +--rw isolation-level?          identityref
        +--rw endpoints
        |  +--rw endpoint* [endpoint-id]
        |     +--rw endpoint-id    string
        |     +--rw ap-id?         -> /access-points/access-point/ap-id
        +--rw network-topology
        |  +--rw topology* [topology-id]
        |     +--rw topology-id    string
        |     +--rw node* [node-id]
        |     |  +--rw node-id              inet:uri
        |     |  +--rw slo
        |     |  |  +--rw isolation-level?   identityref
        |     |  +--rw termination-point* [tp-id]
        |     |     +--rw tp-id          inet:uri
        |     |     +--rw endpoint-id?   -> /network-slices/network-slice/endpoints/endpoint/endpoint-id
        |     +--rw link* [link-id]
        |        +--rw link-id        inet:uri
        |        +--rw slo
        |        |  +--rw delay-tolerance?   boolean
        |        |  +--rw periodicity*       uint64
        |        |  +--rw isolation-level?   identityref
        |        +--rw source
        |        |  +--rw source-node?   -> ../../../node/node-id
        |        |  +--rw source-tp?     -> ../../../node[node-id=current()/../source-node]/termination-point/tp-id
        |        +--rw destination
        |           +--rw dest-node?   -> ../../../node/node-id
        |           +--rw dest-tp?     -> ../../../node[node-id=current()/../dest-node]/termination-point/tp-id
        +--rw connectivity-matrices
           +--rw connectivity-matrix* [connectivity-matrix-id]
              +--rw connectivity-matrix-id    uint32
              +--rw topology-id?              -> /network-slices/network-slice/network-topology/topology/topology-id
              +--rw src-endpoint?             -> ../../../endpoints/endpoint/endpoint-id
              +--rw dst-endpoint?             -> ../../../endpoints/endpoint/endpoint-id
              +--rw slo
              +--rw underlay-path* [tp-id]
                 +--rw tp-id    -> /network-slices/network-slice/network-topology/topology/node/termination-point/tp-id
italobusi commented 3 years ago

I need more time to understand in details the slo attributes but the overall model looks going in the right direction

Few minor detailed comments:

  1. Do we need the pe-node-id attribute?
  2. Why the customer-name is a list and not a single attribute?
  3. I will add a ns-name attribute in addition to ns-id and ns-description (like in other models)
  4. Do we need a container to contain a list? I have seen some models written with this approach and other models not following this approach but I do not understand the rationale for the different choices
    1. If the external container is needed, should it be network-topologies instead of network-topology?
  5. I think that the topology-id should use a relative path, otherwise the ns-id is missing
  6. I think that the tp-id should also use a relative path, otherwise the ns-id is missing.
    1. The topology-id should be specified: network-topology/topology[topology-id=../../topology-id]/
    2. Also the node-id should be specified: node[node-id=../node-id]/termination-point
  7. instead of underlay-path to avoid misunderstanding?
aguoietf commented 3 years ago

Updated tree to your comments:

module: ietf-transport-network-slice
  +--rw access-points
  |  +--rw access-point* [ap-id]
  |     +--rw ap-id         string
  |     +--rw pe-node-id?   string
  +--rw network-slices
     +--rw network-slice* [ns-id]
        +--rw ns-id                    string
        +--rw ns-name?                 string
        +--rw ns-description?          string
        +--rw customer-name*           string
        +--rw slo
        |  +--rw optimization-criterion?   identityref
        |  +--rw delay-tolerance?          boolean
        |  +--rw periodicity*              uint64
        |  +--rw isolation-level?          identityref
        +--rw endpoints
        |  +--rw endpoint* [endpoint-id]
        |     +--rw endpoint-id    string
        |     +--rw ap-id?         -> /access-points/access-point/ap-id
        +--rw network-topologies
        |  +--rw network-topology* [topology-id]
        |     +--rw topology-id    string
        |     +--rw node* [node-id]
        |     |  +--rw node-id              inet:uri
        |     |  +--rw slo
        |     |  |  +--rw isolation-level?   identityref
        |     |  +--rw termination-point* [tp-id]
        |     |     +--rw tp-id          inet:uri
        |     |     +--rw endpoint-id?   -> /network-slices/network-slice[ns-id=current()/../../../../../ns-id]/endpoints/endpoint/endpoint-id
        |     +--rw link* [link-id]
        |        +--rw link-id        inet:uri
        |        +--rw slo
        |        |  +--rw delay-tolerance?   boolean
        |        |  +--rw periodicity*       uint64
        |        |  +--rw isolation-level?   identityref
        |        +--rw source
        |        |  +--rw source-node?   -> ../../../node/node-id
        |        |  +--rw source-tp?     -> ../../../node[node-id=current()/../source-node]/termination-point/tp-id
        |        +--rw destination
        |           +--rw dest-node?   -> ../../../node/node-id
        |           +--rw dest-tp?     -> ../../../node[node-id=current()/../dest-node]/termination-point/tp-id
        +--rw connectivity-matrices
           +--rw connectivity-matrix* [connectivity-matrix-id]
              +--rw connectivity-matrix-id    uint32
              +--rw topology-id?              -> ../../../network-topologies/network-topology/topology-id
              +--rw src-endpoint?             -> ../../../endpoints/endpoint/endpoint-id
              +--rw dst-endpoint?             -> ../../../endpoints/endpoint/endpoint-id
              +--rw slo
              +--rw explicit-path* [tp-id]
                 +--rw tp-id    -> /network-slices/network-slice[ns-id=current()/../../../../ns-id]/network-topologies/network-topology[topology-id=current()/../../topology-id]/node/termination-point/tp-id
aguoietf commented 3 years ago

Proposal for the initial version is to remove the AP definitions and assume that endpoints are pre-negotiated and technology-specific configuration of the endpoints are outside the scope of this model.

Updated model tree:

module: ietf-transport-network-slice
  +--rw network-slices
     +--rw network-slice* [ns-id]
        +--rw ns-id                    string
        +--rw ns-name?                 string
        +--rw ns-description?          string
        +--rw customer-name*           string
        +--rw slo
        |  +--rw optimization-criterion?   identityref
        |  +--rw delay-tolerance?          boolean
        |  +--rw periodicity*              uint64
        |  +--rw isolation-level?          identityref
        +--rw endpoints
        |  +--rw endpoint* [endpoint-id]
        |     +--rw endpoint-id    string
        +--rw network-topologies
        |  +--rw network-topology* [topology-id]
        |     +--rw topology-id    string
        |     +--rw node* [node-id]
        |     |  +--rw node-id              inet:uri
        |     |  +--rw slo
        |     |  |  +--rw isolation-level?   identityref
        |     |  +--rw termination-point* [tp-id]
        |     |     +--rw tp-id          inet:uri
        |     |     +--rw endpoint-id?   -> /network-slices/network-slice[ns-id=current()/../../../../../ns-id]/endpoints/endpoint/endpoint-id
        |     +--rw link* [link-id]
        |        +--rw link-id        inet:uri
        |        +--rw slo
        |        |  +--rw delay-tolerance?   boolean
        |        |  +--rw periodicity*       uint64
        |        |  +--rw isolation-level?   identityref
        |        +--rw source
        |        |  +--rw source-node?   -> ../../../node/node-id
        |        |  +--rw source-tp?     -> ../../../node[node-id=current()/../source-node]/termination-point/tp-id
        |        +--rw destination
        |           +--rw dest-node?   -> ../../../node/node-id
        |           +--rw dest-tp?     -> ../../../node[node-id=current()/../dest-node]/termination-point/tp-id
        +--rw connectivity-matrices
           +--rw connectivity-matrix* [connectivity-matrix-id]
              +--rw connectivity-matrix-id    uint32
              +--rw topology-id?              -> ../../../network-topologies/network-topology/topology-id
              +--rw src-endpoint?             -> ../../../endpoints/endpoint/endpoint-id
              +--rw dst-endpoint?             -> ../../../endpoints/endpoint/endpoint-id
              +--rw slo
              +--rw explicit-path* [tp-id]
                 +--rw tp-id    -> /network-slices/network-slice[ns-id=current()/../../../../ns-id]/network-topologies/network-topology[topology-id=current()/../../topology-id]/node/termination-point/tp-id
sergiobelotti commented 3 years ago

Proposal for the initial version is to remove the AP definitions and assume that endpoints are pre-negotiated and technology-specific configuration of the endpoints are outside the scope of this model.

Updated model tree:

module: ietf-transport-network-slice
  +--rw network-slices
     +--rw network-slice* [ns-id]
        +--rw ns-id                    string
        +--rw ns-name?                 string
        +--rw ns-description?          string
        +--rw customer-name*           string
        +--rw slo
        |  +--rw optimization-criterion?   identityref
        |  +--rw delay-tolerance?          boolean
        |  +--rw periodicity*              uint64
        |  +--rw isolation-level?          identityref
        +--rw endpoints
        |  +--rw endpoint* [endpoint-id]
        |     +--rw endpoint-id    string
        +--rw network-topologies
        |  +--rw network-topology* [topology-id]
        |     +--rw topology-id    string
        |     +--rw node* [node-id]
        |     |  +--rw node-id              inet:uri
        |     |  +--rw slo
        |     |  |  +--rw isolation-level?   identityref
        |     |  +--rw termination-point* [tp-id]
        |     |     +--rw tp-id          inet:uri
        |     |     +--rw endpoint-id?   -> /network-slices/network-slice[ns-id=current()/../../../../../ns-id]/endpoints/endpoint/endpoint-id
        |     +--rw link* [link-id]
        |        +--rw link-id        inet:uri
        |        +--rw slo
        |        |  +--rw delay-tolerance?   boolean
        |        |  +--rw periodicity*       uint64
        |        |  +--rw isolation-level?   identityref
        |        +--rw source
        |        |  +--rw source-node?   -> ../../../node/node-id
        |        |  +--rw source-tp?     -> ../../../node[node-id=current()/../source-node]/termination-point/tp-id
        |        +--rw destination
        |           +--rw dest-node?   -> ../../../node/node-id
        |           +--rw dest-tp?     -> ../../../node[node-id=current()/../dest-node]/termination-point/tp-id
        +--rw connectivity-matrices
           +--rw connectivity-matrix* [connectivity-matrix-id]
              +--rw connectivity-matrix-id    uint32
              +--rw topology-id?              -> ../../../network-topologies/network-topology/topology-id
              +--rw src-endpoint?             -> ../../../endpoints/endpoint/endpoint-id
              +--rw dst-endpoint?             -> ../../../endpoints/endpoint/endpoint-id
              +--rw slo
              +--rw explicit-path* [tp-id]
                 +--rw tp-id    -> /network-slices/network-slice[ns-id=current()/../../../../ns-id]/network-topologies/network-topology[topology-id=current()/../../topology-id]/node/termination-point/tp-id

Need to specify that , with this hypothesis of pre-negotiation and configuration, the endpoint should be ro and not rw. They are rw only for leafref limitation. Clarification: is explicit-path the same as underlay--> primary-path in VN model ?

aguoietf commented 3 years ago

Are you considering the case where we make an access point an endpoint and keep a list of endpoints outside of the network slice configuration, and the network slice specifies endpoints by leafref to the list? In this case, yes endpoints in the list is rw but only because of YANG leafref limitation.

However, I thought that at the end it was said that there is no need to keep a separate list of access points in such case - endpoints are pre-negotiated so both the customer and provider knows exactly what an endpoint refers to. Let me know if this is a different understanding.

Also, yes an explicit path means a path within the network topology, and it is equivalent to the primary path in the VN model. Since VN uses TE topology as its underlay and here we bring the topology into this model without an underlay, I'd think it is better to not call it an underlay but rather a path within the topology. What do you think?

aguoietf commented 2 years ago

Xufeng's proposal on tree structure:

Augment existing P2P model with "replication-group" and "receiver-constraint-group":

        +--rw connectivity-constructs
        |  +--rw connectivity-construct* [id]
        |  |   +--rw id    uint32
        |  |     +--rw topology-id?              -> ../../../network-topologies/network-topology/topology-id
        |  |     +--rw src-endpoint?             -> ../../../endpoints/endpoint/endpoint-id
        |  |     +--rw dst-endpoint?             -> ../../../endpoints/endpoint/endpoint-id
        |  |     +--rw slo
        |  |     +--rw explicit-path* [tp-id]    a-->b c-->d    |    a,b,c,d
        |  |       +--rw tp-id   
        |  +--rw replication-group* [id]
        |     +--rw id                  uint32
        |     +--rw entry*              -> ../../connectivity-construct/id
        |  +--rw receiver-constraint-group* [id]
        |     +--rw id                  uint32
        |     +--rw entry*              -> ../../connectivity-construct/id
        |     +--rw te-bandwidth
        |     |  +--rw (technology)?
        |     |     +--:(generic)
        |     |        +--rw generic?   te-bandwidth

 +--rw connectivity-matrix
 |  +--rw connectivity-construct* [id]
 |     +--rw id                  uint32
 |     +--rw from
 |     |  +--rw tp-ref?               leafref
 |     +--rw to
 |     |  +--rw tp-ref?               leafref
 |     +--rw underlay {te-topology-hierarchy}?
 |     +--rw path-constraints
 |     +--rw optimizations
 |  +--rw replication-group* [id]
 |     +--rw id                  uint32
 |     +--rw entry*              -> ../../connectivity-construct/id
 |  +--rw receiver-constraint-group* [id]
 |     +--rw id                  uint32
 |     +--rw entry*              -> ../../connectivity-construct/id
 |     +--rw te-bandwidth
 |     |  +--rw (technology)?
 |     |     +--:(generic)
 |     |        +--rw generic?   te-bandwidth

Examples:

1) P2P
   NSE3 <-> NSC7
   NSE4 -> NSE8

{
  "connectivity-matrix": {
    "connectivity-construct": [
      "id": 1,
      "from": {
        "tp-ref": "NSE3"
      },
      "to": {
        "tp-ref": "NSE7"
      }
    ],
    "connectivity-construct": [
      "id": 2,
      "from": {
        "tp-ref": "NSE7"
      },
      "to": {
        "tp-ref": "NSE3"
      }
    ],
    "connectivity-construct": [
      "id": 3,
      "from": {
        "tp-ref": "NSE4"
      },
      "to": {
        "tp-ref": "NSE8"
      }
    ]
  }
}

2) P2MP
   NSE5 -> {NSC9, NSE10}

{
  "connectivity-matrix": {
    "connectivity-construct": [
      "id": 1,
      "from": {
        "tp-ref": "NSE5"
      },
      "to": {
        "tp-ref": "NSE9"
      }
    ],
    "connectivity-construct": [
      "id": 2,
      "from": {
        "tp-ref": "NSE5"
      },
      "to": {
        "tp-ref": "NSE10"
      }
    ],
    "replication-group": [
      "id": 1,
      "entry": [1, 2]
    ]
  }
}

3) MP2MP
   {NSE14, NSE15} -> {NSE16, NSE17}

{
  "connectivity-matrix": {
    "connectivity-construct": [
      "id": 1,
      "from": {
        "tp-ref": "NSE14"
      },
      "to": {
        "tp-ref": "NSE16"
      }
    ],
    "connectivity-construct": [
      "id": 2,
      "from": {
        "tp-ref": "NSE14"
      },
      "to": {
        "tp-ref": "NSE17"
      }
    ],
    "connectivity-construct": [
      "id": 3,
      "from": {
        "tp-ref": "NSE15"
      },
      "to": {
        "tp-ref": "NSE16"
      }
    ],
    "connectivity-construct": [
      "id": 4,
      "from": {
        "tp-ref": "NSE15"
      },
      "to": {
        "tp-ref": "NSE17"
      }
    ],
    "replication-group": [
      "id": 1,
      "entry": [1, 2]
    ],
    "replication-group": [
      "id": 1,
      "entry": [3, 4]
    ],
    "receiver-constraint-group": [
      "id": 1,
      "entry": [1, 3]
    ],
    "receiver-constraint-group": [
      "id": 1,
      "entry": [2, 4]
    ]
  }
}

3) A2A
   {NSE1, NSE2, NSE6} -> {NSE1, NSE2, NSE6}

{
  "connectivity-matrix": {
    "connectivity-construct": [
      "id": 1,
      "from": {
        "tp-ref": "NSE1"
      },
      "to": {
        "tp-ref": "NSE2"
      }
    ],
    "connectivity-construct": [
      "id": 2,
      "from": {
        "tp-ref": "NSE1"
      },
      "to": {
        "tp-ref": "NSE6"
      }
    ],
    "connectivity-construct": [
      "id": 3,
      "from": {
        "tp-ref": "NSE2"
      },
      "to": {
        "tp-ref": "NSE1"
      }
    ],
    "connectivity-construct": [
      "id": 4,
      "from": {
        "tp-ref": "NSE2"
      },
      "to": {
        "tp-ref": "NSE6"
      }
    ],
    "connectivity-construct": [
      "id": 5,
      "from": {
        "tp-ref": "NSE6"
      },
      "to": {
        "tp-ref": "NSE1"
      }
    ],
    "connectivity-construct": [
      "id": 6,
      "from": {
        "tp-ref": "NSE6"
      },
      "to": {
        "tp-ref": "NSE2"
      }
    ]
  }
}
aguoietf commented 2 years ago

@xufengliu to send the proposal of connectivity constructs to TEAS / Adrian for feedbacks. Will update the YANG tree accordingly based on the feedback.

aguoietf commented 2 years ago

A new proposal of network slicce is being updated in TEAS. AI is to take a look at the model and figure our whether it is possible to extract the common part and have the TNS to augment the TEAS network slice model

module: ietf-network-slice
  +--rw network-slices
     +--rw ns-slo-sle-templates
     |  +--rw ns-slo-sle-template* [id]
     |     +--rw id                      string
     |     +--rw template-description?   string
     +--rw network-slice* [ns-id]
        +--rw ns-id                     string
        +--rw ns-description?           string
        +--rw customer-name*            string
        +--rw (ns-slo-sle-policy)?
        |  +--:(standard)
        |  |  +--rw slo-sle-template?   -> /network-slices/ns-slo-sle-templates/ns-slo-sle-template/id
        |  +--:(custom)
        |     +--rw slo-sle-policy
        |        +--rw policy-description?     string
        |        +--rw ns-metric-bounds
        |        |  +--rw ns-metric-bound* [metric-type]
        |        |     +--rw metric-type          identityref
        |        |     +--rw metric-unit          string
        |        |     +--rw value-description?   string
        |        |     +--rw bound?               uint64
        |        +--rw security*               identityref
        |        +--rw isolation?              identityref
        |        +--rw max-occupancy-level?    uint8
        |        +--rw mtu                     uint16
        |        +--rw steering-constraints
        |           +--rw path-constraints
        |           +--rw service-function
        +--rw status
        |  +--rw admin-enabled?   boolean
        |  +--ro oper-status?     operational-type
                                                         //==> [Action 6] Tag to be added - done on call Jan 10
        +--rw ns-endpoints
        |  +--rw ns-endpoint* [ep-id]
        |     +--rw ep-id                       string
        |     +--rw ep-description?             string
        |     +--rw ep-role?                    identityref  //==> [Action 2] Not neede anymore - done on call Jan 10
        |     +--rw location
        |     |  +--rw altitude?    int64
        |     |  +--rw latitude?    decimal64
        |     |  +--rw longitude?   decimal64
        |     +--rw node-id?                    string
        |     +--rw ep-ip?                      inet:host   //==> [Action 3] We need to think that if this is both IPv4 and IPv6?? - done on call Jan 10
        |     +--rw ns-match-criteria
        |     |  +--rw ns-match-criterion* [match-type]
        |     |     +--rw match-type    identityref
        |     |     +--rw values* [index]
        |     |        +--rw index    uint8
        |     |        +--rw value?   string
                                                      //==> [Action 4] We need to add Action or something similar - done on call Jan 10
        |     +--rw ep-peering
        |     |  +--rw protocol* [protocol-type]
        |     |     +--rw protocol-type    identityref
        |     |     +--rw attribute* [index]
        |     |        +--rw index                    uint8
        |     |        +--rw attribute-description?   string
        |     |        +--rw value?                   string
        |     +--rw ep-network-access-points         //==> [Action 5] Investigate this more. A new profile or policy shall be added - Tarek to act Jan 10
        |     |  +--rw ep-network-access-point* [network-access-id]
        |     |     +--rw network-access-id             string
        |     |     +--rw network-access-description?   string
        |     |     +--rw network-access-node-id?       string
        |     |     +--rw network-access-tp-id?         string
        |     |     +--rw network-access-tp-ip?         inet:host
        |     |     +--rw mtu                           uint16
        |     |     +--rw ep-rate-limit
        |     |        +--rw incoming-rate-limit?   te-types:te-bandwidth
        |     |        +--rw outgoing-rate-limit?   te-types:te-bandwidth
        |     +--rw ep-rate-limit                     //==> [Action 7] Investigate this more. - Tarek to act Jan 10
        |     |  +--rw incoming-rate-limit?   te-types:te-bandwidth
        |     |  +--rw outgoing-rate-limit?   te-types:te-bandwidth
        |     +--rw status
        |     |  +--rw admin-enabled?   boolean
        |     |  +--ro oper-status?     operational-type
        |     +--ro ep-monitoring               // ==> [Action 8] Can we make it generic enough. - Tarek to act Jan 10
        |        +--ro incoming-utilized-bandwidth?   te-types:te-bandwidth
        |        +--ro incoming-bw-utilization        decimal64
        |        +--ro outgoing-utilized-bandwidth?   te-types:te-bandwidth
        |        +--ro outgoing-bw-utilization        decimal64 
        +--rw ns-connection-groups
           +--rw ns-connection-group* [ns-connection-group-id]
              +--rw ns-connection-group-id      string
              +--rw (ns-slo-sle-policy)?
              |  +--:(standard)
              |  |  +--rw slo-sle-template?     -> /network-slices/ns-slo-sle-templates/ns-slo-sle-template/id
              |  +--:(custom)
              |     +--rw slo-sle-policy
              |        +--rw policy-description?     string
              |        +--rw ns-metric-bounds
              |        |  +--rw ns-metric-bound* [metric-type]
              |        |     +--rw metric-type          identityref
              |        |     +--rw metric-unit          string
              |        |     +--rw value-description?   string
              |        |     +--rw bound?               uint64
              |        +--rw security*               identityref
              |        +--rw isolation?              identityref
              |        +--rw max-occupancy-level?    uint8
              |        +--rw mtu                     uint16
              |        +--rw steering-constraints
              |           +--rw path-constraints
              |           +--rw service-function
              +--rw ns-connection* [ns-connection-id]
              |  +--rw ns-connection-id            uint32
              |  +--rw ns-connectivity-type?       identityref
              |  +--rw src-nse*                    -> /network-slices/network-slice/ns-endpoints/ns-endpoint/ep-id
              |  +--rw dest-nse*                   -> /network-slices/network-slice/ns-endpoints/ns-endpoint/ep-id
              |  +--rw (ns-slo-sle-policy)?
              |  |  +--:(standard)
              |  |  |  +--rw slo-sle-template?     -> /network-slices/ns-slo-sle-templates/ns-slo-sle-template/id
              |  |  +--:(custom)
              |  |     +--rw slo-sle-policy
              |  |        +--rw policy-description?     string
              |  |        +--rw ns-metric-bounds
              |  |        |  +--rw ns-metric-bound* [metric-type]
              |  |        |     +--rw metric-type          identityref
              |  |        |     +--rw metric-unit          string
              |  |        |     +--rw value-description?   string
              |  |        |     +--rw bound?               uint64
              |  |        +--rw security*               identityref
              |  |        +--rw isolation?              identityref
              |  |        +--rw max-occupancy-level?    uint8
              |  |        +--rw mtu                     uint16
              |  |        +--rw steering-constraints
              |  |           +--rw path-constraints
              |  |           +--rw service-function
              |  +--rw monitoring-type?            ns-monitoring-type       
              |  +--ro ns-connection-monitoring       //==> [Action 1] to use the existing grouping on TE type YANG model e.g. RFC 8776 Performance Metric Attribute?? 
                                                         - Tarek to act Jan 10
              |     +--ro latency?      yang:gauge64
              |     +--ro jitter?       yang:gauge32
              |     +--ro loss-ratio?   decimal64
              +--rw monitoring-type?            ns-monitoring-type
              +--ro ns-connection-monitoring
                 +--ro latency?      yang:gauge64
                 +--ro jitter?       yang:gauge32
                 +--ro loss-ratio?   decimal64

                                                      //==> [Action 9] to be discussed later; shared or dedicated resource - miss this one Jan 10
vlopezalvarez commented 2 years ago

We need to evaluate the elements in our draft and compare with the new version. This is what we found during the call:

sergiobelotti commented 2 years ago

See updated version of ietf-network-slice module at https://github.com/lana-wu/ietf-ns-nbi/blob/main/ietf-network-slice.tree

aguoietf commented 2 years ago

An initial model draft for transport network slice (TNS) augmenting the ietf-network-slice-yang:

----Augmented view for ietf-transport-network-slice----

  augment /ietf-nss:network-slice-services/ietf-nss:slice-service:
    +--rw network-topologies
       +--rw network-topology* [topology-id]
          +--rw topology-id    string
          +--rw node* [node-id]
          |  +--rw node-id              inet:uri
          |  +--rw termination-point* [tp-id]
          |     +--rw tp-id     inet:uri
          |     +--rw sdp-id?   -> /ietf-nss:network-slice-services/slice-service[ietf-nss:service-id=current()/../../../../../service-id]/sdps/sdp/sdp-id
          +--rw link* [link-id]
             +--rw link-id        inet:uri
             +--rw source
             |  +--rw source-node?   -> ../../../node/node-id
             |  +--rw source-tp?     -> ../../../node[node-id=current()/../source-node]/termination-point/tp-id
             +--rw destination
                +--rw dest-node?   -> ../../../node/node-id
                +--rw dest-tp?     -> ../../../node[node-id=current()/../dest-node]/termination-point/tp-id
  augment /ietf-nss:network-slice-services/ietf-nss:slice-service/ietf-nss:connection-groups/ietf-nss:connection-group/ietf-nss:connectivity-construct:
    +--rw topology-id?     -> ../../../../network-topologies/network-topology/topology-id
    +--rw explicit-path* [tp-id]
       +--rw tp-id    -> /ietf-nss:network-slice-services/slice-service[ietf-nss:service-id=current()/../../../../../service-id]/network-topologies/network-topology[topology-id=current()/../../topology-id]/node/termination-point/tp-id

----Full tree view combining ietf-network-slice-service and ietf-transport-network-slice ----

module: ietf-network-slice-service
  +--rw network-slice-services
     +--rw slo-sle-templates
     |  +--rw slo-sle-template* [id]
     |     +--rw id                      string
     |     +--rw template-description?   string
     +--rw slice-service* [service-id]
        +--rw service-id                      string
        +--rw service-description?            string
        +--rw service-tags
        |  +--rw service-id-tag* [index]
        |     +--rw index        uint32
        |     +--rw tag-type?    identityref   --> service(?)
        |     +--rw tag-value?   string        --> L1 client signal (w/ name of client signal)
        +--rw (slo-sle-policy)?
        |  +--:(standard)
        |  |  +--rw slo-sle-template?         -> /network-slice-services/slo-sle-templates/slo-sle-template/id
        |  +--:(custom)
        |     +--rw service-slo-sle-policy
        |        +--rw policy-description?     string
        |        +--rw metric-bounds
        |        |  +--rw metric-bound* [metric-type]
        |        |     +--rw metric-type          identityref
        |        |     +--rw metric-unit          string
        |        |     +--rw value-description?   string
        |        |     +--rw bound?               uint64
        |        +--rw security*               identityref
        |        +--rw isolation?              identityref
        |        +--rw max-occupancy-level?    uint8
        |        +--rw mtu?                    uint16
        |        +--rw steering-constraints
        |           +--rw path-constraints
        |           +--rw service-function
        +--rw status
        |  +--rw admin-status
        |  |  +--rw status?        identityref
        |  |  +--rw last-change?   yang:date-and-time
        |  +--ro oper-status
        |     +--ro status?        identityref
        |     +--ro last-change?   yang:date-and-time
        +--rw sdps
        |  +--rw sdp* [sdp-id]
        |     +--rw sdp-id                    string
        |     +--rw sdp-description?          string
        |     +--rw location
        |     |  +--rw altitude?    int64
        |     |  +--rw latitude?    decimal64
        |     |  +--rw longitude?   decimal64
        |     +--rw node-id?                  string
        |     +--rw sdp-ip?                   inet:ip-address
        |     +--rw service-match-criteria
        |     |  +--rw match-criterion* [match-type]
        |     |     +--rw match-type                          identityref   --> phy-port / OTN label / VLAN
        |     |     +--rw value*                              string        -->   N/A    / OTN label hop (TPN, TSG, TS-LIST) / VLAN-ID
        |     |     +--rw target-connection-group-id?         -> /network-slice-services/slice-service/connection-groups/connection-group/connection-group-id
        |     |     +--rw connection-group-sdp-role?          identityref
        |     |     +--rw target-connectivity-construct-id?   -> /network-slice-services/slice-service/connection-groups/connection-group/connectivity-construct/cc-id
        |     +--rw sdp-peering
        |     |  +--rw protocol* [protocol-type]
        |     |     +--rw protocol-type    identityref
        |     |     +--rw attribute* [index]
        |     |        +--rw index                    uint8
        |     |        +--rw attribute-description?   string
        |     |        +--rw value?                   string
        |     +--rw attachment-circuits
        |     |  +--rw attachment-circuit* [ac-id]
        |     |     +--rw ac-id                     string
        |     |     +--rw ac-description?           string
        |     |     +--rw ac-node-id?               string
        |     |     +--rw ac-tp-id?                 string
        |     |     +--rw ac-tp-ip-address?         inet:ip-address
        |     |     +--rw ac-ip-prefix-length?      uint8
        |     |     +--rw qos-policy-name?          string
        |     |     +--rw mtu?                      uint16
        |     |     +--rw ac-tags
        |     |     |  +--rw ac-tag* [index]
        |     |     |     +--rw index           uint32
        |     |     |     +--rw ac-tag-type?    identityref
        |     |     |     +--rw ac-tag-value?   string
        |     |     +--rw service-match-criteria
        |     |     |  +--rw match-criterion* [match-type]
        |     |     |     +--rw match-type                          identityref
        |     |     |     +--rw value*                              string
        |     |     |     +--rw target-connection-group-id?         -> /network-slice-services/slice-service/connection-groups/connection-group/connection-group-id
        |     |     |     +--rw connection-group-sdp-role?          identityref
        |     |     |     +--rw target-connectivity-construct-id?   -> /network-slice-services/slice-service/connection-groups/connection-group/connectivity-construct/cc-id
        |     |     +--rw sdp-peering
        |     |     |  +--rw protocol* [protocol-type]
        |     |     |     +--rw protocol-type    identityref
        |     |     |     +--rw attribute* [index]
        |     |     |        +--rw index                    uint8
        |     |     |        +--rw attribute-description?   string
        |     |     |        +--rw value?                   string
        |     |     +--rw incoming-rate-limits
        |     |     |  +--rw cir?   uint64
        |     |     |  +--rw cbs?   uint64
        |     |     |  +--rw eir?   uint64
        |     |     |  +--rw ebs?   uint64
        |     |     |  +--rw pir?   uint64
        |     |     |  +--rw pbs?   uint64
        |     |     +--rw outgoing-rate-limits
        |     |        +--rw cir?   uint64
        |     |        +--rw cbs?   uint64
        |     |        +--rw eir?   uint64
        |     |        +--rw ebs?   uint64
        |     |        +--rw pir?   uint64
        |     |        +--rw pbs?   uint64
        |     +--rw incoming-rate-limits
        |     |  +--rw cir?   uint64
        |     |  +--rw cbs?   uint64
        |     |  +--rw eir?   uint64
        |     |  +--rw ebs?   uint64
        |     |  +--rw pir?   uint64
        |     |  +--rw pbs?   uint64
        |     +--rw outgoing-rate-limits
        |     |  +--rw cir?   uint64
        |     |  +--rw cbs?   uint64
        |     |  +--rw eir?   uint64
        |     |  +--rw ebs?   uint64
        |     |  +--rw pir?   uint64
        |     |  +--rw pbs?   uint64
        |     +--rw status
        |     |  +--rw admin-status
        |     |  |  +--rw status?        identityref
        |     |  |  +--rw last-change?   yang:date-and-time
        |     |  +--ro oper-status
        |     |     +--ro status?        identityref
        |     |     +--ro last-change?   yang:date-and-time
        |     +--ro sdp-monitoring
        |        +--ro incoming-utilized-bandwidth?   te-types:te-bandwidth
        |        +--ro incoming-bw-utilization        decimal64
        |        +--ro outgoing-utilized-bandwidth?   te-types:te-bandwidth
        |        +--ro outgoing-bw-utilization        decimal64
        +--rw connection-groups
        |  +--rw connection-group* [connection-group-id]
        |     +--rw connection-group-id             string
        |     +--rw connectivity-type?              identityref
        |     +--rw (slo-sle-policy)?
        |     |  +--:(standard)
        |     |  |  +--rw slo-sle-template?         -> /network-slice-services/slo-sle-templates/slo-sle-template/id
        |     |  +--:(custom)
        |     |     +--rw service-slo-sle-policy
        |     |        +--rw policy-description?     string
        |     |        +--rw metric-bounds
        |     |        |  +--rw metric-bound* [metric-type]
        |     |        |     +--rw metric-type          identityref
        |     |        |     +--rw metric-unit          string
        |     |        |     +--rw value-description?   string
        |     |        |     +--rw bound?               uint64
        |     |        +--rw security*               identityref
        |     |        +--rw isolation?              identityref
        |     |        +--rw max-occupancy-level?    uint8
        |     |        +--rw mtu?                    uint16
        |     |        +--rw steering-constraints
        |     |           +--rw path-constraints
        |     |           +--rw service-function
        |     +--rw connectivity-construct* [cc-id]
        |     |  +--rw cc-id                                uint32
        |     |  +--rw (connectivity-construct-type)?
        |     |  |  +--:(p2p)
        |     |  |  |  +--rw p2p-sender-sdp?                -> ../../../../sdps/sdp/sdp-id
        |     |  |  |  +--rw p2p-receiver-sdp?              -> ../../../../sdps/sdp/sdp-id
        |     |  |  +--:(p2mp)
        |     |  |  |  +--rw p2mp-sender-sdp?               -> ../../../../sdps/sdp/sdp-id
        |     |  |  |  +--rw p2mp-receiver-sdp*             -> ../../../../sdps/sdp/sdp-id
        |     |  |  +--:(a2a)
        |     |  |     +--rw a2a-sdp* [sdp-id]
        |     |  |        +--rw sdp-id                          -> ../../../../../sdps/sdp/sdp-id
        |     |  |        +--rw (slo-sle-policy)?
        |     |  |           +--:(standard)
        |     |  |           |  +--rw slo-sle-template?         -> /network-slice-services/slo-sle-templates/slo-sle-template/id
        |     |  |           +--:(custom)
        |     |  |              +--rw service-slo-sle-policy
        |     |  |                 +--rw policy-description?     string
        |     |  |                 +--rw metric-bounds
        |     |  |                 |  +--rw metric-bound* [metric-type]
        |     |  |                 |     +--rw metric-type          identityref
        |     |  |                 |     +--rw metric-unit          string
        |     |  |                 |     +--rw value-description?   string
        |     |  |                 |     +--rw bound?               uint64
        |     |  |                 +--rw security*               identityref
        |     |  |                 +--rw isolation?              identityref
        |     |  |                 +--rw max-occupancy-level?    uint8
        |     |  |                 +--rw mtu?                    uint16
        |     |  |                 +--rw steering-constraints
        |     |  |                    +--rw path-constraints
        |     |  |                    +--rw service-function
        |     |  +--rw (slo-sle-policy)?
        |     |  |  +--:(standard)
        |     |  |  |  +--rw slo-sle-template?              -> /network-slice-services/slo-sle-templates/slo-sle-template/id
        |     |  |  +--:(custom)
        |     |  |     +--rw service-slo-sle-policy
        |     |  |        +--rw policy-description?     string
        |     |  |        +--rw metric-bounds
        |     |  |        |  +--rw metric-bound* [metric-type]
        |     |  |        |     +--rw metric-type          identityref
        |     |  |        |     +--rw metric-unit          string
        |     |  |        |     +--rw value-description?   string
        |     |  |        |     +--rw bound?               uint64
        |     |  |        +--rw security*               identityref
        |     |  |        +--rw isolation?              identityref
        |     |  |        +--rw max-occupancy-level?    uint8
        |     |  |        +--rw mtu?                    uint16
        |     |  |        +--rw steering-constraints
        |     |  |           +--rw path-constraints
        |     |  |           +--rw service-function
        |     |  +--ro connectivity-construct-monitoring
        |     |  |  +--ro one-way-min-delay?         uint32
        |     |  |  +--ro one-way-max-delay?         uint32
        |     |  |  +--ro one-way-delay-variation?   uint32
        |     |  |  +--ro one-way-packet-loss?       decimal64
        |     |  |  +--ro two-way-min-delay?         uint32
        |     |  |  +--ro two-way-max-delay?         uint32
        |     |  |  +--ro two-way-delay-variation?   uint32
        |     |  |  +--ro two-way-packet-loss?       decimal64
        |     |  +--rw tns:topology-id?                     -> ../../../../network-topologies/network-topology/topology-id
        |     |  +--rw tns:explicit-path* [tp-id]
        |     |     +--rw tns:tp-id    -> /ietf-nss:network-slice-services/slice-service[ietf-nss:service-id=current()/../../../../../service-id]/network-topologies/network-topology[topology-id=current()/../../topology-id]/node/termination-point/tp-id
        |     +--ro connection-group-monitoring
        |        +--ro one-way-min-delay?         uint32
        |        +--ro one-way-max-delay?         uint32
        |        +--ro one-way-delay-variation?   uint32
        |        +--ro one-way-packet-loss?       decimal64
        |        +--ro two-way-min-delay?         uint32
        |        +--ro two-way-max-delay?         uint32
        |        +--ro two-way-delay-variation?   uint32
        |        +--ro two-way-packet-loss?       decimal64
        +--rw tns:network-topologies
           +--rw tns:network-topology* [topology-id]
              +--rw tns:topology-id    string
              +--rw tns:node* [node-id]
              |  +--rw tns:node-id              inet:uri
              |  +--rw tns:termination-point* [tp-id]
              |     +--rw tns:tp-id     inet:uri
              |     +--rw tns:sdp-id?   -> /ietf-nss:network-slice-services/slice-service[ietf-nss:service-id=current()/../../../../../service-id]/sdps/sdp/sdp-id
              +--rw tns:link* [link-id]
                 +--rw tns:link-id        inet:uri
                 +--rw tns:source
                 |  +--rw tns:source-node?   -> ../../../node/node-id
                 |  +--rw tns:source-tp?     -> ../../../node[node-id=current()/../source-node]/termination-point/tp-id
                 +--rw tns:destination
                    +--rw tns:dest-node?   -> ../../../node/node-id
                    +--rw tns:dest-tp?     -> ../../../node[node-id=current()/../dest-node]/termination-point/tp-id
aguoietf commented 2 years ago

@italobusi Raw list of the comments I have taken yesterday: Is the list of match criteria represents and OR or an AND? Example: VLAN 100 and MPLS label 50

Duplication of information (e.g., VLAN value, SDP peering) between SDP and AC ... Why the SDP role and the connectivity-construct-id is defined per match-criteria and not per SDP

@sergiobelotti Originally SDP role was under SDP (SAP originally) but the intention is to permit SDP to have different roles depending of participation of different connection.constructs (groups). Matching criteria in SDP, are pointing to target-connectivity group id and connection-group-sdp-role

@italobusi As discussed today, this is not always possible with the current model structure

For example, it is not possible to define an SDP for VLAN 100 and 200 and associate VLAN 100 to a connectivity construct (e.g., with low latency) and VLAN 200 to another connectivity construct (e.g., with high bandwidth) this is due to the fact that the tag-type (e.g., VLAN in this case) is the key of the list so it is not possible to have two entries with the same key pointing to two different connectivity constructs

It is also not fully clear to me also how it is possible to define an SDP for VLAN 100 and two connectivity constructs associated based on the DSCP field