module ietf-vn {
yang-version 1.1;
namespace "urn:ietf:params:xml:ns:yang:ietf-vn";
prefix vn;
/* Import network */
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
"I-D.ietf-teas-yang-te-types: Traffic Engineering Common
YANG Types";
}
/* Import TE Topology */
import ietf-te-topology {
prefix tet;
reference
"I-D.ietf-teas-yang-te-topo: 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.";
revision 2019-10-31 {
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.";
}
/* Identity VN State*/
identity vn-state-type {
description
"Base identity for VN state";
}
identity vn-state-up {
base vn-state-type;
description
"VN state up";
}
identity vn-state-down {
base vn-state-type;
description
"VN state down";
}
/* Identity VN Admin State*/
identity vn-admin-state-type {
description
"Base identity for VN admin states";
}
identity vn-admin-state-up {
base vn-admin-state-type;
description
"VN administratively state up";
}
identity vn-admin-state-down {
base vn-admin-state-type;
description
"VN administratively state down";
}
/* Identity VN Compute State*/
identity vn-compute-state-type {
description
"Base identity for compute states";
}
identity vn-compute-state-computing {
base vn-compute-state-type;
description
"State path compute in progress";
}
identity vn-compute-state-computation-ok {
base vn-compute-state-type;
description
"State path compute successful";
}
identity vn-compute-state-computatione-failed {
base vn-compute-state-type;
description
"State path compute failed";
}
/* typedef */
typedef vn-disjointness {
type bits {
bit node {
position 0;
description
"node disjoint";
}
bit link {
position 1;
description
"link disjoint";
}
bit srlg {
position 2;
description
"srlg disjoint";
}
}
description
"type of the resource disjointness for VN level applied
across all VN members in a VN";
}
/* Groupings */
grouping vn-ap {
description
"VNAP related information";
leaf vn-ap-id {
type uint32;
description
"unique identifier for the referred VNAP";
}
leaf vn {
type leafref {
path "/vn/vn-list/vn-id";
}
description
"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
"Reference LTP in the TE-topology";
}
}//vn-ap
grouping access-point {
description
"AP related information";
leaf access-point-id {
type uint32;
description
"unique identifier for the referred access point";
}
leaf access-point-name {
type string;
description
"ap name";
}
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
"max bandwidth of the AP";
}
leaf avl-bandwidth {
type te-types:te-bandwidth;
description
"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";
}
}//access-point
grouping vn-member {
description
"vn-member is described by this container";
leaf vn-member-id {
type uint32;
description
"vn-member identifier";
}
container src {
description
"the source of VN Member";
leaf src {
type leafref {
path "/ap/access-point-list/access-point-id";
}
description
"reference to source AP";
}
leaf src-vn-ap-id {
type leafref {
path "/ap/access-point-list/vn-ap/vn-ap-id";
}
description
"reference to source VNAP";
}
leaf multi-src {
if-feature "multi-src-dest";
type boolean;
description
"Is 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/access-point-list/access-point-id";
}
description
"reference to destination AP";
}
leaf dest-vn-ap-id {
type leafref {
path "/ap/access-point-list/vn-ap/vn-ap-id";
}
description
"reference to dest VNAP";
}
leaf multi-dest {
if-feature "multi-src-dest";
type boolean;
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
"reference to connectivity-matrix";
}
}//vn-member
grouping vn-policy {
description
"policy for VN-level diverisity";
leaf vn-level-diversity {
type vn-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 access-point-list {
key "access-point-id";
description
"access-point identifier";
uses access-point {
description
"access-point information";
}
}
}
container vn {
description
"VN configurations";
list vn-list {
key "vn-id";
description
"a virtual network is identified by a vn-id";
leaf vn-id {
type uint32;
description
"a unique vn identifier";
}
leaf vn-name {
type string;
description
"vn name";
}
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-list {
key "vn-member-id";
description
"List of VN-members in a VN";
uses vn-member;
leaf oper-status {
type identityref {
base vn-state-type;
}
config false;
description
"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 identityref {
base vn-admin-state-type;
}
default "vn-admin-state-up";
description
"VN administrative state.";
}
leaf oper-status {
type identityref {
base vn-state-type;
}
config false;
description
"VN operational state.";
}
uses vn-policy;
}//vn-list
}//vn
/* RPC */
rpc vn-compute {
description
"The VN computation without actual instantiation";
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";
}
list vn-member-list {
key "vn-member-id";
description
"List of VN-members in a VN";
uses vn-member;
}
uses vn-policy;
}
output {
list vn-member-list {
key "vn-member-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";
}
leaf compute-status {
type identityref {
base vn-compute-state-type;
}
description
"VN-member compute state.";
}
}
}
}//vn-compute
}