module openconfig-system-logging {

  yang-version "1";

  // namespace
  namespace "http://openconfig.net/yang/system/logging";

  prefix "oc-log";

  // import some basic types
  import openconfig-extensions { prefix oc-ext; }
  import ietf-inet-types { prefix inet; }


  // meta
  organization "OpenConfig working group";

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

  description
    "This module defines configuration and operational state data
    for common logging facilities on network systems.";

  oc-ext:openconfig-version "0.2.0";

  revision "2017-07-06" {
    description
      "Move to oc-inet types, add IETF attribution, add RADIUS
      counters, changed password leaf names to indicate hashed";
    reference "0.2.0";
  }

  revision "2017-01-29" {
    description
      "Initial public release";
    reference "0.1.0";
  }

  // extension statements

  // feature statements

  // identity statements

  identity SYSLOG_FACILITY {
    description
      "Base identity for Syslog message facilities.";
    reference
      "IETF RFC 5424 - The Syslog Protocol";
  }

  identity ALL {
    base SYSLOG_FACILITY;
    description
      "All supported facilities";
  }

  identity KERNEL {
    base SYSLOG_FACILITY;
    description
      "The facility for kernel messages";
    reference
      "IETF RFC 5424 - The Syslog Protocol";
  }

  identity USER {
    base SYSLOG_FACILITY;
    description
      "The facility for user-level messages.";
    reference
      "IETF RFC 5424 - The Syslog Protocol";
  }

  identity MAIL {
    base SYSLOG_FACILITY;
    description
      "The facility for the mail system.";
    reference
      "IETF RFC 5424 - The Syslog Protocol";
  }

  identity SYSTEM_DAEMON {
    base SYSLOG_FACILITY;
    description
      "The facility for the system daemons.";
    reference
      "IETF RFC 5424 - The Syslog Protocol";
   }

  identity AUTH {
    base SYSLOG_FACILITY;
    description
      "The facility for security/authorization messages.";
    reference
      "IETF RFC 5424 - The Syslog Protocol";
  }

  identity SYSLOG {
    base SYSLOG_FACILITY;
    description
      "The facility for messages generated internally by syslogd
       facility.";
    reference
      "IETF RFC 5424 - The Syslog Protocol";
  }

  identity AUTHPRIV {
    base SYSLOG_FACILITY;
    description
      "The facility for privileged security/authorization messages.";
    reference
      "IETF RFC 5424 - The Syslog Protocol";
  }


  identity NTP {
    base SYSLOG_FACILITY;
    description
      "The facility for the NTP subsystem.";
    reference
      "IETF RFC 5424 - The Syslog Protocol";
  }

  identity AUDIT {
    base SYSLOG_FACILITY;
    description
      "The facility for log audit messages.";
    reference
      "IETF RFC 5424 - The Syslog Protocol";
  }

  identity CONSOLE {
    base SYSLOG_FACILITY;
    description
      "The facility for log alert messages.";
    reference
      "IETF RFC 5424 - The Syslog Protocol";
  }

  identity LOCAL0 {
    base SYSLOG_FACILITY;
    description
      "The facility for local use 0 messages.";
    reference
      "IETF RFC 5424 - The Syslog Protocol";
  }

  identity LOCAL1 {
    base SYSLOG_FACILITY;
    description
      "The facility for local use 1 messages.";
    reference
      "IETF RFC 5424 - The Syslog Protocol";
  }

  identity LOCAL2 {
    base SYSLOG_FACILITY;
    description
      "The facility for local use 2 messages.";
    reference
      "IETF RFC 5424 - The Syslog Protocol";
  }

  identity LOCAL3 {
    base SYSLOG_FACILITY;
    description
      "The facility for local use 3 messages.";
    reference
      "IETF RFC 5424 - The Syslog Protocol";
  }

  identity LOCAL4 {
    base SYSLOG_FACILITY;
    description
      "The facility for local use 4 messages.";
    reference
      "IETF RFC 5424 - The Syslog Protocol";
  }

  identity LOCAL5 {
    base SYSLOG_FACILITY;
    description
      "The facility for local use 5 messages.";
    reference
      "IETF RFC 5424 - The Syslog Protocol";
  }

  identity LOCAL6 {
    base SYSLOG_FACILITY;
    description
      "The facility for local use 6 messages.";
    reference
      "IETF RFC 5424 - The Syslog Protocol";
  }

  identity LOCAL7 {
    base SYSLOG_FACILITY;
    description
      "The facility for local use 7 messages.";
    reference
      "IETF RFC 5424 - The Syslog Protocol";
  }

  identity LOG_DESTINATION_TYPE {
    description
      "Base identity for destination for logging messages";
  }

  identity DEST_CONSOLE {
    base LOG_DESTINATION_TYPE;
    description
      "Directs log messages to the console";
  }

  identity DEST_BUFFER {
    base LOG_DESTINATION_TYPE;
    description
      "Directs log messages to and in-memory circular buffer";
  }

  identity DEST_FILE {
    base LOG_DESTINATION_TYPE;
    description
      "Directs log messages to a local file";
  }

  identity DEST_REMOTE {
    base LOG_DESTINATION_TYPE;
    description
      "Directs log messages to a remote syslog server";
  }

  // typedef statements

    typedef syslog-severity {
      type enumeration {
        enum EMERGENCY {
          description
            "Emergency: system is unusable (0)";
        }
        enum ALERT {
          description
          "Alert: action must be taken immediately (1)";
      }
      enum CRITICAL {
        description
          "Critical: critical conditions (2)";
      }
      enum ERROR {
        description
          "Error: error conditions (3)";
      }
      enum WARNING {
        description
          "Warning: warning conditions (4)";
      }
      enum NOTICE {
        description
          "Notice: normal but significant  condition(5)";
      }
      enum INFORMATIONAL {
        description
          "Informational: informational messages (6)";
      }
      enum DEBUG {
        description
          "Debug: debug-level messages (7)";
      }
    }
    description
      "Syslog message severities";
    reference
      "IETF RFC 5424 - The Syslog Protocol";
  }

  // grouping statements

  grouping logging-selectors-config {
    description
      "Configuration data for logging selectors";

    leaf facility {
      type identityref {
        base SYSLOG_FACILITY;
      }
      description
        "Specifies the facility, or class of messages to log";
    }

    leaf severity {
      type syslog-severity;
      description
        "Specifies that only messages of the given severity (or
        greater severity) for the corresonding facility are logged";
    }
  }

  grouping logging-selectors-state {
    description
      "Operational state data for logging selectors";
  }

  grouping logging-selectors-top {
    description
      "Top-level grouping for the logging selector list";

    container selectors {
      description
        "Enclosing container ";

      list selector {
        key "facility severity";
        description
          "List of selectors for log messages";

        leaf facility {
          type leafref {
            path "../config/facility";
          }
          description
            "Reference to facility list key";
        }

        leaf severity {
          type leafref {
            path "../config/severity";
          }
          description
            "Reference to severity list key";
        }

        container config {
          description
            "Configuration data ";

          uses logging-selectors-config;
        }

        container state {

          config false;

          description
            "Operational state data ";

          uses logging-selectors-config;
          uses logging-selectors-state;
        }
      }
    }
  }

  grouping logging-console-config {
    description
      "Configuration data for console logging";
  }

  grouping logging-console-state {
    description
      "Operational state data for console logging";
  }

  grouping logging-console-top {
    description
      "Top-level grouping for console logging data";

    container console {
      description
        "Top-level container for data related to console-based
        logging";

      container config {
        description
          "Configuration data for console logging";

        uses logging-console-config;
      }

      container state {

        config false;

        description
          "Operational state data for console logging";

        uses logging-console-config;
        uses logging-console-state;
      }

      uses logging-selectors-top;
    }
  }

  grouping logging-remote-config {
    description
      "Configuration data for remote log servers";

    leaf host {
      type inet:host;
      description
        "IP address or hostname of the remote log server";
    }

    leaf source-address {
      type inet:ip-address;
      description
        "Source IP address for packets to the log server";
    }

    leaf remote-port {
      type inet:port-number;
      default 514;
      description
        "Sets the destination port number for syslog UDP messages to
        the server.  The default for syslog is 514.";
    }
  }

  grouping logging-remote-state {
    description
      "Operational state data for remote log servers";
  }

  grouping logging-remote-top {
    description
      "Top-level grouping for remote log servers";

    container remote-servers {
      description
        "Enclosing container for the list of remote log servers";

      list remote-server {
        key "host";
        description
          "List of remote log servers";

        leaf host {
          type leafref {
            path "../config/host";
          }
          description
            "Reference to the host list key";
        }

        container config {
          description
            "Configuration data for remote log servers";

          uses logging-remote-config;
        }

        container state {

          config false;

          description
            "Operational state data for remote log servers";

          uses logging-remote-config;
          uses logging-remote-state;
        }
        uses logging-selectors-top;
      }
    }
  }

  grouping logging-top {
    description
      "Top-level grouping for logging data";

    container logging {
      description
        "Top-level container for data related to logging / syslog";

      uses logging-console-top;
      uses logging-remote-top;
    }
  }
  // data definition statements

  // augment statements


}