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

  import ietf-inet-types {
    prefix inet;
  }

  organization "Open ROADM MSA";
  contact
    "OpenROADM.org";
  description
    "This module contains a collection of YANG definitions 
     for Syslog configuration.
     
     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.
     
     Also contains code components extracted from IETF Interfaces.  These code components
     are copyrighted and licensed as follows:
     
     Copyright (c) 2016 IETF Trust and the persons identified as the document authors.
     All rights reserved.
     
     This document is subject to BCP 78 and the IETF Trust’s Legal Provisions Relating
     to IETF Documents (http://trustee.ietf.org/license-info) in effect on the date of
     publication of this document. Please review these documents carefully, as they
     describe your rights and restrictions with respect to this document. Code Components
     extracted from this document must include Simplified BSD License text as described in
     Section 4.e of the Trust Legal Provisions and are provided without warranty as
     described in the Simplified BSD License.";
  reference "RFC 5424: The Syslog Protocol";

  revision 2016-10-14 {
    description
      "Version 1.2";
  }

  feature selector-sevop-config {
    description
      "This feature represents the ability to select messages 
       using the additional operators equal to, or not equal to 
       when comparing the Syslog message severity.";
  }

  feature selector-match-config {
    description
      "This feature represents the ability to select messages based
       on a Posix 1003.2 regular expression pattern match.";
  }

  // copied from draft of ietf-ietf-syslog-types.yang
  identity syslog-facility {
    description
      "The base identity to represent syslog facilities";
  }

  // copied from draft of ietf-ietf-syslog-types.yang;
  // extended the enum set to include all and none
  typedef severity {
    type enumeration {
      enum "emergency" {
        value 0;
        description
          "Emergency Level Msg";
      }
      enum "alert" {
        value 1;
        description
          "Alert Level Msg";
      }
      enum "critical" {
        value 2;
        description
          "Critical Level Msg";
      }
      enum "error" {
        value 3;
        description
          "Error Level Msg";
      }
      enum "warning" {
        value 4;
        description
          "Warning Level Msg";
      }
      enum "notice" {
        value 5;
        description
          "Notification Level Msg";
      }
      enum "info" {
        value 6;
        description
          "Informational Level Msg";
      }
      enum "debug" {
        value 7;
        description
          "Debugging Level Msg";
      }
      enum "all" {
        value 8;
        description
          "This enum describes the case where all severities 
           are selected.";
      }
      enum "none" {
        value 9;
        description
          "This enum describes the case where no severities 
           are selected.";
      }
    }
    description
      "The definitions for Syslog message severity as per RFC 5424.
       Extended the RFC definition with enums for all and none";
  }

  grouping syslog-severity {
    description
      "This grouping defines the Syslog severity which is used to 
       select log messages.";
    leaf severity {
      type severity;
      mandatory true;
      description
        "This leaf specifies the Syslog message severity. When 
         severity is specified, the default severity comparison 
         is all messages of the specified severity and greater are 
         selected. 'all' is a special case which means all severities
         are selected. 'none' is a special case which means that
         no selection should occur or disable this filter.";
    }
    leaf severity-operator {
      when
        "../severity != 'all' and
                    ../severity != 'none'" {
        description
          "The severity-operator is not applicable for severity 'all' or 
           severity 'none'";
      }
      if-feature selector-sevop-config;
      type enumeration {
        enum "equals-or-higher" {
          description
            "This enum specifies all messages of the specified 
             severity and higher are logged according to the 
             given log-action";
        }
        enum "equals" {
          description
            "This enum specifies all messages that are for 
             the specified severity are logged according to the 
             given log-action";
        }
        enum "not-equals" {
          description
            "This enum specifies all messages that are not for 
             the specified severity are logged according to the 
             given log-action";
        }
      }
      default "equals-or-higher";
      description
        "This leaf describes the option to specify how the 
         severity comparison is performed.";
    }
  }

  grouping syslog-selector {
    description
      "This grouping defines a Syslog selector which is used to 
       select log messages for the log-action (buffer, file, 
       etc). Choose one of the following:
         no-log-facility
         log-facility [<facility> <severity>...]";
    container log-selector {
      description
        "This container describes the log selector parameters 
         for Syslog.";
      choice selector-facility {
        mandatory true;
        description
          "This choice describes the option to specify no 
           facilities, or a specific facility which can be
           all for all facilities.";
        case no-log-facility {
          description
            "This case specifies no facilities will match when 
             comparing the Syslog message facility. This is a 
             method that can be used to effectively disable a 
             particular log-action (buffer, file, etc).";
          leaf no-facilities {
            type empty;
            description
              "This leaf specifies that no facilities are selected 
               for this log-action.";
          }
        }
        case log-facility {
          description
            "This case specifies one or more specified facilities 
             will match when comparing the Syslog message facility.";
          list log-facility {
            key "facility";
            description
              "This list describes a collection of Syslog 
               facilities and severities.";
            leaf facility {
              type union {
                type identityref {
                  base syslog-facility;
                }
                type enumeration {
                  enum "all" {
                    description
                      "This enum describes the case where all 
                       facilities are requested.";
                  }
                }
              }
              description
                "The leaf uniquely identifies a Syslog facility.";
            }
            uses syslog-severity;
          }
        }
      }
    }
  }

  container syslog {
    description
      "This container describes the configuration parameters for 
       Syslog.";
    container log-actions {
      description
        "This container describes the log-action parameters 
         for Syslog.";
      container remote {
        description
          "This container describes the configuration parameters for 
           remote logging.";
        list destination {
          key "name";
          description
            "This list describes a collection of remote logging 
             destinations.";
          leaf name {
            type string;
            description
              "An arbitrary name for the endpoint to connect to.";
          }
          choice transport {
            mandatory true;
            description
              "This choice describes the transport option.";
            case tcp {
              container tcp {
                description
                  "This container describes the TCP transport
                   options.";
                reference "RFC 6587: Transmission of Syslog Messages over TCP";
                leaf address {
                  type inet:host;
                  description
                    "The leaf uniquely specifies the address of 
                     the remote host. One of the following must 
                     be specified: an ipv4 address, an ipv6 
                     address, or a host name.";
                }
                leaf port {
                  type inet:port-number;
                  default "514";
                  description
                    "This leaf specifies the port number used to 
                     deliver messages to the remote server.";
                }
              }
            }
            case udp {
              container udp {
                description
                  "This container describes the UDP transport
                   options.";
                reference "RFC 5426: Transmission of Syslog Messages over UDP";
                leaf address {
                  type inet:host;
                  description
                    "The leaf uniquely specifies the address of 
                     the remote host. One of the following must be 
                     specified: an ipv4 address, an ipv6 address, 
                     or a host name.";
                }
                leaf port {
                  type inet:port-number;
                  default "514";
                  description
                    "This leaf specifies the port number used to 
                     deliver messages to the remote server.";
                }
              }
            }
          }
          uses syslog-selector;
        }
      }
    }
  }
}
