module ietf-system-microsemi {

    namespace "http://www.microsemi.com/microsemi-edge-assure/msea-system";
    prefix "sys-ms";

    import ietf-yang-types {
        prefix yang;
        revision-date 2013-07-15;
    }

    import ietf-inet-types {
        prefix inet;
        revision-date 2013-07-15;
    }

    import msea-types {
        prefix msea;
        revision-date 2016-02-29;
    }

    import ietf-system {
        prefix sys;
        revision-date 2014-08-06;
    }

//    import ietf-netconf-acm {
//        prefix nacm;
//        revision-date 2012-02-22;
//    }

    /*** META INFORMATION ***/

    organization
    "Microsemi Inc., FTD Division";

    contact
    "Web URL: http://www.microsemi.com/
    E-mail: info@microsemi.com
    Postal: Microsemi Corporation Corporate Headquarters
    One Enterprise Aliso Viejo,
    CA 92656
    U.S.A.
    Phone: +1 949 380 6100
    Fax: +1 949 215-4996";

    description
    "This YANG module extends the IETF System objects with some extra configuration attributes

    Copyright 2015 Microsemi Inc.
    All rights reserved.";

    reference "RFC 7317: A YANG Data Model for System Management";

    revision "2016-05-05" {
        description
        "Updated for ZTP support - Sean Condon, Microsemi";
    }

    revision "2015-10-01" {
        description
        "Initial version to augment IETF-SYSTEM YANG module - Sean Condon, Microsemi";
    }

    typedef identifier {
        type string {
            length "1..255";
            pattern "[a-zA-Z0-9\-._]*";
        }
        description
        "A simple string with only alphabetic or numeric and dash, dot and underscore";
    }

    grouping upgrade-file-attributes {
        leaf file-name {
            type string;
            description "The name of the update TAR file as found on the device";
        }

        leaf file-date {
            type yang:date-and-time;
            description "The date of the update TAR file as found on the device";
        }

        leaf file-size {
            type uint32;
            description "The size of the update TAR file as found on the device";
        }
    }


    grouping upgrade-attributes {
        description "Attributes from the /update.tar file";

        leaf version {
            type uint32;
            description "The version of this portion of the /update.tar";
        }

        leaf crc32 {
            type uint32;
            description "The CRC32 value of this portion of the /update.tar";
        }

        leaf length {
            type uint32;
            description "The length of this portion of the /update.tar";
        }
    }

    grouping ddm-attributes {

        leaf high-alarm-thresh {
            description "The high alarm threshold value";
            type decimal64 {
                fraction-digits 6;
            }
        }

        leaf high-warn-thresh {
            description "The high warn threshold value";
            type decimal64 {
                fraction-digits 6;
            }
        }

        leaf low-warn-thresh {
            description "The low warn threshold value";
            type decimal64 {
                fraction-digits 6;
            }
        }

        leaf low-alarm-thresh {
            description "The low alarm threshold value";
            type decimal64 {
                fraction-digits 6;
            }
        }
    }

    feature serial-number {
        description "Set of readonly attributes that identify the hardware";
    }

    feature remote-upgrade {
        description
        "Indicates that the device supports upgrade of fabric, linux and fabric header.
        This expects a file /update.tar on the device -
        put there through SFTP or some other file transfer method";
    }


    augment "/sys:system" {
        description
        "Extends the SYSTEM with some extra configuration attributes required for setup.";

        leaf asset-tag { //Microsemi specific configuration attribute
            type identifier;
            description
            "An asset tag field for the device.";
        }

        leaf description { //Microsemi specific configuration attribute
            type string {
                length "0..256";
                pattern "[a-zA-Z0-9\\-_. ,]*";
            }
            description "A description for the device.";
        }

        leaf longitude { //Microsemi specific configuration attribute
            type decimal64 {
                fraction-digits 7;
                range "-180..180";
            }
            description
            "Longitude for the device expressed in decimal degrees.
            Positive values represent East and negative values represent West";
        }

        leaf latitude { //Microsemi specific configuration attribute
            type decimal64 {
                fraction-digits 7;
                range "-90..90";
            }
            description
            "Latitude for the device expressed in decimal degrees
            Positive values represent North and negative values represent South";
        }
    }


    augment "/sys:system-state" {
        description
        "Extends the SYSTEM-STATE with some extra configuration attributes required for setup.

        All attributes are automatically config=false because they extend system-state";

        container remote-upgrade {
            description "Details of the /update.tar file present on the system.
                    These are all read-only because they are under system-state";

            choice file-present-choice {
                case not-present {
                    leaf file-not-found {
                        type string;
                        description "Gives the name of the expected file. Usually /update.tar";
                    }
                }

                case file-present {
                    uses upgrade-file-attributes;

                    leaf file-validity {
                        type string;
                        description "Gives an indication if the file is valid, or if not, the reason why";
                    }

                    container fabric-image {
                        uses upgrade-attributes;
                    }

                    container linux-image {
                        uses upgrade-attributes;
                    }
                }
            }
        }

        leaf hostname {
            type string;
            description "The hostname of the system. When DHCP or ZTP
                  is active the hostname will not be configured through NETCONF";
        }

        container ntp {
          if-feature sys:ntp;
          description "The list of NTP servers active on the system. When DHCP or ZTP
                  is active the NTP servers will not be configured through NETCONF";

          leaf-list server {
              type string;
              description "An NTP server active on the system";
          }
        }

        container dns-resolver {
          description "The list of DNS servers active on the system. When DHCP or ZTP
                  is active the DNS servers will not be configured through NETCONF";

          leaf-list server {
              type string;
              description "A DNS server active on the system";
          }

          leaf-list search {
              type string;
              description "A DNS search domain active on the system";
          }

        }

        container diagnostic-monitoring {

            container temperature {
                description "The temperature and thresholds of the device";

                leaf measured {
                    description "The measured transceiver temperature at the current time";
                    type decimal64 {
                        fraction-digits 6;
                    }
                    units "°C";
                    reference
                    "SFF-8472 Specification for Diagnostic Monitoring Interface for Optical 
                    Transceivers Rev 12.1 September 12, 2014 Section 9.1";
                }

                uses ddm-attributes;
            }

            container voltage {
                description "The core voltage and thresholds of the device";

                leaf measured {
                    description "The measured voltage at the current time";
                    type decimal64 {
                        fraction-digits 6;
                    }
                    units "V";
                    reference
                    "SFF-8472 Specification for Diagnostic Monitoring Interface for Optical 
                    Transceivers Rev 12.1 September 12, 2014 Section 9.1";
                }
                
                uses ddm-attributes;
            }

            container tx-bias {
                description "The transmit (Tx) bias and thresholds of the device";

                leaf measured {
                    description "The measured transmit (Tx) bias at the current time";
                    type decimal64 {
                        fraction-digits 6;
                    }
                    units "mA";
                    reference
                    "SFF-8472 Specification for Diagnostic Monitoring Interface for Optical 
                    Transceivers Rev 12.1 September 12, 2014 Section 9.1";
                }

                uses ddm-attributes;
            }

            container tx-power {
                description "The transmit (Tx) power and thresholds of the device";

                leaf measured {
                    description "The measured transmit (Tx) power at the current time";
                    type decimal64 {
                        fraction-digits 6;
                    }
                    units "mV";
                    reference
                    "SFF-8472 Specification for Diagnostic Monitoring Interface for Optical 
                    Transceivers Rev 12.1 September 12, 2014 Section 9.1";
                }

                uses ddm-attributes;
            }
            
            container rx-power {
                description "The receive (Rx) power and thresholds of the device";

                leaf measured {
                    description "The measured receive (Rx) power at the current time";
                    type decimal64 {
                        fraction-digits 6;
                    }
                    units "mV";
                    reference
                    "SFF-8472 Specification for Diagnostic Monitoring Interface for Optical 
                    Transceivers Rev 12.1 September 12, 2014 Section 9.1";
                }

                uses ddm-attributes;
            }
        }
    }

    augment "/sys:system-state/sys:platform" {
        description
        "Extends the SYSTEM-STATE platform with some extra configuration attributes required for setup.

        All attributes are automatically config=false because they extend system-state";

        container device-identification {
            if-feature serial-number;
            config false;

            leaf vendor-name {
                type string;
                description
                "Device Vendor Name";
                reference
                "SFF-8472 Specification for Diagnostic Monitoring Interface for Optical
                Transceivers Rev 12.1 September 12, 2014 Table 4-1 Address A0H Bytes 20-35";
            }

            leaf vendor-part-number {
                type string;
                description
                "Device Vendor Part Number";
                reference
                "SFF-8472 Specification for Diagnostic Monitoring Interface for Optical
                Transceivers Rev 12.1 September 12, 2014 Table 4-1 Address A0H Bytes 40-55";
            }

            leaf vendor-revision {
                type string;
                description
                "Device Vendor Revision";
                reference
                "SFF-8472 Specification for Diagnostic Monitoring Interface for Optical
                Transceivers Rev 12.1 September 12, 2014 Table 4-1 Address A0H Bytes 56-59";
            }

            leaf serial-number {
                type string;
                description
                "Device Serial Number";
                reference
                "SFF-8472 Specification for Diagnostic Monitoring Interface for Optical
                Transceivers Rev 12.1 September 12, 2014 Table 4-1 Address A0H Bytes 68-83";
            }

            container processor {
                description "Details of the processor hardware in the device";

                leaf serialnumber {
                    type yang:hex-string;
                    description "The serial number of the processor";
                }

                leaf x509-device-certificate-pem {
                    type string;
                    description "X509 Device certificate in PEM (Base 64 format)";
                }
            }
        }
    }
}