ietf-syslog

This module contains a collection of YANG definitions for syslog management. Copyright (c) 2025 IETF Trust and the persons iden...

  • Version: 2025-04-30

    ietf-syslog@2025-04-30


    
      module ietf-syslog {
    
        yang-version 1.1;
    
        namespace
          "urn:ietf:params:xml:ns:yang:ietf-syslog";
    
        prefix syslog;
    
        import ietf-inet-types {
          prefix inet;
          reference
            "RFC 6991: Common YANG Data Types";
    
    
        }
        import ietf-interfaces {
          prefix if;
          reference
            "RFC 8343: A YANG Data Model for Interface Management";
    
    
        }
        import ietf-tls-client {
          prefix tlsc;
          reference
            "RFC 9645: YANG Groupings for TLS Clients and TLS Servers";
    
    
        }
        import ietf-crypto-types {
          prefix ct;
          reference
            "RFC 9640: YANG Data Types and Groupings for Cryptography";
    
    
        }
    
        organization
          "IETF NETMOD (Network Modeling) Working Group";
    
        contact
          "WG Web:   <https://datatracker.ietf.org/wg/netmod/>
        WG List:  <mailto:netmod@ietf.org>
    
        Editor:   Mahesh Jethanandani
        <mailto:mjethanandani@gmail.com>
    
        Editor:   Joe Clarke
        <mailto:jclarke@cisco.com>
    
        Editor:   Kiran Agrahara Sreenivasa
        <mailto:kirankoushik.agraharasreenivasa@verizonwireless.com>
    
        Editor:   Clyde Wildes
        <mailto:clyde@clydewildes.com>";
    
        description
          "This module contains a collection of YANG definitions
        for syslog management.
    
        Copyright (c) 2025 IETF Trust and the persons identified as
        authors of the code.  All rights reserved.
    
        Redistribution and use in source and binary forms, with or
        without modification, is permitted pursuant to, and subject
        to the license terms contained in, the Revised BSD License
        set forth in Section 4.c of the IETF Trust's Legal
        Provisions Relating to IETF Documents
        (https://trustee.ietf.org/license-info).
    
        This version of this YANG module is part of RFC 9742
        (https://www.rfc-editor.org/info/rfc9742);
        see the RFC itself for full legal notices.
    
        The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL
        NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED',
        'NOT RECOMMENDED', 'MAY', and 'OPTIONAL' in this document
        are to be interpreted as described in BCP 14 (RFC 2119)
        (RFC 8174) when, and only when, they appear in all capitals,
        as shown here.";
    
        revision "2025-04-30" {
          description "Initial Revision";
          reference
            "RFC 9742: Syslog YANG Module";
    
        }
    
    
        feature console-action {
          description
            "This feature indicates that the local console action is
          supported.";
        }
    
        feature file-action {
          description
            "This feature indicates that the local file action is
          supported.";
        }
    
        feature file-limit-size {
          description
            "This feature indicates that file logging resources
          are managed using size and number limits.";
        }
    
        feature file-limit-duration {
          description
            "This feature indicates that file logging resources
          are managed using time based limits.";
        }
    
        feature remote-action {
          description
            "This feature indicates that the remote server action is
          supported.";
        }
    
        feature remote-source-interface {
          description
            "This feature indicates that source-interface is supported
          for the remote-action.";
        }
    
        feature select-adv-compare {
          description
            "This feature represents the ability to select messages
          using the additional comparison operators when comparing
          the syslog message severity.";
        }
    
        feature select-match {
          description
            "This feature represents the ability to select messages
          based on a Posix 1003.2 regular expression pattern
          match.";
        }
    
        feature structured-data {
          description
            "This feature represents the ability to log messages
          in structured-data format.";
          reference
            "RFC 5424: The Syslog Protocol";
    
        }
    
        feature signed-messages {
          description
            "This feature represents the ability to configure signed
          syslog messages.";
          reference
            "RFC 5848: Signed Syslog Messages";
    
        }
    
        typedef syslog-severity {
          type enumeration {
            enum "emergency" {
              value 0;
              description
                "The severity level 'Emergency' indicates that the
              system is unusable.";
            }
            enum "alert" {
              value 1;
              description
                "The severity level 'Alert' indicates that an
              action must be taken immediately.";
            }
            enum "critical" {
              value 2;
              description
                "The severity level 'Critical' indicates a
              critical condition.";
            }
            enum "error" {
              value 3;
              description
                "The severity level 'Error' indicates an error
              condition.";
            }
            enum "warning" {
              value 4;
              description
                "The severity level 'Warning' indicates a warning
              condition.";
            }
            enum "notice" {
              value 5;
              description
                "The severity level 'Notice' indicates a normal
              but significant condition.";
            }
            enum "info" {
              value 6;
              description
                "The severity level 'Info' indicates an
              informational message.";
            }
            enum "debug" {
              value 7;
              description
                "The severity level 'Debug' indicates a
              debug-level message.";
            }
          }
          description
            "The definitions for Syslog message severity.
          Note that a lower value is a higher severity. Comparisons
          of equal-or-higher severity mean equal-or-lower numeric
          value";
          reference
            "RFC 5424: The Syslog Protocol";
    
        }
    
        identity syslog-facility {
          description
            "This identity is used as a base for all syslog
          facilities.";
          reference
            "RFC 5424: The Syslog Protocol";
    
        }
    
        identity kern {
          base syslog-facility;
          description
            "The facility for kernel messages (numerical code 0).";
          reference
            "RFC 5424: The Syslog Protocol, Section 6.2.1.";
    
        }
    
        identity user {
          base syslog-facility;
          description
            "The facility for user-level messages (numerical code 1).";
          reference
            "RFC 5424: The Syslog Protocol, Section 6.2.1.";
    
        }
    
        identity mail {
          base syslog-facility;
          description
            "The facility for the mail system (numerical code 2).";
          reference
            "RFC 5424: The Syslog Protocol, Section 6.2.1.";
    
        }
    
        identity daemon {
          base syslog-facility;
          description
            "The facility for the system daemons (numerical code 3).";
          reference
            "RFC 5424: The Syslog Protocol, Section 6.2.1.";
    
        }
    
        identity auth {
          base syslog-facility;
          description
            "The facility for security/authorization messages (numerical
          code 4).";
          reference
            "RFC 5424: The Syslog Protocol, Section 6.2.1.";
    
        }
    
        identity syslog {
          base syslog-facility;
          description
            "The facility for messages generated internally by a syslog
          daemon facility (numerical code 5).";
          reference
            "RFC 5424: The Syslog Protocol, Section 6.2.1.";
    
        }
    
        identity lpr {
          base syslog-facility;
          description
            "The facility for the line printer subsystem (numerical code
          6).";
          reference
            "RFC 5424: The Syslog Protocol, Section 6.2.1.";
    
        }
    
        identity news {
          base syslog-facility;
          description
            "The facility for the network news subsystem (numerical code
          7).";
          reference
            "RFC 5424: The Syslog Protocol, Section 6.2.1.";
    
        }
    
        identity uucp {
          base syslog-facility;
          description
            "The facility for the Unix-to-Unix Copy (UUCP) subsystem
          (numerical code 8).";
          reference
            "RFC 5424: The Syslog Protocol, Section 6.2.1.";
    
        }
    
        identity cron {
          base syslog-facility;
          description
            "The facility for the clock daemon (numerical code 9).";
          reference
            "RFC 5424: The Syslog Protocol, Section 6.2.1.";
    
        }
    
        identity authpriv {
          base syslog-facility;
          description
            "The facility for privileged security/authorization messages
          (numerical code 10).";
          reference
            "RFC 5424: The Syslog Protocol, Section 6.2.1.";
    
        }
    
        identity ftp {
          base syslog-facility;
          description
            "The facility for the FTP daemon (numerical code 11).";
          reference
            "RFC 5424: The Syslog Protocol, Section 6.2.1.";
    
        }
    
        identity ntp {
          base syslog-facility;
          description
            "The facility for the NTP subsystem (numerical code 12).";
          reference
            "RFC 5424: The Syslog Protocol, Section 6.2.1.";
    
        }
    
        identity audit {
          base syslog-facility;
          description
            "The facility for log audit messages (numerical code 13).";
          reference
            "RFC 5424: The Syslog Protocol, Section 6.2.1.";
    
        }
    
        identity console {
          base syslog-facility;
          description
            "The facility for log alert messages (numerical code 14).";
          reference
            "RFC 5424: The Syslog Protocol, Section 6.2.1.";
    
        }
    
        identity cron2 {
          base syslog-facility;
          description
            "The facility for the second clock daemon (numerical code
          15).";
          reference
            "RFC 5424: The Syslog Protocol, Section 6.2.1.";
    
        }
    
        identity local0 {
          base syslog-facility;
          description
            "The facility for local use 0 messages (numerical code 16).";
          reference
            "RFC 5424: The Syslog Protocol, Section 6.2.1.";
    
        }
    
        identity local1 {
          base syslog-facility;
          description
            "The facility for local use 1 messages (numerical code 17).";
          reference
            "RFC 5424: The Syslog Protocol, Section 6.2.1.";
    
        }
    
        identity local2 {
          base syslog-facility;
          description
            "The facility for local use 2 messages (numerical code 18).";
          reference
            "RFC 5424: The Syslog Protocol, Section 6.2.1.";
    
        }
    
        identity local3 {
          base syslog-facility;
          description
            "The facility for local use 3 messages (numerical code 19).";
          reference
            "RFC 5424: The Syslog Protocol";
    
        }
    
        identity local4 {
          base syslog-facility;
          description
            "The facility for local use 4 messages (numerical code 20).";
          reference
            "RFC 5424: The Syslog Protocol, Section 6.2.1.";
    
        }
    
        identity local5 {
          base syslog-facility;
          description
            "The facility for local use 5 messages (numerical code 21).";
          reference
            "RFC 5424: The Syslog Protocol, Section 6.2.1.";
    
        }
    
        identity local6 {
          base syslog-facility;
          description
            "The facility for local use 6 messages (numerical code 22).";
          reference
            "RFC 5424: The Syslog Protocol, Section 6.2.1.";
    
        }
    
        identity local7 {
          base syslog-facility;
          description
            "The facility for local use 7 messages (numerical code 23).";
          reference
            "RFC 5424: The Syslog Protocol, Section 6.2.1.";
    
        }
    
        identity action {
          description
            "Base identity for action for how a message will be
          handled.";
        }
    
        identity log {
          base action;
          description
            "This identity specifies that if the compare operation is
          true, the message will be logged.";
        }
    
        identity block {
          base action;
          description
            "This identity specifies that if the compare operation is
          true, the message will not be logged.";
        }
    
        identity stop {
          base action;
          description
            "This identity specifies that if the compare operation is
          true, the message will not be logged and no further
          processing will occur for it.";
        }
    
        container syslog {
          presence "Enables logging.";
          description
            "This container describes the configuration parameters for
          syslog.";
          container actions {
            description
              "This container describes the log-action parameters
            for syslog.";
            container console {
              if-feature console-action;
              presence
                "Enables logging to the console";
              description
                "This container describes the configuration
              parameters for console logging.";
              container filter {
                description
                  "This container describes the syslog filter
    parameters.";
                list facility-list {
                  key "facility severity";
                  ordered-by user;
                  description
                    "This list describes a collection of syslog
    facilities and severities.";
                  leaf facility {
                    type union {
                      type identityref {
                        base syslog-facility;
                      }
                      type enumeration {
                        enum "all" {
                          value 0;
                          description
                            "This enum describes the case where
                      all facilities are requested.";
                        }
                      }
                    }
                    description
                      "The leaf uniquely identifies a syslog
    facility.";
                  }
    
                  leaf severity {
                    type union {
                      type syslog-severity;
                      type enumeration {
                        enum "none" {
                          value 2147483647;
                          description
                            "This enum describes the case where no
                  severities are selected.";
                        }
                        enum "all" {
                          value -2147483648;
                          description
                            "This enum describes the case where all
                  severities are selected.";
                        }
                      }
                    }
                    mandatory true;
                    description
                      "This leaf specifies the syslog message severity.";
                  }
    
                  container advanced-compare {
                    when
                      "../severity != "all" and
    ../severity != "none"" {
                      description
                        "The advanced compare container is not applicable
    for severity 'all' or severity 'none'";
                    }
                    if-feature select-adv-compare;
                    description
                      "This container describes additional severity compare
    operations that can be used in place of the default
    severity comparison.  The compare leaf specifies the
    type of compare operation that is done and the
    action leaf specifies the intended result.
    Example: compare->equals and action->block means
    messages that have a severity that are equal to the
    specified severity will not be logged.";
                    leaf compare {
                      type enumeration {
                        enum "equals" {
                          value 0;
                          description
                            "This enum specifies that the severity
                  comparison operation will be equals.";
                        }
                        enum "equals-or-higher" {
                          value 1;
                          description
                            "This enum specifies that the severity
                  comparison operation will be equals or
                  higher.";
                        }
                      }
                      default "equals-or-higher";
                      description
                        "The compare operation can be used to specify the comparison
    operator that should be used to compare the syslog
    message severity with the specified severity.";
                    }
    
                    leaf action {
                      type identityref {
                        base action;
                      }
                      default "log";
                      description
                        "The action can be used to specify how the message
    should be handled. This may include logging the
    message, not logging the message (i.e., blocking
    it), or stopping further processing.";
                    }
                  }  // container advanced-compare
                }  // list facility-list
              }  // container filter
    
              leaf pattern-match {
                if-feature select-match;
                type string;
                description
                  "This leaf describes a Posix 1003.2 regular expression
    string that can be used to select a syslog message for
    logging.  The match is performed on the SYSLOG-MSG
    field.";
                reference
                  "RFC 5424: The Syslog Protocol
                  Std-1003.1-2024 Regular Expressions";
    
              }
            }  // container console
    
            container file {
              if-feature file-action;
              description
                "This container describes the configuration
              parameters for file logging.  If file-archive
              limits are not supplied, it is assumed that
              the local implementation defined limits will
              be used.";
              list log-file {
                key "name";
                description
                  "This list describes a collection of local
                logging files.";
                leaf name {
                  type inet:uri {
                    pattern 'file:.*';
                  }
                  description
                    "This leaf specifies the name of the log
                  file, which MUST use the uri scheme
                  file:.";
                  reference
                    "RFC 8089: The file URI Scheme";
    
                }
    
                container filter {
                  description
                    "This container describes the syslog filter
    parameters.";
                  list facility-list {
                    key "facility severity";
                    ordered-by user;
                    description
                      "This list describes a collection of syslog
    facilities and severities.";
                    leaf facility {
                      type union {
                        type identityref {
                          base syslog-facility;
                        }
                        type enumeration {
                          enum "all" {
                            value 0;
                            description
                              "This enum describes the case where
                      all facilities are requested.";
                          }
                        }
                      }
                      description
                        "The leaf uniquely identifies a syslog
    facility.";
                    }
    
                    leaf severity {
                      type union {
                        type syslog-severity;
                        type enumeration {
                          enum "none" {
                            value 2147483647;
                            description
                              "This enum describes the case where no
                  severities are selected.";
                          }
                          enum "all" {
                            value -2147483648;
                            description
                              "This enum describes the case where all
                  severities are selected.";
                          }
                        }
                      }
                      mandatory true;
                      description
                        "This leaf specifies the syslog message severity.";
                    }
    
                    container advanced-compare {
                      when
                        "../severity != "all" and
    ../severity != "none"" {
                        description
                          "The advanced compare container is not applicable
    for severity 'all' or severity 'none'";
                      }
                      if-feature select-adv-compare;
                      description
                        "This container describes additional severity compare
    operations that can be used in place of the default
    severity comparison.  The compare leaf specifies the
    type of compare operation that is done and the
    action leaf specifies the intended result.
    Example: compare->equals and action->block means
    messages that have a severity that are equal to the
    specified severity will not be logged.";
                      leaf compare {
                        type enumeration {
                          enum "equals" {
                            value 0;
                            description
                              "This enum specifies that the severity
                  comparison operation will be equals.";
                          }
                          enum
                            "equals-or-higher" {
                            value 1;
                            description
                              "This enum specifies that the severity
                  comparison operation will be equals or
                  higher.";
                          }
                        }
                        default
                          "equals-or-higher";
                        description
                          "The compare operation can be used to specify the comparison
    operator that should be used to compare the syslog
    message severity with the specified severity.";
                      }
    
                      leaf action {
                        type identityref {
                          base action;
                        }
                        default "log";
                        description
                          "The action can be used to specify how the message
    should be handled. This may include logging the
    message, not logging the message (i.e., blocking
    it), or stopping further processing.";
                      }
                    }  // container advanced-compare
                  }  // list facility-list
                }  // container filter
    
                leaf pattern-match {
                  if-feature select-match;
                  type string;
                  description
                    "This leaf describes a Posix 1003.2 regular expression
    string that can be used to select a syslog message for
    logging.  The match is performed on the SYSLOG-MSG
    field.";
                  reference
                    "RFC 5424: The Syslog Protocol
                    Std-1003.1-2024 Regular Expressions";
    
                }
    
                leaf structured-data {
                  if-feature structured-data;
                  type boolean;
                  default "false";
                  description
                    "This leaf describes how log messages are written.
    If true, messages will be written with one or more
    STRUCTURED-DATA elements; if false, messages will be
    written with STRUCTURED-DATA = NILVALUE.";
                  reference
                    "RFC 5424: The Syslog Protocol";
    
                }
    
                container file-rotation {
                  description
                    "This container describes the configuration
                  parameters for log file rotation.";
                  leaf number-of-files {
                    if-feature file-limit-size;
                    type uint32;
                    default "1";
                    description
                      "This leaf specifies the maximum number
                    of log files retained.  Specify 1 for
                    implementations that only support one
                    log file.";
                  }
    
                  leaf max-file-size {
                    if-feature file-limit-size;
                    type uint32;
                    units "megabytes";
                    description
                      "This leaf specifies the maximum log
                    file size.";
                  }
    
                  leaf rollover {
                    if-feature file-limit-duration;
                    type uint32;
                    units "minutes";
                    description
                      "This leaf specifies the length of time
                    that log events should be written to a
                    specific log file.  Log events that
                    arrive after the rollover period cause
                    the current log file to be closed and
                    a new log file to be opened.";
                  }
    
                  leaf retention {
                    if-feature file-limit-duration;
                    type uint32;
                    units "minutes";
                    description
                      "This leaf specifies the length of time
                    that completed/closed log event files
                    should be stored in the file system
                    before they are removed.";
                  }
                }  // container file-rotation
              }  // list log-file
            }  // container file
    
            container remote {
              if-feature remote-action;
              description
                "This container describes the configuration
              parameters for forwarding syslog messages
              to remote relays or collectors.";
              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.";
                  container udp {
                    description
                      "This container describes the UDP transport
                      options.";
                    reference
                      "RFC 5426: Transmission of Syslog Messages over
                      	  UDP";
    
                    list udp {
                      key "address";
                      description
                        "List of all UDP sessions.";
                      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.";
                      }
                    }  // list udp
                  }  // container udp
                  container tls {
                    description
                      "This container describes the TLS transport
                      options.";
                    reference
                      "RFC 5425: Transport Layer Security (TLS) Transport
                      	  Mapping for Syslog ";
    
                    list tls {
                      key "address";
                      description
                        "List of all TLS-based sessions.";
                      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 "6514";
                        description
                          "TCP port 6514 has been allocated as the
                          default port for syslog over TLS.";
                      }
    
                      container client-identity {
                        nacm:default-deny-write;
                        presence
                          "Indicates that a TLS-level client identity has been
    configured.  This statement is present so the
    mandatory descendant nodes do not imply that this
    node must be configured.";
                        description
                          "Identity credentials the TLS client MAY present when
    establishing a connection to a TLS server.  If not
    configured, then client authentication is presumed to
    occur in a protocol layer above TLS.  When configured,
    and requested by the TLS server when establishing a
    TLS session, these credentials are passed in the
    Certificate message defined in Section 7.4.2 of
    RFC 5246 and Section 4.4.2 of RFC 8446.";
                        reference
                          "RFC 5246: The Transport Layer Security (TLS)
                          	  Protocol Version 1.2
                           RFC 8446: The Transport Layer Security (TLS)
                          	  Protocol Version 1.3
                           RFC 9642: A YANG Data Model for a Keystore";
    
                        choice auth-type {
                          mandatory true;
                          description
                            "A choice amongst authentication types, of which one must
    be enabled (via its associated 'feature') and selected.";
                          case certificate {
                            if-feature client-ident-x509-cert;
                            container certificate {
                              description
                                "Specifies the client identity using a certificate.";
                              choice inline-or-keystore {
                                nacm:default-deny-write;
                                mandatory true;
                                description
                                  "A choice between an inlined definition and a definition
    that exists in the keystore.";
                                case inline {
                                  if-feature inline-definitions-supported;
                                  container inline-definition {
                                    must
                                      "not(public-key-format) or derived-from-or-self(public-key-format, "ct:subject-public-key-info-format")";
                                    description
                                      "A container to hold the local key definition.";
                                    leaf public-key-format {
                                      nacm:default-deny-write;
                                      type identityref {
                                        base public-key-format;
                                      }
                                      mandatory
                                        true;
                                      description
                                        "Identifies the public key's format.  Implementations SHOULD
    ensure that the incoming public key value is encoded in the
    specified format.";
                                    }
    
                                    leaf public-key {
                                      nacm:default-deny-write;
                                      type binary;
                                      mandatory
                                        true;
                                      description
                                        "The binary value of the public key.  The interpretation
    of the value is defined by the 'public-key-format' field.";
                                    }
    
                                    leaf private-key-format {
                                      nacm:default-deny-write;
                                      type identityref {
                                        base private-key-format;
                                      }
                                      description
                                        "Identifies the private key's format.  Implementations SHOULD
    ensure that the incoming private key value is encoded in the
    specified format.
    
    For encrypted keys, the value is the decrypted key's
    format (i.e., the 'encrypted-value-format' conveys the
    encrypted key's format).";
                                    }
    
                                    choice private-key-type {
                                      nacm:default-deny-write;
                                      mandatory
                                        true;
                                      description
                                        "Choice between key types.";
                                      case cleartext-private-key {
                                        if-feature cleartext-private-keys;
                                        leaf cleartext-private-key {
                                          nacm:default-deny-all;
                                          type binary;
                                          must
                                            "../private-key-format";
                                          description
                                            "The value of the binary key.  The key's value is
    interpreted by the 'private-key-format' field.";
                                        }
                                      }  // case cleartext-private-key
    
                                      case hidden-private-key {
                                        if-feature hidden-private-keys;
                                        leaf hidden-private-key {
                                          type empty;
                                          must
                                            "not(../private-key-format)";
                                          description
                                            "A hidden key.  It is of type 'empty' as its value is
    inaccessible via management interfaces.  Though hidden
    to users, such keys are not hidden to the server and
    may be referenced by configuration to indicate which
    key a server should use for a cryptographic operation.
    How such keys are created is outside the scope of this
    module.";
                                        }
                                      }  // case hidden-private-key
    
                                      case encrypted-private-key {
                                        if-feature encrypted-private-keys;
                                        container encrypted-private-key {
                                          must
                                            "../private-key-format";
                                          description
                                            "A container for the encrypted asymmetric private key
    value.  The interpretation of the 'encrypted-value'
    node is via the 'private-key-format' node";
                                          container encrypted-by {
                                            nacm:default-deny-write;
                                            description
                                              "An empty container enabling a reference to the key that
    encrypted the value to be augmented in.  The referenced
    key MUST be a symmetric key or an asymmetric key.
    
    A symmetric key MUST be referenced via a leaf node called
    'symmetric-key-ref'.  An asymmetric key MUST be referenced
    via a leaf node called 'asymmetric-key-ref'.
    
    The leaf nodes MUST be direct descendants in the data tree
    and MAY be direct descendants in the schema tree (e.g.,
    'choice'/'case' statements are allowed but not a
    container).";
                                          }  // container encrypted-by
    
                                          leaf encrypted-value-format {
                                            type identityref {
                                              base encrypted-value-format;
                                            }
                                            mandatory
                                              true;
                                            description
                                              "Identifies the format of the 'encrypted-value' leaf.
    
    If 'encrypted-by' points to a symmetric key, then an
    identity based on 'symmetrically-encrypted-value-format'
    MUST be set (e.g., 'cms-encrypted-data-format').
    
    If 'encrypted-by' points to an asymmetric key, then an
    identity based on 'asymmetrically-encrypted-value-format'
    MUST be set (e.g., 'cms-enveloped-data-format').";
                                          }
    
                                          leaf encrypted-value {
                                            nacm:default-deny-write;
                                            type binary;
                                            must
                                              "../encrypted-by";
                                            mandatory
                                              true;
                                            description
                                              "The value, encrypted using the referenced symmetric
    or asymmetric key.  The value MUST be encoded using
    the format associated with the 'encrypted-value-format'
    leaf.";
                                          }
                                        }  // container encrypted-private-key
                                      }  // case encrypted-private-key
                                    }  // choice private-key-type
    
                                    leaf cert-data {
                                      nacm:default-deny-all;
                                      type end-entity-cert-cms;
                                      description
                                        "The binary certificate data for this certificate.";
                                    }
    
                                    notification certificate-expiration {
                                      if-feature certificate-expiration-notification;
                                      description
                                        "A notification indicating that the configured certificate
    is either about to expire or has already expired.  When to
    send notifications is an implementation-specific decision,
    but it is RECOMMENDED that a notification be sent once a
    month for 3 months, then once a week for four weeks, and
    then once a day thereafter until the issue is resolved.
    
    If the certificate's issuer maintains a Certificate
    Revocation List (CRL), the expiration notification MAY
    be sent if the CRL is about to expire.";
                                      leaf expiration-date {
                                        type yang:date-and-time;
                                        mandatory
                                          true;
                                        description
                                          "Identifies the expiration date on the certificate.";
                                      }
                                    }  // notification certificate-expiration
    
                                    action generate-csr {
                                      nacm:default-deny-all;
                                      if-feature csr-generation;
                                      description
                                        "Generates a certificate signing request structure for
    the associated asymmetric key using the passed subject
    and attribute values.
    
    This 'action' statement is only available when the
    associated 'public-key-format' node's value is
    'subject-public-key-info-format'.";
                                      input {
                                        leaf csr-format {
                                          type identityref {
                                            base csr-format;
                                          }
                                          mandatory
                                            true;
                                          description
                                            "Specifies the format for the returned certificate.";
                                        }
    
                                        leaf csr-info {
                                          type csr-info;
                                          mandatory
                                            true;
                                          description
                                            "A CertificationRequestInfo structure, as defined in
    RFC 2986.
    
    Enables the client to provide a fully populated
    CertificationRequestInfo structure that the server
    only needs to sign in order to generate the complete
    CertificationRequest structure to return in the
    'output'.
    
    The 'AlgorithmIdentifier' field contained inside
    the 'SubjectPublicKeyInfo' field MUST be one known
    to be supported by the device.";
                                          reference
                                            "RFC 2986:
                                              PKCS #10: Certification Request Syntax Specification
                                             RFC 9640:
                                              YANG Data Types and Groupings for Cryptography";
    
                                        }
                                      }
    
                                      output {
                                        choice csr-type {
                                          mandatory
                                            true;
                                          description
                                            "A choice amongst certificate signing request formats.
    Additional formats MAY be augmented into this 'choice'
    statement by future efforts.";
                                          case p10-csr {
                                            description
                                              "A CertificationRequest, as defined in RFC 2986.";
                                            reference
                                              "RFC 2986:
                                                PKCS #10: Certification Request Syntax Specification
                                               RFC 9640:
                                                YANG Data Types and Groupings for Cryptography";
    
                                            leaf p10-csr {
                                              type p10-csr;
                                              description
                                                "A CertificationRequest, as defined in RFC 2986.";
                                            }
                                          }  // case p10-csr
                                        }  // choice csr-type
                                      }
                                    }  // rpc generate-csr
                                  }  // container inline-definition
                                }  // case inline
    
                                case central-keystore {
                                  if-feature central-keystore-supported;
                                  if-feature asymmetric-keys;
                                  container central-keystore-reference {
                                    description
                                      "A reference to a specific certificate associated with
    an asymmetric key stored in the central keystore.";
                                    leaf asymmetric-key {
                                      nacm:default-deny-write;
                                      if-feature central-keystore-supported;
                                      if-feature asymmetric-keys;
                                      type ks:central-asymmetric-key-ref;
                                      must
                                        "../certificate";
                                      must
                                        "not(deref(.)/../ks:public-key-format) or derived-from-or-self(deref(.)/../ks:public-key-format, "ct:subject-public-key-info-format")";
                                      description
                                        "A reference to an asymmetric key in the keystore.";
                                    }
    
                                    leaf certificate {
                                      nacm:default-deny-write;
                                      type leafref {
                                        path "/ks:keystore/ks:asymmetric-keys/ks:asymmetric-key[ks:name = current()/../asymmetric-key]/ks:certificates/ks:certificate/ks:name";
                                      }
                                      must
                                        "../asymmetric-key";
                                      description
                                        "A reference to a specific certificate of the
    asymmetric key in the keystore.";
                                    }
                                  }  // container central-keystore-reference
                                }  // case central-keystore
                              }  // choice inline-or-keystore
                            }  // container certificate
                          }  // case certificate
    
                          case raw-public-key {
                            if-feature client-ident-raw-public-key;
                            container raw-private-key {
                              description
                                "Specifies the client identity using a raw
    private key.";
                              choice inline-or-keystore {
                                nacm:default-deny-write;
                                mandatory true;
                                description
                                  "A choice between an inlined definition and a definition
    that exists in the keystore.";
                                case inline {
                                  if-feature inline-definitions-supported;
                                  container inline-definition {
                                    must
                                      "not(public-key-format) or derived-from-or-self(public-key-format, "ct:subject-public-key-info-format")";
                                    description
                                      "A container to hold the local key definition.";
                                    leaf public-key-format {
                                      nacm:default-deny-write;
                                      type identityref {
                                        base public-key-format;
                                      }
                                      mandatory
                                        true;
                                      description
                                        "Identifies the public key's format.  Implementations SHOULD
    ensure that the incoming public key value is encoded in the
    specified format.";
                                    }
    
                                    leaf public-key {
                                      nacm:default-deny-write;
                                      type binary;
                                      mandatory
                                        true;
                                      description
                                        "The binary value of the public key.  The interpretation
    of the value is defined by the 'public-key-format' field.";
                                    }
    
                                    leaf private-key-format {
                                      nacm:default-deny-write;
                                      type identityref {
                                        base private-key-format;
                                      }
                                      description
                                        "Identifies the private key's format.  Implementations SHOULD
    ensure that the incoming private key value is encoded in the
    specified format.
    
    For encrypted keys, the value is the decrypted key's
    format (i.e., the 'encrypted-value-format' conveys the
    encrypted key's format).";
                                    }
    
                                    choice private-key-type {
                                      nacm:default-deny-write;
                                      mandatory
                                        true;
                                      description
                                        "Choice between key types.";
                                      case cleartext-private-key {
                                        if-feature cleartext-private-keys;
                                        leaf cleartext-private-key {
                                          nacm:default-deny-all;
                                          type binary;
                                          must
                                            "../private-key-format";
                                          description
                                            "The value of the binary key.  The key's value is
    interpreted by the 'private-key-format' field.";
                                        }
                                      }  // case cleartext-private-key
    
                                      case hidden-private-key {
                                        if-feature hidden-private-keys;
                                        leaf hidden-private-key {
                                          type empty;
                                          must
                                            "not(../private-key-format)";
                                          description
                                            "A hidden key.  It is of type 'empty' as its value is
    inaccessible via management interfaces.  Though hidden
    to users, such keys are not hidden to the server and
    may be referenced by configuration to indicate which
    key a server should use for a cryptographic operation.
    How such keys are created is outside the scope of this
    module.";
                                        }
                                      }  // case hidden-private-key
    
                                      case encrypted-private-key {
                                        if-feature encrypted-private-keys;
                                        container encrypted-private-key {
                                          must
                                            "../private-key-format";
                                          description
                                            "A container for the encrypted asymmetric private key
    value.  The interpretation of the 'encrypted-value'
    node is via the 'private-key-format' node";
                                          container encrypted-by {
                                            nacm:default-deny-write;
                                            description
                                              "An empty container enabling a reference to the key that
    encrypted the value to be augmented in.  The referenced
    key MUST be a symmetric key or an asymmetric key.
    
    A symmetric key MUST be referenced via a leaf node called
    'symmetric-key-ref'.  An asymmetric key MUST be referenced
    via a leaf node called 'asymmetric-key-ref'.
    
    The leaf nodes MUST be direct descendants in the data tree
    and MAY be direct descendants in the schema tree (e.g.,
    'choice'/'case' statements are allowed but not a
    container).";
                                          }  // container encrypted-by
    
                                          leaf encrypted-value-format {
                                            type identityref {
                                              base encrypted-value-format;
                                            }
                                            mandatory
                                              true;
                                            description
                                              "Identifies the format of the 'encrypted-value' leaf.
    
    If 'encrypted-by' points to a symmetric key, then an
    identity based on 'symmetrically-encrypted-value-format'
    MUST be set (e.g., 'cms-encrypted-data-format').
    
    If 'encrypted-by' points to an asymmetric key, then an
    identity based on 'asymmetrically-encrypted-value-format'
    MUST be set (e.g., 'cms-enveloped-data-format').";
                                          }
    
                                          leaf encrypted-value {
                                            nacm:default-deny-write;
                                            type binary;
                                            must
                                              "../encrypted-by";
                                            mandatory
                                              true;
                                            description
                                              "The value, encrypted using the referenced symmetric
    or asymmetric key.  The value MUST be encoded using
    the format associated with the 'encrypted-value-format'
    leaf.";
                                          }
                                        }  // container encrypted-private-key
                                      }  // case encrypted-private-key
                                    }  // choice private-key-type
                                  }  // container inline-definition
                                }  // case inline
    
                                case central-keystore {
                                  if-feature central-keystore-supported;
                                  if-feature asymmetric-keys;
                                  leaf central-keystore-reference {
                                    type ks:central-asymmetric-key-ref;
                                    must
                                      "not(deref(.)/../ks:public-key-format) or derived-from-or-self(deref(.)/../ks:public-key-format, "ct:subject-public-key-info-format")";
                                    description
                                      "A reference to an asymmetric key that exists in
    the central keystore.  The intent is to reference
    just the asymmetric key without any regard for
    any certificates that may be associated with it.";
                                  }
                                }  // case central-keystore
                              }  // choice inline-or-keystore
                            }  // container raw-private-key
                          }  // case raw-public-key
    
                          case tls12-psk {
                            if-feature client-ident-tls12-psk;
                            container tls12-psk {
                              description
                                "Specifies the client identity using a PSK (pre-shared
    or pairwise symmetric key).";
                              choice inline-or-keystore {
                                nacm:default-deny-write;
                                mandatory true;
                                description
                                  "A choice between an inlined definition and a definition
    that exists in the keystore.";
                                case inline {
                                  if-feature inline-definitions-supported;
                                  container inline-definition {
                                    description
                                      "A container to hold the local key definition.";
                                    leaf key-format {
                                      nacm:default-deny-write;
                                      type identityref {
                                        base symmetric-key-format;
                                      }
                                      description
                                        "Identifies the symmetric key's format.  Implementations
    SHOULD ensure that the incoming symmetric key value is
    encoded in the specified format.
    
    For encrypted keys, the value is the decrypted key's
    format (i.e., the 'encrypted-value-format' conveys the
    encrypted key's format).";
                                    }
    
                                    choice key-type {
                                      nacm:default-deny-write;
                                      mandatory
                                        true;
                                      description
                                        "Choice between key types.";
                                      leaf cleartext-symmetric-key {
                                        nacm:default-deny-all;
                                        if-feature cleartext-symmetric-keys;
                                        type binary;
                                        must
                                          "../key-format";
                                        description
                                          "The binary value of the key.  The interpretation of
    the value is defined by the 'key-format' field.";
                                      }
    
                                      case hidden-symmetric-key {
                                        if-feature hidden-symmetric-keys;
                                        leaf hidden-symmetric-key {
                                          type empty;
                                          must
                                            "not(../key-format)";
                                          description
                                            "A hidden key is not exportable and not extractable;
    therefore, it is of type 'empty' as its value is
    inaccessible via management interfaces.  Though hidden
    to users, such keys are not hidden to the server and
    may be referenced by configuration to indicate which
    key a server should use for a cryptographic operation.
    How such keys are created is outside the scope of this
    module.";
                                        }
                                      }  // case hidden-symmetric-key
    
                                      case encrypted-symmetric-key {
                                        if-feature encrypted-symmetric-keys;
                                        container encrypted-symmetric-key {
                                          must
                                            "../key-format";
                                          description
                                            "A container for the encrypted symmetric key value.
    The interpretation of the 'encrypted-value' node
    is via the 'key-format' node";
                                          container encrypted-by {
                                            nacm:default-deny-write;
                                            description
                                              "An empty container enabling a reference to the key that
    encrypted the value to be augmented in.  The referenced
    key MUST be a symmetric key or an asymmetric key.
    
    A symmetric key MUST be referenced via a leaf node called
    'symmetric-key-ref'.  An asymmetric key MUST be referenced
    via a leaf node called 'asymmetric-key-ref'.
    
    The leaf nodes MUST be direct descendants in the data tree
    and MAY be direct descendants in the schema tree (e.g.,
    'choice'/'case' statements are allowed but not a
    container).";
                                          }  // container encrypted-by
    
                                          leaf encrypted-value-format {
                                            type identityref {
                                              base encrypted-value-format;
                                            }
                                            mandatory
                                              true;
                                            description
                                              "Identifies the format of the 'encrypted-value' leaf.
    
    If 'encrypted-by' points to a symmetric key, then an
    identity based on 'symmetrically-encrypted-value-format'
    MUST be set (e.g., 'cms-encrypted-data-format').
    
    If 'encrypted-by' points to an asymmetric key, then an
    identity based on 'asymmetrically-encrypted-value-format'
    MUST be set (e.g., 'cms-enveloped-data-format').";
                                          }
    
                                          leaf encrypted-value {
                                            nacm:default-deny-write;
                                            type binary;
                                            must
                                              "../encrypted-by";
                                            mandatory
                                              true;
                                            description
                                              "The value, encrypted using the referenced symmetric
    or asymmetric key.  The value MUST be encoded using
    the format associated with the 'encrypted-value-format'
    leaf.";
                                          }
                                        }  // container encrypted-symmetric-key
                                      }  // case encrypted-symmetric-key
                                    }  // choice key-type
                                  }  // container inline-definition
                                }  // case inline
    
                                case central-keystore {
                                  if-feature central-keystore-supported;
                                  if-feature symmetric-keys;
                                  leaf central-keystore-reference {
                                    type ks:central-symmetric-key-ref;
                                    description
                                      "A reference to a symmetric key that exists in
    the central keystore.";
                                  }
                                }  // case central-keystore
                              }  // choice inline-or-keystore
    
                              leaf id {
                                type string;
                                description
                                  "The key 'psk_identity' value used in the TLS
    'ClientKeyExchange' message.";
                                reference
                                  "RFC 4279: Pre-Shared Key Ciphersuites for
                                  	  Transport Layer Security (TLS)";
    
                              }
                            }  // container tls12-psk
                          }  // case tls12-psk
    
                          case tls13-epsk {
                            if-feature client-ident-tls13-epsk;
                            container tls13-epsk {
                              description
                                "An External Pre-Shared Key (EPSK) is established
    or provisioned out of band, i.e., not from a TLS
    connection.  An EPSK is a tuple of (Base Key,
    External Identity, Hash).  EPSKs MUST NOT be
    imported for (D)TLS 1.2 or prior versions.  When
    PSKs are provisioned out of band, the PSK identity
    and the Key Derivation Function (KDF) hash algorithm
    to be used with the PSK MUST also be provisioned.
    
    The structure of this container is designed to satisfy
    the requirements in Section 4.2.11 of RFC 8446, the
    recommendations from Section 6 of RFC 9257, and the
    EPSK input fields detailed in Section 5.1 of RFC 9258.
    The base-key is based upon
    'ks:inline-or-keystore-symmetric-key-grouping' in
    order to provide users with flexible and secure
    storage options.";
                              reference
                                "RFC 8446: The Transport Layer Security (TLS)
                                	  Protocol Version 1.3
                                 RFC 9257: Guidance for External Pre-Shared Key
                                	  (PSK) Usage in TLS
                                 RFC 9258: Importing External Pre-Shared Keys
                                	  (PSKs) for TLS 1.3";
    
                              choice inline-or-keystore {
                                nacm:default-deny-write;
                                mandatory true;
                                description
                                  "A choice between an inlined definition and a definition
    that exists in the keystore.";
                                case inline {
                                  if-feature inline-definitions-supported;
                                  container inline-definition {
                                    description
                                      "A container to hold the local key definition.";
                                    leaf key-format {
                                      nacm:default-deny-write;
                                      type identityref {
                                        base symmetric-key-format;
                                      }
                                      description
                                        "Identifies the symmetric key's format.  Implementations
    SHOULD ensure that the incoming symmetric key value is
    encoded in the specified format.
    
    For encrypted keys, the value is the decrypted key's
    format (i.e., the 'encrypted-value-format' conveys the
    encrypted key's format).";
                                    }
    
                                    choice key-type {
                                      nacm:default-deny-write;
                                      mandatory
                                        true;
                                      description
                                        "Choice between key types.";
                                      leaf cleartext-symmetric-key {
                                        nacm:default-deny-all;
                                        if-feature cleartext-symmetric-keys;
                                        type binary;
                                        must
                                          "../key-format";
                                        description
                                          "The binary value of the key.  The interpretation of
    the value is defined by the 'key-format' field.";
                                      }
    
                                      case hidden-symmetric-key {
                                        if-feature hidden-symmetric-keys;
                                        leaf hidden-symmetric-key {
                                          type empty;
                                          must
                                            "not(../key-format)";
                                          description
                                            "A hidden key is not exportable and not extractable;
    therefore, it is of type 'empty' as its value is
    inaccessible via management interfaces.  Though hidden
    to users, such keys are not hidden to the server and
    may be referenced by configuration to indicate which
    key a server should use for a cryptographic operation.
    How such keys are created is outside the scope of this
    module.";
                                        }
                                      }  // case hidden-symmetric-key
    
                                      case encrypted-symmetric-key {
                                        if-feature encrypted-symmetric-keys;
                                        container encrypted-symmetric-key {
                                          must
                                            "../key-format";
                                          description
                                            "A container for the encrypted symmetric key value.
    The interpretation of the 'encrypted-value' node
    is via the 'key-format' node";
                                          container encrypted-by {
                                            nacm:default-deny-write;
                                            description
                                              "An empty container enabling a reference to the key that
    encrypted the value to be augmented in.  The referenced
    key MUST be a symmetric key or an asymmetric key.
    
    A symmetric key MUST be referenced via a leaf node called
    'symmetric-key-ref'.  An asymmetric key MUST be referenced
    via a leaf node called 'asymmetric-key-ref'.
    
    The leaf nodes MUST be direct descendants in the data tree
    and MAY be direct descendants in the schema tree (e.g.,
    'choice'/'case' statements are allowed but not a
    container).";
                                          }  // container encrypted-by
    
                                          leaf encrypted-value-format {
                                            type identityref {
                                              base encrypted-value-format;
                                            }
                                            mandatory
                                              true;
                                            description
                                              "Identifies the format of the 'encrypted-value' leaf.
    
    If 'encrypted-by' points to a symmetric key, then an
    identity based on 'symmetrically-encrypted-value-format'
    MUST be set (e.g., 'cms-encrypted-data-format').
    
    If 'encrypted-by' points to an asymmetric key, then an
    identity based on 'asymmetrically-encrypted-value-format'
    MUST be set (e.g., 'cms-enveloped-data-format').";
                                          }
    
                                          leaf encrypted-value {
                                            nacm:default-deny-write;
                                            type binary;
                                            must
                                              "../encrypted-by";
                                            mandatory
                                              true;
                                            description
                                              "The value, encrypted using the referenced symmetric
    or asymmetric key.  The value MUST be encoded using
    the format associated with the 'encrypted-value-format'
    leaf.";
                                          }
                                        }  // container encrypted-symmetric-key
                                      }  // case encrypted-symmetric-key
                                    }  // choice key-type
                                  }  // container inline-definition
                                }  // case inline
    
                                case central-keystore {
                                  if-feature central-keystore-supported;
                                  if-feature symmetric-keys;
                                  leaf central-keystore-reference {
                                    type ks:central-symmetric-key-ref;
                                    description
                                      "A reference to a symmetric key that exists in
    the central keystore.";
                                  }
                                }  // case central-keystore
                              }  // choice inline-or-keystore
    
                              leaf external-identity {
                                type string;
                                mandatory true;
                                description
                                  "As per Section 4.2.11 of RFC 8446 and Section 4.1
    of RFC 9257, a sequence of bytes used to identify
    an EPSK.  A label for a pre-shared key established
    externally.";
                                reference
                                  "RFC 8446: The Transport Layer Security (TLS)
                                  	  Protocol Version 1.3
                                   RFC 9257: Guidance for External Pre-Shared Key
                                  	  (PSK) Usage in TLS";
    
                              }
    
                              leaf hash {
                                type tlscmn:epsk-supported-hash;
                                default
                                  "sha-256";
                                description
                                  "As per Section 4.2.11 of RFC 8446, for EPSKs,
    the hash algorithm MUST be set when the PSK is
    established; otherwise, default to SHA-256 if
    no such algorithm is defined.  The server MUST
    ensure that it selects a compatible PSK (if any)
    and cipher suite.  Each PSK MUST only be used
    with a single hash function.";
                                reference
                                  "RFC 8446: The Transport Layer Security (TLS)
                                  	  Protocol Version 1.3";
    
                              }
    
                              leaf context {
                                type string;
                                description
                                  "As per Section 5.1 of RFC 9258, context MUST
    include the context used to determine the EPSK,
    if any exists.  For example, context may include
    information about peer roles or identities
    to mitigate Selfie-style reflection attacks.
    Since the EPSK is a key derived from an external
    protocol or a sequence of protocols, context MUST
    include a channel binding for the deriving
    protocols (see RFC 5056).  The details of this
    binding are protocol specific and out of scope
    for this document.";
                                reference
                                  "RFC 9258: Importing External Pre-Shared Keys
                                  	  (PSKs) for TLS 1.3";
    
                              }
    
                              leaf target-protocol {
                                type uint16;
                                description
                                  "As per Section 3 of RFC 9258, the protocol
    for which a PSK is imported for use.";
                                reference
                                  "RFC 9258: Importing External Pre-Shared Keys
                                  	  (PSKs) for TLS 1.3";
    
                              }
    
                              leaf target-kdf {
                                type uint16;
                                description
                                  "As per Section 3 of RFC 9258, the Key Derivation
    Function (KDF) for which a PSK is imported for
    use.";
                                reference
                                  "RFC 9258: Importing External Pre-Shared Keys
                                  	  (PSKs) for TLS 1.3";
    
                              }
                            }  // container tls13-epsk
                          }  // case tls13-epsk
                        }  // choice auth-type
                      }  // container client-identity
    
                      container server-authentication {
                        nacm:default-deny-write;
                        must
                          "ca-certs or ee-certs or raw-public-keys or tls12-psks
    	or tls13-epsks";
                        description
                          "Specifies how the TLS client can authenticate TLS servers.
    Any combination of credentials is additive and unordered.
    
    Note that no configuration is required for authentication
    based on PSK (pre-shared or pairwise symmetric key) as
    the key is necessarily the same as configured in the
    '../client-identity' node.";
                        container ca-certs {
                          if-feature server-auth-x509-cert;
                          presence
                            "Indicates that Certification Authority (CA)
    certificates have been configured.  This
    statement is present so the mandatory
    descendant nodes do not imply that this
    node must be configured.";
                          description
                            "A set of CA certificates used by the TLS client to
    authenticate TLS server certificates.  A server
    certificate is authenticated if it has a valid chain of
    trust to a configured CA certificate.";
                          reference
                            "RFC 9641: A YANG Data Model for a Truststore";
    
                          choice inline-or-truststore {
                            nacm:default-deny-write;
                            mandatory true;
                            description
                              "A choice between an inlined definition and a definition
    that exists in the truststore.";
                            case inline {
                              if-feature inline-definitions-supported;
                              container inline-definition {
                                description
                                  "A container for locally configured trust anchor
    certificates.";
                                list certificate {
                                  key "name";
                                  min-elements
                                    1;
                                  description
                                    "A trust anchor certificate or chain of certificates.";
                                  leaf name {
                                    type string;
                                    description
                                      "An arbitrary name for this certificate.";
                                  }
    
                                  leaf cert-data {
                                    nacm:default-deny-all;
                                    type trust-anchor-cert-cms;
                                    mandatory
                                      true;
                                    description
                                      "The binary certificate data for this certificate.";
                                  }
    
                                  notification certificate-expiration {
                                    if-feature certificate-expiration-notification;
                                    description
                                      "A notification indicating that the configured certificate
    is either about to expire or has already expired.  When to
    send notifications is an implementation-specific decision,
    but it is RECOMMENDED that a notification be sent once a
    month for 3 months, then once a week for four weeks, and
    then once a day thereafter until the issue is resolved.
    
    If the certificate's issuer maintains a Certificate
    Revocation List (CRL), the expiration notification MAY
    be sent if the CRL is about to expire.";
                                    leaf expiration-date {
                                      type yang:date-and-time;
                                      mandatory
                                        true;
                                      description
                                        "Identifies the expiration date on the certificate.";
                                    }
                                  }  // notification certificate-expiration
                                }  // list certificate
                              }  // container inline-definition
                            }  // case inline
    
                            case central-truststore {
                              if-feature central-truststore-supported;
                              if-feature certificates;
                              leaf central-truststore-reference {
                                type ts:central-certificate-bag-ref;
                                description
                                  "A reference to a certificate bag that exists in the
    central truststore.";
                              }
                            }  // case central-truststore
                          }  // choice inline-or-truststore
                        }  // container ca-certs
    
                        container ee-certs {
                          if-feature server-auth-x509-cert;
                          presence
                            "Indicates that End-Entity (EE) certificates have
    been configured.  This statement is present so
    the mandatory descendant nodes do not imply
    that this node must be configured.";
                          description
                            "A set of server certificates (i.e., EE certificates) used
    by the TLS client to authenticate certificates presented
    by TLS servers.  A server certificate is authenticated if
    it is an exact match to a configured server certificate.";
                          reference
                            "RFC 9641: A YANG Data Model for a Truststore";
    
                          choice inline-or-truststore {
                            nacm:default-deny-write;
                            mandatory true;
                            description
                              "A choice between an inlined definition and a definition
    that exists in the truststore.";
                            case inline {
                              if-feature inline-definitions-supported;
                              container inline-definition {
                                description
                                  "A container for locally configured trust anchor
    certificates.";
                                list certificate {
                                  key "name";
                                  min-elements
                                    1;
                                  description
                                    "A trust anchor certificate or chain of certificates.";
                                  leaf name {
                                    type string;
                                    description
                                      "An arbitrary name for this certificate.";
                                  }
    
                                  leaf cert-data {
                                    nacm:default-deny-all;
                                    type trust-anchor-cert-cms;
                                    mandatory
                                      true;
                                    description
                                      "The binary certificate data for this certificate.";
                                  }
    
                                  notification certificate-expiration {
                                    if-feature certificate-expiration-notification;
                                    description
                                      "A notification indicating that the configured certificate
    is either about to expire or has already expired.  When to
    send notifications is an implementation-specific decision,
    but it is RECOMMENDED that a notification be sent once a
    month for 3 months, then once a week for four weeks, and
    then once a day thereafter until the issue is resolved.
    
    If the certificate's issuer maintains a Certificate
    Revocation List (CRL), the expiration notification MAY
    be sent if the CRL is about to expire.";
                                    leaf expiration-date {
                                      type yang:date-and-time;
                                      mandatory
                                        true;
                                      description
                                        "Identifies the expiration date on the certificate.";
                                    }
                                  }  // notification certificate-expiration
                                }  // list certificate
                              }  // container inline-definition
                            }  // case inline
    
                            case central-truststore {
                              if-feature central-truststore-supported;
                              if-feature certificates;
                              leaf central-truststore-reference {
                                type ts:central-certificate-bag-ref;
                                description
                                  "A reference to a certificate bag that exists in the
    central truststore.";
                              }
                            }  // case central-truststore
                          }  // choice inline-or-truststore
                        }  // container ee-certs
    
                        container raw-public-keys {
                          if-feature server-auth-raw-public-key;
                          presence
                            "Indicates that raw public keys have been
    configured.  This statement is present so
    the mandatory descendant nodes do not imply
    that this node must be configured.";
                          description
                            "A set of raw public keys used by the TLS client to
    authenticate raw public keys presented by the TLS
    server.  A raw public key is authenticated if it
    is an exact match to a configured raw public key.";
                          reference
                            "RFC 9641: A YANG Data Model for a Truststore";
    
                          choice inline-or-truststore {
                            nacm:default-deny-write;
                            mandatory true;
                            description
                              "A choice between an inlined definition and a definition
    that exists in the truststore.";
                            case inline {
                              if-feature inline-definitions-supported;
                              container inline-definition {
                                description
                                  "A container to hold local public key definitions.";
                                list public-key {
                                  must
                                    "derived-from-or-self(public-key-format, "ct:subject-public-key-info-format")";
                                  key "name";
                                  description
                                    "A public key definition.";
                                  leaf name {
                                    type string;
                                    description
                                      "An arbitrary name for this public key.";
                                  }
    
                                  leaf public-key-format {
                                    nacm:default-deny-write;
                                    type identityref {
                                      base public-key-format;
                                    }
                                    mandatory
                                      true;
                                    description
                                      "Identifies the public key's format.  Implementations SHOULD
    ensure that the incoming public key value is encoded in the
    specified format.";
                                  }
    
                                  leaf public-key {
                                    nacm:default-deny-write;
                                    type binary;
                                    mandatory
                                      true;
                                    description
                                      "The binary value of the public key.  The interpretation
    of the value is defined by the 'public-key-format' field.";
                                  }
                                }  // list public-key
                              }  // container inline-definition
                            }  // case inline
    
                            case central-truststore {
                              if-feature central-truststore-supported;
                              if-feature public-keys;
                              leaf central-truststore-reference {
                                type ts:central-public-key-bag-ref;
                                must
                                  "not(deref(.)/../ts:public-key/ts:public-key-format[not(derived-from-or-self(., "ct:subject-public-key-info-format"))])";
                                description
                                  "A reference to a bag of public keys that exists
    in the central truststore.";
                              }
                            }  // case central-truststore
                          }  // choice inline-or-truststore
                        }  // container raw-public-keys
    
                        leaf tls12-psks {
                          if-feature server-auth-tls12-psk;
                          type empty;
                          description
                            "Indicates that the TLS client can authenticate TLS servers
    using configured PSKs (pre-shared or pairwise symmetric
    keys).
    
    No configuration is required since the PSK value is the
    same as the PSK value configured in the 'client-identity'
    node.";
                        }
    
                        leaf tls13-epsks {
                          if-feature server-auth-tls13-epsk;
                          type empty;
                          description
                            "Indicates that the TLS client can authenticate TLS servers
    using configured External PSKs (pre-shared keys).
    
    No configuration is required since the PSK value is the
    same as the PSK value configured in the 'client-identity'
    node.";
                        }
                      }  // container server-authentication
    
                      container hello-params {
                        nacm:default-deny-write;
                        if-feature tlscmn:hello-params;
                        description
                          "Configurable parameters for the TLS hello message.";
                        container tls-versions {
                          description
                            "Parameters limiting which TLS versions, amongst
    those enabled by 'features', are presented during
    the TLS handshake.";
                          leaf min {
                            type identityref {
                              base tls-version-base;
                            }
                            description
                              "If not specified, then there is no configured
    minimum version.";
                          }
    
                          leaf max {
                            type identityref {
                              base tls-version-base;
                            }
                            description
                              "If not specified, then there is no configured
    maximum version.";
                          }
                        }  // container tls-versions
    
                        container cipher-suites {
                          description
                            "Parameters regarding cipher suites.";
                          leaf-list cipher-suite {
                            type tlscsa:tls-cipher-suite-algorithm;
                            ordered-by user;
                            description
                              "Acceptable cipher suites in order of descending
    preference.  The configured host key algorithms should
    be compatible with the algorithm used by the configured
    private key.  Please see Section 5 of RFC 9645 for
    valid combinations.
    
    If this leaf-list is not configured (has zero elements),
    the acceptable cipher suites are implementation-
    defined.";
                            reference
                              "RFC 9645: YANG Groupings for TLS Clients and TLS Servers";
    
                          }
                        }  // container cipher-suites
                      }  // container hello-params
    
                      container keepalives {
                        nacm:default-deny-write;
                        if-feature tls-client-keepalives;
                        description
                          "Configures the keepalive policy for the TLS client.";
                        leaf peer-allowed-to-send {
                          type empty;
                          description
                            "Indicates that the remote TLS server is allowed to send
    HeartbeatRequest messages, as defined by RFC 6520,
    to this TLS client.";
                          reference
                            "RFC 6520: Transport Layer Security (TLS) and Datagram
                            Transport Layer Security (DTLS) Heartbeat Extension";
    
                        }
    
                        container test-peer-aliveness {
                          presence
                            "Indicates that the TLS client proactively tests the
    aliveness of the remote TLS server.";
                          description
                            "Configures the keepalive policy to proactively test
    the aliveness of the TLS server.  An unresponsive
    TLS server is dropped after approximately max-wait
    * max-attempts seconds.  The TLS client MUST send
    HeartbeatRequest messages, as defined in RFC 6520.";
                          reference
                            "RFC 6520: Transport Layer Security (TLS) and Datagram
                            Transport Layer Security (DTLS) Heartbeat Extension";
    
                          leaf max-wait {
                            type uint16 {
                              range "1..max";
                            }
                            units "seconds";
                            default "30";
                            description
                              "Sets the amount of time in seconds, after which a
    TLS-level message will be sent to test the
    aliveness of the TLS server if no data has been
    received from the TLS server.";
                          }
    
                          leaf max-attempts {
                            type uint8;
                            default "3";
                            description
                              "Sets the maximum number of sequential keepalive
    messages that can fail to obtain a response from
    the TLS server before assuming the TLS server is
    no longer alive.";
                          }
                        }  // container test-peer-aliveness
                      }  // container keepalives
                    }  // list tls
                  }  // container tls
                }  // choice transport
    
                container filter {
                  description
                    "This container describes the syslog filter
    parameters.";
                  list facility-list {
                    key "facility severity";
                    ordered-by user;
                    description
                      "This list describes a collection of syslog
    facilities and severities.";
                    leaf facility {
                      type union {
                        type identityref {
                          base syslog-facility;
                        }
                        type enumeration {
                          enum "all" {
                            value 0;
                            description
                              "This enum describes the case where
                      all facilities are requested.";
                          }
                        }
                      }
                      description
                        "The leaf uniquely identifies a syslog
    facility.";
                    }
    
                    leaf severity {
                      type union {
                        type syslog-severity;
                        type enumeration {
                          enum "none" {
                            value 2147483647;
                            description
                              "This enum describes the case where no
                  severities are selected.";
                          }
                          enum "all" {
                            value -2147483648;
                            description
                              "This enum describes the case where all
                  severities are selected.";
                          }
                        }
                      }
                      mandatory true;
                      description
                        "This leaf specifies the syslog message severity.";
                    }
    
                    container advanced-compare {
                      when
                        "../severity != "all" and
    ../severity != "none"" {
                        description
                          "The advanced compare container is not applicable
    for severity 'all' or severity 'none'";
                      }
                      if-feature select-adv-compare;
                      description
                        "This container describes additional severity compare
    operations that can be used in place of the default
    severity comparison.  The compare leaf specifies the
    type of compare operation that is done and the
    action leaf specifies the intended result.
    Example: compare->equals and action->block means
    messages that have a severity that are equal to the
    specified severity will not be logged.";
                      leaf compare {
                        type enumeration {
                          enum "equals" {
                            value 0;
                            description
                              "This enum specifies that the severity
                  comparison operation will be equals.";
                          }
                          enum
                            "equals-or-higher" {
                            value 1;
                            description
                              "This enum specifies that the severity
                  comparison operation will be equals or
                  higher.";
                          }
                        }
                        default
                          "equals-or-higher";
                        description
                          "The compare operation can be used to specify the comparison
    operator that should be used to compare the syslog
    message severity with the specified severity.";
                      }
    
                      leaf action {
                        type identityref {
                          base action;
                        }
                        default "log";
                        description
                          "The action can be used to specify how the message
    should be handled. This may include logging the
    message, not logging the message (i.e., blocking
    it), or stopping further processing.";
                      }
                    }  // container advanced-compare
                  }  // list facility-list
                }  // container filter
    
                leaf pattern-match {
                  if-feature select-match;
                  type string;
                  description
                    "This leaf describes a Posix 1003.2 regular expression
    string that can be used to select a syslog message for
    logging.  The match is performed on the SYSLOG-MSG
    field.";
                  reference
                    "RFC 5424: The Syslog Protocol
                    Std-1003.1-2024 Regular Expressions";
    
                }
    
                leaf structured-data {
                  if-feature structured-data;
                  type boolean;
                  default "false";
                  description
                    "This leaf describes how log messages are written.
    If true, messages will be written with one or more
    STRUCTURED-DATA elements; if false, messages will be
    written with STRUCTURED-DATA = NILVALUE.";
                  reference
                    "RFC 5424: The Syslog Protocol";
    
                }
    
                leaf facility-override {
                  type identityref {
                    base syslog-facility;
                  }
                  description
                    "If specified, this leaf specifies the facility used
                  to override the facility in messages delivered to the
                  remote server.";
                }
    
                leaf source-interface {
                  if-feature remote-source-interface;
                  type if:interface-ref;
                  description
                    "This leaf sets the source interface to be used to
                  send messages to the remote syslog server. If not set,
                  messages can be sent on any interface.";
                }
    
                container signing {
                  if-feature signed-messages;
                  presence
                    "If present, syslog-signing options is
                         activated.";
                  description
                    "This container describes the configuration
                  parameters for signed syslog messages.";
                  reference
                    "RFC 5848: Signed Syslog Messages";
    
                  container cert-signers {
                    description
                      "This container describes the signing certificate
                    configuration for Signature Group 0, which covers
                    the case for administrators who want all Signature
                    Blocks to be sent to a single destination.";
                    list cert-signer {
                      key "name";
                      description
                        "This list describes a collection of syslog message
                      signers.";
                      leaf name {
                        type string;
                        description
                          "This leaf specifies the name of the syslog
                        message signer.";
                      }
    
                      container cert {
                        description
                          "This is the certificate that is periodically
                        sent to the remote receiver.  The certificate is
                        inherently associated with its private
                        and public keys.";
                        leaf public-key-format {
                          nacm:default-deny-write;
                          type identityref {
                            base public-key-format;
                          }
                          mandatory true;
                          description
                            "Identifies the public key's format.  Implementations SHOULD
    ensure that the incoming public key value is encoded in the
    specified format.";
                        }
    
                        leaf public-key {
                          nacm:default-deny-write;
                          type binary;
                          mandatory true;
                          description
                            "The binary value of the public key.  The interpretation
    of the value is defined by the 'public-key-format' field.";
                        }
    
                        leaf private-key-format {
                          nacm:default-deny-write;
                          type identityref {
                            base private-key-format;
                          }
                          description
                            "Identifies the private key's format.  Implementations SHOULD
    ensure that the incoming private key value is encoded in the
    specified format.
    
    For encrypted keys, the value is the decrypted key's
    format (i.e., the 'encrypted-value-format' conveys the
    encrypted key's format).";
                        }
    
                        choice private-key-type {
                          nacm:default-deny-write;
                          mandatory true;
                          description
                            "Choice between key types.";
                          case cleartext-private-key {
                            if-feature cleartext-private-keys;
                            leaf cleartext-private-key {
                              nacm:default-deny-all;
                              type binary;
                              must
                                "../private-key-format";
                              description
                                "The value of the binary key.  The key's value is
    interpreted by the 'private-key-format' field.";
                            }
                          }  // case cleartext-private-key
    
                          case hidden-private-key {
                            if-feature hidden-private-keys;
                            leaf hidden-private-key {
                              type empty;
                              must
                                "not(../private-key-format)";
                              description
                                "A hidden key.  It is of type 'empty' as its value is
    inaccessible via management interfaces.  Though hidden
    to users, such keys are not hidden to the server and
    may be referenced by configuration to indicate which
    key a server should use for a cryptographic operation.
    How such keys are created is outside the scope of this
    module.";
                            }
                          }  // case hidden-private-key
    
                          case encrypted-private-key {
                            if-feature encrypted-private-keys;
                            container encrypted-private-key {
                              must
                                "../private-key-format";
                              description
                                "A container for the encrypted asymmetric private key
    value.  The interpretation of the 'encrypted-value'
    node is via the 'private-key-format' node";
                              container encrypted-by {
                                nacm:default-deny-write;
                                description
                                  "An empty container enabling a reference to the key that
    encrypted the value to be augmented in.  The referenced
    key MUST be a symmetric key or an asymmetric key.
    
    A symmetric key MUST be referenced via a leaf node called
    'symmetric-key-ref'.  An asymmetric key MUST be referenced
    via a leaf node called 'asymmetric-key-ref'.
    
    The leaf nodes MUST be direct descendants in the data tree
    and MAY be direct descendants in the schema tree (e.g.,
    'choice'/'case' statements are allowed but not a
    container).";
                              }  // container encrypted-by
    
                              leaf encrypted-value-format {
                                type identityref {
                                  base encrypted-value-format;
                                }
                                mandatory true;
                                description
                                  "Identifies the format of the 'encrypted-value' leaf.
    
    If 'encrypted-by' points to a symmetric key, then an
    identity based on 'symmetrically-encrypted-value-format'
    MUST be set (e.g., 'cms-encrypted-data-format').
    
    If 'encrypted-by' points to an asymmetric key, then an
    identity based on 'asymmetrically-encrypted-value-format'
    MUST be set (e.g., 'cms-enveloped-data-format').";
                              }
    
                              leaf encrypted-value {
                                nacm:default-deny-write;
                                type binary;
                                must
                                  "../encrypted-by";
                                mandatory true;
                                description
                                  "The value, encrypted using the referenced symmetric
    or asymmetric key.  The value MUST be encoded using
    the format associated with the 'encrypted-value-format'
    leaf.";
                              }
                            }  // container encrypted-private-key
                          }  // case encrypted-private-key
                        }  // choice private-key-type
    
                        leaf cert-data {
                          nacm:default-deny-all;
                          type end-entity-cert-cms;
                          description
                            "The binary certificate data for this certificate.";
                        }
    
                        notification certificate-expiration {
                          if-feature certificate-expiration-notification;
                          description
                            "A notification indicating that the configured certificate
    is either about to expire or has already expired.  When to
    send notifications is an implementation-specific decision,
    but it is RECOMMENDED that a notification be sent once a
    month for 3 months, then once a week for four weeks, and
    then once a day thereafter until the issue is resolved.
    
    If the certificate's issuer maintains a Certificate
    Revocation List (CRL), the expiration notification MAY
    be sent if the CRL is about to expire.";
                          leaf expiration-date {
                            type yang:date-and-time;
                            mandatory true;
                            description
                              "Identifies the expiration date on the certificate.";
                          }
                        }  // notification certificate-expiration
    
                        action generate-csr {
                          nacm:default-deny-all;
                          if-feature csr-generation;
                          description
                            "Generates a certificate signing request structure for
    the associated asymmetric key using the passed subject
    and attribute values.
    
    This 'action' statement is only available when the
    associated 'public-key-format' node's value is
    'subject-public-key-info-format'.";
                          input {
                            leaf csr-format {
                              type identityref {
                                base csr-format;
                              }
                              mandatory true;
                              description
                                "Specifies the format for the returned certificate.";
                            }
    
                            leaf csr-info {
                              type csr-info;
                              mandatory true;
                              description
                                "A CertificationRequestInfo structure, as defined in
    RFC 2986.
    
    Enables the client to provide a fully populated
    CertificationRequestInfo structure that the server
    only needs to sign in order to generate the complete
    CertificationRequest structure to return in the
    'output'.
    
    The 'AlgorithmIdentifier' field contained inside
    the 'SubjectPublicKeyInfo' field MUST be one known
    to be supported by the device.";
                              reference
                                "RFC 2986:
                                  PKCS #10: Certification Request Syntax Specification
                                 RFC 9640:
                                  YANG Data Types and Groupings for Cryptography";
    
                            }
                          }
    
                          output {
                            choice csr-type {
                              mandatory true;
                              description
                                "A choice amongst certificate signing request formats.
    Additional formats MAY be augmented into this 'choice'
    statement by future efforts.";
                              case p10-csr {
                                description
                                  "A CertificationRequest, as defined in RFC 2986.";
                                reference
                                  "RFC 2986:
                                    PKCS #10: Certification Request Syntax Specification
                                   RFC 9640:
                                    YANG Data Types and Groupings for Cryptography";
    
                                leaf p10-csr {
                                  type p10-csr;
                                  description
                                    "A CertificationRequest, as defined in RFC 2986.";
                                }
                              }  // case p10-csr
                            }  // choice csr-type
                          }
                        }  // rpc generate-csr
                      }  // container cert
    
                      leaf hash-algorithm {
                        type enumeration {
                          enum "SHA1" {
                            value 1;
                            description
                              "This enum describes the SHA1 algorithm.";
                          }
                          enum "SHA256" {
                            value 2;
                            description
                              "This enum describes the SHA256 algorithm.";
                          }
                        }
                        description
                          "This leaf describes the syslog signer hash
                        algorithm used.";
                      }
                    }  // list cert-signer
    
                    leaf cert-initial-repeat {
                      type uint32;
                      default "3";
                      description
                        "This leaf specifies the number of times each
                      Certificate Block should be sent before the first
                      message is sent.";
                    }
    
                    leaf cert-resend-delay {
                      type uint32;
                      units "seconds";
                      default "3600";
                      description
                        "This leaf specifies the maximum time delay in
                      seconds until resending the Certificate Block.";
                    }
    
                    leaf cert-resend-count {
                      type uint32;
                      default "0";
                      description
                        "This leaf specifies the maximum number of other
                      syslog messages to send until resending the
                      Certificate Block.";
                    }
    
                    leaf sig-max-delay {
                      type uint32;
                      units "seconds";
                      default "60";
                      description
                        "This leaf specifies when to generate a new
                      Signature Block. If this many seconds have elapsed
                      since the message with the first message number
                      of the Signature Block was sent, a new Signature
                      Block should be generated.";
                    }
    
                    leaf sig-number-resends {
                      type uint32;
                      default "0";
                      description
                        "This leaf specifies the number of times a
                      Signature Block is resent.  (It is recommended to
                      select a value of greater than 0 in particular
                      when the UDP transport as in RFC 5426 is used.)";
                    }
    
                    leaf sig-resend-delay {
                      type uint32;
                      units "seconds";
                      default "5";
                      description
                        "This leaf specifies when to send the next
                      Signature Block transmission based on time.  If
                      this many seconds have elapsed since the previous
                      sending of this Signature Block, resend it.";
                    }
    
                    leaf sig-resend-count {
                      type uint32;
                      default "0";
                      description
                        "This leaf specifies when to send the next
                      Signature Block transmission based on a count.
                      If this many other syslog messages have been sent
                      since the previous sending of this Signature
                      Block, resend it. A value of 0 means that you
                      don't resend based on the number of messages.";
                    }
                  }  // container cert-signers
                }  // container signing
              }  // list destination
            }  // container remote
          }  // container actions
        }  // container syslog
      }  // module ietf-syslog
    

© 2024 YumaWorks, Inc. All rights reserved.