aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/yang/openconfig/openconfig-platform-transceiver.yang
blob: 66b9071e99fd3a7e87ee316aa6c3c0f9a85988b4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
module openconfig-platform-transceiver {

  yang-version "1";

  // namespace
  namespace "http://openconfig.net/yang/platform/transceiver";

  prefix "oc-transceiver";

  // import some basic types
  import openconfig-platform { prefix oc-platform; }
  import openconfig-platform-port { prefix oc-port; }
  import openconfig-interfaces { prefix oc-if; }
  import openconfig-transport-types { prefix oc-opt-types; }
  import openconfig-types { prefix oc-types; }
  import openconfig-extensions { prefix oc-ext; }
  import openconfig-yang-types { prefix oc-yang; }


  // meta
  organization "OpenConfig working group";

  contact
    "OpenConfig working group
    www.openconfig.net";

  description
    "This module defines configuration and operational state data
    for transceivers (i.e., pluggable optics).  The module should be
    used in conjunction with the platform model where other
    physical entity data are represented.

    In the platform model, a component of type=TRANSCEIVER is
    expected to be a subcomponent of a PORT component.  This
    module defines a concrete schema for the associated data for
    components with type=TRANSCEIVER.";

  oc-ext:openconfig-version "0.5.0";

  revision "2018-05-15" {
    description
      "Remove internal-temp state leaf, since we prefer
      the generic /components/component/state/temperature
      container for temperature information.";
    reference "0.5.0";
  }

  revision "2018-01-22" {
    description
      "Fixed physical-channel path reference";
    reference "0.4.1";
  }

  revision "2017-09-18" {
    description
      "Use openconfig-yang-types module";
    reference "0.4.0";
  }

  revision "2017-07-08" {
    description
      "Adds clarification on aggregate power measurement data";
    reference "0.3.0";
  }

  revision "2016-12-22" {
    description
      "Adds preconfiguration data and clarified units";
    reference "0.2.0";
  }

  // identity statements

  // typedef statements

  // grouping statements

  grouping optical-power-state {
    description
      "Reusable leaves related to optical power state -- these
      are read-only state values. If avg/min/max statistics are
      not supported, the target is expected to just supply the
      instant value";

    container output-power {
      description
        "The output optical power of a physical channel in units
        of 0.01dBm, which may be associated with individual
        physical channels, or an aggregate of multiple physical
        channels (i.e., for the overall transceiver). For an
        aggregate, this may be a measurement from a photodetector
        or a a calculation performed on the device by summing up
        all of the related individual physical channels.
        Values include the instantaneous, average, minimum, and
        maximum statistics. If avg/min/max statistics are not
        supported, the target is expected to just supply the
        instant value";

      uses oc-types:avg-min-max-instant-stats-precision2-dBm;
    }

    container input-power {
      description
        "The input optical power of a physical channel in units
        of 0.01dBm, which may be associated with individual
        physical channels, or an aggregate of multiple physical
        channels (i.e., for the overall transceiver). For an
        aggregate, this may be a measurement from a photodetector
        or a a calculation performed on the device by summing up
        all of the related individual physical channels.
        Values include the instantaneous, average, minimum, and
        maximum statistics. If avg/min/max statistics are not
        supported, the target is expected to just supply the
        instant value";

      uses oc-types:avg-min-max-instant-stats-precision2-dBm;
    }

    container laser-bias-current {
      description
        "The current applied by the system to the transmit laser to
        achieve the output power. The current is expressed in mA
        with up to two decimal precision. Values include the
        instantaneous, average, minimum, and maximum statistics.
        If avg/min/max statistics are not supported, the target is
        expected to just supply the instant value";

      uses oc-types:avg-min-max-instant-stats-precision2-mA;
    }
  }

  grouping output-optical-frequency {
    description
      "Reusable leaves related to optical output power -- this is
      typically configurable on line side and read-only on the
      client-side";

    leaf output-frequency {
      type oc-opt-types:frequency-type;
      description
        "The frequency in MHz of the individual physical channel
        (e.g. ITU C50 - 195.0THz and would be reported as
        195,000,000 MHz in this model). This attribute is not
        configurable on most client ports.";
    }
  }


  grouping physical-channel-config {
    description
      "Configuration data for physical client channels";

    leaf index {
      type uint16 {
        range 0..max;
      }
      description
        "Index of the physical channnel or lane within a physical
        client port";
    }

    leaf description {
      type string;
      description
        "Text description for the client physical channel";
    }

    leaf tx-laser {
      type boolean;
      description
        "Enable (true) or disable (false) the transmit label for the
        channel";
    }

    leaf target-output-power {
      type decimal64 {
        fraction-digits 2;
      }
      units dBm;
      description
        "Target output optical power level of the optical channel,
        expressed in increments of 0.01 dBm (decibel-milliwats)";
    }
  }

  grouping physical-channel-state {
    description
      "Operational state data for client channels.";

    uses output-optical-frequency;
    uses optical-power-state;
  }

  grouping physical-channel-top {
    description
      "Top-level grouping for physical client channels";

    container physical-channels {
      description
        "Enclosing container for client channels";

      list channel {
        key "index";
        description
          "List of client channels, keyed by index within a physical
          client port.  A physical port with a single channel would
          have a single zero-indexed element";

        leaf index {
          type leafref {
            path "../config/index";
          }
          description
            "Reference to the index number of the channel";
        }

        container config {
          description
            "Configuration data for physical channels";

          uses physical-channel-config;
        }

        container state {

          config false;

          description
            "Operational state data for channels";

          uses physical-channel-config;
          uses physical-channel-state;
        }
      }
    }
  }


  grouping port-transceiver-config {
    description
      "Configuration data for client port transceivers";

    leaf enabled {
      type boolean;
      description
        "Turns power on / off to the transceiver -- provides a means
        to power on/off the transceiver (in the case of SFP, SFP+,
        QSFP,...) or enable high-power mode (in the case of CFP,
        CFP2, CFP4) and is optionally supported (device can choose to
        always enable).  True = power on / high power, False =
        powered off";
    }

    leaf form-factor-preconf {
      type identityref {
        base oc-opt-types:TRANSCEIVER_FORM_FACTOR_TYPE;
      }
      description
        "Indicates the type of optical transceiver used on this
        port.  If the client port is built into the device and not
        pluggable, then non-pluggable is the corresponding state. If
        a device port supports multiple form factors (e.g. QSFP28
        and QSFP+, then the value of the transceiver installed shall
        be reported. If no transceiver is present, then the value of
        the highest rate form factor shall be reported
        (QSFP28, for example).

        The form factor is included in configuration data to allow
        pre-configuring a device with the expected type of
        transceiver ahead of deployment.  The corresponding state
        leaf should reflect the actual transceiver type plugged into
        the system.";
    }

    leaf ethernet-pmd-preconf {
      type identityref {
        base oc-opt-types:ETHERNET_PMD_TYPE;
      }
      description
        "The Ethernet PMD is a property of the optical transceiver
        used on the port, indicating the type of physical connection.
        It is included in configuration data to allow pre-configuring
        a port/transceiver with the expected PMD.  The actual PMD is
        indicated by the ethernet-pmd state leaf.";
    }
  }

  grouping port-transceiver-state {
    description
      "Operational state data for client port transceivers";

    leaf present {
      type enumeration {
        enum PRESENT {
          description
            "Transceiver is present on the port";
        }
        enum NOT_PRESENT {
          description
            "Transceiver is not present on the port";
        }
      }
      description
        "Indicates whether a transceiver is present in
        the specified client port.";
    }

    leaf form-factor {
      type identityref {
        base oc-opt-types:TRANSCEIVER_FORM_FACTOR_TYPE;
      }
      description
        "Indicates the type of optical transceiver used on this
        port.  If the client port is built into the device and not
        pluggable, then non-pluggable is the corresponding state. If
        a device port supports multiple form factors (e.g. QSFP28
        and QSFP+, then the value of the transceiver installed shall
        be reported. If no transceiver is present, then the value of
        the highest rate form factor shall be reported
        (QSFP28, for example).";
    }

    leaf connector-type {
      type identityref {
        base oc-opt-types:FIBER_CONNECTOR_TYPE;
      }
      description
        "Connector type used on this port";
    }

    leaf vendor {
      type string {
        length 1..16;
      }
      description
        "Full name of transceiver vendor. 16-octet field that
        contains ASCII characters, left-aligned and padded on the
        right with ASCII spaces (20h)";
    }

    leaf vendor-part {
      type string {
        length 1..16;
      }
      description
        "Transceiver vendor's part number. 16-octet field that
        contains ASCII characters, left-aligned and padded on the
        right with ASCII spaces (20h). If part number is undefined,
        all 16 octets = 0h";
    }

    leaf vendor-rev {
      type string {
        length 1..2;
      }
      description
        "Transceiver vendor's revision number. 2-octet field that
        contains ASCII characters, left-aligned and padded on the
        right with ASCII spaces (20h)";
    }

    //TODO: these compliance code leaves should be active based on
    //the type of port
    leaf ethernet-pmd {
      type identityref {
        base oc-opt-types:ETHERNET_PMD_TYPE;
      }
      description
        "Ethernet PMD (physical medium dependent sublayer) that the
        transceiver supports. The SFF/QSFP MSAs have registers for
        this and CFP MSA has similar.";
    }

    leaf sonet-sdh-compliance-code {
      type identityref {
        base oc-opt-types:SONET_APPLICATION_CODE;
      }
      description
        "SONET/SDH application code supported by the port";
    }

    leaf otn-compliance-code {
      type identityref {
        base oc-opt-types:OTN_APPLICATION_CODE;
      }
      description
        "OTN application code supported by the port";
    }

    leaf serial-no {
      type string {
        length 1..16;
      }
      description
        "Transceiver serial number. 16-octet field that contains
        ASCII characters, left-aligned and padded on the right with
        ASCII spaces (20h). If part serial number is undefined, all
        16 octets = 0h";
    }

    leaf date-code {
      type oc-yang:date-and-time;
      description
        "Representation of the transceiver date code, typically
        stored as YYMMDD.  The time portion of the value is
        undefined and not intended to be read.";
    }

    leaf fault-condition {
      type boolean;
      description
        "Indicates if a fault condition exists in the transceiver";
    }

    uses optical-power-state;

  }

  grouping port-transceiver-top {
    description
      "Top-level grouping for client port transceiver data";

    container transceiver {
      description
        "Top-level container for client port transceiver data";

      container config {
        description
          "Configuration data for client port transceivers";

        uses port-transceiver-config;
      }

      container state {

        config false;

        description
          "Operational state data for client port transceivers";

        uses port-transceiver-config;
        uses port-transceiver-state;
      }
      // physical channels are associated with a transceiver
      // component
      uses physical-channel-top;
    }
  }

  // data definition statements

  // augment statements

  augment "/oc-platform:components/oc-platform:component" {
    description
      "Adding transceiver data to physical inventory";

    uses port-transceiver-top {
      when "current()/oc-platform:state/" +
        "oc-platform:type = 'TRANSCEIVER'" {
        description
          "Augment is active when component is of type TRANSCEIVER";
      }
    }
  }

  augment "/oc-if:interfaces/oc-if:interface/oc-if:state" {
    //TODO: add 'when' or other condition to make sure this
    //leafref points to a component of type TRANSCEIVER.
    description
      "Adds a reference from the base interface to its corresponding
      physical channels.";

    leaf-list physical-channel {
      type leafref {
        path "/oc-platform:components/" +
          "oc-platform:component[oc-platform:name=current()/../oc-port:hardware-port]/" +
          "oc-transceiver:transceiver/" +
          "oc-transceiver:physical-channels/oc-transceiver:channel/" +
          "oc-transceiver:index";
      }
      description
        "For a channelized interface, list of references to the
        physical channels (lanes) corresponding to the interface.";
    }
  }

  // rpc statements

  // notification statements

}