blob: a5b6c3e8fe08196107a5e97a803c1b87c00e2bbf [file] [log] [blame]
Toru Furusawa28988892017-10-30 17:28:40 -07001module tapi-topology {
2 namespace "urn:onf:params:xml:ns:yang:tapi-topology";
3 prefix tapi-topology;
4 import tapi-common {
5 prefix tapi-common;
6 }
7 organization "Open Networking Foundation (ONF) / Open Transport Working Group(OTWG) / Transport API (TAPI) Project";
8 contact "
9 WG Web: TAPI SDK Project <http://opensourcesdn.org/projects/project-snowmass/>
10 WG List: TAPI Discussion list <mailto: transport-api@login.opennetworking.org>,
11 WG Chair: Karthik Sethuraman <mailto:karthik.sethuraman@necam.com>,
12 Editor: Ricard Vilalta <mailto:ricard.vilalta@cttc.es>";
13 description "none";
14 revision 2017-05-31 {
15 description "TAPI SDK 2.0-alpha";
16 reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020 and RFC 6087";
17 }
18 augment "/tapi-common:context" {
19 uses topology-context;
20 description "Augments the base TAPI Context with TopologyService information";
21 }
22 /***********************
23 * package object-classes
24 **********************/
25 grouping link {
26 leaf-list node-edge-point {
27 type leafref {
28 path '/tapi-common:context/tapi-topology:topology/tapi-topology:node/tapi-topology:owned-node-edge-point/tapi-topology:uuid';
29 }
30 config false;
31 min-elements 2;
32 description "none";
33 }
34 leaf-list node {
35 type leafref {
36 path '/tapi-common:context/tapi-topology:topology/tapi-topology:node/tapi-topology:uuid';
37 }
38 config false;
39 min-elements 2;
40 description "none";
41 }
42 container state {
43 config false;
44 uses tapi-common:admin-state-pac;
45 description "none";
46 }
47 container transfer-capacity {
48 config false;
49 uses tapi-common:capacity-pac;
50 description "none";
51 }
52 container transfer-cost {
53 config false;
54 uses transfer-cost-pac;
55 description "none";
56 }
57 container transfer-integrity {
58 config false;
59 uses transfer-integrity-pac;
60 description "none";
61 }
62 container transfer-timing {
63 config false;
64 uses transfer-timing-pac;
65 description "none";
66 }
67 container risk-parameter {
68 config false;
69 uses risk-parameter-pac;
70 description "none";
71 }
72 container validation {
73 config false;
74 uses validation-pac;
75 description "none";
76 }
77 container lp-transition {
78 config false;
79 uses layer-protocol-transition-pac;
80 description "none";
81 }
82 leaf-list layer-protocol-name {
83 type tapi-common:layer-protocol-name;
84 config false;
85 min-elements 1;
86 description "none";
87 }
88 leaf direction {
89 type tapi-common:forwarding-direction;
90 config false;
91 description "The directionality of the Link.
92 Is applicable to simple Links where all LinkEnds are BIDIRECTIONAL (the Link will be BIDIRECTIONAL) or UNIDIRECTIONAL (the Link will be UNIDIRECTIONAL).
93 Is not present in more complex cases.";
94 }
95 container resilience-type {
96 uses resilience-type;
97 description "none";
98 }
99 uses tapi-common:resource-spec;
100 description "The Link object class models effective adjacency between two or more ForwardingDomains (FD). ";
101 }
102 grouping node {
103 list owned-node-edge-point {
104 key 'uuid';
105 config false;
106 uses node-edge-point;
107 description "none";
108 }
109 leaf-list aggregated-node-edge-point {
110 type leafref {
111 path '/tapi-common:context/tapi-topology:topology/tapi-topology:node/tapi-topology:owned-node-edge-point/tapi-topology:uuid';
112 }
113 config false;
114 description "none";
115 }
116 list node-rule-group {
117 key 'uuid';
118 uses node-rule-group;
119 description "none";
120 }
121 leaf encap-topology {
122 type leafref {
123 path '/tapi-common:context/tapi-topology:topology/tapi-topology:uuid';
124 }
125 config false;
126 description "none";
127 }
128 container state {
129 config false;
130 uses tapi-common:admin-state-pac;
131 description "none";
132 }
133 container transfer-capacity {
134 config false;
135 uses tapi-common:capacity-pac;
136 description "none";
137 }
138 container transfer-cost {
139 config false;
140 uses transfer-cost-pac;
141 description "none";
142 }
143 container transfer-integrity {
144 config false;
145 uses transfer-integrity-pac;
146 description "none";
147 }
148 container transfer-timing {
149 config false;
150 uses transfer-timing-pac;
151 description "none";
152 }
153 leaf-list layer-protocol-name {
154 type tapi-common:layer-protocol-name;
155 config false;
156 min-elements 1;
157 description "none";
158 }
159 uses tapi-common:resource-spec;
160 description "The ForwardingDomain (FD) object class models the “ForwardingDomain” topological component which is used to effect forwarding of transport characteristic information and offers the potential to enable forwarding.
161 At the lowest level of recursion, an FD (within a network element (NE)) represents a switch matrix (i.e., a fabric). Note that an NE can encompass multiple switch matrices (FDs). ";
162 }
163 grouping topology {
164 list node {
165 key 'uuid';
166 config false;
167 uses node;
168 description "none";
169 }
170 list link {
171 key 'uuid';
172 config false;
173 uses link;
174 description "none";
175 }
176 leaf-list layer-protocol-name {
177 type tapi-common:layer-protocol-name;
178 config false;
179 min-elements 1;
180 description "none";
181 }
182 uses tapi-common:resource-spec;
183 description "The ForwardingDomain (FD) object class models the “ForwardingDomain” topological component which is used to effect forwarding of transport characteristic information and offers the potential to enable forwarding.
184 At the lowest level of recursion, an FD (within a network element (NE)) represents a switch matrix (i.e., a fabric). Note that an NE can encompass multiple switch matrices (FDs). ";
185 }
186 grouping layer-protocol-transition-pac {
187 leaf-list transitioned-layer-protocol-name {
188 type string;
189 min-elements 2;
190 description "Provides the ordered structure of layer protocol transitions encapsulated in the TopologicalEntity. The ordering relates to the LinkPort role.";
191 }
192 description "Relevant for a Link that is formed by abstracting one or more LTPs (in a stack) to focus on the flow and deemphasize the protocol transformation.
193 This abstraction is relevant when considering multi-layer routing.
194 The layer protocols of the LTP and the order of their application to the signal is still relevant and need to be accounted for. This is derived from the LTP spec details.
195 This Pac provides the relevant abstractions of the LTPs and provides the necessary association to the LTPs involved.
196 Links that included details in this Pac are often referred to as Transitional Links.";
197 }
198 grouping node-edge-point {
199 list layer-protocol {
200 key 'local-id';
201 config false;
202 min-elements 1;
203 uses tapi-common:layer-protocol;
204 description "none";
205 }
206 leaf-list aggregated-node-edge-point {
207 type leafref {
208 path '/tapi-common:context/tapi-topology:topology/tapi-topology:node/tapi-topology:owned-node-edge-point/tapi-topology:uuid';
209 }
210 config false;
211 description "none";
212 }
213 leaf-list mapped-service-interface-point {
214 type leafref {
215 path '/tapi-common:context/tapi-common:service-interface-point/tapi-common:uuid';
216 }
217 description "NodeEdgePoint mapped to more than ServiceInterfacePoint (slicing/virtualizing) or a ServiceInterfacePoint mapped to more than one NodeEdgePoint (load balancing/Resilience) should be considered experimental";
218 }
219 container state {
220 config false;
221 uses tapi-common:admin-state-pac;
222 description "none";
223 }
224 leaf link-port-direction {
225 type tapi-common:port-direction;
226 config false;
227 description "The orientation of defined flow at the LinkEnd.";
228 }
229 leaf link-port-role {
230 type tapi-common:port-role;
231 config false;
232 description "Each LinkEnd of the Link has a role (e.g., symmetric, hub, spoke, leaf, root) in the context of the Link with respect to the Link function. ";
233 }
234 uses tapi-common:resource-spec;
235 description "The LogicalTerminationPoint (LTP) object class encapsulates the termination and adaptation functions of one or more transport layers.
236 The structure of LTP supports all transport protocols including circuit and packet forms.";
237 }
238 grouping risk-parameter-pac {
239 list risk-characteristic {
240 key 'risk-characteristic-name';
241 config false;
242 min-elements 1;
243 uses risk-characteristic;
244 description "A list of risk characteristics for consideration in an analysis of shared risk. Each element of the list represents a specific risk consideration.";
245 }
246 description "The risk characteristics of a TopologicalEntity come directly from the underlying physical realization.
247 The risk characteristics propagate from the physical realization to the client and from the server layer to the client layer, this propagation may be modified by protection.
248 A TopologicalEntity may suffer degradation or failure as a result of a problem in a part of the underlying realization.
249 The realization can be partitioned into segments which have some relevant common failure modes.
250 There is a risk of failure/degradation of each segment of the underlying realization.
251 Each segment is a part of a larger physical/geographical unit that behaves as one with respect to failure (i.e. a failure will have a high probability of impacting the whole unit (e.g. all cables in the same duct).
252 Disruptions to that larger physical/geographical unit will impact (cause failure/errors to) all TopologicalEntities that use any part of that larger physical/geographical entity.
253 Any TopologicalEntity that uses any part of that larger physical/geographical unit will suffer impact and hence each TopologicalEntity shares risk.
254 The identifier of each physical/geographical unit that is involved in the realization of each segment of a Topological entity can be listed in the RiskParameter_Pac of that TopologicalEntity.
255 A segment has one or more risk characteristic.
256 Shared risk between two TopologicalEntities compromises the integrity of any solution that use one of those TopologicalEntity as a backup for the other.
257 Where two TopologicalEntities have a common risk characteristic they have an elevated probability of failing simultaneously compared to two TopologicalEntities that do not share risk characteristics.";
258 }
259 grouping transfer-cost-pac {
260 list cost-characteristic {
261 key 'cost-name';
262 config false;
263 min-elements 1;
264 uses cost-characteristic;
265 description "The list of costs where each cost relates to some aspect of the TopologicalEntity.";
266 }
267 description "The cost characteristics of a TopologicalEntity not necessarily correlated to the cost of the underlying physical realization.
268 They may be quite specific to the individual TopologicalEntity e.g. opportunity cost. Relates to layer capacity
269 There may be many perspectives from which cost may be considered for a particular TopologicalEntity and hence many specific costs and potentially cost algorithms.
270 Using an entity will incur a cost. ";
271 }
272 grouping transfer-integrity-pac {
273 leaf error-characteristic {
274 type string;
275 config false;
276 description "Describes the degree to which the signal propagated can be errored.
277 Applies to TDM systems as the errored signal will be propagated and not packet as errored packets will be discarded.";
278 }
279 leaf loss-characteristic {
280 type string;
281 config false;
282 description "Describes the acceptable characteristic of lost packets where loss may result from discard due to errors or overflow.
283 Applies to packet systems and not TDM (as for TDM errored signals are propagated unless grossly errored and overflow/underflow turns into timing slips).";
284 }
285 leaf repeat-delivery-characteristic {
286 type string;
287 config false;
288 description "Primarily applies to packet systems where a packet may be delivered more than once (in fault recovery for example).
289 It can also apply to TDM where several frames may be received twice due to switching in a system with a large differential propagation delay.";
290 }
291 leaf delivery-order-characteristic {
292 type string;
293 config false;
294 description "Describes the degree to which packets will be delivered out of sequence.
295 Does not apply to TDM as the TDM protocols maintain strict order.";
296 }
297 leaf unavailable-time-characteristic {
298 type string;
299 config false;
300 description "Describes the duration for which there may be no valid signal propagated.";
301 }
302 leaf server-integrity-process-characteristic {
303 type string;
304 config false;
305 description "Describes the effect of any server integrity enhancement process on the characteristics of the TopologicalEntity.";
306 }
307 description "Transfer intergrity characteristic covers expected/specified/acceptable characteristic of degradation of the transfered signal.
308 It includes all aspects of possible degradation of signal content as well as any damage of any form to the total TopologicalEntity and to the carried signals.
309 Note that the statement is of total impact to the TopologicalEntity so any partial usage of the TopologicalEntity (e.g. a signal that does not use full capacity) will only suffer its portion of the impact.";
310 }
311 grouping transfer-timing-pac {
312 list latency-characteristic {
313 key 'traffic-property-name';
314 config false;
315 min-elements 1;
316 uses latency-characteristic;
317 description "The effect on the latency of a queuing process. This only has significant effect for packet based systems and has a complex characteristic.";
318 }
319 description "A TopologicalEntity will suffer effects from the underlying physical realization related to the timing of the information passed by the TopologicalEntity.";
320 }
321 grouping validation-pac {
322 list validation-mechanism {
323 key 'validation-mechanism';
324 config false;
325 min-elements 1;
326 uses validation-mechanism;
327 description "Provides details of the specific validation mechanism(s) used to confirm the presence of an intended topologicalEntity.";
328 }
329 description "Validation covers the various adjacenct discovery and reachability verification protocols. Also may cover Information source and degree of integrity.";
330 }
331 grouping network-topology-service {
332 leaf-list topology {
333 type leafref {
334 path '/tapi-common:context/tapi-topology:topology/tapi-topology:uuid';
335 }
336 config false;
337 description "none";
338 }
339 uses tapi-common:service-spec;
340 description "none";
341 }
342 grouping topology-context {
343 container nw-topology-service {
344 config false;
345 uses network-topology-service;
346 description "none";
347 }
348 list topology {
349 key 'uuid';
350 config false;
351 uses topology;
352 description "none";
353 }
354 description "none";
355 }
356 grouping inter-rule-group {
357 list rule {
358 key 'local-id';
359 min-elements 1;
360 uses rule;
361 description "none";
362 }
363 leaf-list associated-node-rule-group {
364 type leafref {
365 path '/tapi-common:context/tapi-topology:topology/tapi-topology:node/tapi-topology:node-rule-group/tapi-topology:uuid';
366 }
367 min-elements 2;
368 description "none";
369 }
370 container transfer-capacity {
371 uses tapi-common:capacity-pac;
372 description "none";
373 }
374 container transfer-cost {
375 uses transfer-cost-pac;
376 description "none";
377 }
378 container transfer-timing {
379 uses transfer-timing-pac;
380 description "none";
381 }
382 container risk-parameter {
383 uses risk-parameter-pac;
384 description "none";
385 }
386 uses tapi-common:resource-spec;
387 description "none";
388 }
389 grouping node-rule-group {
390 list rule {
391 key 'local-id';
392 min-elements 1;
393 uses rule;
394 description "none";
395 }
396 leaf-list node-edge-point {
397 type leafref {
398 path '/tapi-common:context/tapi-topology:topology/tapi-topology:node/tapi-topology:owned-node-edge-point/tapi-topology:uuid';
399 }
400 min-elements 1;
401 description "none";
402 }
403 leaf-list node-rule-group {
404 type leafref {
405 path '/tapi-common:context/tapi-topology:topology/tapi-topology:node/tapi-topology:node-rule-group/tapi-topology:uuid';
406 }
407 description "none";
408 }
409 list inter-rule-group {
410 key 'uuid';
411 uses inter-rule-group;
412 description "none";
413 }
414 container transfer-capacity {
415 uses tapi-common:capacity-pac;
416 description "none";
417 }
418 container transfer-cost {
419 uses transfer-cost-pac;
420 description "none";
421 }
422 container transfer-timing {
423 uses transfer-timing-pac;
424 description "none";
425 }
426 container risk-parameter {
427 uses risk-parameter-pac;
428 description "none";
429 }
430 uses tapi-common:resource-spec;
431 description "none";
432 }
433 grouping rule {
434 leaf rule-type {
435 type rule-type;
436 description "none";
437 }
438 leaf forwarding-rule {
439 type forwarding-rule;
440 description "none";
441 }
442 leaf override-priority {
443 type uint64;
444 description "none";
445 }
446 uses tapi-common:local-class;
447 description "none";
448 }
449
450 /***********************
451 * package type-definitions
452 **********************/
453 grouping cost-characteristic {
454 leaf cost-name {
455 type string;
456 description "The cost characteristic will related to some aspect of the TopologicalEntity (e.g. $ cost, routing weight). This aspect will be conveyed by the costName.";
457 }
458 leaf cost-value {
459 type string;
460 description "The specific cost.";
461 }
462 leaf cost-algorithm {
463 type string;
464 description "The cost may vary based upon some properties of the TopologicalEntity. The rules for the variation are conveyed by the costAlgorithm.";
465 }
466 description "The information for a particular cost characteristic.";
467 }
468 grouping latency-characteristic {
469 leaf traffic-property-name {
470 type string;
471 description "The identifier of the specific traffic property to which the queuing latency applies.";
472 }
473 leaf fixed-latency-characteristic {
474 type string;
475 config false;
476 description "A TopologicalEntity suffers delay caused by the realization of the servers (e.g. distance related; FEC encoding etc.) along with some client specific processing. This is the total average latency effect of the TopologicalEntity";
477 }
478 leaf queing-latency-characteristic {
479 type string;
480 description "The specific queuing latency for the traffic property.";
481 }
482 leaf jitter-characteristic {
483 type string;
484 config false;
485 description "High frequency deviation from true periodicity of a signal and therefore a small high rate of change of transfer latency.
486 Applies to TDM systems (and not packet).";
487 }
488 leaf wander-characteristic {
489 type string;
490 config false;
491 description "Low frequency deviation from true periodicity of a signal and therefore a small low rate of change of transfer latency.
492 Applies to TDM systems (and not packet).";
493 }
494 description "Provides information on latency characteristic for a particular stated trafficProperty.";
495 }
496 grouping risk-characteristic {
497 leaf risk-characteristic-name {
498 type string;
499 description "The name of the risk characteristic. The characteristic may be related to a specific degree of closeness.
500 For example a particular characteristic may apply to failures that are localized (e.g. to one side of a road) where as another characteristic may relate to failures that have a broader impact (e.g. both sides of a road that crosses a bridge).
501 Depending upon the importance of the traffic being routed different risk characteristics will be evaluated.";
502 }
503 leaf-list risk-identifier-list {
504 type string;
505 min-elements 1;
506 description "A list of the identifiers of each physical/geographic unit (with the specific risk characteristic) that is related to a segment of the TopologicalEntity.";
507 }
508 description "The information for a particular risk characteristic where there is a list of risk identifiers related to that characteristic.";
509 }
510 grouping validation-mechanism {
511 leaf validation-mechanism {
512 type string;
513 description "Name of mechanism used to validate adjacency";
514 }
515 leaf layer-protocol-adjacency-validated {
516 type string;
517 description "State of validatiion";
518 }
519 leaf validation-robustness {
520 type string;
521 description "Quality of validation (i.e. how likely is the stated validation to be invalid)";
522 }
523 description "Identifies the validation mechanism and describes the characteristics of that mechanism";
524 }
525 typedef forwarding-rule {
526 type enumeration {
527 enum may-forward-across-group {
528 description "none";
529 }
530 enum must-forward-across-group {
531 description "none";
532 }
533 enum cannot-forward-across-group {
534 description "none";
535 }
536 enum no-statement-on-forwarding {
537 description "none";
538 }
539 }
540 description "none";
541 }
542 typedef rule-type {
543 type enumeration {
544 enum forwarding {
545 description "none";
546 }
547 enum capacity {
548 description "none";
549 }
550 enum cost {
551 description "none";
552 }
553 enum timing {
554 description "none";
555 }
556 enum risk {
557 description "none";
558 }
559 enum grouping {
560 description "none";
561 }
562 }
563 description "none";
564 }
565 grouping resilience-type {
566 leaf restoration-policy {
567 type restoration-policy;
568 description "none";
569 }
570 leaf protection-type {
571 type protection-type;
572 description "none";
573 }
574 description "none";
575 }
576 typedef restoration-policy {
577 type enumeration {
578 enum per-domain-restoration {
579 description "none";
580 }
581 enum end-to-end-restoration {
582 description "none";
583 }
584 enum na {
585 description "none";
586 }
587 }
588 description "none";
589 }
590 typedef protection-type {
591 type enumeration {
592 enum no-protecton {
593 description "none";
594 }
595 enum one-plus-one-protection {
596 description "none";
597 }
598 enum one-plus-one-protection-with-dynamic-restoration {
599 description "none";
600 }
601 enum permanent-one-plus-one-protection {
602 description "none";
603 }
604 enum one-for-one-protection {
605 description "none";
606 }
607 enum dynamic-restoration {
608 description "none";
609 }
610 enum pre-computed-restoration {
611 description "none";
612 }
613 }
614 description "none";
615 }
616
617 /***********************
618 * package interfaces
619 **********************/
620 rpc get-topology-details {
621 description "none";
622 input {
623 leaf topology-id-or-name {
624 type string;
625 description "none";
626 }
627 }
628 output {
629 container topology {
630 uses topology;
631 description "none";
632 }
633 }
634 }
635 rpc get-node-details {
636 description "none";
637 input {
638 leaf topology-id-or-name {
639 type string;
640 description "none";
641 }
642 leaf node-id-or-name {
643 type string;
644 description "none";
645 }
646 }
647 output {
648 container node {
649 uses node;
650 description "none";
651 }
652 }
653 }
654 rpc get-node-edge-point-details {
655 description "none";
656 input {
657 leaf topology-id-or-name {
658 type string;
659 description "none";
660 }
661 leaf node-id-or-name {
662 type string;
663 description "none";
664 }
665 leaf ep-id-or-name {
666 type string;
667 description "none";
668 }
669 }
670 output {
671 container node-edge-point {
672 uses node-edge-point;
673 description "none";
674 }
675 }
676 }
677 rpc get-link-details {
678 description "none";
679 input {
680 leaf topology-id-or-name {
681 type string;
682 description "none";
683 }
684 leaf link-id-or-name {
685 type string;
686 description "none";
687 }
688 }
689 output {
690 container link {
691 uses link;
692 description "none";
693 }
694 }
695 }
696 rpc get-topology-list {
697 description "none";
698 output {
699 list topology {
700 uses topology;
701 description "none";
702 }
703 }
704 }
705
706}