The TE data models for specific instances of data plane technology and signaling protocols are outside the scope of this document.
They could be defined in separate YANG modules that augment the generic TE YANG data model.
For example, the RSVP-TE YANG model augmentation of the TE model is covered in [<>].
5.1.1
You have:
o path-in-segment: A YANG container that contains a list of
label restrictions that have to be taken into considerations
when crossing domains. This TE tunnel segment in this case
is being stitched to the upstream TE tunnel segment.
o path-out-segment: A YANG container that contains a list of
label restrictions that have to be taken into considerations
when crossing domains. The TE tunnel segment in this case
is being stitched to the downstream TE tunnel segment.
When you say "crossing domains," do you mean "crossing domain
boundaries"? However, consider that stitching can also happen within a
domain. Perhaps you need "when stitching to another tunnel segment such
as at a domain boundary."
5.1.2
Please expand LER on first use.
Are all tunnels used from MPLS? If not then the mention of LER is probably
wrong. If so, then I wonder whether the file name, Abstract, and Introduction
should mention MPLS.
5.1.2
Why is a TE Tunnel Segment necessarily part of a multi-domain TE Tunnel?
I suppose it may depend on what is meant by "domain". But there is no
reason why an end-to-end tunnel cannot be constructed from many segments
stitched together.
5.1.2 operational-state:
Why is the text about operational-state presented twice?
Why is there a clear explanation of admin-state, but no explanation of
operational-state?
5.1.2 name:
Something wrong with "For initiated TE Tunnels from the controller..."
Maybe, "For TE Tunnels initiated by the controller..."
5.1.2 name: alias: identifier:
The text explains that the identifier is unique within the context of
the tunnel source. But is there any uniqueness for the name or alias?
5.1.2 admin-state:
A YANG leaf that holds the tunnel administrative state. The
administrative status in state datastore transitions to 'tunnel-
admin-up' when the tunnel used by the client layer, and to
'tunnel-admin-down' when it is not used by the client layer.
Some things broken. Not sure what you meant, but possibly...
A YANG leaf that holds the tunnel administrative state. The
administrative status transitions to 'tunnel-admin-up' when the
tunnel is in use by the client layer, and to 'tunnel-admin-down'
when it is not used by the client layer.
5.1.2 source/destination:
s/endpoints identities/endpoint identities/
5.1.2 source/destination:
Something wrong with both of these? Identifier of an identifier?
- te-node-id: A YANG leaf that holds the identifier of the source
or destination of the TE Tunnel TE node identifiers as defined
in [I-D.draft-ietf-teas-rfc8776-update].
- node-id: A YANG leaf that holds the identifier of the source or
destination of the TE Tunnel node identifiers as defined in
[RFC8345].
5.1.2
Expand PCEP on first use.
5.1.2 association-objects:
I'd like some more clarification of how the tunnel-level associations are
overridden by the path-level associations. It seems like it might be
complicated.
5.1.2 hierarchy:
The indentation of the two bullets is different. Is this intentional?
5.1.2 dependency-tunnels:
I'm struggling with "dependency tunnel" versus "dependent tunnel".
Initially, you say that the dependency tunnel is in the lower layer, but then
you say that dependant tunnel is created only when the dependency tunnel is
provisioned.
I also think that the paragraph confuses tunnel and link.
Compare the terms client tunnel, client link, and hierarchical-link.
You are limiting dependency tunnels to being either:
- set up on demand if it is "used" by a client tunnel
- or (presumably) available for use when a further client tunnel when
already set up for use by an initial client tunnel I wonder why you don't
support a dependency tunnel being set up in advance. This approach allows:
- more rapid establishment of the client tunnel
- more certain establishment of the client tunnel (which can be routed
alternately if the dependency tunnel fails) I think not including this function
is an option (it's up to the WG), but I wanted to check that this was a
conscious decision.
A lot of containers have leafs called 'name'.
That's not against the rules, but it does make the text confusing from time to
time. Any reason not to give them more specific names in each case?
For example...
primary-paths:
A YANG container that holds the list of primary paths. A primary
path is identified by 'name'.
...which is true, but confusing because this is in the context of the tunnel
container which has its own 'name'.
5.1.2 secondary-reverse-paths:
A secondary reverse path contains attributes similar to a primary path.
What does "similar" mean?
5.1.2 compute-only:
A path of a TE Tunnel is, by default, provisioned so that it can
be instantiated in the forwarding plane so that it can carry
traffic as soon as a valid path is computed.
This seems a bit confused, to me. Firstly, each tunnel has several lists
of paths, but not all paths are provisioned. And, we've already had
dependency tunnels that are, themselves, not always provisioned.
Then, secondly, I don't think you can carry traffic as soon as the path is
computed - you need it to be provisioned first.
A 'compute-only' path is configured as a usual with the associated
per path constraint(s) and properties on a device or TE
controller.
s/as a usual/as usual/
5.1.2 lockdown:
A YANG leaf that when set indicates the existing path should not
be reoptimized after a failure on any of its traversed links.
I think that "reoptimized" is the wrong word for handling a link failure. Maybe
"recomputed and repaired".
Same comment for the description clause of 'lockdown' in the YANG
5.1.2 path-scope:
A YANG leaf that specifies the path scope if segment or an end-to-
end path.
NEW
A YANG leaf that specifies whether the path is a segment or an
end-to-end path.
END
5.1.2 preference:
The description here is not enough. Yes, you tell us the ordering of the
preference (lower number is higher preference). But how is the preference
used?
Under primary-paths you have, "The list of primary paths is visited by order of
preference." And, by context, we may assume this means that this applies to
the selection of a primary path to instantiate, choosing from an unordered list.
There is similar text and interpretation for candidate-secondary-paths.
Perhaps...
OLD
A YANG leaf that specifies the preference for the path. The lower
the number higher the preference.
NEW
A YANG leaf that specifies the preference for the path, used to
choose between paths in a list. The lower the number higher the
preference. Paths with the same preference are treated as equal
and other methods are used to choose between them.
END
5.1.2 link-protection:
s/included the/included in the/
5.1.2 lsp-provisioning-error-infos:
Everything so far has been about paths. Then suddenly this leaf is about LSPs.
Is that right? Maybe it needs to be moved to below lsps: in the container.
Maybe the errors need to be indicated to the specific LSPs by placing them in
the lsps container.
5.3
Good that you have text for the references:
This module references the following documents: [RFC4206], [RFC4427],
[RFC4872], [RFC3209], [RFC6780], [RFC7471], [RFC9012], [RFC8570],
[RFC8232], [RFC7271], [RFC8234], [RFC7308], and [ITU_G.808.1].
But you have draft-ietf-teas-rfc8776-update in a Reference clause in the YANG.
Shouldn't you include it in the list? (You do in 6.3)
Additionally, since the Reference clause doesn't use the RFC Editor
might not spot them, so I suggest including a note for the RFC Editor here and
in 6.3 to make sure they are updated to the RFC.
5.3
namespace "urn:ietf:params:xml:ns:yang:ietf-te";
/* Replace with IANA when assigned */
I assume the comment applies to the namespace line. I think you want the
RFC Editor to take care of this, so I suggest something more detailed such as:
namespace "urn:ietf:params:xml:ns:yang:ietf-te";
/* RFC Editor Note: Please replace the above line with the URN
assigned by IANA and remove this note. */
Ditto section 6.2.
5.3
The contacts clause lists 7 names, but there are only 5 on the front page.
Ditto section 6.2.
5.3 and 6.2
The copyright date in the main description clause is wrong.
5.3
typedef tunnel-ref {
description
"This type is used by data models that need to reference
configured TE tunnel.";
s/configured/a configured/
5.3
container path-computation-server {
uses te-types:te-generic-node-id;
description
"Address of the external path computation
server.";
You say "address" but you use te-generic-node-id. Are you requiring that the
'type' leaf is set to 'ip'? If so, I think you have to say so. If not, perhaps don't
say "address".
5.3
leaf compute-only {
type empty;
description
"When present, the path is computed and updated whenever
the topology is updated. No resources are committed
or reserved in the network.";
}
Are you sure this is "whenever"? That implies a lot of computational churn.
Sure, an implementation may choose to do this, but is it a requirement? A
more moderate approach, for example, would be to do the computation only
when links/nodes used by the path are updated in the topology, or
periodically for reoptimisation.
How to handle this? Probably s/is/may be/
5.3
What would it mean for compute-only to be present, but use-path-
computation is set to 'false'?
5.3
leaf path-scope {
description
"Indicates whether the path is a segment or portion of
of the full path., or is the an end-to-end path for
the TE Tunnel.";
s/of of/of/
s/.,/,/
s/the an/an/
5.3 has multiple instance of
/* This grouping is re-used in path-computation rpc */ But the rpc is called
tunnels-path-compute
5.3
grouping path-forward-properties {
leaf preference {
description
"Specifies a preference for this path. The lower the number
higher the preference.";
s/number higher/number, the higher/
5.3
grouping k-requested-paths {
leaf k-requested-paths {
description
"The number of k-shortest-paths requested from the path
computation server and returned sorted by its optimization
objective.";
Unclear what "sorted" means. Possibly "assigned 'preference' values to sort
the returned paths according to how well they meet the optimization
objectives."
5.3
grouping path-state {
container lsp-provisioning-error-infos {
list lsp-provisioning-error-info {
leaf error-description {
description
"The textual representation of the error occurred during
path computation.";
I think this is a block copy from the path computation error container.
Here you should be talking about errors that occur during LSP provisioning.
Similarly, in the same grouping...
leaf lsp-id {
description
"The LSP-ID for which path computation was performed."; ...
presumably this should be LSP-ID of the LSP for which the provisioning error
was returned.
5.3
I'd like some clarity about LSP errors that clear. are they removed from
container, or do they persist but we know they are legacy because the LSP is
now active? Or what?
5.3
container lsps {
list lsp {
leaf node {
description "The node where the LSP state resides on.";
s/ on././
But, I don't understand this! What do you mean by saying LSP state resides on
a node? LSP state is definitely a distributed thing. Possibly you mean the node
from which the state was retrieved to be present in this module, but even
then it is making great assumptions about how the LPS is provisioned and
monitored.
5.3 computed-path-error-infos
I can't see any information about how this list is refreshed. Does it contain all
errors for all time? Does it only carry the most recent error for any one LSP-ID?
Does the error get flushed when there has been a subsequent successful
computation for a given LSP.
In the context of patch computation, what is meant by error-node-id and
error-link-id. It seems to me that when a computation fails, it just
fails: there is no specific point in the topology where the computation fails.
5.3
container globals {
container named-admin-groups {
list named-admin-group {
leaf bit-position {
type uint32;
description
"Bit position representing the administrative group.";
After a little panic and reference to 7308, I finally realised what you we're
doing here! Not a 32 bit mask, but an index. I know that is exactly what you
say, but it might be good to add a few words as the cited references are bit
masks, not indices.
5.3
container named-srlgs {
list named-srlg {
leaf cost {
type uint32;
description
"SRLG associated cost. Used during path to append
the path cost when traversing a link with this SRLG.";
Some word missing? s/path/path computation/ ?
But "append the path cost" means what? Add?
Is there a reference for this processing?
5.3
container named-path-constraints {
list named-path-constraint {
leaf name {
type string;
description
"A string name that uniquely identifies a
path constraint set.";
s/string name/name/
5.3
container tunnels {
list tunnel {
container controller {
leaf controller-entity-id {
type string;
description
"An identifier unique within the scope of visibility
that associated with the entity that controls the
tunnel.";
I think s/that/that is/
But this is ambiguous. It the identifier associated with the entity, or is the
scope of visibility associated with the entity?
Anyway, what is a scope of visibility?
5.3
leaf reoptimize-timer {
type uint16;
units "seconds";
description
"Frequency of reoptimization of a traffic engineered
LSP.";
}
Three questions:
- How do I set "never"? Perhaps zero?
- Do you think that allowing a 1 second reoptimization is reasonable? I
know it isn't our job to stop people doing stupid things, but perhaps
there should be a minimum?
- Shouldn't there be a default?
5.3
action protection-external-commands {
leaf protection-group-ingress-node {
type boolean;
default "true";
description
"When 'true', indicates that the action is
applied on ingress node.
By default, the action applies to the ingress node
only.";
}
leaf protection-group-egress-node {
type boolean;
default "false";
description
"When set to 'true', indicates that the action is
applied on egress node.
By default, the action applies to the ingress node
only.";
}
- s/applied on/applied on the/ (twice)
- I see the default settings, but the text is a little off. Perhaps
no text is needed. Or...
By default, the action applies to the ingress node.";
...and...
By default, the action does not apply to the egress node.";
5.3
action protection-external-commands {
input {
leaf traffic-type {
type enumeration {
enum normal-traffic {
description
"The manual-switch or forced-switch command
applies to the normal traffic (this Tunnel).";
}
enum null-traffic {
description
"The manual-switch or forced-switch command
applies to the null traffic.";
}
enum extra-traffic {
description
"The manual-switch or forced-switch command
applies to the extra traffic (the extra-traffic
Tunnel sharing protection bandwidth with this
Tunnel).";
}
}
description
"Indicates whether the manual-switch or forced-switch
commands applies to the normal traffic, the null
traffic or the extra-traffic.";
This is an enumeration so I cannot apply the switch commands to more than
one traffic type at once. Right? Why?
5.3 container lsps
Many of these leafs (as hinted by the Reference clauses) are specific to MPLS
(see previous comment about the document making that clear), but are also
specific to RSVP-TE. How are these leafs used when the LSP is established in a
different way?
5.3
container lsps {
list lsp {
leaf origin-type {
type enumeration {
As an enumeration, this prevents a two-link-single-node LSP. Don't you want
to allow that?
5.3
rpc tunnels-actions {
input {
container action-info {
leaf disruptive {
description
"When present, specifies whether or not the
reoptimization
action is allowed to be disruptive.";
Some explanation of "disruptive" is needed, or a reference.
5.3 Figure 7
I think that you do not need a figure number or caption for the YANG model.
You just leave out the anchor and the
Ditto Figure 10 in section 6.3
6.1.1
You seem to be missing the equivalent of 5.1.2 carrying a description of the
main containers and leafs in the module. Would this be useful?
Yes, you do have "some examples".
6.3
Especially in the absence of the text descriptions in the previous point, many
of the Description clauses are insufficient. References are also absent.
For example,
leaf lsp-install-interval {
type uint32;
units "seconds";
description
"TE LSP installation delay time."; Here, it is clear that the leaf is used to
carry the "installation time delay" but not what it actually is or how it is used.
I think you need to go through all of this module and check each description
and look to add more references. I would say that some constructs have really
good descriptions, so it is not a universal problem.
6.3
leaf time-to-destroy {
type uint32;
units "seconds";
description
"The time remaining for a existing LSP to be deleted
from forwarding.";
}
I think the inverse of "instantiated" is usually "torn down" rather than
"deleted from forwarding."
s/a existing/an existing/
6.3
container upstream-info {
when "../te:origin-type != 'ingress'" {
description
"Upstream information of the LSP.";
}
s/Upstream/upstream/ to be compatible with all the other descriptions.
@italobusi Provide expansion for LoP abbreviation
Expand abbreviations on first use:
The TE data models for specific instances of data plane technology and signaling protocols are outside the scope of this document.
They could be defined in separate YANG modules that augment the generic TE YANG data model.
For example, the RSVP-TE YANG model augmentation of the TE model is covered in [<>].
See #307
See #308
See #309
REVIEWED UP TO THIS POINT (2025-06-20)