blob: fa7145e25a023df2e0eb8cd064c07c30b84e178c [file] [log] [blame]
Toru Furusawa28988892017-10-30 17:28:40 -07001module tapi-common {
2 namespace "urn:onf:params:xml:ns:yang:tapi-common";
3 prefix tapi-common;
4 organization "Open Networking Foundation (ONF) / Open Transport Working Group(OTWG) / Transport API (TAPI) Project";
5 contact "
6 WG Web: TAPI SDK Project <http://opensourcesdn.org/projects/project-snowmass/>
7 WG List: TAPI Discussion list <mailto: transport-api@login.opennetworking.org>,
8 WG Chair: Karthik Sethuraman <mailto:karthik.sethuraman@necam.com>,
9 Editor: Ricard Vilalta <mailto:ricard.vilalta@cttc.es>";
10 description "none";
11 revision 2017-05-31 {
12 description "TAPI SDK 2.0-alpha";
13 reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020 and RFC 6087";
14 }
15 /***********************
16 * package object-classes
17 **********************/
18 grouping admin-state-pac {
19 leaf administrative-state {
20 type administrative-state;
21 description "none";
22 }
23 leaf operational-state {
24 type operational-state;
25 config false;
26 description "none";
27 }
28 leaf lifecycle-state {
29 type lifecycle-state;
30 config false;
31 description "none";
32 }
33 description "Provides state attributes that are applicable to an entity that can be administered. Such an entity also has operational and lifecycle aspects.";
34 }
35 grouping global-class {
36 leaf uuid {
37 type uuid;
38 description "UUID: An identifier that is universally unique within an identifier space, where the identifier space is itself globally unique, and immutable. An UUID carries no semantics with respect to the purpose or state of the entity.
39 UUID here uses string representation as defined in RFC 4122. The canonical representation uses lowercase characters.
40 Pattern: [0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-' + '[0-9a-fA-F]{4}-[0-9a-fA-F]{12}
41 Example of a UUID in string representation: f81d4fae-7dec-11d0-a765-00a0c91e6bf6";
42 }
43 list name {
44 key 'value-name';
45 uses name-and-value;
46 description "List of names. A property of an entity with a value that is unique in some namespace but may change during the life of the entity. A name carries no semantics with respect to the purpose of the entity.";
47 }
48 description "The TAPI GlobalComponent serves as the super class for all TAPI entities that can be directly retrieved by their ID. As such, these are first class entities and their ID is expected to be globally unique. ";
49 }
50 grouping layer-protocol {
51 leaf layer-protocol-name {
52 type layer-protocol-name;
53 description "Indicate the specific layer-protocol described by the LayerProtocol entity.";
54 }
55 leaf termination-direction {
56 type termination-direction;
57 description "The overall directionality of the LP.
58 - A BIDIRECTIONAL LP will have some SINK and/or SOURCE flowss.
59 - A SINK LP can only contain elements with SINK flows or CONTRA_DIRECTION_SOURCE flows
60 - A SOURCE LP can only contain SOURCE flows or CONTRA_DIRECTION_SINK flows";
61 }
62 leaf termination-state {
63 type termination-state;
64 description "Indicates whether the layer is terminated and if so how.";
65 }
66 uses local-class;
67 description "Each transport layer is represented by a LayerProtocol (LP) instance. The LayerProtocol instances it can be used for controlling termination and monitoring functionality.
68 It can also be used for controlling the adaptation (i.e. encapsulation and/or multiplexing of client signal), tandem connection monitoring, traffic conditioning and/or shaping functionality at an intermediate point along a connection.
69 Where the client – server relationship is fixed 1:1 and immutable, the layers can be encapsulated in a single LTP instance. Where the is a n:1 relationship between client and server, the layers must be split over two separate instances of LTP. ";
70 }
71 grouping lifecycle-state-pac {
72 leaf lifecycle-state {
73 type lifecycle-state;
74 config false;
75 description "none";
76 }
77 description "Provides state attributes for an entity that has lifeccycle aspects only.";
78 }
79 grouping local-class {
80 leaf local-id {
81 type string;
82 description "none";
83 }
84 list name {
85 key 'value-name';
86 uses name-and-value;
87 description "List of names. A property of an entity with a value that is unique in some namespace but may change during the life of the entity. A name carries no semantics with respect to the purpose of the entity.";
88 }
89 description "The TAPI GlobalComponent serves as the super class for all TAPI entities that can be directly retrieved by their ID. As such, these are first class entities and their ID is expected to be globally unique. ";
90 }
91 grouping operational-state-pac {
92 leaf operational-state {
93 type operational-state;
94 config false;
95 description "none";
96 }
97 leaf lifecycle-state {
98 type lifecycle-state;
99 config false;
100 description "none";
101 }
102 description "Provides state attributes that are applicable to an entity that reflects operational aspects. Such an entity is expected to also have lifecycle aspects.";
103 }
104 container context {
105 presence "TAPI";
106 uses context;
107 description "none";
108 }
109 grouping context {
110 list service-interface-point {
111 key 'uuid';
112 min-elements 2;
113 uses service-interface-point;
114 description "none";
115 }
116 uses global-class;
117 description "The Network Control Domain (NCD) object class represents the scope of control that a particular SDN controller has with respect to a particular network, (i.e., encompassing a designated set of interconnected (virtual) network elements).";
118 }
119 grouping resource-spec {
120 uses global-class;
121 description "none";
122 }
123 grouping service-spec {
124 uses global-class;
125 description "none";
126 }
127 grouping service-interface-point {
128 list layer-protocol {
129 key 'local-id';
130 min-elements 1;
131 uses layer-protocol;
132 description "Usage of layerProtocol [>1] in the ServiceInterfacePoint should be considered experimental";
133 }
134 container state {
135 uses admin-state-pac;
136 description "none";
137 }
138 container capacity {
139 uses capacity-pac;
140 description "none";
141 }
142 uses resource-spec;
143 description "The LogicalTerminationPoint (LTP) object class encapsulates the termination and adaptation functions of one or more transport layers.
144 The structure of LTP supports all transport protocols including circuit and packet forms.";
145 }
146 grouping capacity-pac {
147 container total-potential-capacity {
148 config false;
149 uses capacity;
150 description "An optimistic view of the capacity of the TopologicalEntity assuming that any shared capacity is available to be taken.";
151 }
152 container available-capacity {
153 config false;
154 uses capacity;
155 description "Capacity available to be assigned.";
156 }
157 description "The TopologicalEntity derives capacity from the underlying realization.
158 A TopologicalEntity may be an abstraction and virtualization of a subset of the underlying capability offered in a view or may be directly reflecting the underlying realization.
159 A TopologicalEntity may be directly used in the view or may be assigned to another view for use.
160 The clients supported by a multi-layer TopologicalEntity may interact such that the resources used by one client may impact those available to another. This is derived from the LTP spec details.
161 Represents the capacity available to user (client) along with client interaction and usage.
162 A TopologicalEntity may reflect one or more client protocols and one or more members for each profile.";
163 }
164
165 /***********************
166 * package type-definitions
167 **********************/
168 identity layer-protocol-name {
169 description "none";
170 }
171 identity otsi-a {
172 base layer-protocol-name;
173 description "none";
174 }
175 identity otu {
176 base layer-protocol-name;
177 description "none";
178 }
179 identity odu {
180 base layer-protocol-name;
181 description "none";
182 }
183 identity eth {
184 base layer-protocol-name;
185 description "none";
186 }
187 identity ety {
188 base layer-protocol-name;
189 description "none";
190 }
191 typedef administrative-state {
192 type enumeration {
193 enum locked {
194 description "Users are administratively prohibited from making use of the resource.";
195 }
196 enum unlocked {
197 description "Users are allowed to use the resource";
198 }
199 }
200 description "The possible values of the administrativeState.";
201 }
202 typedef date-and-time {
203 type string;
204 description "This primitive type defines the date and time according to the following structure:
205 yyyyMMddhhmmss.s[Z|{+|-}HHMm] where:
206 yyyy 0000..9999 year
207 MM 01..12 month
208 dd 01..31 day
209 hh 00..23 hour
210 mm 00..59 minute
211 ss 00..59 second
212 s .0...9 tenth of second (set to .0 if EMS or NE cannot support this granularity)
213 Z Z indicates UTC (rather than local time)
214 {+|-} + or - delta from UTC
215 HH 00..23 time zone difference in hours
216 Mm 00..59 time zone difference in minutes.";
217 }
218 typedef directive-value {
219 type enumeration {
220 enum minimize {
221 description "none";
222 }
223 enum maximize {
224 description "none";
225 }
226 enum allow {
227 description "none";
228 }
229 enum disallow {
230 description "none";
231 }
232 enum dont-care {
233 description "none";
234 }
235 }
236 description "none";
237 }
238 typedef forwarding-direction {
239 type enumeration {
240 enum bidirectional {
241 description "The Fowarding entity supports both BIDIRECTIONAL flows at all Ports (i.e. all Ports have both an INPUT flow and an OUTPUT flow defined)";
242 }
243 enum unidirectional {
244 description "The Forwarding entity has Ports that are either INPUT or OUTPUT. It has no BIDIRECTIONAL Ports.";
245 }
246 enum undefined-or-unknown {
247 description "Not a normal state. The system is unable to determine the correct value.";
248 }
249 }
250 description "The directionality of a Forwarding entity.";
251 }
252 typedef layer-protocol-name {
253 type identityref {
254 base layer-protocol-name;
255 }
256 description "Provides a controlled list of layer protocol names and indicates the naming authority.
257 Note that it is expected that attributes will be added to this structure to convey the naming authority name, the name of the layer protocol using a human readable string and any particular standard reference.
258 Layer protocol names include:
259 - Layer 1 (L1): OTU, ODU
260 - Layer 2 (L2): Carrier Grade Ethernet (ETY, ETH), MPLS-TP (MT)
261 ";
262 }
263 typedef lifecycle-state {
264 type enumeration {
265 enum planned {
266 description "The resource is planned but is not present in the network.";
267 }
268 enum potential {
269 description "The supporting resources are present in the network but are shared with other clients; or require further configuration before they can be used; or both.
270 o When a potential resource is configured and allocated to a client it is moved to the “installed” state for that client.
271 o If the potential resource has been consumed (e.g. allocated to another client) it is moved to the “planned” state for all other clients.";
272 }
273 enum installed {
274 description "The resource is present in the network and is capable of providing the service expected.";
275 }
276 enum pending-removal {
277 description "The resource has been marked for removal";
278 }
279 }
280 description "The possible values of the lifecycleState.";
281 }
282 grouping name-and-value {
283 leaf value-name {
284 type string;
285 description "The name of the value. The value need not have a name.";
286 }
287 leaf value {
288 type string;
289 description "The value";
290 }
291 description "A scoped name-value pair";
292 }
293 typedef operational-state {
294 type enumeration {
295 enum disabled {
296 description "The resource is unable to meet the SLA of the user of the resource. If no (explicit) SLA is defined the resource is disabled if it is totally inoperable and unable to provide service to the user.";
297 }
298 enum enabled {
299 description "The resource is partially or fully operable and available for use";
300 }
301 }
302 description "The possible values of the operationalState.";
303 }
304 typedef port-direction {
305 type enumeration {
306 enum bidirectional {
307 description "The Port has both an INPUT flow and an OUTPUT flow defined.";
308 }
309 enum input {
310 description "The Port only has definition for a flow into the Forwarding entity (i.e. an ingress flow).";
311 }
312 enum output {
313 description "The Port only has definition for a flow out of the Forwarding entity (i.e. an egress flow).";
314 }
315 enum unidentified-or-unknown {
316 description "Not a normal state. The system is unable to determine the correct value.";
317 }
318 }
319 description "The orientation of flow at the Port of a Forwarding entity";
320 }
321 typedef port-role {
322 type enumeration {
323 enum symmetric {
324 description "none";
325 }
326 enum root {
327 description "none";
328 }
329 enum leaf {
330 description "none";
331 }
332 enum trunk {
333 description "none";
334 }
335 enum unknown {
336 description "none";
337 }
338 }
339 description "The role of an end in the context of the function of the forwarding entity that it bounds";
340 }
341 typedef termination-direction {
342 type enumeration {
343 enum bidirectional {
344 description "A Termination with both SINK and SOURCE flows.";
345 }
346 enum sink {
347 description "The flow is up the layer stack from the server side to the client side.
348 Considering an example of a Termination function within the termination entity, a SINK flow:
349 - will arrive at at the base of the termination function (the server side) where it is essentially at an INPUT to the termination component
350 - then will be decoded and deconstructed
351 - then relevant parts of the flow will be sent out of the termination function (the client side) where it is essentially at an OUTPUT from the termination component
352 A SINK termination is one that only supports a SINK flow.
353 A SINK termiation can be bound to an OUTPUT Port of a Forwarding entity";
354 }
355 enum source {
356 description "The flow is down the layer stack from the server side to the client side.
357 Considering an example of a Termination function within the termination entity, a SOURCE flow:
358 - will arrive at at the top of the termination function (the client side) where it is essentially at an INPUT to the termination component
359 - then will be assembled with various overheads etc and will be coded
360 - then coded form of the assembly of flow will be sent out of the termination function (the server side) where it is essentially at an OUTPUT from the termination component
361 A SOURCE termination is one that only supports a SOURCE flow.
362 A SOURCE termiation can be bound to an INPUT Port of a Forwarding entity";
363 }
364 enum undefined-or-unknown {
365 description "Not a normal state. The system is unable to determine the correct value.";
366 }
367 }
368 description "The directionality of a termination entity";
369 }
370 typedef termination-state {
371 type enumeration {
372 enum lp-can-never-terminate {
373 description "A non-flexible case that can never be terminated.";
374 }
375 enum lt-not-terminated {
376 description "A flexible termination that can terminate but is currently not terminated.";
377 }
378 enum terminated-server-to-client-flow {
379 description "A flexible termination that is currently terminated for server to client flow only.";
380 }
381 enum terminated-client-to-server-flow {
382 description "A flexible termination that is currently terminated for client to server flow only.";
383 }
384 enum terminated-bidirectional {
385 description "A flexible termination that is currently terminated in both directions of flow.";
386 }
387 enum lt-permenantly-terminated {
388 description "A non-flexible termination that is always terminated (in both directions of flow for a bidirectional case and in the one direction of flow for both unidirectional cases).";
389 }
390 enum termination-state-unknown {
391 description "There TerminationState cannot be determined.";
392 }
393 }
394 description "Provides support for the range of behaviours and specific states that an LP can take with respect to termination of the signal.
395 Indicates to what degree the LayerTermination is terminated.";
396 }
397 typedef uuid {
398 type string;
399 description "The univeral ID value where the mechanism for generation is defned by some authority not directly referenced in the structure.
400 UUID here uses string representation as defined in RFC 4122. The canonical representation uses lowercase characters.
401 Pattern: [0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-' + '[0-9a-fA-F]{4}-[0-9a-fA-F]{12}
402 Example of a UUID in string representation: f81d4fae-7dec-11d0-a765-00a0c91e6bf6";
403 }
404 grouping capacity {
405 container total-size {
406 uses capacity-value;
407 description "Total capacity of the TopologicalEntity in MB/s. In case of bandwidthProfile, this is expected to same as the committedInformationRate.";
408 }
409 container bandwidth-profile {
410 uses bandwidth-profile;
411 description "none";
412 }
413 description "Information on capacity of a particular TopologicalEntity.";
414 }
415 grouping bandwidth-profile {
416 leaf bw-profile-type {
417 type bandwidth-profile-type;
418 description "none";
419 }
420 container committed-information-rate {
421 uses capacity-value;
422 description "none";
423 }
424 container committed-burst-size {
425 uses capacity-value;
426 description "none";
427 }
428 container peak-information-rate {
429 uses capacity-value;
430 description "none";
431 }
432 container peak-burst-size {
433 uses capacity-value;
434 description "none";
435 }
436 leaf color-aware {
437 type boolean;
438 description "none";
439 }
440 leaf coupling-flag {
441 type boolean;
442 description "none";
443 }
444 description "none";
445 }
446 grouping capacity-value {
447 leaf value {
448 type uint64;
449 description "none";
450 }
451 leaf unit {
452 type capacity-unit;
453 description "none";
454 }
455 description "The Capacity (Bandwidth) values that are applicable for digital layers.";
456 }
457 typedef capacity-unit {
458 type enumeration {
459 enum gbps {
460 description "Indicates that the integer CapacityValue is in Gigabit-per-second";
461 }
462 enum mbps {
463 description "Indicates that the integer CapacityValue is in Megabit-per-second";
464 }
465 enum kbps {
466 description "Indicates that the integer CapacityValue is in Kilobit-per-second";
467 }
468 }
469 description "none";
470 }
471 typedef bandwidth-profile-type {
472 type enumeration {
473 enum mef-10.x {
474 description "none";
475 }
476 enum rfc-2697 {
477 description "none";
478 }
479 enum rfc-2698 {
480 description "none";
481 }
482 enum rfc-4115 {
483 description "none";
484 }
485 }
486 description "none";
487 }
488 grouping time-range {
489 leaf end-time {
490 type date-and-time;
491 description "none";
492 }
493 leaf start-time {
494 type date-and-time;
495 description "none";
496 }
497 description "none";
498 }
499
500 /***********************
501 * package interfaces
502 **********************/
503 rpc get-service-interface-point-details {
504 description "none";
505 input {
506 leaf sip-id-or-name {
507 type string;
508 description "none";
509 }
510 }
511 output {
512 container sip {
513 uses service-interface-point;
514 description "none";
515 }
516 }
517 }
518 rpc get-service-interface-point-list {
519 description "none";
520 output {
521 list sip {
522 uses service-interface-point;
523 description "none";
524 }
525 }
526 }
527 rpc update-service-interface-point {
528 description "none";
529 input {
530 leaf sip-id-or-name {
531 type string;
532 description "none";
533 }
534 leaf state {
535 type administrative-state;
536 description "none";
537 }
538 }
539 }
540
541}