module yrt-network-topology { | |
yang-version 1; | |
namespace "urn:ietf:params:xml:ns:yang:yrt-ietf-network-topology"; | |
prefix lnk; | |
import yrt-ietf-inet-types { | |
prefix inet; | |
} | |
import yrt-ietf-network { | |
prefix nd; | |
} | |
organization | |
"IETF I2RS (Interface to the Routing System) Working Group"; | |
contact | |
"WG Web: <http://tools.ietf.org/wg/i2rs/> | |
WG List: <mailto:i2rs@ietf.org> | |
WG Chair: Susan Hares | |
<mailto:shares@ndzh.com> | |
WG Chair: Jeffrey Haas | |
<mailto:jhaas@pfrc.org> | |
Editor: Alexander Clemm | |
<mailto:alex@cisco.com> | |
Editor: Jan Medved | |
<mailto:jmedved@cisco.com> | |
Editor: Robert Varga | |
<mailto:rovarga@cisco.com> | |
Editor: Tony Tkacik | |
<mailto:ttkacik@cisco.com> | |
Editor: Nitin Bahadur | |
<mailto:nitin_bahadur@yahoo.com> | |
Editor: Hariharan Ananthakrishnan | |
<mailto:hari@packetdesign.com>"; | |
description | |
"This module defines a common base model for network topology, | |
augmenting the base network model with links to connect nodes, | |
as well as termination points to terminate links on nodes. | |
Copyright (c) 2015 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 | |
(http://trustee.ietf.org/license-info). | |
This version of this YANG module is part of | |
draft-ietf-i2rs-yang-network-topo-02; | |
see the RFC itself for full legal notices. | |
NOTE TO RFC EDITOR: Please replace above reference to | |
draft-ietf-i2rs-yang-network-topo-02 with RFC | |
number when published (i.e. RFC xxxx)."; | |
revision 2015-12-08 { | |
description | |
"Initial revision. | |
NOTE TO RFC EDITOR: Please replace the following reference | |
to draft-ietf-i2rs-yang-network-topo-02 with | |
RFC number when published (i.e. RFC xxxx)."; | |
reference | |
"draft-ietf-i2rs-yang-network-topo-02."; | |
} | |
typedef link-id { | |
type inet:uri; | |
description | |
"An identifier for a link in a topology. | |
The identifier SHOULD be chosen such that the same link in a | |
real network topology will always be identified through the | |
same identifier, even if the model is instantiated in | |
separate datastores. An implementation MAY choose to capture | |
semantics in the identifier, for example to indicate the type | |
of link and/or the type of topology that the link is a part | |
of."; | |
} | |
typedef tp-id { | |
type inet:uri; | |
description | |
"An identifier for termination points on a node. | |
The identifier SHOULD be chosen such that the same TP in a | |
real network topology will always be identified through the | |
same identifier, even if the model is instantiated in | |
separate datastores. An implementation MAY choose to capture | |
semantics in the identifier, for example to indicate the type | |
of TP and/or the type of node and topology that the TP is a | |
part of."; | |
} | |
grouping link-ref { | |
description | |
"References a link in a specific network."; | |
leaf link-ref { | |
type leafref { | |
path "/nd:networks/nd:network[nd:network-id=current()/../"+ | |
"network-ref]/lnk:link/lnk:link-id"; | |
require-instance false; | |
} | |
description | |
"A type for an absolute reference a link instance. | |
(This type should not be used for relative references. | |
In such a case, a relative path should be used instead.)"; | |
} | |
uses nd:network-ref; | |
} | |
grouping tp-ref { | |
description | |
"References a termination point in a specific node."; | |
leaf tp-ref { | |
type leafref { | |
path "/nd:networks/nd:network[nd:network-id=current()/../"+ | |
"network-ref]/nd:node[nd:node-id=current()/../"+ | |
"node-ref]/lnk:t-point/lnk:tp-id"; | |
require-instance false; | |
} | |
description | |
"A type for an absolute reference to a termination point. | |
(This type should not be used for relative references. | |
In such a case, a relative path should be used instead.)"; | |
} | |
uses nd:node-ref; | |
} | |
augment "/nd:networks/nd:network" { | |
description | |
"Add links to the network model."; | |
list link { | |
key "link-id"; | |
description | |
"A Network Link connects a by Local (Source) node and | |
a Remote (Destination) Network Nodes via a set of the | |
nodes' termination points. | |
As it is possible to have several links between the same | |
source and destination nodes, and as a link could | |
potentially be re-homed between termination points, to | |
ensure that we would always know to distinguish between | |
links, every link is identified by a dedicated link | |
identifier. | |
Note that a link models a point-to-point link, not a | |
multipoint link. | |
Layering dependencies on links in underlay topologies are | |
not represented as the layering information of nodes and of | |
termination points is sufficient."; | |
container source { | |
description | |
"This container holds the logical source of a particular | |
link."; | |
leaf source-node { | |
type leafref { | |
path "../../../nd:node/nd:node-id"; | |
} | |
mandatory true; | |
description | |
"Source node identifier, must be in same topology."; | |
} | |
leaf source-tp { | |
type leafref { | |
path "../../../nd:node[nd:node-id=current()/../"+ | |
"source-node]/t-point/tp-id"; | |
} | |
description | |
"Termination point within source node that terminates | |
the link."; | |
} | |
} | |
container destination { | |
description | |
"This container holds the logical destination of a | |
particular link."; | |
leaf dest-node { | |
type leafref { | |
path "../../../nd:node/nd:node-id"; | |
} | |
mandatory true; | |
description | |
"Destination node identifier, must be in the same | |
network."; | |
} | |
leaf dest-tp { | |
type leafref { | |
path "../../../nd:node[nd:node-id=current()/../"+ | |
"dest-node]/t-point/tp-id"; | |
} | |
description | |
"Termination point within destination node that | |
terminates the link."; | |
} | |
} | |
leaf link-id { | |
type link-id; | |
description | |
"The identifier of a link in the topology. | |
A link is specific to a topology to which it belongs."; | |
} | |
list supporting-link { | |
key "network-ref link-ref"; | |
description | |
"Identifies the link, or links, that this link | |
is dependent on."; | |
leaf network-ref { | |
type leafref { | |
path "../../../nd:supporting-network/nd:network-ref"; | |
require-instance false; | |
} | |
description | |
"This leaf identifies in which underlay topology | |
supporting link is present."; | |
} | |
leaf link-ref { | |
type leafref { | |
path "/nd:networks/nd:network[nd:network-id=current()/"+ | |
"../network-ref]/link/link-id"; | |
require-instance false; | |
} | |
description | |
"This leaf identifies a link which is a part | |
of this link's underlay. Reference loops, in which | |
a link identifies itself as its underlay, either | |
directly or transitively, are not allowed."; | |
} | |
} | |
} | |
leaf link-id { | |
type link-id; | |
description | |
"The identifier of a link in the topology. | |
A link is specific to a topology to which it belongs."; | |
} | |
} | |
augment "/nd:networks/nd:network/nd:node" { | |
description | |
"Augment termination points which terminate links. | |
Termination points can ultimately be mapped to interfaces."; | |
list t-point { | |
key "tp-id"; | |
description | |
"A termination point can terminate a link. | |
Depending on the type of topology, a termination point | |
could, for example, refer to a port or an interface."; | |
leaf tp-id { | |
type tp-id; | |
description | |
"Termination point identifier."; | |
} | |
list supporting-termination-point { | |
key "network-ref node-ref tp-ref"; | |
description | |
"The leaf list identifies any termination points that | |
the termination point is dependent on, or maps onto. | |
Those termination points will themselves be contained | |
in a supporting node. | |
This dependency information can be inferred from | |
the dependencies between links. For this reason, | |
this item is not separately configurable. Hence no | |
corresponding constraint needs to be articulated. | |
The corresponding information is simply provided by the | |
implementing system."; | |
leaf network-ref { | |
type leafref { | |
path "../../../nd:supporting-node/nd:network-ref"; | |
require-instance false; | |
} | |
description | |
"This leaf identifies in which topology the | |
supporting termination point is present."; | |
} | |
leaf node-ref { | |
type leafref { | |
path "../../../nd:supporting-node/nd:node-ref"; | |
require-instance false; | |
} | |
description | |
"This leaf identifies in which node the supporting | |
termination point is present."; | |
} | |
leaf tp-ref { | |
type leafref { | |
path "/nd:networks/nd:network[nd:network-id=current()/"+ | |
"../network-ref]/nd:node[nd:node-id=current()/../"+ | |
"node-ref]/t-point/tp-id"; | |
require-instance false; | |
} | |
description | |
"Reference to the underlay node, must be in a | |
different topology"; | |
} | |
} | |
} | |
} | |
} |