<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.29 (Ruby 3.3.6) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-opsawg-secure-tacacs-yang-10" category="std" consensus="true" submissionType="IETF" obsoletes="9105" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.28.1 -->
  <front>
    <title abbrev="YANG for TACACS+ over TLS">A YANG Data Model for Terminal Access Controller Access-Control System Plus (TACACS+)</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-opsawg-secure-tacacs-yang-10"/>
    <author fullname="Mohamed Boucadair" role="editor">
      <organization>Orange</organization>
      <address>
        <email>mohamed.boucadair@orange.com</email>
      </address>
    </author>
    <author fullname="Bo Wu">
      <organization>Huawei Technologies</organization>
      <address>
        <email>mlana.wubo@huawei.com</email>
      </address>
    </author>
    <date year="2025" month="April" day="30"/>
    <area>Operations and Management</area>
    <workgroup>Operations and Management Area Working Group</workgroup>
    <keyword>TLS</keyword>
    <keyword>device management</keyword>
    <keyword>network operator</keyword>
    <keyword>provider network</keyword>
    <keyword>AAA</keyword>
    <keyword>authentication</keyword>
    <keyword>authorization</keyword>
    <abstract>
      <?line 39?>

<t>This document defines a Terminal Access Controller Access-Control
   System Plus (TACACS+) client YANG module that augments the System
   Management data model, defined in RFC 7317, to allow devices to make
   use of TACACS+ servers for centralized Authentication, Authorization,
   and Accounting (AAA). Specifically, this document defines a YANG module for TACACS+ over TLS 1.3.</t>
      <t>This document obsoletes RFC 9105.</t>
    </abstract>
  </front>
  <middle>
    <?line 49?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>The System Management data model <xref target="RFC7317"/> defines separate functionality to support local and Remote Authentication Dial In User Service (RADIUS) authentication:</t>
      <dl>
        <dt>User Authentication Model:</dt>
        <dd>
          <t>Defines a list of user names with
associated passwords and a configuration leaf to decide the order
in which local or RADIUS authentication is used.</t>
        </dd>
        <dt>RADIUS Client Model:</dt>
        <dd>
          <t>Defines a list of RADIUS servers used by a
 device for centralized user authentication.</t>
        </dd>
      </dl>
      <t><xref target="RFC9105"/> defines a YANG module ("ietf-system-tacacs-plus") that augments the System Management data model <xref target="RFC7317"/> for the management of Terminal Access Controller Access-Control System Plus (TACACS+) clients as an alternative to RADIUS servers <xref target="RFC2865"/>. Typically, the "ietf-system-tacacs-plus" module is used to configure a TACACS+ client on a device to support deployment scenarios with centralized authentication, authorization, and accounting servers.</t>
      <t>This document defines a YANG module for managing TACACS+ clients (<xref target="sec-module"/>), including TACACS+ over TLS 1.3 clients <xref target="I-D.ietf-opsawg-tacacs-tls13"/>. This document obsoletes <xref target="RFC9105"/>.</t>
      <t>The YANG module in this document conforms to the Network Management
   Datastore Architecture (NMDA) defined in <xref target="RFC8342"/>.</t>
      <section anchor="changes-since-rfc-9105">
        <name>Changes Since RFC 9105</name>
        <t>The following changes have been made to <xref target="RFC9105"/>:</t>
        <ul spacing="normal">
          <li>
            <t>Add support for TLS <xref target="I-D.ietf-opsawg-tacacs-tls13"/></t>
          </li>
          <li>
            <t>Add a constraint to ensure that the list of servers is unique per address/port number</t>
          </li>
          <li>
            <t>Update the description of 'address' to be consistent with the type</t>
          </li>
          <li>
            <t>Fix a must statement under 'tacacs-plus'</t>
          </li>
          <li>
            <t>Fix errors in the example provided in Appendix A of <xref target="RFC9105"/></t>
          </li>
          <li>
            <t>Add an example to illustrate the use of VRF</t>
          </li>
          <li>
            <t>Add new examples to illustrate the use of TACACS+TLS data nodes</t>
          </li>
        </ul>
        <t>Detailed YANG changes are listed in <xref target="sec-module"/>.</t>
      </section>
      <section anchor="editorial-note-to-be-removed-by-rfc-editor">
        <name>Editorial Note (To be removed by RFC Editor)</name>
        <ul empty="true">
          <li>
            <t>Note to the RFC Editor: This section is to be removed prior to publication.</t>
          </li>
        </ul>
        <t>This document contains placeholder values that need to be replaced with finalized values at the time of publication. This note summarizes all of the substitutions that are needed.</t>
        <t>Please apply the following replacements:</t>
        <ul spacing="normal">
          <li>
            <t>XXXX --&gt; the assigned RFC number for this I-D</t>
          </li>
          <li>
            <t>SSSS --&gt; the assigned RFC number for <xref target="I-D.ietf-opsawg-tacacs-tls13"/></t>
          </li>
          <li>
            <t>TBD  --&gt; the assigned port number in <xref section="7" sectionFormat="of" target="I-D.ietf-opsawg-tacacs-tls13"/></t>
          </li>
          <li>
            <t>2024-12-11 --&gt; the actual date of the publication of this document</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <?line -18?>

<t>The terminology for describing YANG data models is defined in
   <xref target="RFC7950"/>.</t>
      <t>The document uses the terms defined in <xref section="2" sectionFormat="of" target="I-D.ietf-opsawg-tacacs-tls13"/> and <xref section="3" sectionFormat="of" target="RFC8907"/>.</t>
      <t>'client' refers to TACACS+ client, while 'server' refers to TACACS+ server.</t>
      <section anchor="tree-diagrams">
        <name>Tree Diagrams</name>
        <t>The tree diagram used in this document follows the notation defined
   in <xref target="RFC8340"/>.</t>
      </section>
    </section>
    <section anchor="design-of-the-tacacs-data-model">
      <name>Design of the TACACS+ Data Model</name>
      <t>This module is used to configure a TACACS+ client on a device to
   support deployment scenarios with centralized authentication,
   authorization, and accounting servers.  Authentication is used to
   validate a user's username and password, authorization allows the
   user to access and execute commands at various privilege levels
   assigned to the user, and accounting keeps track of the activity of a
   user who has accessed the device.</t>
      <t>The "ietf-system-tacacs-plus" module augments the '/sys:system' path
   defined in the "ietf-system" module with the contents of the 'tacacs-plus'
   grouping.  Therefore, a device can use local, RADIUS, or
   TACACS+ authentication to validate users who attempt to access the
   device by several mechanisms, e.g., a command line interface or a
   web-based user interface.</t>
      <t>The 'server' list, which is directly under the 'tacacs-plus'
   container, holds a list of TACACS+ servers and uses 'server-type' to
   distinguish between Authentication, Authorization, and Accounting
   (AAA) services. The list of servers is for redundancy.</t>
      <t>When there are multiple interfaces connected to a TACACS+ client or
   server, the source address of outgoing TACACS+ packets could be
   specified, or the source address could be specified through the
   interface IP address setting or derived from the outbound interface
   from the local Forwarding Information Base (FIB). For a TACACS+
   server located in a Virtual Private Network (VPN), a VPN Routing and
   Forwarding (VRF) instance needs to be specified.</t>
      <t>The 'statistics' container under the 'server' list is a collection of
   read-only counters for sent and received messages from a configured
   server.</t>
      <t>The YANG module for TACACS+ client has the structure shown in <xref target="tree-overview"/>.</t>
      <figure anchor="tree-overview">
        <name>Tree Structure Overview</name>
        <artwork><![CDATA[
augment /sys:system:
  +--rw tacacs-plus
     +--rw client-credentials* [id] {credential-reference}?
     |  +--rw id                       string
     |  +--rw (auth-type)?
     |     +--:(certificate)
     |     |  ...
     |     +--:(raw-public-key) {tlsc:client-ident-raw-public-key}?
     |     |  ...
     |     +--:(tls13-epsk) {tlsc:client-ident-tls13-epsk}?
     |        ...
     +--rw server-credentials* [id] {credential-reference}?
     |  +--rw id                 string
     |  +--rw ca-certs!
     |  |  ...
     |  +--rw ee-certs!
     |  |  ...
     |  +--rw raw-public-keys! {tlsc:server-auth-raw-public-key}?
     |  |  ...
     |  +--rw tls13-epsks?       empty
     |          {tlsc:server-auth-tls13-epsk}?
     +--rw server* [name]
        +--rw name                           string
        +--rw server-type
        |       tacacs-plus-server-type
        +--rw domain-name?                   inet:domain-name
        +--rw sni-enabled?                   boolean
        +--rw address                        inet:host
        +--rw port?                          inet:port-number
        +--rw (security)
        |  +--:(tls)
        |  |  +--rw client-identity!
        |  |  |  +--rw (ref-or-explicit)?
        |  |  |     +--:(ref)
        |  |  |     |  +--rw credentials-reference?
        |  |  |     |          sys-tcs-plus:client-credentials-ref
        |  |  |     |          {credential-reference}?
        |  |  |     +--:(explicit)
        |  |  |        +--rw (auth-type)?
        |  |  |           +--:(certificate)
        |  |  |           |  ...
        |  |  |           +--:(raw-public-key)
        |  |  |           |     {tlsc:client-ident-raw-public-key}?
        |  |  |           |  ...
        |  |  |           +--:(tls13-epsk)
        |  |  |                 {tlsc:client-ident-tls13-epsk}?
        |  |  |              ...
        |  |  +--rw server-authentication
        |  |  |  +--rw (ref-or-explicit)?
        |  |  |     +--:(ref)
        |  |  |     |  +--rw credentials-reference?
        |  |  |     |          sys-tcs-plus:server-credentials-ref
        |  |  |     |          {credential-reference}?
        |  |  |     +--:(explicit)
        |  |  |        +--rw ca-certs!
        |  |  |        |  ...
        |  |  |        +--rw ee-certs!
        |  |  |        |  ...
        |  |  |        +--rw raw-public-keys!
        |  |  |        |       {tlsc:server-auth-raw-public-key}?
        |  |  |        |  ...
        |  |  |        +--rw tls13-epsks?             empty
        |  |  |                {tlsc:server-auth-tls13-epsk}
        |  |  +--rw hello-params {tlscmn:hello-params}?
        |  |     +--rw tls-versions
        |  |     |  +--rw min?   identityref
        |  |     |  +--rw max?   identityref
        |  |     +--rw cipher-suites
        |  |        +--rw cipher-suite*
        |  |                tlscsa:tls-cipher-suite-algorithm
        |  +--:(obfuscation)
        |     +--rw shared-secret?           string
        +--rw (source-type)?
        |  +--:(source-ip)
        |  |  +--rw source-ip?               inet:ip-address
        |  +--:(source-interface)
        |     +--rw source-interface?        if:interface-ref
        +--rw vrf-instance?
        |       -> /ni:network-instances/network-instance/name
        +--rw single-connection?             boolean
        +--rw timeout?                       uint16
        +--ro statistics
           +--ro discontinuity-time?    yang:date-and-time
           +--ro connection-opens?      yang:counter64
           +--ro connection-closes?     yang:counter64
           +--ro connection-aborts?     yang:counter64
           +--ro connection-failures?   yang:counter64
           +--ro connection-timeouts?   yang:counter64
           +--ro messages-sent?         yang:counter64
           +--ro messages-received?     yang:counter64
           +--ro errors-received?       yang:counter64
           +--ro sessions?              yang:counter64
           +--ro cert-errors?           yang:counter64
           +--ro rpk-errors?            yang:counter64
                   {tlsc:server-auth-raw-public-key}?
]]></artwork>
      </figure>
      <t>Specifically, the module is designed to cover the following key requirements specified in <xref target="I-D.ietf-opsawg-tacacs-tls13"/>:</t>
      <ul spacing="normal">
        <li>
          <t>TLS 1.3 <xref target="RFC8446"/> <bcp14>MUST</bcp14> be used for transport.</t>
        </li>
        <li>
          <t>Earlier TLS versions <bcp14>MUST NOT</bcp14> be used.</t>
        </li>
        <li>
          <t>The cipher suites offered or accepted <bcp14>SHOULD</bcp14> be configurable.</t>
        </li>
        <li>
          <t>Implementations <bcp14>MAY</bcp14> support Raw Public Keys (RPKs) and Pre-Shared Keys (PSKs).</t>
        </li>
        <li>
          <t>Implementations <bcp14>MUST</bcp14> support the ability to configure the server's domain name, so that it may be included in the TLS Server Name Indication (SNI) extension.</t>
        </li>
      </ul>
      <t>The following new data nodes are supported compared to <xref target="RFC9105"/>:</t>
      <dl>
        <dt>'client-credentials' and 'server-credentials':</dt>
        <dd>
          <t>Defines a set credentials that can be globally provisioned and then referenced under specific servers.</t>
        </dd>
        <dt>'domain-name':</dt>
        <dd>
          <t>Provides a domain name of the server per <xref section="3.3" sectionFormat="of" target="I-D.ietf-opsawg-tacacs-tls13"/>. This is the TLS TACACS+ server's domain name that is  included in the SNI extension. This domain name is distinct from the IP address/hostname used for the underlying transport connection.</t>
        </dd>
        <dt>'sni-enabled':</dt>
        <dd>
          <t>Controls activation of Server Name Indication (SNI) (<xref section="3" sectionFormat="of" target="RFC6066"/>). This parameter can be used only if a domain name is provided.</t>
        </dd>
        <dt>'client-identity':</dt>
        <dd>
          <t>Specifies the identity credentials that the client may present when
establishing a connection to a server. Client identities can be configured at the top level and then referenced for specific server instances. Alternatively, client identities can be configured explicitly under each server instance.</t>
        </dd>
        <dt>'server-authentication':</dt>
        <dd>
          <t>Specifies how a client authenticates servers. Server credentials can be configured at the top level and then referenced for specific server instances. Alternatively, client identities can be configured explicitly under each server instance.</t>
        </dd>
        <dt>'hello-params':</dt>
        <dd>
          <t>Controls TLS versions and cipher suites to be used when establishing TLS sessions.</t>
        </dd>
        <dt>'discontinuity-time':</dt>
        <dd>
          <t>The time on the most recent occasion at which the client suffered a discontinuity
(a configuration action to reset all counters, re-initialization, etc.).</t>
        </dd>
        <dt>'cert-errors':</dt>
        <dd>
          <t>Number of connection failures due to certificate issues.</t>
        </dd>
        <dt>'rpk-errors':</dt>
        <dd>
          <t>Number of raw public key related connection failures.</t>
        </dd>
      </dl>
    </section>
    <section anchor="sec-module">
      <name>TACACS+ Client Module</name>
      <t>This YANG module uses types and groupings defined in <xref target="RFC6991"/>, <xref target="RFC8341"/>, <xref target="RFC8343"/>, <xref target="RFC8529"/>, <xref target="RFC9640"/>, <xref target="RFC9641"/>,
<xref target="RFC9642"/>, and <xref target="RFC9645"/>.</t>
      <t>The module augments <xref target="RFC7317"/>.</t>
      <t>The module also cites <xref target="RFC6520"/>, <xref target="RFC9257"/>, and <xref target="RFC9258"/>.</t>
      <sourcecode type="yang"><![CDATA[
<CODE BEGINS> file "ietf-system-tacacs-plus@2025-01-23.yang"
module ietf-system-tacacs-plus {
  yang-version 1.1;
  namespace "urn:ietf:params:xml:ns:yang:ietf-system-tacacs-plus";
  prefix sys-tcs-plus;

  import ietf-inet-types {
    prefix inet;
    reference
      "RFC 6991: Common YANG Data Types";
  }
  import ietf-yang-types {
    prefix yang;
    reference
      "RFC 6991: Common YANG Data Types";
  }
  import ietf-system {
    prefix sys;
    reference
      "RFC 7317: A YANG Data Model for System Management";
  }
  import ietf-netconf-acm {
    prefix nacm;
    reference
      "RFC 8341: Network Configuration Access Control Model";
  }
  import ietf-interfaces {
    prefix if;
    reference
      "RFC 8343: A YANG Data Model for Interface Management";
  }
  import ietf-network-instance {
    prefix ni;
    reference
      "RFC 8529: YANG Data Model for Network Instances";
  }
  import ietf-crypto-types {
    prefix ct;
    reference
      "RFC 9640: YANG Data Types and Groupings for Cryptography";
  }
  import ietf-truststore {
    prefix ts;
    reference
      "RFC 9641: A YANG Data Model for a Truststore";
  }
  import ietf-keystore {
    prefix ks;
    reference
      "RFC 9642: A YANG Data Model for a Keystore";
  }
  import ietf-tls-common {
    prefix tlscmn;
    reference
      "RFC 9645: YANG Groupings for TLS Clients and TLS Servers";
  }
  import ietf-tls-client {
    prefix tlsc;
    reference
      "RFC 9645: YANG Groupings for TLS Clients and TLS Servers";
  }

  organization
    "IETF OPSAWG (Operations and Management Area Working Group)";
  contact
    "WG Web:   <https://datatracker.ietf.org/wg/opsawg/>
     WG List:  <mailto:opsawg@ietf.org>

     Editor:   Mohamed Boucadair
               <mailto:mohamed.boucadair@orange.com>
     Author:   Bo Wu
               <lana.wubo@huawei.com>
     Author:   Guangying Zheng
               <zhengguangying@huawei.com>";
  description
    "This module provides management of TACACS+ clients.

     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.

     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).

     All revisions of IETF and IANA published modules can be found
     at the YANG Parameters registry
     (https://www.iana.org/assignments/yang-parameters).

     This version of this YANG module is part of RFC XXXX; see the
     RFC itself for full legal notices.";

  revision 2025-01-23 {
    description
      "This revision adds TLS support. Specifically, this revision
       adds:
         - a new feature 'credential-reference'
         - a new container 'client-credentials'
         - a new container 'server-credentials'
         - a new leaf 'domain-name'
         - a new leaf 'sni-enabled'
         - TLS as a new security choice
         - a new leaf 'discontinuity-time' under 'statistics'
         - a new leaf 'cert-errors' under 'statistics'
         - a new leaf 'rpk-errors' under 'statistics'
       Also, this revision:
         - updates the reference of 'tacacs-plus' identity
           to also cite RFC SSSS
         - fixes a must statement under 'tacacs-plus' by adding
           a missing prefix
         - requires that the servers list must be unique per
           address/port number.
         - updates the description of the 'name' under 'server'
           list to better reflect the intended use and clarifies
           the difference with the new domain-name
         - updates the description of the 'address' to be
           consistent with the type
         - removes the default statement for the 'port' under
           'server' list because a distinct default port number
           is used for TACACS+TLS
         - updates the 'port' leaf under 'server' list to enumerate
           the various TACACS+ default port numbers
         - added a constraint on the VRF with 'source-interface'
           is also provided
         - updates the description of timeout to remove redundant
           text with the default statement";
    reference
      "RFC XXXX: A YANG Data Model for Terminal Access Controller
                 Access-Control System Plus (TACACS+)";
  }

  revision 2021-08-05 {
    description
      "Initial revision.";
    reference
      "RFC 9105: A YANG Data Model for Terminal Access Controller
                 Access-Control System Plus (TACACS+)";
  }

  feature credential-reference {
    description
      "Indicates whether service credentials references are
       supported.";
  }

  identity tacacs-plus {
    base sys:authentication-method;
    description
      "Indicates AAA operation using TACACS+.";
    reference
      "RFC SSSS: Terminal Access Controller Access-Control
                 System Plus (TACACS+) over TLS 1.3
       RFC 8907: The TACACS+ Protocol";
  }

  typedef tacacs-plus-server-type {
    type bits {
      bit authentication {
        description
          "Indicates that the TACACS+ server is providing
           authentication services.";
      }
      bit authorization {
        description
          "Indicates that the TACACS+ server is providing
           authorization services.";
      }
      bit accounting {
        description
          "Indicates that the TACACS+ server is providing accounting
           services.";
      }
    }
    description
      "The type can be set to authentication, authorization,
       accounting, or any combination of the three types.";
  }

  typedef client-credentials-ref {
    type leafref {
      path "/sys:system/sys-tcs-plus:tacacs-plus"
         + "/sys-tcs-plus:client-credentials/sys-tcs-plus:id";
    }
    description
      "Defines a type to reference client credentials.";
  }

  typedef server-credentials-ref {
    type leafref {
      path "/sys:system/sys-tcs-plus:tacacs-plus"
         + "/sys-tcs-plus:server-credentials/sys-tcs-plus:id";
    }
    description
      "Defines a type to reference server credentials.";
  }

  grouping statistics {
    description
      "Grouping for TACACS+ statistics attributes, including TLS
       specifics.";
    container statistics {
      config false;
      description
        "A collection of server-related statistics objects.";
      leaf discontinuity-time {
        type yang:date-and-time;
        description
          "The time on the most recent occasion at which the
           TACACS+ client suffered a discontinuity. Examples of 
           discontinuity can be a configuration action to reset
           all counters, re-initialization of the system, or any
           other events that prevent reliable contiguous tracking
           of counters.";
      }
      leaf connection-opens {
        type yang:counter64;
        description
          "Number of new connection requests sent to the server,
           e.g., socket open.";
      }
      leaf connection-closes {
        type yang:counter64;
        description
          "Number of connection close requests sent to the server,
           e.g., socket close.";
      }
      leaf connection-aborts {
        type yang:counter64;
        description
          "Number of aborted connections to the server. These do
           not include connections that are closed gracefully.";
      }
      leaf connection-failures {
        type yang:counter64;
        description
          "Number of connection failures to the server.";
      }
      leaf connection-timeouts {
        type yang:counter64;
        description
          "Number of connection timeouts to the server.";
      }
      leaf messages-sent {
        type yang:counter64;
        description
          "Number of messages sent to the server.";
      }
      leaf messages-received {
        type yang:counter64;
        description
          "Number of messages received from the server.";
      }
      leaf errors-received {
        type yang:counter64;
        description
          "Number of error messages received from the server.";
      }
      leaf sessions {
        type yang:counter64;
        description
          "Number of TACACS+ sessions completed with the server.
           If the Single Connection Mode was not enabled, the number
           of sessions is the same as the number of
           'connection-closes'. If the Single Connection Mode was
           enabled, a single TCP connection may contain multiple
           TACACS+ sessions.";
      }
      leaf cert-errors {
        type yang:counter64;
        description
          "Number of connection failures due to certificate
           issues.";
      }
      leaf rpk-errors {
        if-feature "tlsc:server-auth-raw-public-key";
        type yang:counter64;
        description
          "Number of RPK-related connection failures.";
      }
    }
  }

  grouping certificate {
    description
      "Specifies a certificate that can be used for client
       identity.";
    uses "ks:inline-or-keystore-end-entity-cert-with-key-"
       + "grouping" {
      refine "inline-or-keystore/inline/inline-definition" {
        must 'not(public-key-format) or derived-from-or-self'
           + '(public-key-format, "ct:subject-public-key-'
           + 'info-format")';
      }
      refine "inline-or-keystore/central-keystore/"
           + "central-keystore-reference/asymmetric-key" {
        must 'not(deref(.)/../ks:public-key-format) or '
           + 'derived-from-or-self(deref(.)/../ks:public-'
           + 'key-format, "ct:subject-public-key-info-'
           + 'format")';
      }
    }
  }

  grouping raw-private-key {
    description
      "Specifies raw private key (RPK) that can be used for
       client identity.";
    uses ks:inline-or-keystore-asymmetric-key-grouping {
      refine "inline-or-keystore/inline/inline-definition" {
        must 'not(public-key-format) or derived-from-or-self'
           + '(public-key-format, "ct:subject-public-key-'
           + 'info-format")';
      }
      refine "inline-or-keystore/central-keystore/"
           + "central-keystore-reference" {
        must 'not(deref(.)/../ks:public-key-format) or '
           + 'derived-from-or-self(deref(.)/../ks:public-'
           + 'key-format, "ct:subject-public-key-info-format")';
      }
    }
  }

  grouping 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).
       When Pre-Shared Keys (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.";
    reference
      "RFC 8446: The Transport Layer Security (TLS) Protocol
                 Version 1.3, Section 4.2.11
       RFC 9257: Guidance for External Pre-Shared Key (PSK) Usage
                 in TLS, Section 6
       RFC 9258: Importing External Pre-Shared Keys (PSKs) for
                 TLS 1.3, Section 5.1";
    uses ks:inline-or-keystore-symmetric-key-grouping;
    leaf external-identity {
      type string;
      mandatory true;
      description
        "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, Section 4.2.11
         RFC 9257: Guidance for External Pre-Shared Key (PSK)
                   Usage in TLS, Section 4.1";
    }
    leaf hash {
      type tlscmn:epsk-supported-hash;
      default "sha-256";
      description
        "For externally established PSKs, the Hash algorithm must be
         set when the PSK is established or default to SHA-256 if no
         such algorithm is defined.";
      reference
        "RFC 8446: The Transport Layer Security (TLS) Protocol
                   Version 1.3, Section 4.2.11";
    }
    leaf context {
      type string;
      description
        "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.";
      reference
        "RFC 9258: Importing External Pre-Shared Keys (PSKs) for
                   TLS 1.3, Section 5.1 ";
    }
    leaf target-protocol {
      type uint16;
      description
        "Specifies the protocol for which a PSK is imported for
         use.";
      reference
        "RFC 9258: Importing External Pre-Shared Keys (PSKs) for
                   TLS 1.3, Section 3 ";
    }
    leaf target-kdf {
      type uint16;
      description
        "The KDF for which a PSK is imported for use.";
      reference
        "RFC 9258: Importing External Pre-Shared Keys (PSKs) for
                   TLS 1.3, Section 3";
    }
  }

  grouping client-identity {
    description
      "Identity credentials that a TLS client may present when
       establishing a connection to a TLS server. When configured,
       and requested by the TLS server when establishing a TLS
       session, these credentials are passed in the Certificate
       message.";
    reference
      "RFC 8446: The Transport Layer Security (TLS) Protocol
                 Version 1.3, Section 4.4.2";
    choice auth-type {
      description
        "A choice amongst authentication types.";
      case certificate {
        container certificate {
          description
            "Specifies the client identity using a certificate.";
          uses certificate;
        }
      }
      case raw-public-key {
        if-feature "tlsc:client-ident-raw-public-key";
        container raw-private-key {
          description
            "Specifies the client identity using RPK.";
          uses raw-private-key;
        }
      }
      case tls13-epsk {
        if-feature "tlsc:client-ident-tls13-epsk";
        container tls13-epsk {
          description
            "An EPSK is established or provisioned out-of-band.";
          uses tls13-epsk;
        }
      }
    }
  }

  grouping client-identity-with-ref {
    description
      "Identity credentials that the TLS client may present when
       establishing a connection to a TLS server. When configured,
       and requested by the TLS server when establishing a TLS
       session, these credentials are passed in the Certificate
       message.";
    choice ref-or-explicit {
      description
        "A choice between a reference or explicit configuration.";
      case ref {
        description
          "Provides a reference to a client identity.";
        leaf credentials-reference {
          if-feature "credential-reference";
          type sys-tcs-plus:client-credentials-ref;
          description
            "Specifies the client credentials reference.";
        }
      }
      case explicit {
        description
          "Explicit configuration of the client identity.";
        uses client-identity;
      }
    }
  }

  grouping server-authentication {
    description
      "Specifies how a TLS client can authenticate TLS servers.
       Any combination of credentials is additive and unordered.";
    container ca-certs {
      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";
      uses ts:inline-or-truststore-certs-grouping;
    }
    container ee-certs {
      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., end entity certificates)
         used by a 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";
      uses ts:inline-or-truststore-certs-grouping;
    }
    container raw-public-keys {
      if-feature "tlsc: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 a 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";
      uses ts:inline-or-truststore-public-keys-grouping {
        refine "inline-or-truststore/inline/inline-definition/"
             + "public-key" {
          must 'derived-from-or-self(public-key-format,'
             + ' "ct:subject-public-key-info-format")';
        }
        refine "inline-or-truststore/central-truststore/"
             + "central-truststore-reference" {
          must 'not(deref(.)/../ts:public-key/ts:public-key-'
             + 'format[not(derived-from-or-self(., "ct:subject-'
             + 'public-key-info-format"))])';
        }
      }
    }
    leaf tls13-epsks {
      if-feature "tlsc:server-auth-tls13-epsk";
      type empty;
      description
        "Indicates that a TLS client can authenticate TLS servers
         using configured EPSKs.";
    }
  }

  grouping server-authentication-with-ref {
    description
      "Specifies how a TLS client can authenticate TLS servers.";
    choice ref-or-explicit {
      description
        "A choice between a reference of explicit configuration.";
      case ref {
        description
          "Provides a reference to server credentials.";
        leaf credentials-reference {
          if-feature "credential-reference";
          type sys-tcs-plus:server-credentials-ref;
          description
            "Specifies the server credentials reference.";
        }
      }
      case explicit {
        description
          "Explicit configuration of credentials of a server.";
        uses server-authentication;
      }
    }
  }

  grouping hello-params {
    description
      "Configurable parameters for the TLS Hello message.";
    reference
      "RFC SSSS: Terminal Access Controller Access-Control
                 System Plus (TACACS+) over TLS 1.3,
                 Section 5.1";
    uses tlscmn:hello-params-grouping {
      refine "tls-versions/min" {
        must "not(derived-from-or-self(current(), "
           + "'tlscmn:tls12'))" {
          error-message
            "TLS 1.2 is not supported as min TLS version";
        }
      }
      refine "tls-versions/max" {
        must "not(derived-from-or-self(current(), "
           + "'tlscmn:tls12'))" {
          error-message
            "TLS 1.2 is not supported as max TLS version";
        }
      }
    }
  }

  grouping tls-client {
    description
      "A grouping for configuring a TLS client without any
       consideration for how an underlying TCP session is
       established.";
    container client-identity {
      presence "Indicates that a TLS-level client identity has been
                configured.
                This statement is present so the mandatory descendant
                do not imply that this node must be configured.";
      description
        "Identity credentials that a TLS client may present when
         establishing a connection to a TLS server.";
      uses client-identity-with-ref;
    }
    container server-authentication {
      must 'credentials-reference or ca-certs or ee-certs or '
         + 'raw-public-keys or tls13-epsks';
      description
        "Specifies how a TLS client can authenticate TLS servers.";
      uses server-authentication-with-ref;
    }
    container hello-params {
      if-feature "tlscmn:hello-params";
      description
        "Configurable parameters for the TLS Hello message.";
      uses hello-params;
    }
  }

  grouping tacacs-plus {
    description
      "Grouping for TACACS+ attributes.";
    container tacacs-plus {
      must "not(derived-from-or-self(../sys:authentication"
         + "/sys:user-authentication-order, "
         + "'sys-tcs-plus:tacacs-plus'))"
         + " or bit-is-set(server/server-type,'authentication')" {
        error-message
          "When 'tacacs-plus' is used as a system authentication
           method, a TACACS+ authentication server must be
           configured.";
        description
          "When 'tacacs-plus' is used as an authentication method,
           a TACACS+ server must be configured.";
      }
      description
        "Container for TACACS+ configurations and operations.";
      list client-credentials {
        if-feature "credential-reference";
        key "id";
        description
          "Identity credentials that a TLS client may present
           when establishing a connection to a TLS server.
           A list of client credentials that can be referenced
           when configuring server instances.";
        nacm:default-deny-write;
        leaf id {
          type string;
          description
            "An identifier that uniquely identifies a client 
             identity within the device configuration.";
        }
        uses client-identity;
      }
      list server-credentials {
        if-feature "credential-reference";
        key "id";
        description
          "Identity credentials that a TLS client may use
           to authenticate a TLS server.";
        nacm:default-deny-write;
        leaf id {
          type string;
          description
            "An identifier that uniquely identify server
             credentials within the device configuration.";
        }
        uses server-authentication;
      }
      list server {
        key "name";
        unique "address port";
        ordered-by user;
        description
          "List of TACACS+ servers used by the device.";
        leaf name {
          type string;
          description
            "A name that is used to uniquely identify a TACACS+
             server within the device configuration.
             This name is not to be confused with the domain-name.";
        }
        leaf server-type {
          type tacacs-plus-server-type;
          mandatory true;
          description
            "Server type: authentication/authorization/accounting and
             various combinations.";
        }
        leaf domain-name {
          type inet:domain-name;
          description
            "Provides a domain name of the TACACS+ server.";
          reference
            "RFC SSSS: Terminal Access Controller Access-Control
                       System Plus (TACACS+) over TLS 1.3,
                       Section 3.4.2";
        }
        leaf sni-enabled {
          type boolean;
          must '../domain-name' {
            error-message
              "A domain name must be provided to make use of Server
               Name Indication (SNI).";
          }
          description
            "Enables the use of SNI, when set to true. Disables the
             use of SNI, when set to false.";
          reference
            "RFC 6066: Transport Layer Security (TLS) Extensions:
                       Extension Definitions, Section 3
             RFC SSSS: Terminal Access Controller Access-Control
                       System Plus (TACACS+) over TLS 1.3,
                       Section 3.4.2";
        }
        leaf address {
          type inet:host;
          mandatory true;
          description
            "The IP address or name of the TACACS+ server.";
        }
        leaf port {
          type inet:port-number;
          description
            "The port number of TACACS+ server.
             Default port number for legacy TACACS+ is 49,
             while it is TBD for TACACS+TLS.";
        }
        choice security {
          mandatory true;
          description
            "Security mechanism between TACACS+ client and server.";
          case tls {
            description
              "TLS is used to secure TACACS+ exchanges.";
            reference
              "RFC SSSS: Terminal Access Controller Access-Control
                         System Plus (TACACS+) over TLS 1.3";
            uses tls-client;
          }
          case obfuscation {
            leaf shared-secret {
              type string {
                length "1..max";
              }
              description
                "The shared secret, which is known to both the
                 TACACS+ client and server. TACACS+ server
                 administrators SHOULD configure a shared secret with
                 a minimum length of 16 characters.
                 It is highly recommended that this shared secret is
                 at least 32 characters long and sufficiently complex
                 with a mix of different character types,
                 i.e., upper case, lower case, numeric, and
                 punctuation.  Note that this security mechanism is
                 best described as 'obfuscation' and not 'encryption'
                 as it does not provide any meaningful integrity,
                 privacy, or replay protection.";
              reference
                "RFC 8907: The TACACS+ Protocol";
              nacm:default-deny-all;
            }
          }
        }
        choice source-type {
          description
            "The source address type for outbound TACACS+ packets.";
          case source-ip {
            leaf source-ip {
              type inet:ip-address;
              description
                "Specifies the source IP address for TACACS+ outbound
                 packets.";
            }
          }
          case source-interface {
            leaf source-interface {
              type if:interface-ref;
              description
                "Specifies the interface from which the IP address
                 is derived for use as the source for outbound
                 TACACS+ packets.";
            }
          }
        }
        leaf vrf-instance {
          type leafref {
            path "/ni:network-instances/ni:network-instance/ni:name";
          }
          must "(not(../source-interface)) or "
             + "(current() = /if:interfaces/if:interface"
             + "[if:name = current()/../source-interface]"
             + "/ni:bind-ni-name)" {
            error-message
              "VRF instance must match the network instance of the
               source interface.";
          }
          description
            "Specifies the VPN Routing and Forwarding (VRF) instance
             to use to communicate with the TACACS+ server.
             If 'source-interface' is configured, this value MUST 
             match the network instance bound to the source interface
             (via bind-ni-name).";
          reference
            "RFC 8529: YANG Data Model for Network Instances";
        }
        leaf single-connection {
          type boolean;
          default "false";
          description
            "Indicates whether the Single Connection Mode is enabled
             for the server.";
          reference
            "RFC 8907: The TACACS+ Protocol, Section 4.3";
        }
        leaf timeout {
          type uint16 {
            range "1..max";
          }
          units "seconds";
          default "5";
          description
            "The number of seconds that the device will wait for a
             response from each TACACS+ server before trying with a
             different server.";
        }
        uses statistics;
      }
    }
  }

  augment "/sys:system" {
    description
      "Augments the system model with the tacacs-plus data nodes.";
    uses tacacs-plus;
  }
}
<CODE ENDS>
]]></sourcecode>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>This section is modeled after the template described in <xref section="3.7" sectionFormat="of" target="I-D.ietf-netmod-rfc8407bis"/>.</t>
      <t>The "ietf-ac-common" YANG module defines a data model that is
designed to be accessed via YANG-based management protocols, such as
NETCONF <xref target="RFC6241"/> and RESTCONF <xref target="RFC8040"/>. These YANG-based management protocols (1) have to
use a secure transport layer (e.g., SSH <xref target="RFC4252"/>, TLS <xref target="RFC8446"/>, and
QUIC <xref target="RFC9000"/>) and (2) have to use mutual authentication.</t>
      <t>The Network Configuration Access Control Model (NACM) <xref target="RFC8341"/>
   provides the means to restrict access for particular NETCONF or
   RESTCONF users to a preconfigured subset of all available NETCONF or
   RESTCONF protocol operations and content.</t>
      <t>There are a number of data nodes defined in this YANG module that are
writable/creatable/deletable (i.e., "config true", which is the
default).  All writable data nodes are likely to be
sensitive or vulnerable in some network environments.  Write
operations (e.g., edit-config) and delete operations to these data
nodes without proper protection or authentication can have a negative
effect on network operations.  The following subtrees and data nodes
have particular sensitivities/vulnerabilities:</t>
      <dl>
        <dt>'server':</dt>
        <dd>
          <t>This list contains the data nodes used
to control the TACACS+ servers used by the device. Unauthorized
access to this list could enable an attacker to assume complete
control over the device by pointing to a compromised TACACS+
server, or to modify the counters to hide attacks against the
device.</t>
        </dd>
        <dt>'shared-secret':</dt>
        <dd>
          <t>This leaf controls the key
known to both the TACACS+ client and server. Unauthorized access
to this leaf could make the device vulnerable to attacks;
therefore, it has been restricted using the "default-deny-all"
access control defined in <xref target="RFC8341"/>.  When setting, it is highly
recommended that the leaf is at least 32 characters long and
sufficiently complex with a mix of different character types,
i.e., upper case, lower case, numeric, and punctuation.</t>
        </dd>
        <dt>'client-identity' and 'server-authentication':</dt>
        <dd>
          <t>Any modification to a key or reference to a key may dramatically alter the implemented security policy. For this reason, the NACM extension "default-deny-write" has been set.</t>
        </dd>
      </dl>
      <t>This YANG module uses groupings from other YANG modules that define nodes that may be considered sensitive or vulnerable in network environments. Refer to <xref section="5.3" sectionFormat="of" target="RFC9642"/> and <xref section="5.3" sectionFormat="of" target="RFC9645"/> for information as to which nodes may be considered sensitive or vulnerable in network environments.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>IANA is requested to update the following URI in the "ns" subregistry within
   the "IETF XML Registry" <xref target="RFC3688"/>:</t>
      <artwork><![CDATA[
   URI:  urn:ietf:params:xml:ns:yang:ietf-system-tacacs-plus
   Registrant Contact:  The IESG.
   XML:  N/A; the requested URI is an XML namespace.
]]></artwork>
      <t>IANA is requested to register the following YANG module in the "YANG Module
   Names" registry <xref target="RFC6020"/> within the "YANG Parameters" registry group:</t>
      <artwork><![CDATA[
   Name:  ietf-system-tacacs-plus
   Namespace:  urn:ietf:params:xml:ns:yang:ietf-system-tacacs-plus
   Prefix:  sys-tcs-plus
   Maintained by IANA?  N
   Reference:  RFC XXXX
]]></artwork>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC7317">
          <front>
            <title>A YANG Data Model for System Management</title>
            <author fullname="A. Bierman" initials="A." surname="Bierman"/>
            <author fullname="M. Bjorklund" initials="M." surname="Bjorklund"/>
            <date month="August" year="2014"/>
            <abstract>
              <t>This document defines a YANG data model for the configuration and identification of some common system properties within a device containing a Network Configuration Protocol (NETCONF) server. This document also includes data node definitions for system identification, time-of-day management, user management, DNS resolver configuration, and some protocol operations for system management.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7317"/>
          <seriesInfo name="DOI" value="10.17487/RFC7317"/>
        </reference>
        <reference anchor="I-D.ietf-opsawg-tacacs-tls13">
          <front>
            <title>Terminal Access Controller Access-Control System Plus over TLS 1.3 (TACACS+ over TLS)</title>
            <author fullname="Thorsten Dahm" initials="T." surname="Dahm">
         </author>
            <author fullname="John Heasley" initials="J." surname="Heasley">
              <organization>NTT</organization>
            </author>
            <author fullname="dcmgash@cisco.com" initials="" surname="dcmgash@cisco.com">
              <organization>Cisco Systems, Inc.</organization>
            </author>
            <author fullname="Andrej Ota" initials="A." surname="Ota">
              <organization>Google Inc.</organization>
            </author>
            <date day="13" month="April" year="2025"/>
            <abstract>
              <t>   The Terminal Access Controller Access-Control System Plus (TACACS+)
   protocol provides device administration for routers, network access
   servers, and other networked computing devices via one or more
   centralized TACACS+ servers.  This document adds Transport Layer
   Security (TLS 1.3) support to TACACS+ and obsoletes former inferior
   security mechanisms.

   This document updates RFC 8907.


              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-opsawg-tacacs-tls13-20"/>
        </reference>
        <reference anchor="RFC8342">
          <front>
            <title>Network Management Datastore Architecture (NMDA)</title>
            <author fullname="M. Bjorklund" initials="M." surname="Bjorklund"/>
            <author fullname="J. Schoenwaelder" initials="J." surname="Schoenwaelder"/>
            <author fullname="P. Shafer" initials="P." surname="Shafer"/>
            <author fullname="K. Watsen" initials="K." surname="Watsen"/>
            <author fullname="R. Wilton" initials="R." surname="Wilton"/>
            <date month="March" year="2018"/>
            <abstract>
              <t>Datastores are a fundamental concept binding the data models written in the YANG data modeling language to network management protocols such as the Network Configuration Protocol (NETCONF) and RESTCONF. This document defines an architectural framework for datastores based on the experience gained with the initial simpler model, addressing requirements that were not well supported in the initial model. This document updates RFC 7950.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8342"/>
          <seriesInfo name="DOI" value="10.17487/RFC8342"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="RFC7950">
          <front>
            <title>The YANG 1.1 Data Modeling Language</title>
            <author fullname="M. Bjorklund" initials="M." role="editor" surname="Bjorklund"/>
            <date month="August" year="2016"/>
            <abstract>
              <t>YANG is a data modeling language used to model configuration data, state data, Remote Procedure Calls, and notifications for network management protocols. This document describes the syntax and semantics of version 1.1 of the YANG language. YANG version 1.1 is a maintenance release of the YANG language, addressing ambiguities and defects in the original specification. There are a small number of backward incompatibilities from YANG version 1. This document also specifies the YANG mappings to the Network Configuration Protocol (NETCONF).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7950"/>
          <seriesInfo name="DOI" value="10.17487/RFC7950"/>
        </reference>
        <reference anchor="RFC8446">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <date month="August" year="2018"/>
            <abstract>
              <t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol. TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t>This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961. This document also specifies new requirements for TLS 1.2 implementations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8446"/>
          <seriesInfo name="DOI" value="10.17487/RFC8446"/>
        </reference>
        <reference anchor="RFC6066">
          <front>
            <title>Transport Layer Security (TLS) Extensions: Extension Definitions</title>
            <author fullname="D. Eastlake 3rd" initials="D." surname="Eastlake 3rd"/>
            <date month="January" year="2011"/>
            <abstract>
              <t>This document provides specifications for existing TLS extensions. It is a companion document for RFC 5246, "The Transport Layer Security (TLS) Protocol Version 1.2". The extensions specified are server_name, max_fragment_length, client_certificate_url, trusted_ca_keys, truncated_hmac, and status_request. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6066"/>
          <seriesInfo name="DOI" value="10.17487/RFC6066"/>
        </reference>
        <reference anchor="RFC6991">
          <front>
            <title>Common YANG Data Types</title>
            <author fullname="J. Schoenwaelder" initials="J." role="editor" surname="Schoenwaelder"/>
            <date month="July" year="2013"/>
            <abstract>
              <t>This document introduces a collection of common data types to be used with the YANG data modeling language. This document obsoletes RFC 6021.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6991"/>
          <seriesInfo name="DOI" value="10.17487/RFC6991"/>
        </reference>
        <reference anchor="RFC8341">
          <front>
            <title>Network Configuration Access Control Model</title>
            <author fullname="A. Bierman" initials="A." surname="Bierman"/>
            <author fullname="M. Bjorklund" initials="M." surname="Bjorklund"/>
            <date month="March" year="2018"/>
            <abstract>
              <t>The standardization of network configuration interfaces for use with the Network Configuration Protocol (NETCONF) or the RESTCONF protocol requires a structured and secure operating environment that promotes human usability and multi-vendor interoperability. There is a need for standard mechanisms to restrict NETCONF or RESTCONF protocol access for particular users to a preconfigured subset of all available NETCONF or RESTCONF protocol operations and content. This document defines such an access control model.</t>
              <t>This document obsoletes RFC 6536.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="91"/>
          <seriesInfo name="RFC" value="8341"/>
          <seriesInfo name="DOI" value="10.17487/RFC8341"/>
        </reference>
        <reference anchor="RFC8343">
          <front>
            <title>A YANG Data Model for Interface Management</title>
            <author fullname="M. Bjorklund" initials="M." surname="Bjorklund"/>
            <date month="March" year="2018"/>
            <abstract>
              <t>This document defines a YANG data model for the management of network interfaces. It is expected that interface-type-specific data models augment the generic interfaces data model defined in this document. The data model includes definitions for configuration and system state (status information and counters for the collection of statistics).</t>
              <t>The YANG data model in this document conforms to the Network Management Datastore Architecture (NMDA) defined in RFC 8342.</t>
              <t>This document obsoletes RFC 7223.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8343"/>
          <seriesInfo name="DOI" value="10.17487/RFC8343"/>
        </reference>
        <reference anchor="RFC8529">
          <front>
            <title>YANG Data Model for Network Instances</title>
            <author fullname="L. Berger" initials="L." surname="Berger"/>
            <author fullname="C. Hopps" initials="C." surname="Hopps"/>
            <author fullname="A. Lindem" initials="A." surname="Lindem"/>
            <author fullname="D. Bogdanovic" initials="D." surname="Bogdanovic"/>
            <author fullname="X. Liu" initials="X." surname="Liu"/>
            <date month="March" year="2019"/>
            <abstract>
              <t>This document defines a network instance module. This module can be used to manage the virtual resource partitioning that may be present on a network device. Examples of common industry terms for virtual resource partitioning are VPN Routing and Forwarding (VRF) instances and Virtual Switch Instances (VSIs).</t>
              <t>The YANG data model in this document conforms to the Network Management Datastore Architecture (NMDA) defined in RFC 8342.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8529"/>
          <seriesInfo name="DOI" value="10.17487/RFC8529"/>
        </reference>
        <reference anchor="RFC9640">
          <front>
            <title>YANG Data Types and Groupings for Cryptography</title>
            <author fullname="K. Watsen" initials="K." surname="Watsen"/>
            <date month="October" year="2024"/>
            <abstract>
              <t>This document presents a YANG 1.1 (RFC 7950) module defining identities, typedefs, and groupings useful to cryptographic applications.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9640"/>
          <seriesInfo name="DOI" value="10.17487/RFC9640"/>
        </reference>
        <reference anchor="RFC9641">
          <front>
            <title>A YANG Data Model for a Truststore</title>
            <author fullname="K. Watsen" initials="K." surname="Watsen"/>
            <date month="October" year="2024"/>
            <abstract>
              <t>This document presents a YANG module for configuring bags of certificates and bags of public keys that can be referenced by other data models for trust. Notifications are sent when certificates are about to expire.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9641"/>
          <seriesInfo name="DOI" value="10.17487/RFC9641"/>
        </reference>
        <reference anchor="RFC9642">
          <front>
            <title>A YANG Data Model for a Keystore</title>
            <author fullname="K. Watsen" initials="K." surname="Watsen"/>
            <date month="October" year="2024"/>
            <abstract>
              <t>This document presents a YANG module called "ietf-keystore" that enables centralized configuration of both symmetric and asymmetric keys. The secret value for both key types may be encrypted or hidden. Asymmetric keys may be associated with certificates. Notifications are sent when certificates are about to expire.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9642"/>
          <seriesInfo name="DOI" value="10.17487/RFC9642"/>
        </reference>
        <reference anchor="RFC9645">
          <front>
            <title>YANG Groupings for TLS Clients and TLS Servers</title>
            <author fullname="K. Watsen" initials="K." surname="Watsen"/>
            <date month="October" year="2024"/>
            <abstract>
              <t>This document presents four YANG 1.1 modules -- three IETF modules and one supporting IANA module.</t>
              <t>The three IETF modules are "ietf-tls-common", "ietf-tls-client", and "ietf-tls-server". The "ietf-tls-client" and "ietf-tls-server" modules are the primary productions of this work, supporting the configuration and monitoring of TLS clients and servers.</t>
              <t>The IANA module is "iana-tls-cipher-suite-algs". This module defines YANG enumerations that provide support for an IANA-maintained algorithm registry.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9645"/>
          <seriesInfo name="DOI" value="10.17487/RFC9645"/>
        </reference>
        <reference anchor="RFC6520">
          <front>
            <title>Transport Layer Security (TLS) and Datagram Transport Layer Security (DTLS) Heartbeat Extension</title>
            <author fullname="R. Seggelmann" initials="R." surname="Seggelmann"/>
            <author fullname="M. Tuexen" initials="M." surname="Tuexen"/>
            <author fullname="M. Williams" initials="M." surname="Williams"/>
            <date month="February" year="2012"/>
            <abstract>
              <t>This document describes the Heartbeat Extension for the Transport Layer Security (TLS) and Datagram Transport Layer Security (DTLS) protocols.</t>
              <t>The Heartbeat Extension provides a new protocol for TLS/DTLS allowing the usage of keep-alive functionality without performing a renegotiation and a basis for path MTU (PMTU) discovery for DTLS. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6520"/>
          <seriesInfo name="DOI" value="10.17487/RFC6520"/>
        </reference>
        <reference anchor="RFC9257">
          <front>
            <title>Guidance for External Pre-Shared Key (PSK) Usage in TLS</title>
            <author fullname="R. Housley" initials="R." surname="Housley"/>
            <author fullname="J. Hoyland" initials="J." surname="Hoyland"/>
            <author fullname="M. Sethi" initials="M." surname="Sethi"/>
            <author fullname="C. A. Wood" initials="C. A." surname="Wood"/>
            <date month="July" year="2022"/>
            <abstract>
              <t>This document provides usage guidance for external Pre-Shared Keys (PSKs) in Transport Layer Security (TLS) 1.3 as defined in RFC 8446. It lists TLS security properties provided by PSKs under certain assumptions, then it demonstrates how violations of these assumptions lead to attacks. Advice for applications to help meet these assumptions is provided. This document also discusses PSK use cases and provisioning processes. Finally, it lists the privacy and security properties that are not provided by TLS 1.3 when external PSKs are used.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9257"/>
          <seriesInfo name="DOI" value="10.17487/RFC9257"/>
        </reference>
        <reference anchor="RFC9258">
          <front>
            <title>Importing External Pre-Shared Keys (PSKs) for TLS 1.3</title>
            <author fullname="D. Benjamin" initials="D." surname="Benjamin"/>
            <author fullname="C. A. Wood" initials="C. A." surname="Wood"/>
            <date month="July" year="2022"/>
            <abstract>
              <t>This document describes an interface for importing external Pre-Shared Keys (PSKs) into TLS 1.3.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9258"/>
          <seriesInfo name="DOI" value="10.17487/RFC9258"/>
        </reference>
        <reference anchor="RFC3688">
          <front>
            <title>The IETF XML Registry</title>
            <author fullname="M. Mealling" initials="M." surname="Mealling"/>
            <date month="January" year="2004"/>
            <abstract>
              <t>This document describes an IANA maintained registry for IETF standards which use Extensible Markup Language (XML) related items such as Namespaces, Document Type Declarations (DTDs), Schemas, and Resource Description Framework (RDF) Schemas.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="81"/>
          <seriesInfo name="RFC" value="3688"/>
          <seriesInfo name="DOI" value="10.17487/RFC3688"/>
        </reference>
        <reference anchor="RFC6020">
          <front>
            <title>YANG - A Data Modeling Language for the Network Configuration Protocol (NETCONF)</title>
            <author fullname="M. Bjorklund" initials="M." role="editor" surname="Bjorklund"/>
            <date month="October" year="2010"/>
            <abstract>
              <t>YANG is a data modeling language used to model configuration and state data manipulated by the Network Configuration Protocol (NETCONF), NETCONF remote procedure calls, and NETCONF notifications. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6020"/>
          <seriesInfo name="DOI" value="10.17487/RFC6020"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC9105">
          <front>
            <title>A YANG Data Model for Terminal Access Controller Access-Control System Plus (TACACS+)</title>
            <author fullname="B. Wu" initials="B." role="editor" surname="Wu"/>
            <author fullname="G. Zheng" initials="G." surname="Zheng"/>
            <author fullname="M. Wang" initials="M." role="editor" surname="Wang"/>
            <date month="August" year="2021"/>
            <abstract>
              <t>This document defines a Terminal Access Controller Access-Control System Plus (TACACS+) client YANG module that augments the System Management data model, defined in RFC 7317, to allow devices to make use of TACACS+ servers for centralized Authentication, Authorization, and Accounting (AAA). Though being a standard module, this module does not endorse the security mechanisms of the TACACS+ protocol (RFC 8907), and TACACS+ be used within a secure deployment.</t>
              <t>The YANG module in this document conforms to the Network Management Datastore Architecture (NMDA) defined in RFC 8342.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9105"/>
          <seriesInfo name="DOI" value="10.17487/RFC9105"/>
        </reference>
        <reference anchor="RFC2865">
          <front>
            <title>Remote Authentication Dial In User Service (RADIUS)</title>
            <author fullname="C. Rigney" initials="C." surname="Rigney"/>
            <author fullname="S. Willens" initials="S." surname="Willens"/>
            <author fullname="A. Rubens" initials="A." surname="Rubens"/>
            <author fullname="W. Simpson" initials="W." surname="Simpson"/>
            <date month="June" year="2000"/>
            <abstract>
              <t>This document describes a protocol for carrying authentication, authorization, and configuration information between a Network Access Server which desires to authenticate its links and a shared Authentication Server. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2865"/>
          <seriesInfo name="DOI" value="10.17487/RFC2865"/>
        </reference>
        <reference anchor="RFC8907">
          <front>
            <title>The Terminal Access Controller Access-Control System Plus (TACACS+) Protocol</title>
            <author fullname="T. Dahm" initials="T." surname="Dahm"/>
            <author fullname="A. Ota" initials="A." surname="Ota"/>
            <author fullname="D.C. Medway Gash" initials="D.C." surname="Medway Gash"/>
            <author fullname="D. Carrel" initials="D." surname="Carrel"/>
            <author fullname="L. Grant" initials="L." surname="Grant"/>
            <date month="September" year="2020"/>
            <abstract>
              <t>This document describes the Terminal Access Controller Access-Control System Plus (TACACS+) protocol, which is widely deployed today to provide Device Administration for routers, network access servers, and other networked computing devices via one or more centralized servers.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8907"/>
          <seriesInfo name="DOI" value="10.17487/RFC8907"/>
        </reference>
        <reference anchor="RFC8340">
          <front>
            <title>YANG Tree Diagrams</title>
            <author fullname="M. Bjorklund" initials="M." surname="Bjorklund"/>
            <author fullname="L. Berger" initials="L." role="editor" surname="Berger"/>
            <date month="March" year="2018"/>
            <abstract>
              <t>This document captures the current syntax used in YANG module tree diagrams. The purpose of this document is to provide a single location for this definition. This syntax may be updated from time to time based on the evolution of the YANG language.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="215"/>
          <seriesInfo name="RFC" value="8340"/>
          <seriesInfo name="DOI" value="10.17487/RFC8340"/>
        </reference>
        <reference anchor="I-D.ietf-netmod-rfc8407bis">
          <front>
            <title>Guidelines for Authors and Reviewers of Documents Containing YANG Data Models</title>
            <author fullname="Andy Bierman" initials="A." surname="Bierman">
              <organization>YumaWorks</organization>
            </author>
            <author fullname="Mohamed Boucadair" initials="M." surname="Boucadair">
              <organization>Orange</organization>
            </author>
            <author fullname="Qin Wu" initials="Q." surname="Wu">
              <organization>Huawei</organization>
            </author>
            <date day="18" month="April" year="2025"/>
            <abstract>
              <t>   This memo provides guidelines for authors and reviewers of
   specifications containing YANG modules, including IANA-maintained
   modules.  Recommendations and procedures are defined, which are
   intended to increase interoperability and usability of Network
   Configuration Protocol (NETCONF) and RESTCONF Protocol
   implementations that utilize YANG modules.  This document obsoletes
   RFC 8407.

   Also, this document updates RFC 8126 by providing additional
   guidelines for writing the IANA considerations for RFCs that specify
   IANA-maintained modules.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-netmod-rfc8407bis-24"/>
        </reference>
        <reference anchor="RFC6241">
          <front>
            <title>Network Configuration Protocol (NETCONF)</title>
            <author fullname="R. Enns" initials="R." role="editor" surname="Enns"/>
            <author fullname="M. Bjorklund" initials="M." role="editor" surname="Bjorklund"/>
            <author fullname="J. Schoenwaelder" initials="J." role="editor" surname="Schoenwaelder"/>
            <author fullname="A. Bierman" initials="A." role="editor" surname="Bierman"/>
            <date month="June" year="2011"/>
            <abstract>
              <t>The Network Configuration Protocol (NETCONF) defined in this document provides mechanisms to install, manipulate, and delete the configuration of network devices. It uses an Extensible Markup Language (XML)-based data encoding for the configuration data as well as the protocol messages. The NETCONF protocol operations are realized as remote procedure calls (RPCs). This document obsoletes RFC 4741. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6241"/>
          <seriesInfo name="DOI" value="10.17487/RFC6241"/>
        </reference>
        <reference anchor="RFC8040">
          <front>
            <title>RESTCONF Protocol</title>
            <author fullname="A. Bierman" initials="A." surname="Bierman"/>
            <author fullname="M. Bjorklund" initials="M." surname="Bjorklund"/>
            <author fullname="K. Watsen" initials="K." surname="Watsen"/>
            <date month="January" year="2017"/>
            <abstract>
              <t>This document describes an HTTP-based protocol that provides a programmatic interface for accessing data defined in YANG, using the datastore concepts defined in the Network Configuration Protocol (NETCONF).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8040"/>
          <seriesInfo name="DOI" value="10.17487/RFC8040"/>
        </reference>
        <reference anchor="RFC4252">
          <front>
            <title>The Secure Shell (SSH) Authentication Protocol</title>
            <author fullname="T. Ylonen" initials="T." surname="Ylonen"/>
            <author fullname="C. Lonvick" initials="C." role="editor" surname="Lonvick"/>
            <date month="January" year="2006"/>
            <abstract>
              <t>The Secure Shell Protocol (SSH) is a protocol for secure remote login and other secure network services over an insecure network. This document describes the SSH authentication protocol framework and public key, password, and host-based client authentication methods. Additional authentication methods are described in separate documents. The SSH authentication protocol runs on top of the SSH transport layer protocol and provides a single authenticated tunnel for the SSH connection protocol. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4252"/>
          <seriesInfo name="DOI" value="10.17487/RFC4252"/>
        </reference>
        <reference anchor="RFC9000">
          <front>
            <title>QUIC: A UDP-Based Multiplexed and Secure Transport</title>
            <author fullname="J. Iyengar" initials="J." role="editor" surname="Iyengar"/>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson"/>
            <date month="May" year="2021"/>
            <abstract>
              <t>This document defines the core of the QUIC transport protocol. QUIC provides applications with flow-controlled streams for structured communication, low-latency connection establishment, and network path migration. QUIC includes security measures that ensure confidentiality, integrity, and availability in a range of deployment circumstances. Accompanying documents describe the integration of TLS for key negotiation, loss detection, and an exemplary congestion control algorithm.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9000"/>
          <seriesInfo name="DOI" value="10.17487/RFC9000"/>
        </reference>
      </references>
    </references>
    <?line 1223?>

<section anchor="example-tacacs-authentication-configuration-with-shared-secret">
      <name>Example TACACS+ Authentication Configuration with Shared Secret</name>
      <t><xref target="ex9105"/> shows an example where a TACACS+ authentication server instance is configured using shared secret for authentication.</t>
      <figure anchor="ex9105">
        <name>Example with Shared Secret</name>
        <sourcecode type="json"><![CDATA[
{
  "ietf-system:system": {
    "authentication": {
      "user-authentication-order": [
        "ietf-system-tacacs-plus:tacacs-plus",
        "ietf-system:local-users"
      ]
    },
    "ietf-system-tacacs-plus:tacacs-plus": {
      "server": [
        {
          "name": "tac_plus1",
          "server-type": "authentication",
          "address": "192.0.2.2",
          "shared-secret": "QaEfThUkO198010075460923+h3TbE8n",
          "source-ip": "192.0.2.12",
          "timeout": 10
        }
      ]
    }
  }
}
]]></sourcecode>
      </figure>
      <t><xref target="ex9105-vrf"/> provides an example to associate a TACACS+ server with a VRF.</t>
      <figure anchor="ex9105-vrf">
        <name>Example with VRF</name>
        <sourcecode type="json"><![CDATA[
{
  "ietf-network-instance:network-instances": {
    "network-instance": [
      {
        "name": "MANAGEMENT_VRF",
        "description": "Management VRF for TACACS+ traffic isolation"
      }
    ]
  },
  "ietf-system:system": {
    "authentication": {
      "user-authentication-order": [
        "ietf-system-tacacs-plus:tacacs-plus",
        "ietf-system:local-users"
      ]
    },
    "ietf-system-tacacs-plus:tacacs-plus": {
      "server": [
        {
          "name": "tac_plus1",
          "server-type": "authentication",
          "address": "192.0.2.2",
          "shared-secret": "QaEfThUkO198010075460923+h3TbE8n",
          "source-ip": "192.0.2.12",
          "vrf-instance": "MANAGEMENT_VRF",
          "timeout": 10
        }
      ]
    }
  }
}
]]></sourcecode>
      </figure>
    </section>
    <section anchor="tacacstls-examples">
      <name>TACACS+TLS Examples</name>
      <t>This section provides examples to illustrate the configuration of TACACS+TLS clients.</t>
      <t>These examples follow the convention used in <xref section="1.5" sectionFormat="of" target="RFC9645"/> for binary data that has been base64 encoded.</t>
      <section anchor="example-tacacs-authentication-configuration-with-explicit-certificate-definitions">
        <name>Example TACACS+ Authentication Configuration with Explicit Certificate Definitions</name>
        <t><xref target="exin"/> shows a configuration example with 'inline-definition' for the client identity and server authentication.</t>
        <figure anchor="exin">
          <name>Example with TACACS+TLS with Inline Certificate Definitions</name>
          <sourcecode type="json"><![CDATA[
=============== NOTE: '\' line wrapping per RFC 8792 ================

{
  "ietf-system:system": {
    "authentication": {
      "user-authentication-order": [
        "ietf-system-tacacs-plus:tacacs-plus",
        "ietf-system:local-users"
      ]
    },
    "ietf-system-tacacs-plus:tacacs-plus": {
      "server": [
        {
          "name": "instance-1",
          "server-type": "authentication",
          "domain-name": "tacacs.example.com",
          "sni-enabled": true,
          "address": "2001:db8::1",
          "port": 1234,
          "client-identity": {
            "certificate": {
              "inline-definition": {
                "public-key-format": "ietf-crypto-types:subject-\
                                             public-key-info-format",
                "public-key": "BASE64VALUE=",
                "private-key-format": "ietf-crypto-types:rsa-private\
                                                        -key-format",
                "cleartext-private-key": "BASE64VALUE=",
                "cert-data": "BASE64VALUE="
              }
            }
          },
          "server-authentication": {
            "ca-certs": {
              "inline-definition": {
                "certificate": [
                  {
                    "name": "CA-Certificate-1",
                    "cert-data": "BASE64VALUE="
                  }
                ]
              }
            }
          },
          "hello-params": {
            "tls-versions": {
              "min": "ietf-tls-common:tls13",
              "max": "ietf-tls-common:tls13"
            },
            "cipher-suites": {
              "cipher-suite": [
                "TLS_AES_128_GCM_SHA256"
              ]
            }
          },
          "single-connection": false,
          "timeout": 10
        }
      ]
    }
  }
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="example-tacacs-authentication-configuration-with-certificate-references">
        <name>Example TACACS+ Authentication Configuration with Certificate References</name>
        <t><xref target="ex-ref"/> shows a configuration example with credential references for multiple service instances: four server instances are configured with all using the same credentials. These instances form a redundancy group for both IPv4 and IPv6.</t>
        <figure anchor="ex-ref">
          <name>Example with TACACS+TLS with References</name>
          <sourcecode type="json"><![CDATA[
=============== NOTE: '\' line wrapping per RFC 8792 ================

{
  "ietf-system:system": {
    "ietf-system-tacacs-plus:tacacs-plus": {
      "client-credentials": [
        {
          "id": "client-cred-1",
          "certificate": {
            "inline-definition": {
              "public-key-format": "ietf-crypto-types:subject-public\
                                                   -key-info-format",
              "public-key": "BASE64VALUE=",
              "private-key-format": "ietf-crypto-types:rsa-private-\
                                                         key-format",
              "cleartext-private-key": "BASE64VALUE=",
              "cert-data": "BASE64VALUE="
            }
          }
        }
      ],
      "server-credentials": [
        {
          "id": "server-cred-1",
          "ca-certs": {
            "inline-definition": {
              "certificate": [
                {
                  "name": "CA-Certificate-1",
                  "cert-data": "BASE64VALUE="
                }
              ]
            }
          }
        }
      ],
      "server": [
        {
          "name": "primary-v6",
          "server-type": "authentication",
          "domain-name": "tacacs.example.com",
          "sni-enabled": true,
          "address": "2001:db8::1",
          "port": 1234,
          "client-identity": {
            "credentials-reference": "client-cred-1"
          },
          "server-authentication": {
            "credentials-reference": "server-cred-1"
          }
        },
        {
          "name": "backup-v6",
          "server-type": "authentication",
          "domain-name": "tacacs.example.com",
          "sni-enabled": true,
          "address": "2001:db8::2",
          "port": 1234,
          "client-identity": {
            "credentials-reference": "client-cred-1"
          },
          "server-authentication": {
            "credentials-reference": "server-cred-1"
          }
        },
        {
          "name": "primary-v4",
          "server-type": "authentication",
          "domain-name": "tacacs.example.com",
          "sni-enabled": true,
          "address": "192.0.2.1",
          "port": 49,
          "client-identity": {
            "credentials-reference": "client-cred-1"
          },
          "server-authentication": {
            "credentials-reference": "server-cred-1"
          }
        },
        {
          "name": "backup-v4",
          "server-type": "authentication",
          "domain-name": "tacacs.example.com",
          "sni-enabled": true,
          "address": "192.0.2.2",
          "port": 49,
          "client-identity": {
            "credentials-reference": "client-cred-1"
          },
          "server-authentication": {
            "credentials-reference": "server-cred-1"
          }
        }
      ]
    }
  }
}
]]></sourcecode>
        </figure>
      </section>
    </section>
    <section anchor="sec-full">
      <name>Full Tree</name>
      <t>The full tree structure is shown below:</t>
      <artwork><![CDATA[
=============== NOTE: '\' line wrapping per RFC 8792 ================

module: ietf-system-tacacs-plus

  augment /sys:system:
    +--rw tacacs-plus
       +--rw client-credentials* [id] {credential-reference}?
       |  +--rw id                       string
       |  +--rw (auth-type)?
       |     +--:(certificate)
       |     |  +--rw certificate
       |     |     +--rw (inline-or-keystore)
       |     |        +--:(inline) {inline-definitions-supported}?
       |     |        |  +--rw inline-definition
       |     |        |     +--rw public-key-format?
       |     |        |     |       identityref
       |     |        |     +--rw public-key?
       |     |        |     |       binary
       |     |        |     +--rw private-key-format?
       |     |        |     |       identityref
       |     |        |     +--rw (private-key-type)
       |     |        |     |  +--:(cleartext-private-key)
       |     |        |     |  |        {cleartext-private-keys}?
       |     |        |     |  |  +--rw cleartext-private-key?
       |     |        |     |  |          binary
       |     |        |     |  +--:(hidden-private-key)
       |     |        |     |  |        {hidden-private-keys}?
       |     |        |     |  |  +--rw hidden-private-key?
       |     |        |     |  |          empty
       |     |        |     |  +--:(encrypted-private-key)
       |     |        |     |           {encrypted-private-keys}?
       |     |        |     |     +--rw encrypted-private-key
       |     |        |     |        +--rw encrypted-by
       |     |        |     |        +--rw encrypted-value-format
       |     |        |     |        |       identityref
       |     |        |     |        +--rw encrypted-value
       |     |        |     |                binary
       |     |        |     +--rw cert-data?
       |     |        |     |       end-entity-cert-cms
       |     |        |     +---n certificate-expiration
       |     |        |     |       {certificate-expiration-\
                                                       notification}?
       |     |        |     |  +-- expiration-date
       |     |        |     |          yang:date-and-time
       |     |        |     +---x generate-csr {csr-generation}?
       |     |        |        +---w input
       |     |        |        |  +---w csr-format    identityref
       |     |        |        |  +---w csr-info      csr-info
       |     |        |        +--ro output
       |     |        |           +--ro (csr-type)
       |     |        |              +--:(p10-csr)
       |     |        |                 +--ro p10-csr?   p10-csr
       |     |        +--:(central-keystore)
       |     |                 {central-keystore-supported,\
                                                    asymmetric-keys}?
       |     |           +--rw central-keystore-reference
       |     |              +--rw asymmetric-key?
       |     |              |       ks:central-asymmetric-key-ref
       |     |              |       {central-keystore-supported,\
                                                    asymmetric-keys}?
       |     |              +--rw certificate?      leafref
       |     +--:(raw-public-key) {tlsc:client-ident-raw-public-key}?
       |     |  +--rw raw-private-key
       |     |     +--rw (inline-or-keystore)
       |     |        +--:(inline) {inline-definitions-supported}?
       |     |        |  +--rw inline-definition
       |     |        |     +--rw public-key-format?
       |     |        |     |       identityref
       |     |        |     +--rw public-key?
       |     |        |     |       binary
       |     |        |     +--rw private-key-format?
       |     |        |     |       identityref
       |     |        |     +--rw (private-key-type)
       |     |        |        +--:(cleartext-private-key)
       |     |        |        |        {cleartext-private-keys}?
       |     |        |        |  +--rw cleartext-private-key?
       |     |        |        |          binary
       |     |        |        +--:(hidden-private-key)
       |     |        |        |        {hidden-private-keys}?
       |     |        |        |  +--rw hidden-private-key?
       |     |        |        |          empty
       |     |        |        +--:(encrypted-private-key)
       |     |        |                 {encrypted-private-keys}?
       |     |        |           +--rw encrypted-private-key
       |     |        |              +--rw encrypted-by
       |     |        |              +--rw encrypted-value-format
       |     |        |              |       identityref
       |     |        |              +--rw encrypted-value
       |     |        |                      binary
       |     |        +--:(central-keystore)
       |     |                 {central-keystore-supported,\
                                                    asymmetric-keys}?
       |     |           +--rw central-keystore-reference?
       |     |                   ks:central-asymmetric-key-ref
       |     +--:(tls13-epsk) {tlsc:client-ident-tls13-epsk}?
       |        +--rw tls13-epsk
       |           +--rw (inline-or-keystore)
       |           |  +--:(inline) {inline-definitions-supported}?
       |           |  |  +--rw inline-definition
       |           |  |     +--rw key-format?
       |           |  |     |       identityref
       |           |  |     +--rw (key-type)
       |           |  |        +--:(cleartext-symmetric-key)
       |           |  |        |  +--rw cleartext-symmetric-key?
       |           |  |        |          binary
       |           |  |        |          {cleartext-symmetric-keys}?
       |           |  |        +--:(hidden-symmetric-key)
       |           |  |        |        {hidden-symmetric-keys}?
       |           |  |        |  +--rw hidden-symmetric-key?
       |           |  |        |          empty
       |           |  |        +--:(encrypted-symmetric-key)
       |           |  |                 {encrypted-symmetric-keys}?
       |           |  |           +--rw encrypted-symmetric-key
       |           |  |              +--rw encrypted-by
       |           |  |              +--rw encrypted-value-format
       |           |  |              |       identityref
       |           |  |              +--rw encrypted-value
       |           |  |                      binary
       |           |  +--:(central-keystore)
       |           |           {central-keystore-supported,symmetric\
                                                              -keys}?
       |           |     +--rw central-keystore-reference?
       |           |             ks:central-symmetric-key-ref
       |           +--rw external-identity                   string
       |           +--rw hash?
       |           |       tlscmn:epsk-supported-hash
       |           +--rw context?                            string
       |           +--rw target-protocol?                    uint16
       |           +--rw target-kdf?                         uint16
       +--rw server-credentials* [id] {credential-reference}?
       |  +--rw id                 string
       |  +--rw ca-certs!
       |  |  +--rw (inline-or-truststore)
       |  |     +--:(inline) {inline-definitions-supported}?
       |  |     |  +--rw inline-definition
       |  |     |     +--rw certificate* [name]
       |  |     |        +--rw name                      string
       |  |     |        +--rw cert-data
       |  |     |        |       trust-anchor-cert-cms
       |  |     |        +---n certificate-expiration
       |  |     |                {certificate-expiration-\
                                                       notification}?
       |  |     |           +-- expiration-date    yang:date-and-time
       |  |     +--:(central-truststore)
       |  |              {central-truststore-supported,certificates}?
       |  |        +--rw central-truststore-reference?
       |  |                ts:central-certificate-bag-ref
       |  +--rw ee-certs!
       |  |  +--rw (inline-or-truststore)
       |  |     +--:(inline) {inline-definitions-supported}?
       |  |     |  +--rw inline-definition
       |  |     |     +--rw certificate* [name]
       |  |     |        +--rw name                      string
       |  |     |        +--rw cert-data
       |  |     |        |       trust-anchor-cert-cms
       |  |     |        +---n certificate-expiration
       |  |     |                {certificate-expiration-\
                                                       notification}?
       |  |     |           +-- expiration-date    yang:date-and-time
       |  |     +--:(central-truststore)
       |  |              {central-truststore-supported,certificates}?
       |  |        +--rw central-truststore-reference?
       |  |                ts:central-certificate-bag-ref
       |  +--rw raw-public-keys! {tlsc:server-auth-raw-public-key}?
       |  |  +--rw (inline-or-truststore)
       |  |     +--:(inline) {inline-definitions-supported}?
       |  |     |  +--rw inline-definition
       |  |     |     +--rw public-key* [name]
       |  |     |        +--rw name                 string
       |  |     |        +--rw public-key-format    identityref
       |  |     |        +--rw public-key           binary
       |  |     +--:(central-truststore)
       |  |              {central-truststore-supported,public-keys}?
       |  |        +--rw central-truststore-reference?
       |  |                ts:central-public-key-bag-ref
       |  +--rw tls13-epsks?       empty
       |          {tlsc:server-auth-tls13-epsk}?
       +--rw server* [name]
          +--rw name                           string
          +--rw server-type
          |       tacacs-plus-server-type
          +--rw domain-name?                   inet:domain-name
          +--rw sni-enabled?                   boolean
          +--rw address                        inet:host
          +--rw port?                          inet:port-number
          +--rw (security)
          |  +--:(tls)
          |  |  +--rw client-identity!
          |  |  |  +--rw (ref-or-explicit)?
          |  |  |     +--:(ref)
          |  |  |     |  +--rw credentials-reference?
          |  |  |     |          sys-tcs-plus:client-credentials-ref
          |  |  |     |          {credential-reference}?
          |  |  |     +--:(explicit)
          |  |  |        +--rw (auth-type)?
          |  |  |           +--:(certificate)
          |  |  |           |  +--rw certificate
          |  |  |           |     +--rw (inline-or-keystore)
          |  |  |           |        +--:(inline)
          |  |  |           |        |        {inline-definitions-\
                                                          supported}?
          |  |  |           |        |  +--rw inline-definition
          |  |  |           |        |     +--rw public-key-format?
          |  |  |           |        |     |       identityref
          |  |  |           |        |     +--rw public-key?
          |  |  |           |        |     |       binary
          |  |  |           |        |     +--rw private-key-format?
          |  |  |           |        |     |       identityref
          |  |  |           |        |     +--rw (private-key-type)
          |  |  |           |        |     |  +--:(cleartext-private\
                                                                -key)
          |  |  |           |        |     |  |        {cleartext-\
                                                       private-keys}?
          |  |  |           |        |     |  |  +--rw cleartext-\
                                                         private-key?
          |  |  |           |        |     |  |          binary
          |  |  |           |        |     |  +--:(hidden-private-\
                                                                 key)
          |  |  |           |        |     |  |        {hidden-\
                                                       private-keys}?
          |  |  |           |        |     |  |  +--rw hidden-\
                                                         private-key?
          |  |  |           |        |     |  |          empty
          |  |  |           |        |     |  +--:(encrypted-private\
                                                                -key)
          |  |  |           |        |     |           {encrypted-\
                                                       private-keys}?
          |  |  |           |        |     |     +--rw encrypted-\
                                                          private-key
          |  |  |           |        |     |        +--rw encrypted-\
                                                                   by
          |  |  |           |        |     |        +--rw encrypted-\
                                                         value-format
          |  |  |           |        |     |        |       \
                                                          identityref
          |  |  |           |        |     |        +--rw encrypted-\
                                                                value
          |  |  |           |        |     |                binary
          |  |  |           |        |     +--rw cert-data?
          |  |  |           |        |     |       end-entity-cert-\
                                                                  cms
          |  |  |           |        |     +---n certificate-\
                                                           expiration
          |  |  |           |        |     |       {certificate-\
                                            expiration-notification}?
          |  |  |           |        |     |  +-- expiration-date
          |  |  |           |        |     |          yang:date-and-\
                                                                 time
          |  |  |           |        |     +---x generate-csr
          |  |  |           |        |             {csr-generation}?
          |  |  |           |        |        +---w input
          |  |  |           |        |        |  +---w csr-format
          |  |  |           |        |        |  |       identityref
          |  |  |           |        |        |  +---w csr-info
          |  |  |           |        |        |          csr-info
          |  |  |           |        |        +--ro output
          |  |  |           |        |           +--ro (csr-type)
          |  |  |           |        |              +--:(p10-csr)
          |  |  |           |        |                 +--ro p10-csr?
          |  |  |           |        |                         p10-\
                                                                  csr
          |  |  |           |        +--:(central-keystore)
          |  |  |           |                 {central-keystore-\
                                          supported,asymmetric-keys}?
          |  |  |           |           +--rw central-keystore-\
                                                            reference
          |  |  |           |              +--rw asymmetric-key?
          |  |  |           |              |       ks:central-\
                                                   asymmetric-key-ref
          |  |  |           |              |       {central-keystore\
                                         -supported,asymmetric-keys}?
          |  |  |           |              +--rw certificate?
          |  |  |           |                      leafref
          |  |  |           +--:(raw-public-key)
          |  |  |           |        {tlsc:client-ident-raw-public-\
                                                                key}?
          |  |  |           |  +--rw raw-private-key
          |  |  |           |     +--rw (inline-or-keystore)
          |  |  |           |        +--:(inline)
          |  |  |           |        |        {inline-definitions-\
                                                          supported}?
          |  |  |           |        |  +--rw inline-definition
          |  |  |           |        |     +--rw public-key-format?
          |  |  |           |        |     |       identityref
          |  |  |           |        |     +--rw public-key?
          |  |  |           |        |     |       binary
          |  |  |           |        |     +--rw private-key-format?
          |  |  |           |        |     |       identityref
          |  |  |           |        |     +--rw (private-key-type)
          |  |  |           |        |        +--:(cleartext-private\
                                                                -key)
          |  |  |           |        |        |        {cleartext-\
                                                       private-keys}?
          |  |  |           |        |        |  +--rw cleartext-\
                                                         private-key?
          |  |  |           |        |        |          binary
          |  |  |           |        |        +--:(hidden-private-\
                                                                 key)
          |  |  |           |        |        |        {hidden-\
                                                       private-keys}?
          |  |  |           |        |        |  +--rw hidden-\
                                                         private-key?
          |  |  |           |        |        |          empty
          |  |  |           |        |        +--:(encrypted-private\
                                                                -key)
          |  |  |           |        |                 {encrypted-\
                                                       private-keys}?
          |  |  |           |        |           +--rw encrypted-\
                                                          private-key
          |  |  |           |        |              +--rw encrypted-\
                                                                   by
          |  |  |           |        |              +--rw encrypted-\
                                                         value-format
          |  |  |           |        |              |       \
                                                          identityref
          |  |  |           |        |              +--rw encrypted-\
                                                                value
          |  |  |           |        |                      binary
          |  |  |           |        +--:(central-keystore)
          |  |  |           |                 {central-keystore-\
                                          supported,asymmetric-keys}?
          |  |  |           |           +--rw central-keystore-\
                                                           reference?
          |  |  |           |                   ks:central-\
                                                   asymmetric-key-ref
          |  |  |           +--:(tls13-epsk)
          |  |  |                    {tlsc:client-ident-tls13-epsk}?
          |  |  |              +--rw tls13-epsk
          |  |  |                 +--rw (inline-or-keystore)
          |  |  |                 |  +--:(inline)
          |  |  |                 |  |        {inline-definitions-\
                                                          supported}?
          |  |  |                 |  |  +--rw inline-definition
          |  |  |                 |  |     +--rw key-format?
          |  |  |                 |  |     |       identityref
          |  |  |                 |  |     +--rw (key-type)
          |  |  |                 |  |        +--:(cleartext-\
                                                       symmetric-key)
          |  |  |                 |  |        |  +--rw cleartext-\
                                                       symmetric-key?
          |  |  |                 |  |        |          binary
          |  |  |                 |  |        |          {cleartext-\
                                                     symmetric-keys}?
          |  |  |                 |  |        +--:(hidden-symmetric-\
                                                                 key)
          |  |  |                 |  |        |        {hidden-\
                                                     symmetric-keys}?
          |  |  |                 |  |        |  +--rw hidden-\
                                                       symmetric-key?
          |  |  |                 |  |        |          empty
          |  |  |                 |  |        +--:(encrypted-\
                                                       symmetric-key)
          |  |  |                 |  |                 {encrypted-\
                                                     symmetric-keys}?
          |  |  |                 |  |           +--rw encrypted-\
                                                        symmetric-key
          |  |  |                 |  |              +--rw encrypted-\
                                                                   by
          |  |  |                 |  |              +--rw encrypted-\
                                                         value-format
          |  |  |                 |  |              |       \
                                                          identityref
          |  |  |                 |  |              +--rw encrypted-\
                                                                value
          |  |  |                 |  |                      binary
          |  |  |                 |  +--:(central-keystore)
          |  |  |                 |           {central-keystore-\
                                           supported,symmetric-keys}?
          |  |  |                 |     +--rw central-keystore-\
                                                           reference?
          |  |  |                 |             ks:central-symmetric\
                                                             -key-ref
          |  |  |                 +--rw external-identity
          |  |  |                 |       string
          |  |  |                 +--rw hash?
          |  |  |                 |       tlscmn:epsk-supported-hash
          |  |  |                 +--rw context?
          |  |  |                 |       string
          |  |  |                 +--rw target-protocol?
          |  |  |                 |       uint16
          |  |  |                 +--rw target-kdf?
          |  |  |                         uint16
          |  |  +--rw server-authentication
          |  |  |  +--rw (ref-or-explicit)?
          |  |  |     +--:(ref)
          |  |  |     |  +--rw credentials-reference?
          |  |  |     |          sys-tcs-plus:server-credentials-ref
          |  |  |     |          {credential-reference}?
          |  |  |     +--:(explicit)
          |  |  |        +--rw ca-certs!
          |  |  |        |  +--rw (inline-or-truststore)
          |  |  |        |     +--:(inline)
          |  |  |        |     |        {inline-definitions-\
                                                          supported}?
          |  |  |        |     |  +--rw inline-definition
          |  |  |        |     |     +--rw certificate* [name]
          |  |  |        |     |        +--rw name
          |  |  |        |     |        |       string
          |  |  |        |     |        +--rw cert-data
          |  |  |        |     |        |       trust-anchor-cert-cms
          |  |  |        |     |        +---n certificate-expiration
          |  |  |        |     |                {certificate-\
                                            expiration-notification}?
          |  |  |        |     |           +-- expiration-date
          |  |  |        |     |                   yang:date-and-time
          |  |  |        |     +--:(central-truststore)
          |  |  |        |              {central-truststore-\
                                             supported,certificates}?
          |  |  |        |        +--rw central-truststore-reference?
          |  |  |        |                ts:central-certificate-bag\
                                                                 -ref
          |  |  |        +--rw ee-certs!
          |  |  |        |  +--rw (inline-or-truststore)
          |  |  |        |     +--:(inline)
          |  |  |        |     |        {inline-definitions-\
                                                          supported}?
          |  |  |        |     |  +--rw inline-definition
          |  |  |        |     |     +--rw certificate* [name]
          |  |  |        |     |        +--rw name
          |  |  |        |     |        |       string
          |  |  |        |     |        +--rw cert-data
          |  |  |        |     |        |       trust-anchor-cert-cms
          |  |  |        |     |        +---n certificate-expiration
          |  |  |        |     |                {certificate-\
                                            expiration-notification}?
          |  |  |        |     |           +-- expiration-date
          |  |  |        |     |                   yang:date-and-time
          |  |  |        |     +--:(central-truststore)
          |  |  |        |              {central-truststore-\
                                             supported,certificates}?
          |  |  |        |        +--rw central-truststore-reference?
          |  |  |        |                ts:central-certificate-bag\
                                                                 -ref
          |  |  |        +--rw raw-public-keys!
          |  |  |        |       {tlsc:server-auth-raw-public-key}?
          |  |  |        |  +--rw (inline-or-truststore)
          |  |  |        |     +--:(inline)
          |  |  |        |     |        {inline-definitions-\
                                                          supported}?
          |  |  |        |     |  +--rw inline-definition
          |  |  |        |     |     +--rw public-key* [name]
          |  |  |        |     |        +--rw name
          |  |  |        |     |        |       string
          |  |  |        |     |        +--rw public-key-format
          |  |  |        |     |        |       identityref
          |  |  |        |     |        +--rw public-key
          |  |  |        |     |                binary
          |  |  |        |     +--:(central-truststore)
          |  |  |        |              {central-truststore-\
                                              supported,public-keys}?
          |  |  |        |        +--rw central-truststore-reference?
          |  |  |        |                ts:central-public-key-bag-\
                                                                  ref
          |  |  |        +--rw tls13-epsks?             empty
          |  |  |                {tlsc:server-auth-tls13-epsk}?
          |  |  +--rw hello-params {tlscmn:hello-params}?
          |  |     +--rw tls-versions
          |  |     |  +--rw min?   identityref
          |  |     |  +--rw max?   identityref
          |  |     +--rw cipher-suites
          |  |        +--rw cipher-suite*
          |  |                tlscsa:tls-cipher-suite-algorithm
          |  +--:(obfuscation)
          |     +--rw shared-secret?           string
          +--rw (source-type)?
          |  +--:(source-ip)
          |  |  +--rw source-ip?               inet:ip-address
          |  +--:(source-interface)
          |     +--rw source-interface?        if:interface-ref
          +--rw vrf-instance?
          |       -> /ni:network-instances/network-instance/name
          +--rw single-connection?             boolean
          +--rw timeout?                       uint16
          +--ro statistics
             +--ro discontinuity-time?    yang:date-and-time
             +--ro connection-opens?      yang:counter64
             +--ro connection-closes?     yang:counter64
             +--ro connection-aborts?     yang:counter64
             +--ro connection-failures?   yang:counter64
             +--ro connection-timeouts?   yang:counter64
             +--ro messages-sent?         yang:counter64
             +--ro messages-received?     yang:counter64
             +--ro errors-received?       yang:counter64
             +--ro sessions?              yang:counter64
             +--ro cert-errors?           yang:counter64
             +--ro rpk-errors?            yang:counter64
                     {tlsc:server-auth-raw-public-key}?
]]></artwork>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>The document leverages data structures defined in <xref target="RFC9645"/>.</t>
      <t>Thanks to Joe Clarke and Tom Petch for the review and comments.</t>
      <t>Thanks to Reshad Rahman for the yangdoctors review and Tina Tsou for
the opsdir review.</t>
      <t>Thanks Mahesh Jethanandani for the AD review.</t>
      <dl>
        <dt>Authors of RFC 9105:</dt>
        <dd>
          <t>Bo Wu</t>
        </dd>
        <dt/>
        <dd>
          <t>Guangying Zheng</t>
        </dd>
        <dt/>
        <dd>
          <t>Michael Wang</t>
        </dd>
        <dt>Acknowledgments from RFC 9105:</dt>
        <dd>
          <t>The authors wish to thank Alex Campbell, John Heasley, Ebben Aries,
 Alan DeKok, Joe Clarke, Tom Petch, Robert Wilton, and many others for
 their helpful comments and suggestions.</t>
        </dd>
      </dl>
    </section>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
