Open aguoietf opened 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
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:
pe-node-id
attribute?customer-name
is a list and not a single attribute?ns-name
attribute in addition to ns-id
and ns-description
(like in other models)network-topologies
instead of network-topology
?topology-id
should use a relative path, otherwise the ns-id
is missingtp-id
should also use a relative path, otherwise the ns-id
is missing.
network-topology/topology[topology-id=../../topology-id]/
node-id
should be specified: node[node-id=../node-id]/termination-point
underlay-path
to avoid misunderstanding?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
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
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 ?
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?
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"
}
]
}
}
@xufengliu to send the proposal of connectivity constructs to TEAS / Adrian for feedbacks. Will update the YANG tree accordingly based on the feedback.
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
We need to evaluate the elements in our draft and compare with the new version. This is what we found during the call:
See updated version of ietf-network-slice module at https://github.com/lana-wu/ietf-ns-nbi/blob/main/ietf-network-slice.tree
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
@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
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.