draft-ietf-i2rs-yang-network-topo-00.txt   draft-ietf-i2rs-yang-network-topo-01.txt 
Network Working Group A. Clemm Network Working Group A. Clemm
Internet-Draft J. Medved Internet-Draft J. Medved
Intended status: Experimental R. Varga Intended status: Standards Track R. Varga
Expires: October 17, 2015 T. Tkacik Expires: December 10, 2015 T. Tkacik
Cisco Cisco
N. Bahadur N. Bahadur
Bracket Computing Bracket Computing
H. Ananthakrishnan H. Ananthakrishnan
Packet Design Packet Design
April 15, 2015 June 8, 2015
A Data Model for Network Topologies A Data Model for Network Topologies
draft-ietf-i2rs-yang-network-topo-00.txt draft-ietf-i2rs-yang-network-topo-01.txt
Abstract Abstract
This document defines an abstract (generic) YANG data model for This document defines an abstract (generic) YANG data model for
network/service topologies and inventories. The model serves as a network/service topologies and inventories. The model serves as a
base model which is augmented with technology-specific details in base model which is augmented with technology-specific details in
other, more specific topology and inventory models. other, more specific topology and inventory models.
Status of This Memo Status of This Memo
skipping to change at page 1, line 39 skipping to change at page 1, line 39
Internet-Drafts are working documents of the Internet Engineering Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF). Note that other groups may also distribute Task Force (IETF). Note that other groups may also distribute
working documents as Internet-Drafts. The list of current Internet- working documents as Internet-Drafts. The list of current Internet-
Drafts is at http://datatracker.ietf.org/drafts/current/. Drafts is at http://datatracker.ietf.org/drafts/current/.
Internet-Drafts are draft documents valid for a maximum of six months Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress." material or to cite them other than as "work in progress."
This Internet-Draft will expire on October 17, 2015. This Internet-Draft will expire on December 10, 2015.
Copyright Notice Copyright Notice
Copyright (c) 2015 IETF Trust and the persons identified as the Copyright (c) 2015 IETF Trust and the persons identified as the
document authors. All rights reserved. document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents Provisions Relating to IETF Documents
(http://trustee.ietf.org/license-info) in effect on the date of (http://trustee.ietf.org/license-info) in effect on the date of
publication of this document. Please review these documents publication of this document. Please review these documents
skipping to change at page 3, line 20 skipping to change at page 3, line 20
network model that allows to define network hierarchies (i.e. network network model that allows to define network hierarchies (i.e. network
stacks) and to maintain an inventory of nodes contained in a network. stacks) and to maintain an inventory of nodes contained in a network.
The second part of the model augments the basic network model with The second part of the model augments the basic network model with
information to describe topology information. Specifically, it adds information to describe topology information. Specifically, it adds
the concepts of links and termination points to describe how nodes in the concepts of links and termination points to describe how nodes in
a network are connected to each other. Moreover the model introduces a network are connected to each other. Moreover the model introduces
vertical layering relationships between networks that can be vertical layering relationships between networks that can be
augmented to cover both network inventories and network/service augmented to cover both network inventories and network/service
topologies. topologies.
While it would be possible to combine both parts into a single model,
the separation facilitates integration of network topology and
network inventory models, by allowing to augment network inventory
information separetely and without concern for topology into the
network model.
The model can be augmented to describe specifics of particular types The model can be augmented to describe specifics of particular types
of networks and topologies. For example, an augmenting model can of networks and topologies. For example, an augmenting model can
provide network node information with attributes that are specific to provide network node information with attributes that are specific to
a particular network type. Examples of augmenting models include a particular network type. Examples of augmenting models include
models for Layer 2 network topologies, Layer 3 network topologies, models for Layer 2 network topologies, Layer 3 network topologies,
such as Unicast IGP, IS-IS [RFC1195] and OSPF [RFC2328], traffic such as Unicast IGP, IS-IS [RFC1195] and OSPF [RFC2328], traffic
engineering (TE) data [RFC3209], or any of the variety of transport engineering (TE) data [RFC3209], or any of the variety of transport
and service topologies. Information specific to particular network and service topologies. Information specific to particular network
types will be captured in separate, technology-specific models. types will be captured in separate, technology-specific models.
skipping to change at page 15, line 48 skipping to change at page 15, line 48
information where possible, such as which termination points are information where possible, such as which termination points are
supported by which underlay termination points. To accommodate such supported by which underlay termination points. To accommodate such
cases, separate provision may again be made by including another cases, separate provision may again be made by including another
"server-provided" option. "server-provided" option.
4. YANG Modules 4. YANG Modules
4.1. Defining the Abstract Network: network.yang 4.1. Defining the Abstract Network: network.yang
<CODE BEGINS> <CODE BEGINS>
file "ietf-network@2015-04-15.yang" file "ietf-network@2015-06-08.yang"
module ietf-network { module ietf-network {
yang-version 1; yang-version 1;
namespace "urn:ietf:params:xml:ns:yang:ietf-network"; namespace "urn:ietf:params:xml:ns:yang:ietf-network";
prefix nd; prefix nd;
import ietf-inet-types { import ietf-inet-types {
prefix inet; prefix inet;
} }
organization "TBD"; organization "TBD";
contact contact
"WILL-BE-DEFINED-LATER"; "WILL-BE-DEFINED-LATER";
description description
"This module defines a common base model for a collection "This module defines a common base model for a collection
of nodes in a network. Node definitions s are further used of nodes in a network. Node definitions s are further used
in network topologies and inventories."; in network topologies and inventories.";
revision 2015-04-15 { revision 2015-06-08 {
description description
"Initial revision."; "Initial revision.";
reference "draft-ietf-i2rs-yang-network-topo-00"; reference "draft-ietf-i2rs-yang-network-topo-01";
} }
typedef node-id { typedef node-id {
type inet:uri; type inet:uri;
description description
"Identifier for a node."; "Identifier for a node.";
} }
typedef network-id { typedef network-id {
type inet:uri; type inet:uri;
skipping to change at page 19, line 7 skipping to change at page 19, line 7
} }
} }
} }
} }
} }
<CODE ENDS> <CODE ENDS>
4.2. Creating Abstract Network Topology: network-topology.yang 4.2. Creating Abstract Network Topology: network-topology.yang
<CODE BEGINS> <CODE BEGINS>
file "ietf-network-topology@2015-04-15.yang" file "ietf-network-topology@2015-06-08.yang"
module ietf-network-topology { module ietf-network-topology {
yang-version 1; yang-version 1;
namespace "urn:ietf:params:xml:ns:yang:ietf-network-topology"; namespace "urn:ietf:params:xml:ns:yang:ietf-network-topology";
prefix lnk; prefix lnk;
import ietf-inet-types { import ietf-inet-types {
prefix inet; prefix inet;
} }
import ietf-network { import ietf-network {
prefix nd; prefix nd;
} }
organization "TBD"; organization "TBD";
contact contact
"WILL-BE-DEFINED-LATER"; "WILL-BE-DEFINED-LATER";
description description
"This module defines a common base model for network topology, "This module defines a common base model for network topology,
augmenting the base network model with links to connect nodes, augmenting the base network model with links to connect nodes,
as well as termination points to terminate links on nodes."; as well as termination points to terminate links on nodes.";
revision 2015-04-15 { revision 2015-06-08 {
description description
"Initial revision."; "Initial revision.";
reference "draft-ietf-i2rs-yang-network-topo-00"; reference "draft-ietf-i2rs-yang-network-topo-01";
} }
typedef link-id { typedef link-id {
type inet:uri; type inet:uri;
description description
"An identifier for a link in a topology. "An identifier for a link in a topology.
The identifier may be opaque. The identifier may be opaque.
The identifier SHOULD be chosen such that the same link in a The identifier SHOULD be chosen such that the same link in a
real network topology will always be identified through the real network topology will always be identified through the
same identifier, even if the model is instantiated in separate same identifier, even if the model is instantiated in
datastores. An implementation MAY choose to capture semantics separate datastores. An implementation MAY choose to capture
in the identifier, for example to indicate the type of link semantics in the identifier, for example to indicate the type
and/or the type of topology that the link is a part of."; of link and/or the type of topology that the link is a part
} of.";
}
typedef tp-id { typedef tp-id {
type inet:uri; type inet:uri;
description description
"An identifier for termination points on a node. "An identifier for termination points on a node.
The identifier may be opaque.
The identifier SHOULD be chosen such that the same TP in a The identifier may be opaque.
real network topology will always be identified through the The identifier SHOULD be chosen such that the same TP in a
same identifier, even if the model is instantiated in separate real network topology will always be identified through the
datastores. An implementation MAY choose to capture semantics same identifier, even if the model is instantiated in
in the identifier, for example to indicate the type of TP separate datastores. An implementation MAY choose to capture
and/or the type of node and topology that the TP is a part semantics in the identifier, for example to indicate the type
of."; of TP and/or the type of node and topology that the TP is a
} part of.";
}
grouping link-ref { grouping link-ref {
description description
"References a link in a specific network."; "References a link in a specific network.";
leaf link-ref { leaf link-ref {
type leafref { type leafref {
path "/nd:network[nd:network-id=current()/../"+ path "/nd:network[nd:network-id=current()/../"+
"nd:network-ref]/link/link-id"; "nd:network-ref]/link/link-id";
}
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; 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 { grouping tp-ref {
description description
"References a termination point in a specific node."; "References a termination point in a specific node.";
leaf tp-ref { leaf tp-ref {
type leafref { type leafref {
path "/nd:network[nd:network-id=current()/../"+ path "/nd:network[nd:network-id=current()/../"+
"nd:network-ref]/nd:node[nd:node-id=current()/../"+ "nd:network-ref]/nd:node[nd:node-id=current()/../"+
"nd:node-ref]/termination-point/tp-id"; "nd:node-ref]/termination-point/tp-id";
}
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; 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:network" { augment "/nd:network" {
description
"Add links to the network model.";
list link {
key "link-id";
description description
"Add links to the network model."; "A Network Link connects a by Local (Source) node and
list link { a Remote (Destination) Network Nodes via a set of the
key "link-id"; 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 description
"A Network Link connects a by Local (Source) node and "This container holds the logical source of a particular
a Remote (Destination) Network Nodes via a set of the link.";
nodes' termination points. leaf source-node {
As it is possible to have several links between the same type leafref {
source and destination nodes, and as a link could path "../../../nd:node/nd:node-id";
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]/termination-point/tp-id";
}
description
"Termination point within source node that terminates
the link.";
} }
} mandatory true;
container destination {
description description
"This container holds the logical destination of a "Source node identifier, must be in same topology.";
particular link."; }
leaf dest-node { leaf source-tp {
type leafref { type leafref {
path "../../../nd:node/nd:node-id"; path "../../../nd:node[nd:node-id=current()/../"+
} "source-node]/termination-point/tp-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]/termination-point/tp-id";
}
description
"Termination point within destination node that
terminates the link.";
} }
description
"Termination point within source node that terminates
the link.";
} }
leaf link-id { }
type link-id; 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 description
"The identifier of a link in the topology. "Destination node identifier, must be in the same
A link is specific to a topology to which it belongs."; network.";
} }
list supporting-link { leaf dest-tp {
key "network-ref link-ref"; type leafref {
path "../../../nd:node[nd:node-id=current()/../"+
"dest-node]/termination-point/tp-id";
}
description description
"Identifies the link, or links, that this link "Termination point within destination node that
is dependent on."; terminates the link.";
leaf network-ref { }
type leafref { }
path "../../../nd:supporting-network/nd:network-ref"; leaf link-id {
} type link-id;
description description
"This leaf identifies in which underlay topology "The identifier of a link in the topology.
supporting link is present."; 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";
} }
leaf link-ref { description
type leafref { "This leaf identifies in which underlay topology
path "/nd:network[nd:network-id=current()/.."+ supporting link is present.";
"/network-ref]/link/link-id"; }
} leaf link-ref {
description type leafref {
"This leaf identifies a link which is a part path "/nd:network[nd:network-id=current()/.."+
of this link's underlay. Reference loops, in which "/network-ref]/link/link-id";
a link identifies itself as its underlay, either
directly or transitively, are not allowed.";
} }
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.";
} }
} }
} }
augment "/nd:network/nd:node" { }
description augment "/nd:network/nd:node" {
"Augment termination points which terminate links. description
Termination points can ultimately be mapped to interfaces."; "Augment termination points which terminate links.
list termination-point { Termination points can ultimately be mapped to interfaces.";
key "tp-id"; list termination-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 description
"A termination point can terminate a link. "Termination point identifier.";
Depending on the type of topology, a termination point }
could, for example, refer to a port or an interface."; list supporting-termination-point {
leaf tp-id { key "network-ref node-ref tp-ref";
type tp-id; 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";
}
description description
"Termination point identifier."; "This leaf identifies in which topology the
supporting termination point is present.";
} }
list supporting-termination-point { leaf node-ref {
key "network-ref node-ref tp-ref"; type leafref {
description path "../../../nd:supporting-node/nd:node-ref";
"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";
}
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";
}
description
"This leaf identifies in which node the supporting
termination point is present.";
} }
leaf tp-ref { description
type leafref { "This leaf identifies in which node the supporting
path "/nd:network[nd:network-id=current()/../"+ termination point is present.";
"network-ref]/nd:node[nd:node-id=current()/../"+ }
"node-ref]/termination-point/tp-id"; leaf tp-ref {
} type leafref {
description path "/nd:network[nd:network-id=current()/../"+
"Reference to the underlay node, must be in a "network-ref]/nd:node[nd:node-id=current()/../"+
different topology"; "node-ref]/termination-point/tp-id";
} }
description
"Reference to the underlay node, must be in a
different topology";
} }
} }
} }
} }
}
<CODE ENDS> <CODE ENDS>
5. Security Considerations 5. Security Considerations
The transport protocol used for sending the topology data MUST The transport protocol used for sending the topology data MUST
support authentication and SHOULD support encryption. The data-model support authentication and SHOULD support encryption. The data-model
by itself does not create any security implications. by itself does not create any security implications.
6. Contributors 6. Contributors
The model presented in this paper was contributed to by more people The model presented in this paper was contributed to by more people
 End of changes. 42 change blocks. 
219 lines changed or deleted 225 lines changed or added

This html diff was produced by rfcdiff 1.42. The latest version is available from http://tools.ietf.org/tools/rfcdiff/