module org-openroadm-pm-types {
  namespace "http://org/openroadm/pm-types";
  prefix org-openroadm-pm-types;

  organization
    "Open ROADM MSA";
  contact
    "OpenROADM.org";
  description
    "YANG definitions of performance management types.
       
      Copyright of the Members of the Open ROADM MSA Agreement dated (c) 2016, 
      AT&T Intellectual Property.  All other rights reserved.
      
      Redistribution and use in source and binary forms, with or without modification, 
      are permitted provided that the following conditions are met:
      
      * Redistributions of source code must retain the above copyright notice, this 
        list of conditions and the following disclaimer.
      * Redistributions in binary form must reproduce the above copyright notice, 
        this list of conditions and the following disclaimer in the documentation and/or 
        other materials provided with the distribution.
      * Neither the Members of the Open ROADM MSA Agreement nor the names of its 
        contributors may be used to endorse or promote products derived from this software 
        without specific prior written permission.
      
      THIS SOFTWARE IS PROVIDED BY THE MEMBERS OF THE OPEN ROADM MSA  AGREEMENT ''AS IS'' 
      AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
      WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
      IN NO EVENT THE MEMBERS OF THE OPEN ROADM MSA  AGREEMENT BE LIABLE FOR ANY DIRECT, 
      INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
      NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;  LOSS OF USE, DATA, 
      OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
      WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
      ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
      POSSIBILITY OF SUCH DAMAGE";

  revision 2017-12-15 {
    description
      "Version 2.2";
  }
  revision 2017-09-29 {
    description
      "Version 2.1";
  }
  revision 2017-06-26 {
    description
      "Version 2.0";
  }
  revision 2016-10-14 {
    description
      "Version 1.2";
  }

  typedef pm-granularity {
    type enumeration {
      enum "notApplicable" {
        value 1;
        description
          "This is for total statistic counters on devices that support
              them.";
      }
      enum "15min" {
        value 2;
      }
      enum "24Hour" {
        value 3;
      }
    }
    description
      "Granularity of PM bin";
  }

  typedef pm-data-type {
    type union {
      type uint64;
      type int64;
      type decimal64 {
        fraction-digits 2;
      }
      type decimal64 {
        fraction-digits 17;
      }
    }
  }

  typedef validity {
    type enumeration {
      enum "complete" {
        value 1;
      }
      enum "partial" {
        value 2;
      }
      enum "suspect" {
        value 3;
      }
    }
    description
      "Validity of data";
  }

  typedef pm-names-enum {
    type enumeration {
      enum "vendorExtension" {
        value 1;
        description
          "vendor extension";
      }
      enum "bitErrorRate" {
        value 2;
        description
          "Bit error rate (BER)";
      }
      enum "opticalPowerOutput" {
        value 3;
        description
          "Optical Power Output (OPOUT-OTS, OPOUT-OMS, OPT-OCH). Total optical power includes Variable Optical Attenuator (VOA) attenuation";
      }
      enum "opticalReturnLoss" {
        value 4;
        description
          "Optical Return Loss (ORL-OTS) - at MW port(s) B";
      }
      enum "opticalPowerInput" {
        value 5;
        description
          "Optical Power Input (OPIN-OTS, OPIN-OMS, OPR-OCH). Total optical power";
      }
      enum "codeViolations" {
        value 8;
        description
          "Code Violations (CV)";
      }
      enum "erroredSeconds" {
        value 9;
        description
          "Errored Seconds (ES)";
      }
      enum "severelyErroredSeconds" {
        value 10;
        description
          "Severely Errored Seconds (SES)";
      }
      enum "unavailableSeconds" {
        value 11;
        description
          "Unavailable Seconds (UAS)";
      }
      enum "inFrames" {
        value 12;
        description
          "In frames (INFRAMES-E)";
      }
      enum "inFramesErrored" {
        value 13;
        description
          "In frames errored (INFRAMESERR-E)";
      }
      enum "outFrames" {
        value 14;
        description
          "Out frames (OUTFRAMES-E)";
      }
      enum "erroredSecondsEthernet" {
        value 15;
        description
          "Errored Seconds Ethernet (ES-E)";
      }
      enum "severelyErroredSecondsEthernet" {
        value 16;
        description
          "Severly Errored Seconds, Ethernet (SES-E)";
      }
      enum "unavailableSecondsEthernet" {
        value 17;
        description
          "Unavailable Seconds, Ethernet (UAS-E)";
      }
      enum "erroredBlockCount" {
        value 18;
        description
          "Errored block count";
      }
      enum "delay" {
        value 19;
        description
          "Number of frames between a DMValue toggle event and the received DMp signal value toggle event";
      }
      enum "defectSeconds" {
        value 20;
        description
          "Defect Seconds (DS)";
      }
      enum "backwardIncomingAlignmentError" {
        value 21;
        description
          "Backward Incoming Alignment Error (BIAE)";
      }
      enum "incomingAlignmentError" {
        value 22;
        description
          "Incoming Alignment Error (IAE)";
      }
      enum "opticalPowerOutputMin" {
        value 23;
        description
          "Minimum Optical Power Output (OPOUT-OTS). Total optical power includes Variable Optical Attenuator (VOA) attenuation";
      }
      enum "opticalPowerOutputMax" {
        value 24;
        description
          "Maximum Optical Power Output (OPOUT-OTS). Total optical power includes Variable Optical Attenuator (VOA) attenuation";
      }
      enum "opticalPowerOutputAvg" {
        value 25;
        description
          "Average Optical Power Output (OPOUT-OTS). Total optical power includes Variable Optical Attenuator (VOA) attenuation";
      }
      enum "opticalPowerInputMin" {
        value 26;
        description
          "Minimum Optical Power Input (OPIN-OTS). Total optical power";
      }
      enum "opticalPowerInputMax" {
        value 27;
        description
          "Maximum Optical Power Input (OPIN-OTS). Total optical power";
      }
      enum "opticalPowerInputAvg" {
        value 28;
        description
          "Average Optical Power Input (OPIN-OTS). Total optical power";
      }
      enum "opticalPowerOutputOSC" {
        value 29;
        description
          "OSC Optical Power Output (OPT-OSC). OSC Transmit power on MW port";
      }
      enum "opticalPowerOutputOSCMin" {
        value 30;
        description
          "Minimum OSC Optical Power Output (OPT-OSC). OSC Transmit power on MW port";
      }
      enum "opticalPowerOutputOSCMax" {
        value 31;
        description
          "Maximum OSC Optical Power Output (OPT-OSC). OSC Transmit power on MW port";
      }
      enum "opticalPowerOutputOSCAvg" {
        value 32;
        description
          "Average OSC Optical Power Output (OPT-OSC). OSC Transmit power on MW port";
      }
      enum "opticalPowerInputOSC" {
        value 33;
        description
          "OSC Optical Power Input (OPR-OSC). OSC Receive power on MW port";
      }
      enum "opticalPowerInputOSCMin" {
        value 34;
        description
          "Minimum OSC Optical Power Input (OPR-OSC). OSC Receive power on MW port";
      }
      enum "opticalPowerInputOSCMax" {
        value 35;
        description
          "Maximum OSC Optical Power Input (OPR-OSC). OSC Receive power on MW port";
      }
      enum "opticalPowerInputOSCAvg" {
        value 36;
        description
          "Average OSC Optical Power Input (OPR-OSC). OSC Receive power on MW port";
      }
      enum "preFECCorrectedErrors" {
        value 37;
        description
          "pFEC corrected Errors";
      }
      enum "totalOpticalPowerInput" {
        value 38;
        description
          "Total Optical Power Input.";
      }
      enum "totalOpticalPowerInputMin" {
        value 39;
        description
          "Minumun Total Optical Power Input.";
      }
      enum "totalOpticalPowerInputMax" {
        value 40;
        description
          "Maximum Total Optical Power Input.";
      }
      enum "totalOpticalPowerInputAvg" {
        value 41;
        description
          "Average Total Optical Power Input.";
      }
      enum "FECCorrectableBlocks" {
        value 42;
        description
          "FEC Correctable Blocks.";
      }
      enum "FECUncorrectableBlocks" {
        value 43;
        description
          "FEC Uncorrectable Blocks.";
      }
      enum "BIPErrorCounter" {
        value 56;
        description
          "BIP Error Counter";
      }
      enum "protectionSwitchingCount" {
        value 57;
        description
          "Protection Switching Count (PSC)";
      }
      enum "protectionSwitchingDuration" {
        value 58;
        description
          "Protection Switching Duration in seconds (PSD)";
      }
      enum "erroredBlockCountTCM1-up" {
        value 59;
        description
          "errored Blocks Count on TCM1 up direction.";
      }
      enum "erroredBlockCountTCM2-up" {
        value 60;
        description
          "errored Blocks Count on TCM2 up direction.";
      }
      enum "erroredBlockCountTCM3-up" {
        value 61;
        description
          "errored Blocks Count on TCM3 up direction.";
      }
      enum "erroredBlockCountTCM4-up" {
        value 62;
        description
          "errored Blocks Count on TCM4 up direction.";
      }
      enum "erroredBlockCountTCM5-up" {
        value 63;
        description
          "errored Blocks Count on TCM5 up direction.";
      }
      enum "erroredBlockCountTCM6-up" {
        value 64;
        description
          "errored Blocks Count on TCM6 up direction.";
      }
      enum "delayTCM1-up" {
        value 65;
        description
          "Delay on TCM1 up direction.";
      }
      enum "delayTCM2-up" {
        value 66;
        description
          "Delay on TCM2 up direction.";
      }
      enum "delayTCM3-up" {
        value 67;
        description
          "Delay on TCM3 up direction.";
      }
      enum "delayTCM4-up" {
        value 68;
        description
          "Delay on TCM4 up direction.";
      }
      enum "delayTCM5-up" {
        value 69;
        description
          "Delay on TCM5 up direction.";
      }
      enum "delayTCM6-up" {
        value 70;
        description
          "Delay on TCM6 up direction.";
      }
      enum "erroredBlockCountTCM1-down" {
        value 71;
        description
          "errored Blocks Count on TCM1 down direction.";
      }
      enum "erroredBlockCountTCM2-down" {
        value 72;
        description
          "errored Blocks Count on TCM2 down direction.";
      }
      enum "erroredBlockCountTCM3-down" {
        value 73;
        description
          "errored Blocks Count on TCM3 down direction.";
      }
      enum "erroredBlockCountTCM4-down" {
        value 74;
        description
          "errored Blocks Count on TCM4 down direction.";
      }
      enum "erroredBlockCountTCM5-down" {
        value 75;
        description
          "errored Blocks Count on TCM5 down direction.";
      }
      enum "erroredBlockCountTCM6-down" {
        value 76;
        description
          "errored Blocks Count on TCM6 down direction.";
      }
      enum "delayTCM1-down" {
        value 77;
        description
          "Delay on TCM1 down direction.";
      }
      enum "delayTCM2-down" {
        value 78;
        description
          "Delay on TCM2 down direction.";
      }
      enum "delayTCM3-down" {
        value 79;
        description
          "Delay on TCM3 down direction.";
      }
      enum "delayTCM4-down" {
        value 80;
        description
          "Delay on TCM4 down direction.";
      }
      enum "delayTCM5-down" {
        value 81;
        description
          "Delay on TCM5 down direction.";
      }
      enum "delayTCM6-down" {
        value 82;
        description
          "Delay on TCM6 down direction.";
      }
    }
  }

  grouping pm-measurement {
    description
      "Set of parameters related to a PM Measurement";
    leaf pmParameterValue {
      type pm-data-type;
      config false;
      mandatory true;
    }
    leaf pmParameterUnit {
      type string;
      mandatory false;
      description
        "Unit PM parameter has been measured - frames, packets, u, etc";
    }
    leaf validity {
      type validity;
      mandatory false;
    }
  }

  grouping pm-names {
    description
      "Name of PM parameter. Consisists of a set list of parameters,
       plus an extension field to support addition parameters.";
    leaf type {
      type pm-names-enum;
      mandatory true;
    }
    leaf extension {
      type string;
      description
        "name of parameter, when enum value set to vendorExtension because
         name not found in pm-names-enum";
    }
  }
}
