blob: 73b867915dca09784f553e1a0bf044a72bd72d3e [file] [log] [blame]
Thomas Vachuska6655bee2017-08-24 16:12:59 -07001module openconfig-telemetry {
2
3 yang-version "1";
4
5 // namespace
6 namespace "http://openconfig.net/yang/telemetry";
7
8 prefix "oc-telemetry";
9
10 // import some basic types
11 import openconfig-inet-types { prefix oc-inet; }
12 import openconfig-extensions { prefix oc-ext; }
13 import openconfig-telemetry-types { prefix oc-telemetry-types; }
14
15 // meta
16 organization "OpenConfig working group";
17
18 contact
19 "OpenConfig working group www.openconfig.net";
20
21 description
22 "Data model which creates the configuration for the telemetry
23 systems and functions on the device.";
24
25 oc-ext:openconfig-version "0.4.0";
26
27 revision "2017-02-20" {
28 description
29 "Fixes for YANG 1.0 compliance, add types module";
30 reference "0.4.0";
31 }
32
33 revision "2016-04-05" {
34 description
35 "OpenConfig public release";
36 reference "0.2.0";
37 }
38
39 grouping telemetry-top {
40 description
41 "Top level grouping for telemetry configuration and operational
42 state data";
43
44 container telemetry-system {
45 description
46 "Top level configuration and state for the
47 device's telemetry system.";
48
49 container sensor-groups {
50 description
51 "Top level container for sensor-groups.";
52
53 list sensor-group {
54 key "sensor-group-id";
55 description
56 "List of telemetry sensory groups on the local
57 system, where a sensor grouping represents a resuable
58 grouping of multiple paths and exclude filters.";
59
60 leaf sensor-group-id {
61 type leafref {
62 path "../config/sensor-group-id";
63 }
64 description
65 "Reference to the name or identifier of the
66 sensor grouping";
67 }
68 container config {
69 description
70 "Configuration parameters relating to the
71 telemetry sensor grouping";
72 uses telemetry-sensor-group-config;
73 }
74 container state {
75 config false;
76 description
77 "State information relating to the telemetry
78 sensor group";
79 uses telemetry-sensor-group-config;
80 }
81
82 container sensor-paths {
83 description
84 "Top level container to hold a set of sensor
85 paths grouped together";
86
87 list sensor-path {
88 key "path";
89 description
90 "List of paths in the model which together
91 comprise a sensor grouping. Filters for each path
92 to exclude items are also provided.";
93
94 leaf path {
95 type leafref {
96 path "../config/path";
97 }
98 description
99 "Reference to the path of interest";
100 }
101 container config {
102 description
103 "Configuration parameters to configure a set
104 of data model paths as a sensor grouping";
105 uses telemetry-sensor-path-config;
106 }
107 container state {
108 config false;
109 description
110 "Configuration parameters to configure a set
111 of data model paths as a sensor grouping";
112 uses telemetry-sensor-path-config;
113 }
114 }
115 }
116 }
117 }
118
119 container destination-groups {
120 description
121 "Top level container for destination group configuration
122 and state.";
123
124 list destination-group {
125 key "group-id";
126 description
127 "List of destination-groups. Destination groups allow the
128 reuse of common telemetry destinations across the
129 telemetry configuration. An operator references a
130 set of destinations via the configurable
131 destination-group-identifier.
132
133 A destination group may contain one or more telemetry
134 destinations";
135
136 leaf group-id {
137 type leafref {
138 path "../config/group-id";
139 }
140 description
141 "Unique identifier for the destination group";
142 }
143
144 container config {
145 description
146 "Top level config container for destination groups";
147 leaf group-id {
148 type string;
149 description
150 "Unique identifier for the destination group";
151 }
152 }
153
154 container state {
155 config false;
156 description
157 "Top level state container for destination groups";
158
159 leaf group-id {
160 type string;
161 description
162 "Unique identifier for destination group";
163 }
164 }
165
166 container destinations {
167 description
168 "The destination container lists the destination
169 information such as IP address and port of the
170 telemetry messages from the network element.";
171 list destination {
172 key "destination-address destination-port";
173 description
174 "List of telemetry stream destinations";
175
176 leaf destination-address {
177 type leafref {
178 path "../config/destination-address";
179 }
180 description
181 "Reference to the destination address of the
182 telemetry stream";
183 }
184
185 leaf destination-port {
186 type leafref {
187 path "../config/destination-port";
188 }
189 description
190 "Reference to the port number of the stream
191 destination";
192 }
193
194 container config {
195 description
196 "Configuration parameters relating to
197 telemetry destinations";
198 uses telemetry-stream-destination-config;
199 }
200
201 container state {
202 config false;
203 description
204 "State information associated with
205 telemetry destinations";
206 uses telemetry-stream-destination-config;
207 }
208 }
209 }
210 }
211 }
212
213 container subscriptions {
214 description
215 "This container holds information for both persistent
216 and dynamic telemetry subscriptions.";
217
218 container persistent {
219 description
220 "This container holds information relating to persistent
221 telemetry subscriptions. A persistent telemetry
222 subscription is configued locally on the device through
223 configuration, and is persistent across device restarts or
224 other redundancy changes.";
225
226 list subscription {
227 key "subscription-name";
228 description
229 "List of telemetry subscriptions. A telemetry
230 subscription consists of a set of collection
231 destinations, stream attributes, and associated paths to
232 state information in the model (sensor data)";
233
234 leaf subscription-name {
235 type leafref {
236 path "../config/subscription-name";
237 }
238 description
239 "Reference to the identifier of the subscription
240 itself. The id will be the handle to refer to the
241 subscription once created";
242 }
243
244 container config {
245 description
246 "Config parameters relating to the telemetry
247 subscriptions on the local device";
248
249 uses telemetry-subscription-name-config;
250 uses telemetry-local-source-address-config;
251 uses telemetry-qos-marking-config;
252 uses telemetry-stream-protocol-config;
253 uses telemetry-stream-encoding-config;
254 }
255
256 container state {
257 config false;
258 description
259 "State parameters relating to the telemetry
260 subscriptions on the local device";
261
262 uses telemetry-subscription-name-config;
263 uses telemetry-subscription-config;
264 uses telemetry-subscription-state;
265 uses telemetry-local-source-address-config;
266 uses telemetry-qos-marking-config;
267 uses telemetry-stream-protocol-config;
268 uses telemetry-stream-encoding-config;
269 }
270
271 container sensor-profiles {
272 description
273 "A sensor profile is a set of sensor groups or
274 individual sensor paths which are associated with a
275 telemetry subscription. This is the source of the
276 telemetry data for the subscription to send to the
277 defined collectors.";
278 list sensor-profile {
279 key "sensor-group";
280 description
281 "List of telemetry sensor groups used
282 in the subscription";
283
284 leaf sensor-group {
285 type leafref {
286 path "../config/sensor-group";
287 }
288 description
289 "Reference to the telemetry sensor group name";
290 }
291
292 container config {
293 description
294 "Configuration parameters related to the sensor
295 profile for a subscription";
296 uses telemetry-sensor-profile-config;
297 }
298
299 container state {
300 config false;
301 description
302 "State information relating to the sensor profile
303 for a subscription";
304 uses telemetry-sensor-profile-config;
305 }
306 }
307 }
308
309 container destination-groups {
310 description
311 "A subscription may specify destination addresses.
312 If the subscription supplies destination addresses,
313 the network element will be the initiator of the
314 telemetry streaming, sending it to the destination(s)
315 specified.
316
317 If the destination set is omitted, the subscription
318 preconfigures certain elements such as paths and
319 sample intervals under a specified subscription ID.
320 In this case, the network element will NOT initiate an
321 outbound connection for telemetry, but will wait for
322 an inbound connection from a network management
323 system.
324
325 It is expected that the network management system
326 connecting to the network element will reference
327 the preconfigured subscription ID when initiating
328 a subscription.";
329
330 list destination-group {
331 key "group-id";
332 description
333 "Identifier of the previously defined destination
334 group";
335
336 leaf group-id {
337 type leafref {
338 path "../config/group-id";
339 }
340 description
341 "The destination group id references a configured
342 group of destinations for the telemetry stream.";
343 }
344
345 container config {
346 description
347 "Configuration parameters related to telemetry
348 destinations.";
349
350 leaf group-id {
351 type leafref {
352 path "../../../../../../../destination-groups"
353 + "/destination-group/group-id";
354 }
355 description
356 "The destination group id references a reusable
357 group of destination addresses and ports for
358 the telemetry stream.";
359 }
360 }
361
362 container state {
363 config false;
364 description
365 "State information related to telemetry
366 destinations";
367
368 leaf group-id {
369 type leafref {
370 path "../../../../../../../destination-groups"
371 + "/destination-group/group-id";
372 }
373 description
374 "The destination group id references a reusable
375 group of destination addresses and ports for
376 the telemetry stream.";
377 }
378 }
379 }
380 }
381 }
382 }
383
384 container dynamic {
385 description
386 "This container holds information relating to dynamic
387 telemetry subscriptions. A dynamic subscription is
388 typically configured through an RPC channel, and does not
389 persist across device restarts, or if the RPC channel is
390 reset or otherwise torn down.";
391
392
393 list subscription {
394 key "subscription-id";
395 config false;
396 description
397 "List representation of telemetry subscriptions that
398 are configured via an inline RPC, otherwise known
399 as dynamic telemetry subscriptions.";
400
401 leaf subscription-id {
402 type leafref {
403 path "../state/subscription-id";
404 }
405
406 description
407 "Reference to the identifier of the subscription
408 itself. The id will be the handle to refer to the
409 subscription once created";
410 }
411
412 container state {
413 config false;
414 description
415 "State information relating to dynamic telemetry
416 subscriptions.";
417
418 uses telemetry-subscription-config;
419 uses telemetry-stream-destination-config;
420 uses telemetry-stream-frequency-config;
421 uses telemetry-heartbeat-config;
422 uses telemetry-suppress-redundant-config;
423 uses telemetry-qos-marking-config;
424 uses telemetry-stream-protocol-config;
425 uses telemetry-stream-encoding-config;
426 }
427
428 container sensor-paths {
429 description
430 "Top level container to hold a set of sensor
431 paths grouped together";
432
433 list sensor-path {
434 key "path";
435 description
436 "List of paths in the model which together
437 comprise a sensor grouping. Filters for each path
438 to exclude items are also provided.";
439
440 leaf path {
441 type leafref {
442 path "../state/path";
443 }
444 description
445 "Reference to the path of interest";
446 }
447
448 container state {
449 config false;
450 description
451 "State information for a dynamic subscription's
452 paths of interest";
453 uses telemetry-sensor-path-config;
454 }
455 }
456 }
457 }
458 }
459 }
460 }
461 }
462
463 // identity statements
464
465 // typedef statements
466
467 // grouping statements
468
469 grouping telemetry-sensor-path-config {
470 description
471 "Configuration parameters relating to the
472 grouping of data model paths comprising a
473 sensor grouping";
474 leaf path {
475 type string;
476 description
477 "Path to a section of operational state of interest
478 (the sensor).";
479 }
480
481 leaf exclude-filter {
482 type string;
483 description
484 "Filter to exclude certain values out of the state
485 values";
486 //May not be necessary. Could remove.
487 }
488 }
489
490 grouping telemetry-heartbeat-config {
491 description
492 "Configuration parameters relating to the
493 heartbeat of the telemetry subscription";
494 leaf heartbeat-interval {
495 type uint64;
496 description
497 "Maximum time interval in seconds that may pass
498 between updates from a device to a telemetry collector.
499 If this interval expires, but there is no updated data to
500 send (such as if suppress_updates has been configured), the
501 device must send a telemetry message to the collector.";
502 }
503 }
504
505 grouping telemetry-suppress-redundant-config {
506 description
507 "Configuration parameters relating to suppression of
508 redundant upstream updates";
509 leaf suppress-redundant {
510 type boolean;
511 description
512 "Boolean flag to control suppression of redundant
513 telemetry updates to the collector platform. If this flag is
514 set to TRUE, then the collector will only send an update at
515 the configured interval if a subscribed data value has
516 changed. Otherwise, the device will not send an update to
517 the collector until expiration of the heartbeat interval.";
518 }
519 }
520
521 grouping telemetry-sensor-profile-config {
522 description
523 "Configuration parameters relating to the sensor groups
524 used in the sensor profile";
525 leaf sensor-group {
526 type leafref {
527 path "../../../../../../../sensor-groups/sensor-group"
528 + "/config/sensor-group-id";
529 }
530 description
531 "Reference to the sensor group which is used in the profile";
532 }
533 uses telemetry-stream-subscription-config;
534 }
535
536 grouping telemetry-stream-subscription-config {
537 description
538 "Configuration used when the sensor is a stream based sensor.";
539
540 uses telemetry-stream-frequency-config;
541 uses telemetry-heartbeat-config;
542 uses telemetry-suppress-redundant-config;
543
544 }
545
546 grouping telemetry-qos-marking-config {
547 description
548 "Config parameters relating to the quality of service
549 marking on device generated telemetry packets";
550
551 leaf originated-qos-marking {
552 type oc-inet:dscp;
553 description
554 "DSCP marking of packets generated by the telemetry
555 subsystem on the network device.";
556 }
557 }
558
559
560 grouping telemetry-sensor-group-config {
561 description
562 "Config parameters related to the sensor groups
563 on the device";
564 leaf sensor-group-id {
565 type string;
566 description
567 "Name or identifier for the sensor group itself.
568 Will be referenced by other configuration specifying a
569 sensor group";
570 }
571 }
572
573 grouping telemetry-subscription-config {
574 description
575 "Configuration parameters relating to the telemetry
576 subscription";
577 leaf subscription-id {
578 type uint64;
579 description
580 "System generated identifer of the telemetry
581 subscription.";
582 }
583 }
584
585 grouping telemetry-subscription-name-config {
586 description
587 "Configuration parameters relating to the configured
588 name of the telemetry subscription. The name is a user
589 configured string value which uniquely identifies the
590 subscription in the configuration database.";
591
592 leaf subscription-name {
593 type string;
594 description
595 "User configured identifier of the telemetry
596 subscription. This value is used primarily for
597 subscriptions configured locally on the network
598 element.";
599 }
600 }
601
602 grouping telemetry-subscription-state {
603 description
604 "State values for the telemetry subscription";
605 //TODO add values
606 }
607
608 grouping telemetry-stream-protocol-config {
609 description
610 "Configuration parameters relating to the
611 transport protocol carrying telemetry
612 data.";
613
614 leaf protocol {
615 type identityref {
616 base oc-telemetry-types:STREAM_PROTOCOL;
617 }
618 description
619 "Selection of the transport protocol for the telemetry
620 stream.";
621 }
622 }
623
624 grouping telemetry-stream-encoding-config {
625 description
626 "Configuration parameters relating to the
627 encoding of telemetry data to and from the
628 network element. The encoding method controls
629 specifically the wire format of the telemetry
630 data, and also controls which RPC framework
631 may be in use to exchange telemetry data.";
632
633 leaf encoding {
634 type identityref {
635 base oc-telemetry-types:DATA_ENCODING_METHOD;
636 }
637 description
638 "Selection of the specific encoding or RPC framework
639 for telemetry messages to and from the network element.";
640 }
641 }
642
643 grouping telemetry-stream-destination-config {
644 description
645 "Configuration parameters for the stream destinations";
646 leaf destination-address {
647 type oc-inet:ip-address;
648 description
649 "IP address of the telemetry stream destination";
650 }
651 leaf destination-port {
652 type uint16;
653 description
654 "Protocol (udp or tcp) port number for the telemetry
655 stream destination";
656 }
657 }
658
659 grouping telemetry-stream-frequency-config {
660 description
661 "Config parameters for the frequency of updates to
662 the collector";
663 leaf sample-interval {
664 type uint64;
665 description
666 "Time in milliseconds between the device's sample of a
667 telemetry data source. For example, setting this to 100
668 would require the local device to collect the telemetry
669 data every 100 milliseconds. There can be latency or jitter
670 in transmitting the data, but the sample must occur at
671 the specified interval.
672
673 The timestamp must reflect the actual time when the data
674 was sampled, not simply the previous sample timestamp +
675 sample-interval.
676
677 If sample-interval is set to 0, the telemetry sensor
678 becomes event based. The sensor must then emit data upon
679 every change of the underlying data source.";
680 }
681 }
682
683 grouping telemetry-sensor-specification {
684 description
685 "Config related to creating telemetry sensor groups. A sensor
686 group is a related set of sensor paths and/or filters to
687 exclude items. A group is assigned a reusable identifer, so
688 it can be used in multiple telemetry subscriptions.";
689 list telemetry-sensor-group {
690 key "telemetry-sensor-group-id";
691 description
692 "List of telemetry sensor groups";
693
694 leaf telemetry-sensor-group-id {
695 type string;
696 description
697 "The sensor group identifer is a reusable handle which
698 identifies a single sensor group. It is referenced from
699 the subscription configuration.";
700 }
701 uses telemetry-sensor-paths;
702 }
703 }
704
705 grouping telemetry-sensor-paths {
706 description
707 "This grouping contains these paths to leaves or containers
708 in the data model which are the sources of telemetry
709 information.";
710
711 list telemetry-sensor-paths {
712 key "telemetry-sensor-path";
713 description
714 "A list of sensor paths and exclude filters which comprise
715 a sensor grouping";
716
717 leaf telemetry-sensor-path {
718 type string;
719 description
720 "The sensor path is a path to a portion of operational
721 state of interest in the data model";
722 }
723 // This may not be needed. Decide on removal.
724 leaf sensor-exclude-filter {
725 type string;
726 description
727 "The exclude filter allows certain values of state to be
728 filtered out of the telemetry stream";
729 }
730 }
731 }
732
733
734 grouping telemetry-local-source-address-config {
735 description
736 "Config relating to the local source address for telemetry
737 messages";
738 // TODO: Make this a reference to an interface.
739 leaf local-source-address {
740 type oc-inet:ip-address;
741 description
742 "The IP address which will be the source of packets from
743 the device to a telemetry collector destination.";
744 }
745 }
746
747 // data definition statements
748
749 uses telemetry-top;
750
751 // augment statements
752
753 // rpc statements
754
755 // notification statements
756
757}