module ietf-vn {
yang-version 1.1;
namespace "urn:ietf:params:xml:ns:yang:ietf-vn";
prefix vn;
/* Import network */
import ietf-yang-types {
prefix yang;
reference
"RFC 6991: Common YANG Data Types";
}
import ietf-network {
prefix nw;
reference
"RFC 8345: A YANG Data Model for Network Topologies";
}
/* Import network topology */
import ietf-network-topology {
prefix nt;
reference
"RFC 8345: A YANG Data Model for Network Topologies";
}
/* Import TE Common types */
import ietf-te-types {
prefix te-types;
reference
"RFC 8776: Common YANG Data Types for Traffic Engineering";
}
/* Import TE Topology */
import ietf-te-topology {
prefix tet;
reference
"RFC 8795: YANG Data Model for Traffic Engineering (TE)
Topologies";
}
organization
"IETF Traffic Engineering Architecture and Signaling (TEAS)
Working Group";
contact
"WG Web:
WG List:
Editor: Young Lee
: Dhruv Dhody ";
description
"This module contains a YANG module for the VN. It describes a
VN operation module that takes place in the context of the
CNC-MDSC Interface (CMI) of the ACTN architecture where the
CNC is the actor of a VN Instantiation/modification/deletion
as per RFC 8453.
Copyright (c) 2021 IETF Trust and the persons identified as
authors of the code. All rights reserved.
Redistribution and use in source and binary forms, with or
without modification, is permitted pursuant to, and subject to
the license terms contained in, the Simplified BSD License set
forth in Section 4.c of the IETF Trust's Legal Provisions
Relating to IETF Documents
(https://trustee.ietf.org/license-info).
This version of this YANG module is part of RFC XXXX; see the
RFC itself for full legal notices.
The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL
NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED',
'MAY', and 'OPTIONAL' in this document are to be interpreted as
described in BCP 14 (RFC 2119) (RFC 8174) when, and only when,
they appear in all capitals, as shown here.";
revision 2021-02-19 {
description
"initial version.";
reference
"RFC XXXX: A YANG Data Model for VN Operation";
}
/* Features */
feature multi-src-dest {
description
"Support for selection of one src or destination
among multiple.";
reference
"RFC 8453: Framework for Abstraction and Control of TE
Networks (ACTN)";
}
/* Typedef */
typedef vn-id {
type string;
description
"Defines a type of Virtual Network (VN) identifier.";
}
typedef ap-id {
type string;
description
"Defines a type of Access Point (AP) identifier.";
}
typedef vnm-id {
type string;
description
"Defines a type of VN member identifier.";
}
typedef vn-compute-status {
type te-types:te-common-status;
description
"Defines a type representing the VN compute status";
}
/* identities */
identity vn-computation-error-reason {
description
"Base identity for VN computation error reasons.";
}
identity vn-computation-error-not-ready {
base vn-computation-error-reason;
description
"VN computation has failed because the MDSC is not
ready";
}
identity vn-computation-error-no-cnc {
base vn-computation-error-reason;
description
"VN computation has failed because one or more dependent
CNC are unavailable.";
}
identity vn-computation-error-no-resource {
base vn-computation-error-reason;
description
"VN computation has failed because there is no
available resource in one or more domains.";
}
identity vn-computation-error-path-not-found {
base vn-computation-error-reason;
description
"VN computation failed as no path found.";
}
identity vn-computation-ap-unknown {
base vn-computation-error-reason;
description
"VN computation failed as source or destination AP not
known.";
}
/* Groupings */
grouping vn-ap {
description
"VNAP related information";
leaf vn-ap-id {
type ap-id;
description
"A unique identifier for the referred VNAP";
}
leaf vn {
type leafref {
path "/vn/vn/vn-id";
}
description
"A reference to the VN";
}
leaf abstract-node {
type leafref {
path "/nw:networks/nw:network/nw:node/tet:te-node-id";
}
description
"A reference to the abstract node in TE Topology that
represent the VN";
}
leaf ltp {
type leafref {
path "/nw:networks/nw:network/nw:node/"
+ "nt:termination-point/tet:te-tp-id";
}
description
"A reference to Link Termination Point (LTP) in the
TE-topology";
reference
"RFC 8795: YANG Data Model for Traffic Engineering (TE)
Topologies";
}
leaf max-bandwidth {
type te-types:te-bandwidth;
config false;
description
"The max bandwidth of the VNAP";
}
reference
"RFC 8453: Framework for Abstraction and Control of TE
Networks (ACTN), Section 6";
} //vn-ap
grouping access-point {
description
"AP related information";
leaf ap-id {
type ap-id;
description
"A unique identifier for the referred access point";
}
leaf pe {
type leafref {
path "/nw:networks/nw:network/nw:node/tet:te-node-id";
}
description
"A reference to the PE node in the native TE Topology";
}
leaf max-bandwidth {
type te-types:te-bandwidth;
description
"The max bandwidth of the AP";
}
leaf avl-bandwidth {
type te-types:te-bandwidth;
description
"The available bandwidth of the AP";
}
/*add details and any other properties of AP,
not associated by a VN
CE port, PE port etc.
*/
list vn-ap {
key "vn-ap-id";
uses vn-ap;
description
"List of VNAP in this AP";
}
reference
"RFC 8453: Framework for Abstraction and Control of TE
Networks (ACTN), Section 6";
} //access-point
grouping vn-member {
description
"The vn-member is described by this grouping";
leaf vnm-id {
type vnm-id;
description
"A vn-member identifier";
}
container src {
description
"The source of VN Member";
leaf src {
type leafref {
path "/ap/ap/ap-id";
}
description
"A reference to source AP";
}
leaf src-vn-ap-id {
type leafref {
path "/ap/ap/vn-ap/vn-ap-id";
}
description
"A reference to source VNAP";
}
leaf multi-src {
if-feature "multi-src-dest";
type boolean;
default "false";
description
"Is the source part of multi-source, where
only one of the source is enabled";
}
}
container dest {
description
"the destination of VN Member";
leaf dest {
type leafref {
path "/ap/ap/ap-id";
}
description
"A reference to destination AP";
}
leaf dest-vn-ap-id {
type leafref {
path "/ap/ap/vn-ap/vn-ap-id";
}
description
"A reference to dest VNAP";
}
leaf multi-dest {
if-feature "multi-src-dest";
type boolean;
default "false";
description
"Is destination part of multi-destination, where only one
of the destination is enabled";
}
}
leaf connectivity-matrix-id {
type leafref {
path "/nw:networks/nw:network/nw:node/tet:te/"
+ "tet:te-node-attributes/"
+ "tet:connectivity-matrices/"
+ "tet:connectivity-matrix/tet:id";
}
description
"A reference to connectivity-matrix";
reference
"RFC 8795: YANG Data Model for Traffic Engineering (TE)
Topologies";
}
reference
"RFC 8454: Information Model for Abstraction and Control of TE
Networks (ACTN)";
} //vn-member
grouping vn-policy {
description
"policy for VN-level diverisity";
leaf vn-level-diversity {
type te-types:te-path-disjointness;
description
"The type of disjointness on the VN level (i.e., across all
VN members)";
}
}
/* Configuration data nodes */
container ap {
description
"AP configurations";
list ap {
key "ap-id";
description
"access-point identifier";
uses access-point {
description
"The access-point information";
}
}
reference
"RFC 8453: Framework for Abstraction and Control of TE
Networks (ACTN), Section 6";
}
container vn {
description
"VN configurations";
list vn {
key "vn-id";
description
"A virtual network is identified by a vn-id";
leaf vn-id {
type vn-id;
description
"A unique VN identifier";
}
leaf vn-topology-id {
type te-types:te-topology-id;
description
"An optional identifier to the TE Topology Model where the
abstract nodes and links of the Topology can be found for
Type 2 VNS";
}
leaf abstract-node {
type leafref {
path "/nw:networks/nw:network/nw:node/tet:te-node-id";
}
description
"A reference to the abstract node in TE Topology";
}
list vn-member {
key "vnm-id";
description
"List of vn-members in a VN";
uses vn-member;
leaf oper-status {
type te-types:te-oper-status;
config false;
description
"The vn-member operational state.";
}
}
leaf if-selected {
if-feature "multi-src-dest";
type boolean;
default "false";
config false;
description
"Is the vn-member is selected among the multi-src/dest
options";
}
leaf admin-status {
type te-types:te-admin-status;
default "up";
description
"VN administrative state.";
}
leaf oper-status {
type te-types:te-oper-status;
config false;
description
"VN operational state.";
}
uses vn-policy;
} //vn
reference
"RFC 8453: Framework for Abstraction and Control of TE
Networks (ACTN)";
} //vn
/* RPC */
rpc vn-compute {
description
"The VN computation without actual instantiation. This is
used by the CNC to get the VN results without actually
creating it in the network.
The input could include a reference to the single node
abstract topology. It could optionally also include
constraints and optimization criteria. The computation
is done based on the list of VN-members.
The output includes a reference to the single node
abstract topology with each VN-member including a
reference to the connectivity-matrix-id where the
path properties could be found. Error information is
also included.";
input {
leaf abstract-node {
type leafref {
path "/nw:networks/nw:network/nw:node/tet:te-node-id";
}
description
"A reference to the abstract node in TE Topology";
}
uses te-types:generic-path-constraints;
uses te-types:generic-path-optimization;
list vn-member-list {
key "vnm-id";
description
"List of VN-members in a VN";
uses vn-member;
uses te-types:generic-path-constraints;
uses te-types:generic-path-optimization;
}
uses vn-policy;
}
output {
leaf abstract-node {
type leafref {
path "/nw:networks/nw:network/nw:node/tet:te-node-id";
}
description
"A reference to the abstract node in TE Topology";
}
list vn-member-list {
key "vnm-id";
description
"List of VN-members in a VN";
uses vn-member;
leaf if-selected {
if-feature "multi-src-dest";
type boolean;
default "false";
description
"Is the vn-member is selected among the multi-src/dest
options";
reference
"RFC 8453: Framework for Abstraction and Control of TE
Networks (ACTN), Section 7";
}
leaf compute-status {
type vn-compute-status;
description
"The VN-member compute state.";
}
container error-info {
description
"Error information related to the VN member";
leaf error-description {
type string;
description
"Textual representation of the error occurred during
VN compute.";
}
leaf error-timestamp {
type yang:date-and-time;
description
"Timestamp of the attempt.";
}
leaf error-reason {
type identityref {
base vn-computation-error-reason;
}
description
"Reason for the VN computation error.";
}
}
}
}
} //vn-compute
}