<?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.17 (Ruby 3.3.1) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-netmod-schedule-yang-02" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.21.0 -->
  <front>
    <title abbrev="Common Schedule YANG">A Common YANG Data Model for Scheduling</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-netmod-schedule-yang-02"/>
    <author fullname="Qiufang Ma" role="editor">
      <organization>Huawei</organization>
      <address>
        <postal>
          <street>101 Software Avenue, Yuhua District</street>
          <city>Jiangsu</city>
          <code>210012</code>
          <country>China</country>
        </postal>
        <email>maqiufang1@huawei.com</email>
      </address>
    </author>
    <author fullname="Qin Wu">
      <organization>Huawei</organization>
      <address>
        <postal>
          <street>101 Software Avenue, Yuhua District</street>
          <city>Jiangsu</city>
          <code>210012</code>
          <country>China</country>
        </postal>
        <email>bill.wu@huawei.com</email>
      </address>
    </author>
    <author fullname="Mohamed Boucadair" role="editor">
      <organization>Orange</organization>
      <address>
        <postal>
          <city>Rennes</city>
          <code>35000</code>
          <country>France</country>
        </postal>
        <email>mohamed.boucadair@orange.com</email>
      </address>
    </author>
    <author fullname="Daniel King">
      <organization>Lancaster University</organization>
      <address>
        <postal>
          <country>United Kingdom</country>
        </postal>
        <email>d.king@lancaster.ac.uk</email>
      </address>
    </author>
    <date year="2024" month="June" day="25"/>
    <area>Operations and Management</area>
    <workgroup>netmod</workgroup>
    <keyword>calendaring</keyword>
    <keyword>scheduling</keyword>
    <keyword>YANG</keyword>
    <keyword>groupings</keyword>
    <abstract>
      <?line 57?>

<t>This document defines a common schedule YANG module which is
   designed to be applicable for scheduling purposes such as event, policy,
   services, or resources based on date and time. For the sake of better modularity,
   the module includes basic, intermediate, and advanced versions of recurrence
   related groupings.</t>
    </abstract>
    <note removeInRFC="true">
      <name>Discussion Venues</name>
      <t>Discussion of this document takes place on the
    Operations and Management Area Working Group Working Group mailing list (opsawg@ietf.org),
    which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/opsawg/"/>.</t>
      <t>Source for this draft and an issue tracker can be found at
    <eref target="https://github.com/boucadair/policy-based-network-acl"/>.</t>
    </note>
  </front>
  <middle>
    <?line 65?>

<section anchor="intro">
      <name>Introduction</name>
      <t>This document defines a common schedule YANG module ("ietf-schedule") that can
be used in several scheduling contexts, e.g., (but not limited to)
<xref target="I-D.ietf-opsawg-ucl-acl"/>, <xref target="I-D.contreras-opsawg-scheduling-oam-tests"/>,
and <xref target="I-D.ietf-tvr-schedule-yang"/>. The module includes a set of reusable groupings which
are designed to be applicable for scheduling purposes such as event, policy,
services or resources based on date and time.</t>
      <t>This document does not make any assumption about the nature of actions that are
triggered by the schedules.</t>
      <t><xref target="sec-mib"/> discusses relationship with the managed objects defined in <xref target="RFC3231"/>.</t>
      <t><xref target="usage"/> describes a set of examples to illustrate the use of the common schedule groupings (<xref target="sec-grp"/>).
And <xref target="sec-ext"/> provides sample modules to exemplify how future modules can use the extensibility
provisions in "ietf-schedule" (<xref target="sec-schedule"/>). Also, <xref target="ex-framework"/> provides
an example of using "ietf-schedule" module for scheduled use of resources framework (e.g., <xref target="RFC8413"/>).</t>
      <section anchor="editorial-note-to-be-removed-by-rfc-editor">
        <name>Editorial Note (To be removed by RFC Editor)</name>
        <t>Note to the RFC Editor: This section is to be removed prior to publication.</t>
        <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.  No other RFC Editor instructions are specified
   elsewhere in this document.</t>
        <t>Please apply the following replacements:</t>
        <ul spacing="normal">
          <li>
            <t>XXXX --&gt; the assigned RFC number for this draft</t>
          </li>
          <li>
            <t>2024-04-16 --&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 meanings of the symbols in tree diagrams are defined in
   <xref target="RFC8340"/>.</t>
      <t>This document uses the YANG terminology defined in <xref section="3" sectionFormat="of" target="RFC7950"/>.</t>
      <t>The document makes use of the following terms:</t>
      <dl>
        <dt>icalendar:</dt>
        <dd>
          <t>Refers to Internet Calendaring per <xref target="RFC5545"/>.</t>
        </dd>
        <dt>System:</dt>
        <dd>
          <t>Refers to an entity that host a schedule that is managed using the YANG module defined in this document.</t>
        </dd>
      </dl>
    </section>
    <section anchor="sec-overview">
      <name>Module Overview</name>
      <section anchor="sec-features">
        <name>Features</name>
        <t>The "ietf-schedule" data model defines the recurrence related groupings using
   a modular approach. Basic, intermediate, and advanced representation of recurrence
   groupings are defined, with each reusing the previous one and adding more parameters.
   To allow for different options, two features are defined in the data model:</t>
        <ul spacing="normal">
          <li>
            <t>"basic-recurrence-supported"</t>
          </li>
          <li>
            <t>"icalendar-recurrence-supported"</t>
          </li>
        </ul>
        <t>Refer to <xref target="sec-aug"/> for the use of these features.</t>
      </section>
      <section anchor="sec-types">
        <name>Types and Identities</name>
        <t>The "ietf-schedule" module (<xref target="sec-schedule"/>) defines the following identities:</t>
        <ul spacing="normal">
          <li>
            <t>"frequency-type": Characterizes the repeating interval rule of a schedule (per second, per minute, etc.).</t>
          </li>
          <li>
            <t>"schedule-type": Indicates the type of a schedule. The following types are defined so far:
            </t>
            <ul spacing="normal">
              <li>
                <t>one-shot: The schedule will trigger an action without the duration/end time being
  specified and then the schedule will disable itself (<xref section="3.3" sectionFormat="of" target="RFC3231"/>).</t>
              </li>
              <li>
                <t>period: The schedule is a period-based schedule consisting either a start and end or a start and positive duration of time.</t>
              </li>
              <li>
                <t>recurrence: This type is used for a recurrence-based schedule</t>
              </li>
            </ul>
          </li>
          <li>
            <t>"schedule-state": Indicates the status of a schedule (enabled, disabled, finished, etc.).</t>
          </li>
          <li>
            <t>"discard-action": Specifies the action to perform when a schedule is discarded (e.g., generate a warning or an error message).</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-grp">
        <name>Groupings</name>
        <t>The "ietf-schedule" module (<xref target="sec-schedule"/>) defines the following groupings:</t>
        <ul spacing="normal">
          <li>
            <t>"generic-schedule-params" (<xref target="sec-gen"/>)</t>
          </li>
          <li>
            <t>"period-of-time" (<xref target="sec-period"/>)</t>
          </li>
          <li>
            <t>"recurrence" (<xref target="sec-rec"/>)</t>
          </li>
          <li>
            <t>"recurrence-utc" (<xref target="sec-rec-utc"/>)</t>
          </li>
          <li>
            <t>"recurrence-with-time-zone" (<xref target="sec-rec-tz"/>)</t>
          </li>
          <li>
            <t>"recurrence-utc-with-date-times" (<xref target="sec-rec-utc-dt"/>)</t>
          </li>
          <li>
            <t>"recurrence-time-zone-with-date-times" (<xref target="sec-rec-tz-dt"/>)</t>
          </li>
          <li>
            <t>"icalendar-recurrence" (<xref target="sec-ical-rec"/>)</t>
          </li>
          <li>
            <t>"schedule-status" and "schedule-status-with-name" (<xref target="sec-schedule-status"/>)</t>
          </li>
        </ul>
        <t><xref target="schedule-tree"/> provides an overview of the tree structure of
   the "ietf-schedule" module in terms of its groupings.</t>
        <figure anchor="schedule-tree">
          <name>Overall Schedule Tree Structure</name>
          <artwork><![CDATA[
module: ietf-schedule

  grouping generic-schedule-params:
    ...
  grouping period-of-time:
    ...
  grouping recurrence:
    ...
  grouping recurrence-utc:
    ...
  grouping recurrence-with-time-zone:
    ...
  grouping recurrence-utc-with-date-times:
    ...
  grouping recurrence-time-zone-with-date-times:
    ...
  grouping icalendar-recurrence:
    ...
  grouping schedule-status:
    ...
  grouping schedule-status-with-name:
    ...
]]></artwork>
        </figure>
        <t>Each of these groupings is presented in the following subsections. Examples
   are provided in <xref target="usage"/>.</t>
        <section anchor="sec-gen">
          <name>The "generic-schedule-params" Grouping</name>
          <t>A system accepts and handles the schedule requests, which may help further
   automate the scheduling process of events, policy, services, or resources
   based on date and time. The "generic-schedule-params" grouping (<xref target="gsp-tree"/>)
   specifies a set of configuration parameters that are used by a system for
   validating requested schedules.</t>
          <figure anchor="gsp-tree">
            <name>Generic Schedule Configuration Tree Structure</name>
            <artwork><![CDATA[
module: ietf-schedule

  grouping generic-schedule-params:
    +-- description?            string
    +-- time-zone-identifier?   sys:timezone-name
    +-- validity?               yang:date-and-time
    +-- max-allowed-start?      yang:date-and-time
    +-- min-allowed-start?      yang:date-and-time
    +-- max-allowed-end?        yang:date-and-time
    +-- discard-action?         identityref
  grouping period-of-time:
    ...
  grouping recurrence:
    ...
  grouping recurrence-utc:
    ...
  grouping recurrence-with-time-zone:
    ...
  grouping recurrence-utc-with-date-times:
    ...
  grouping recurrence-time-zone-with-date-times:
    ...
  grouping icalendar-recurrence:
    ...
  grouping schedule-status:
    ...
  grouping schedule-status-with-name:
    ...
]]></artwork>
          </figure>
          <t>The "description" includes a description of the schedule. No constraint is imposed
   on the structure nor the use of this parameter.</t>
          <t>The "time-zone-identifier" parameter, if provided, specifies the
   time zone reference of the date and time values with local time format.</t>
          <t>The "validity" parameter specifies the date and time after which a schedule
   will be considered as invalid. It determines the latest time that a schedule
   can be executed by a system and takes precedence over similar attributes
   that are provided at the schedule instance itself.</t>
          <t>The "max/min-allowed-start" parameters specify the maximum/minimum scheduled
   start date and time, a requested schedule will be rejected if the first
   occurrence of the schedule is later/earlier than the configured values.</t>
          <t>The "max-allowed-end" parameter specifies the maximum allowed end time of
   the last occurrence. A requested schedule will be rejected if the end time
   of last occurrence is later than the configured "max-allowed-end" value.</t>
          <t>The "discard-action" parameter specifies the action if a requested schedule
   is considered inactive or out-of-date.</t>
          <t>These parameters apply to all schedules on a system and are meant
   to provide guards against stale configuration, too short schedule requests
   that would prevent validation by admins of some critical systems, etc.</t>
        </section>
        <section anchor="sec-period">
          <name>The "period-of-time" Grouping</name>
          <t>The "period-of-time" grouping (<xref target="pt-tree"/>) represents a time period using
   either a start ("period-start") and end date and time ("period-end"), or a
   start ("period-start") and a positive time duration ("duration"). For the first
   format, the start of the period <bcp14>MUST</bcp14> be before the end of the period.</t>
          <t>The "period-description" includes a description of the period. No constraint is imposed
   on the structure nor the use of this parameter.</t>
          <figure anchor="pt-tree">
            <name>Period of Time Grouping Tree Structure</name>
            <artwork><![CDATA[
module: ietf-schedule

  grouping generic-schedule-params:
    ...
  grouping period-of-time:
    +-- period-description?     string
    +-- period-start            yang:date-and-time
    +-- time-zone-identifier?   sys:timezone-name
    +-- (period-type)?
       +--:(explicit)
       |  +-- period-end?       yang:date-and-time
       +--:(duration)
          +-- duration?         duration
  grouping recurrence:
    ...
  grouping recurrence-utc:
    ...
  grouping recurrence-with-time-zone:
    ...
  grouping recurrence-utc-with-date-times:
    ...
  grouping recurrence-time-zone-with-date-times:
    ...
  grouping icalendar-recurrence:
    ...
  grouping schedule-status:
    ...
  grouping schedule-status-with-name:
    ...
]]></artwork>
          </figure>
        </section>
        <section anchor="sec-rec">
          <name>The "recurrence" Grouping</name>
          <t>The "recurrence" grouping (<xref target="rec-grp-tree"/>) specifies a simple recurrence rule.</t>
          <figure anchor="rec-grp-tree">
            <name>recurrence Grouping Tree Structure</name>
            <artwork><![CDATA[
module: ietf-schedule

  grouping generic-schedule-params:
    ...
  grouping period-of-time:
    ...
  grouping recurrence:
    +-- recurrence-description?   string
    +-- frequency                 identityref
    +-- interval?                 uint32
  grouping recurrence-utc:
    ...
  grouping recurrence-with-time-zone:
    ...
  grouping recurrence-utc-with-date-times:
    ...
  grouping recurrence-time-zone-with-date-times:
    ...
  grouping icalendar-recurrence:
    ...
  grouping schedule-status:
    ...
  grouping schedule-status-with-name:
    ...
]]></artwork>
          </figure>
          <t>The frequency ("frequency") which is mandatory, identifies the type of recurrence rule. For example,
  a "daily" frequency value specifies repeating events based on an interval of a day or more.</t>
          <t>Consistent with <xref section="3.3.10" sectionFormat="of" target="RFC5545"/>, the interval ("interval") represents at which intervals the recurrence rule repeats. For example,
  within a daily recurrence rule, an interval value of "8" means every eight days.
  The default value is "1", meaning every second for a secondly recurrence rule,
  every minute for a minutely rule, every hour for an hourly rule, every day for a
  daily rule, and so on. Note that per <xref section="4.13" sectionFormat="of" target="I-D.ietf-netmod-rfc8407bis"/>, no "default" substatement is used here because there are cases (e.g., profiling) where the use of the default is problematic.</t>
          <t>The "recurrence-description" includes a description of the period. No constraint is imposed
  on the structure nor the use of this parameter.</t>
        </section>
        <section anchor="sec-rec-utc">
          <name>The "recurrence-utc" Grouping</name>
          <t>The "recurrence-utc" grouping (<xref target="rec-utc-grp-tree"/>) uses the "recurrence"
   grouping and specifies a simple recurrence rule in UTC format.</t>
          <figure anchor="rec-utc-grp-tree">
            <name>recurrence-utc Grouping Tree Structure</name>
            <artwork><![CDATA[
module: ietf-schedule

  grouping generic-schedule-params:
    ...
  grouping period-of-time:
    ...
  grouping recurrence:
    ...
  grouping recurrence-utc:
    +-- recurrence-first
    |  +-- utc-start-time?   yang:date-and-time
    |  +-- duration?         uint32
    +-- (recurrence-bound)?
    |  +--:(until)
    |  |  +-- utc-until?          yang:date-and-time
    |  +--:(count)
    |     +-- count?              uint32
    +-- recurrence-description?   string
    +-- frequency                 identityref
    +-- interval?                 uint32
  grouping recurrence-with-time-zone:
    ...
  grouping recurrence-utc-with-date-times:
    ...
  grouping recurrence-time-zone-with-date-times:
    ...
  grouping icalendar-recurrence:
    ...
  grouping schedule-status:
    ...
  grouping schedule-status-with-name:
    ...
]]></artwork>
          </figure>
          <t>The "utc-start-time" indicates the start time in UTC format.</t>
          <t>The "duration" parameter specifies, in units of seconds, the time period of the first occurrence. Unless specified otherwise, the "duration" also applies to subsequent recurrence instances.</t>
          <t>Note that the "interval" and "duration" cover two distinct properties of a schedule event.
The interval specifies when a schedule will occur, combined with the frequency parameter; while the duration indicates how long
an occurence will last.</t>
          <t>The repetition can be scoped by a specified end time or by a count of occurrences,
  indicated by the "recurrence-bound" choice. The "utc-start-time" value always counts
  as the first occurrence.</t>
          <t>The "recurrence-utc" grouping is designed to be reused in scheduling contexts
   where machine readability is more desirable.</t>
        </section>
        <section anchor="sec-rec-tz">
          <name>The "recurrence-with-time-zone" Grouping</name>
          <t>The "recurrence-with-time-zone" grouping (<xref target="rec-tz-grp-tree"/>) uses the
   "recurrence" grouping and specifies a simple recurrence rule with a time zone.</t>
          <figure anchor="rec-tz-grp-tree">
            <name>recurrence-with-time-zone Grouping Tree Structure</name>
            <artwork><![CDATA[
module: ietf-schedule

  grouping generic-schedule-params:
    ...
  grouping period-of-time:
    ...
  grouping recurrence:
    ...
  grouping recurrence-utc:
    ...
  grouping recurrence-with-time-zone:
    +-- recurrence-first
    |  +-- date-time-start?        yang:date-and-time
    |  +-- duration?               duration
    |  +-- time-zone-identifier?   sys:timezone-name
    +-- (recurrence-bound)?
    |  +--:(until)
    |  |  +-- until?              yang:date-and-time
    |  +--:(count)
    |     +-- count?              uint32
    +-- recurrence-description?   string
    +-- frequency                 identityref
    +-- interval?                 uint32
  grouping recurrence-utc-with-date-times:
    ...
  grouping recurrence-time-zone-with-date-times:
    ...
  grouping icalendar-recurrence:
    ...
  grouping schedule-status:
    ...
  grouping schedule-status-with-name:
    ...
]]></artwork>
          </figure>
          <t>The "recurrence-first" container includes "date-time-start" and "duration" parameters
   to specify the start time and period of the first occurrence. Unless specified otherwise, the
   "duration" also applies to subsequent recurrence instances. It also includes a
   "time-zone-identifier" parameter which <bcp14>MUST</bcp14> be specified if the date
   and time value is neither reported in the format of UTC nor time zone offset
   to UTC.</t>
          <t>The repetition can be scoped by a specified end time or by a count of occurrences,
  indicated by the "recurrence-bound" choice. The "date-time-start" value always counts
  as the first occurrence.</t>
          <t>Unlike the definition of "recurrence-utc" grouping (<xref target="sec-rec-utc"/>),
   "recurrence-with-time-zone" is intended to promote human readability over
   machine readability.</t>
        </section>
        <section anchor="sec-rec-utc-dt">
          <name>The "recurrence-utc-with-date-times" Grouping</name>
          <t>The "recurrence-utc-with-date-times" grouping (<xref target="rec-utc-dt-grp-tree"/>) uses
   the "recurrence-utc" grouping (<xref target="sec-rec-utc"/>) and adds a "period-timeticks"
   list to define an aggregate set of repeating occurrences.</t>
          <figure anchor="rec-utc-dt-grp-tree">
            <name>recurrence-utc-with-date-times Grouping Tree Structure</name>
            <artwork><![CDATA[
module: ietf-schedule

  grouping generic-schedule-params:
    ...
  grouping period-of-time:
    ...
  grouping recurrence:
    ...
  grouping recurrence-utc:
    ...
  grouping recurrence-with-time-zone:
    ...
  grouping recurrence-utc-with-date-times:
    +-- recurrence-first
    |  +-- utc-start-time?   yang:date-and-time
    |  +-- duration?         uint32
    +-- (recurrence-bound)?
    |  +--:(until)
    |  |  +-- utc-until?          yang:date-and-time
    |  +--:(count)
    |     +-- count?              uint32
    +-- recurrence-description?   string
    +-- frequency                 identityref
    +-- interval?                 uint32
    +-- period-timeticks* [period-start]
       +-- period-start    yang:timeticks
       +-- period-end?     yang:timeticks
  grouping recurrence-time-zone-with-date-times:
    ...
  grouping icalendar-recurrence:
    ...
  grouping schedule-status:
    ...
  grouping schedule-status-with-name:
    ...
]]></artwork>
          </figure>
          <t>The recurrence instances are specified by the union of occurrences defined
  by both the recurrence rule and "period-timeticks" list. Duplicate instances
  are ignored. The value of the "period-start" instance must not exceed the
  value indicated by the value of "frequency" instance, e.g., the timeticks
  value must not exceed 100 in a secondly recurrence rule, and it must not
  exceed 6000 in a minutely recurrence rule, and so on.</t>
        </section>
        <section anchor="sec-rec-tz-dt">
          <name>The "recurrence-time-zone-with-date-times" Grouping</name>
          <t>The "recurrence-time-zone-with-date-times" grouping (<xref target="rec-tz-dt-grp-tree"/>) uses
  the "recurrence-with-time-zone" grouping (<xref target="sec-rec-tz"/>) and
  adds a "period" list to define an aggregate set of repeating occurrences.</t>
          <figure anchor="rec-tz-dt-grp-tree">
            <name>recurrence-time-zone-with-date-times Grouping Tree Structure</name>
            <artwork><![CDATA[
module: ietf-schedule

  grouping generic-schedule-params:
    ...
  grouping period-of-time:
    ...
  grouping recurrence:
    ...
  grouping recurrence-utc:
    ...
  grouping recurrence-with-time-zone:
    ...
  grouping recurrence-utc-with-date-times:
    ...
  grouping recurrence-time-zone-with-date-times:
    +-- recurrence-first
    |  +-- date-time-start?        yang:date-and-time
    |  +-- duration?               duration
    |  +-- time-zone-identifier?   sys:timezone-name
    +-- (recurrence-bound)?
    |  +--:(until)
    |  |  +-- until?              yang:date-and-time
    |  +--:(count)
    |     +-- count?              uint32
    +-- recurrence-description?   string
    +-- frequency                 identityref
    +-- interval?                 uint32
    +-- period* [period-start]
       +-- period-description?     string
       +-- period-start            yang:date-and-time
       +-- time-zone-identifier?   sys:timezone-name
       +-- (period-type)?
          +--:(explicit)
          |  +-- period-end?       yang:date-and-time
          +--:(duration)
             +-- duration?         duration
  grouping icalendar-recurrence:
    ...
  grouping schedule-status:
    ...
  grouping schedule-status-with-name:
    ...
]]></artwork>
          </figure>
          <t>The recurrence instances are specified by the union of occurrences defined
  by both the recurrence rule and "period" list. Duplicate instances
  are ignored.</t>
        </section>
        <section anchor="sec-ical-rec">
          <name>The "icalendar-recurrence" Grouping</name>
          <t>The "icalendar-recurrence" grouping (<xref target="ical-grp-tree"/>) uses the
  "recurrence-time-zone-with-date-times" grouping (<xref target="sec-rec-tz-dt"/>) and define
  more data nodes to enrich the definition of recurrence. The structure of the
  "icalendar-recurrence" grouping refers to the definition of recurrence
  component defined in Sections <xref target="RFC5545" section="3.3.10" sectionFormat="bare"/> and <xref target="RFC5545" section="3.8.5" sectionFormat="bare"/> of <xref target="RFC5545"/>.</t>
          <figure anchor="ical-grp-tree">
            <name>icalendar-recurrence Grouping Tree Structure</name>
            <artwork><![CDATA[
module: ietf-schedule

  grouping generic-schedule-params:
    ...
  grouping period-of-time:
    ...
  grouping recurrence:
    ...
  grouping recurrence-utc:
    ...
  grouping recurrence-with-time-zone:
    ...
  grouping recurrence-utc-with-date-times:
    ...
  grouping recurrence-time-zone-with-date-times:
    ...
  grouping icalendar-recurrence:
    +-- recurrence-first
    |  +-- date-time-start?        yang:date-and-time
    |  +-- duration?               duration
    |  +-- time-zone-identifier?   sys:timezone-name
    +-- (recurrence-bound)?
    |  +--:(until)
    |  |  +-- until?              yang:date-and-time
    |  +--:(count)
    |     +-- count?              uint32
    +-- recurrence-description?   string
    +-- frequency                 identityref
    +-- interval?                 uint32
    +-- period* [period-start]
    |  +-- period-description?     string
    |  +-- period-start            yang:date-and-time
    |  +-- time-zone-identifier?   sys:timezone-name
    |  +-- (period-type)?
    |     +--:(explicit)
    |     |  +-- period-end?       yang:date-and-time
    |     +--:(duration)
    |        +-- duration?         duration
    +-- bysecond*                 uint32
    +-- byminute*                 uint32
    +-- byhour*                   uint32
    +-- byday* [weekday]
    |  +-- direction*   int32
    |  +-- weekday      schedule:weekday
    +-- bymonthday*               int32
    +-- byyearday*                int32
    +-- byyearweek*               int32
    +-- byyearmonth*              uint32
    +-- bysetpos*                 int32
    +-- workweek-start?           schedule:weekday
    +-- exception-dates*          yang:date-and-time
  grouping schedule-status:
    ...
  grouping schedule-status-with-name:
    ...
]]></artwork>
          </figure>
          <t>An array of the "bysecond" (or "byminute", "byhour") specifies a list of
   seconds within a minute (or minutes within an hour, hours of the day). For
   example, within a "minutely" recurrence rule, the values of "byminute" node
   "10" and "20" means the occurrences generates at the 10th and 20th minute
   within an hour, reducing the number of recurrence instances from all minutes.</t>
          <t>The parameter "byday" specifies a list of days of the week, with an optional
   direction which indicates the nth occurrence of a specific day within
   the "monthly" or "yearly" frequency. For example, within a "monthly" rule,
   the "weekday" with a value of "monday" and the "direction" with a value of "-1"
   represents the last Monday of the month.</t>
          <t>An array of the "bymonthday" (or byyearday", "byyearweek", or "byyearmonth") specifies a list of
   days of the month (or days of the year, weeks of the year, or months of the year).
   For example, within a "yearly" recurrence rule, the values of "byyearmonth"
   instance "1" and "2" means the occurrences generates in January and February,
   increasing the "yearly" recurrence from every year to every January and February
   of the year.</t>
          <t>The "bysetpos" conveys a list of values that corresponds to the nth occurrence
   within the set of recurrence instances to be specified. For example, in a "monthly"
   recurrence rule, the "byday" data node specifies every Monday of the week, the
   "bysetpos" with value of "-1" represents the last Monday of the month.
   Not setting the "bysetpos" data node represents every Monday of the month.</t>
          <t>The "workweek-start" data node specifies the day on which the week starts. This is
   significant when a "weekly" recurrence rule has an interval greater than 1, and
   a "byday" data node is specified. This is also significant when in a "yearly" rule
   and a "byyearweek" is specified. The default value is "monday".</t>
          <t>The "exception-dates" data node specifies a list of exceptions for recurrence. The
   final recurrence set is generated by gathering all of the date and time values
   generated by any of the specified recurrence rule and date-times, and then
   excluding any start date and time values specified by "exception-dates" parameter.</t>
        </section>
        <section anchor="sec-schedule-status">
          <name>The "schedule-status" and "schedule-status-with-name" Groupings</name>
          <t>The "schedule-status" and "schedule-status-with-name" groupings (<xref target="sche-status-tree"/>) define common parameters
   for scheduling management/status exposure. The "schedule-status-with-name" grouping has the same
   structure as "schedule-status" but with an additional parameter to identify a schedule "schedule-id". Both
   structures are defined in the module to allow for better modularity and flexibility.</t>
          <figure anchor="sche-status-tree">
            <name>Schedule Status with and without Name Groupings Tree Structure</name>
            <artwork><![CDATA[
module: ietf-schedule

  grouping generic-schedule-params:
    ...
  grouping period-of-time:
    ...
  grouping recurrence:
    ...
  grouping recurrence-utc:
    ...
  grouping recurrence-with-time-zone:
    ...
  grouping recurrence-utc-with-date-times:
    ...
  grouping recurrence-time-zone-with-date-times:
    ...
  grouping icalendar-recurrence:
    ...
  grouping schedule-status:
    +-- state?                    identityref
    +-- version?                  uint16
    +-- schedule-type?            identityref
    +--ro local-time?               yang:date-and-time
    +--ro last-update?              yang:date-and-time
    +--ro counter?                  yang:counter32
    +--ro last-occurrence?          yang:date-and-time
    +--ro upcoming-occurrence?      yang:date-and-time
    +--ro last-failed-occurrence?   yang:date-and-time
    +--ro failure-counter?          yang:counter32
  grouping schedule-status-with-name:
    +-- schedule-id?              string
    +-- state?                    identityref
    +-- version?                  uint16
    +-- schedule-type?            identityref
    +--ro local-time?               yang:date-and-time
    +--ro last-update?              yang:date-and-time
    +--ro counter?                  yang:counter32
    +--ro last-occurrence?          yang:date-and-time
    +--ro upcoming-occurrence?      yang:date-and-time
    +--ro last-failed-occurrence?   yang:date-and-time
    +--ro failure-counter?          yang:counter32
]]></artwork>
          </figure>
          <t>The "schedule-id" parameter is useful to uniquely identify a schedule in
   a network device or controller if multiple scheduling contexts exists.</t>
          <t>The "state" parameter is defined to configure/expose the scheduling state,
   depending on the use of the grouping. The "identityref" type is used for this
   parameter to allow extensibility in future modules. For example, a "conflict"
   state is valid in scheduling contexts where multiple systems struggle for the
   scheduling of the same property. The conflict may be induced by, e.g., multiple
   entities managing the schedules for the same target component.</t>
          <t>The "version" parameter is used to track the current schedule version
   information. The version can be bumped by the entity who create the schedule.
   The "last-update" parameter identifies when the schedule was last modified.
   In some contexts, this parameter can be used to track the configuration of a
   given schedule. In such cases, the "version" may not be used.</t>
          <t>The "schedule-type" parameter identifies the type of the current schedule.
   The "counter", "last-occurrence", and "upcoming-occurrence" data nodes are
   only avaliable when the "schedule-type" is "recurrence".</t>
          <t>"local-time" reports the actual local time as seen by the entity that
   host a schedule. This paramter can be used by a controller to infer the offset to UTC.</t>
          <t>"last-failed-occurrence" and "failure-counter" report the last failure that occured and
   the count of failures for this schedule.</t>
          <t>The current groupings capture common parameters that are applicable
   to typical scheduling contexts known so far. Future modules can define other
   useful parameters as needed. For example, in a  scheduling context with multiple
   system sources to feed the schedules, the "source" and "precedence" parameters
   may be needed to reflect how schedules from different sources should be prioritised.</t>
        </section>
      </section>
      <section anchor="sec-aug">
        <name>Features Use and Augmentations</name>
        <t><xref target="features"/> provides an example about how the features defined in <xref target="sec-features"/> can be used. Implementations
   may support a basic recurrence rule or an advanced one as needed, by declaring
   different features. Whether only one or both features are supported is implementation
   specific and depend on specific scheduling context.</t>
        <t>The common schedule groupings (<xref target="sec-grp"/>) can also be augmented to support specific needs. As an example,
   <xref target="augments"/> demonstrates how additional parameters can be added to comply with specifc schedule needs.</t>
      </section>
    </section>
    <section anchor="some-usage-restrictions">
      <name>Some Usage Restrictions</name>
      <t>There are some restrictions that need to be followed when using groupings defined
   in the "ietf-schedule" YANG module (<xref target="sec-grp"/>):</t>
      <ul spacing="normal">
        <li>
          <t>The instant in time represented by "period-start" <bcp14>MUST</bcp14> be before the
"period-end" for "period-of-time" grouping (<xref target="sec-period"/>).</t>
        </li>
        <li>
          <t>The combination of the day, month, and year represented for date and time
values <bcp14>MUST</bcp14> be valid. See <xref section="5.7" sectionFormat="of" target="RFC3339"/> for the maxinum day
number based on the month and year.</t>
        </li>
        <li>
          <t>The second <bcp14>MUST</bcp14> have the value "60" at the end of months in which a leap
second occurs for date and time values.</t>
        </li>
        <li>
          <t>Schedules received with a starting time in the past with respect to
current time <bcp14>SHOULD</bcp14> be ignored.</t>
        </li>
      </ul>
    </section>
    <section anchor="sec-mib">
      <name>Relationship to the DISMAN-SCHEDULE-MIB</name>
      <t><xref target="RFC3231"/> specifies a Management Information Base (MIB) used to
schedule management operations periodically or at specified dates and times.</t>
      <t>Despite no data nodes are defined in this document, <xref target="mapping"/> lists how main objects in the DISMAN-SCHEDULE-MIB
can be mapped to YANG parameters.</t>
      <table anchor="mapping">
        <name>YANG/MIB Mapping</name>
        <thead>
          <tr>
            <th align="left">MIB Object</th>
            <th align="left">YANG</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">schedLocalTime</td>
            <td align="left">local-time</td>
          </tr>
          <tr>
            <td align="left">schedType</td>
            <td align="left">schedule-type</td>
          </tr>
          <tr>
            <td align="left">schedName</td>
            <td align="left">schedule-id</td>
          </tr>
          <tr>
            <td align="left">schedOwner</td>
            <td align="left">Not Supported</td>
          </tr>
          <tr>
            <td align="left">schedDescr</td>
            <td align="left">description</td>
          </tr>
          <tr>
            <td align="left">schedInterval</td>
            <td align="left">interval</td>
          </tr>
          <tr>
            <td align="left">schedWeekDay</td>
            <td align="left">weekday</td>
          </tr>
          <tr>
            <td align="left">schedMonth</td>
            <td align="left">byyearmonth</td>
          </tr>
          <tr>
            <td align="left">schedDay</td>
            <td align="left">bymonthday</td>
          </tr>
          <tr>
            <td align="left">schedHour</td>
            <td align="left">byhour</td>
          </tr>
          <tr>
            <td align="left">schedMinute</td>
            <td align="left">byminute</td>
          </tr>
          <tr>
            <td align="left">schedContextName</td>
            <td align="left">Not Supported</td>
          </tr>
          <tr>
            <td align="left">schedAdminStatus</td>
            <td align="left">state</td>
          </tr>
          <tr>
            <td align="left">schedOperStatus</td>
            <td align="left">state</td>
          </tr>
          <tr>
            <td align="left">schedFailures</td>
            <td align="left">failure-counter</td>
          </tr>
          <tr>
            <td align="left">schedLastFailure</td>
            <td align="left">Not Supported</td>
          </tr>
          <tr>
            <td align="left">schedLastFailed</td>
            <td align="left">last-failed-occurrence</td>
          </tr>
          <tr>
            <td align="left">schedStorageType</td>
            <td align="left">Not Supported</td>
          </tr>
          <tr>
            <td align="left">schedValue</td>
            <td align="left">Not Supported</td>
          </tr>
        </tbody>
      </table>
    </section>
    <section anchor="sec-schedule">
      <name>The "ietf-schedule" YANG Module</name>
      <t>This module imports types defined in <xref target="RFC6991"/> and <xref target="RFC7317"/>.</t>
      <sourcecode markers="true" name="ietf-schedule@2024-04-16.yang"><![CDATA[
module ietf-schedule {
  yang-version 1.1;
  namespace "urn:ietf:params:xml:ns:yang:ietf-schedule";
  prefix schedule;

  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";
  }

  organization
    "IETF NETMOD Working Group";
  contact
    "WG Web: <https://datatracker.ietf.org/wg/netmod/>
     WG List: <mailto:netmod@ietf.org>

     Editor:   Qiufang Ma
               <mailto:maqiufang1@huawei.com
     Author:   Qin Wu
               <mailto:bill.wu@huawei.com>
     Editor:   Mohamed Boucadair
               <mailto:mohamed.boucadair@orange.com>
     Author:   Daniel King
               <mailto:d.king@lancaster.ac.uk>";
  description
    "This YANG module defines a set of common types and groupings
     which are applicable for scheduling purposes such as events,
     policy, services, or resources based on date and time.

     Copyright (c) 2024 IETF Trust and the persons identified
     as authors of the code. All rights reserved.

     Redistribution and use in source and binary forms, with
     or without modification, is permitted pursuant to, and
     subject to the license terms contained in, the Revised
     BSD License set forth in Section 4.c of the IETF Trust's
     Legal Provisions Relating to IETF Documents
     (https://trustee.ietf.org/license-info).

     This version of this YANG module is part of RFC XXXX
     (https://www.rfc-editor.org/info/rfcXXXX); see the RFC
     itself for full legal notices.

     The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL
     NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED',
     'MAY', and 'OPTIONAL' in this document are to be interpreted as
     described in BCP 14 (RFC 2119) (RFC 8174) when, and only when,
     they appear in all capitals, as shown here.";

  revision 2024-04-16 {
    description
      "Initial revision.";
    reference
      "RFC XXXX: A Common YANG Data Model for Scheduling";
  }
  
  feature basic-recurrence-supported {
    description
      "Indicates that the server supports configuring a basic
       scheduled recurrence.";
  }

  feature icalendar-recurrence-supported {
    description
      "Indicates that the server supports configuring a comprehensive
       scheduled icalendar recurrence";
    reference
      "RFC 5545: Internet Calendaring and Scheduling Core Object
                 Specification (iCalendar),
                 Sections 3.3.10 and 3.8.5";
  }

  typedef weekday {
    type enumeration {
      enum sunday {
        value 0;
        description
          "Sunday of the week.";
      }
      enum monday {
        value 1;
        description
          "Monday of the week.";
      }
      enum tuesday {
        value 2;
        description
          "Tuesday of the week.";
      }
      enum wednesday {
        value 3;
        description
          "Wednesday of the week.";
      }
      enum thursday {
        value 4;
        description
          "Thursday of the week.";
      }
      enum friday {
        value 5;
        description
          "Friday of the week.";
      }
      enum saturday {
        value 6;
        description
          "Saturday of the week.";
      }
    }
    description
      "Seven days of the week.";
  }

  typedef duration {
    type string {
      pattern '((\+)?|\-)P((([0-9]+)D)?(T(0[0-9]|1[0-9]|2[0-3])'
            + ':[0-5][0-9]:[0-5][0-9]))|P([0-9]+)W';
    }
    description
      "Duration of the time. The format can represent nominal
       durations (weeks designated by 'W' and days designated by 'D')
       and accurate durations (hours:minutes:seconds follows the
       designator 'T').

       Note that this value type doesn't support the 'Y' and 'M'
       designators to specify durations in terms of years and months.

       Negative durations are typically used to schedule an alarm to
       trigger before an associated time.";
    reference
      "RFC 5545: Internet Calendaring and Scheduling Core Object
                 Specification (iCalendar), Sections 3.3.6 and
                 3.8.6.3";
  }

  identity frequency-type {
    description
      "Base identity for frequency type.";
  }

  identity secondly {
    base frequency-type;
    description
      "Indicates a repeating rule based on an interval of
       a second or more.";
  }

  identity minutely {
    base frequency-type;
    description
      "Indicates a repeating rule based on an interval of
       a minute or more.";
  }

  identity hourly {
    base frequency-type;
    description
      "Indicates a repeating rule based on an interval of
       an hour or more.";
  }

  identity daily {
    base frequency-type;
    description
      "Indicates a repeating rule based on an interval of
       a day or more.";
  }

  identity weekly {
    base frequency-type;
    description
      "Indicates a repeating rule based on an interval of
       a week or more.";
  }

  identity monthly {
    base frequency-type;
    description
      "Indicates a repeating rule based on an interval of
       a month or more.";
  }

  identity yearly {
    base frequency-type;
    description
      "Indicates a repeating rule based on an interval of
       a year or more.";
  }

  identity schedule-type {
    description
      "Base identity for schedule type.";
  }

  identity one-shot {
    base schedule-type;
    description
      "Indicates a one-shot schedule. That is a schedule that
       will trigger an action without the duration/end time being
       specified and then the schedule will disable itself.";
  }

  identity period {
    base schedule-type;
    description
      "Indicates a period-based schedule consisting either a
       start and end or a start and positive duration of time.";
  }
  
  identity recurrence {
    base schedule-type;
    description
      "Indicates a recurrence-based schedule.";
  }

  identity schedule-state {
    description
      "Base identity for schedule state.";
  }

  identity enabled {
    base schedule-state;
    description
      "Indicates a recurrence with an enabled state.";
  }

  identity finished {
    base schedule-state;
    description
      "Indicates a recurrence with a finished state.
       The finished state indicates that the schedule has ended.";
  }

  identity disabled {
    base schedule-state;
    description
      "Indicates a recurrence with a disabled state.";
  }

  identity out-of-date {
    base schedule-state;
    description
      "Indicates a recurrence with an out-of-date state.";
  }
  
  identity discard-action {
    description
      "Indicates that a schedule will be discarded.";
  }
  
  identity warning {
    base discard-action;
    description
      "Indicates that a warning message is generated
       when a schedule is discarded.";
  }

  identity error {
    base discard-action;
    description
      "Indicates that an error message is generated
       when a schedule is discarded.";
  }

  identity silently-discard {
    base discard-action;
    description
      "Indicates that an invalid schedule is silently 
       discarded.";
  }

  grouping generic-schedule-params {
    description
      "Includes a set of generic parameters that are followed by
       the entity that supports schedules.

       Such parameters are used as guards to prevent, e.g., stale
       configuration.";
    leaf description {
      type string;
      description
        "Provides a description of the schedule.";
    }
    leaf time-zone-identifier {
      type sys:timezone-name;
      description
        "Indicates the identifier for the time zone.";
    }
    leaf validity {
      type yang:date-and-time;
      description
        "Specifies the date and time after which a schedule will
         be considered as invalid. This parameter takes precedence
         over similar attributes that are provided at the schedule
         instance itself.";
    }
    leaf max-allowed-start {
      type yang:date-and-time;
      description
        "Specifies the maximum scheduled start date and time. 
         A requested schedule whose first instance occurs after 
         this value cannot be accepted by the entity. Specifically, 
         a requested schedule will be rejected if the first 
         occurrence of that schedule exceeds 'max-allowed-start'.";
    }
    leaf min-allowed-start {
      type yang:date-and-time;
      description
        "Specifies the minimum scheduled start date and time. 
         A requested schedule whose first instance occurs before 
         this value cannot be accepted by the entity. Specifically, 
         a requested schedule will be rejected if the first  
         occurrence of that schedule is scheduled before 
         'min-allowed-start'.";
    }
    leaf max-allowed-end {
      type yang:date-and-time;
      description
        "A requested schedule will be rejected if the end time of 
         the last occurrence exceeds 'max-allowed-end'.";
    }
    leaf discard-action {
      type identityref {
        base discard-action;
      }
      description
        "Specifies the behavior when a schedule is discarded when
         enforcing the guards in this grouping or it is received
         out-of-date.";    
    }
  }

  grouping period-of-time {
    description
      "This grouping is defined for period of time property.";
    reference
      "RFC 5545: Internet Calendaring and Scheduling Core Object
                 Specification (iCalendar), Section 3.3.9";
    leaf period-description {
      type string;
      description
        "Provides a description of the period.";
    }
    leaf period-start {
      type yang:date-and-time;
      mandatory true;
      description
        "Period start time.";
    }
    leaf time-zone-identifier {
      type sys:timezone-name;
      description
        "Indicates the identifier for the time zone in a time zone
         database. This parameter MUST be specified if 'period-start'
         value is neither reported in the format of UTC nor time zone
         offset to UTC.";
    }
    choice period-type {
      description
        "Indicates the type of the time period. Two types are
         supported.";
      case explicit {
        description
          "A period of time is identified by its start and its end.
           'period-start' indicates the period start.";
        leaf period-end {
          type yang:date-and-time;
          description
            "Period end time. The start MUST be before the end. If a
             local time without time zone offset to UTC time is
             specified, it MUST use the same time zone reference as
             'period-start' parameter. If 'period-start' also uses a
             local time without time zone offset to UTC, it MUST use
             the time zone as specified by the
             'time-zone-identifier' parameter.";
        }
      }
      case duration {
        description
          "A period of time is defined by a start and a positive
           duration of time.";
        leaf duration {
          type duration {
            pattern 'P((([0-9]+)D)?(T(0[0-9]|1[0-9]|2[0-3])'
                  + ':[0-5][0-9]:[0-5][0-9]))|P([0-9]+)W';
          }
          description
            "A positive duration of the time. This value is
             equivalent to the format of duration type except that
             the value cannot be negative.";
        }
      }
    }
  }

  grouping recurrence {
    description
      "A simple definition of recurrence.";
    leaf recurrence-description {
      type string;
      description
        "Provides a description of the recurrence.";
    }
    leaf frequency {
      type identityref {
        base frequency-type;
      }
      mandatory true;
      description
        "Specifies the frequency type of the recurrence rule.";
    }
    leaf interval {
      type uint32;
      description
        "A positive integer representing at which intervals the
         recurrence rule repeats. For example, within a 'daily'
         recurrence rule, a value of '8' means every eight days.
         The default value is '1', means every second for a 
         'secondly' recurrence rule, every minute for a 'minutely'
         rule, and so on.";
    }
  }

  grouping recurrence-utc {
    description
      "A simple definition of recurrence with time specified in
       UTC. This grouping is intended to be machine-friendly.";
    container recurrence-first {
      description
        "Specifies the first instance of the recurrence.";
      leaf utc-start-time {
        type yang:date-and-time;
        description
          "Defines the instant date and time of the first instance
           in the recurrence set. A UTC format MUST be used.";
      }
      leaf duration {
        type uint32;
        units "seconds";
        description
          "When specified, it indicates how long the first occurrence
           last. Unless specified otherwise, it also applies to all
           the other instances in the recurrence set.";
      }
    }
    choice recurrence-bound {
      description
        "Modes to bound the recurrence rule. If no choice is
         indicated, the recurrence rule is considered to repeat
         forever.";
      case until {
        description
          "This case defines a way that bounds the recurrence
           rule in an inclusive manner.";
        leaf utc-until {
          type yang:date-and-time;
          description
            "This parameter specifies a date and time value to
             inclusively bound the recurrence in UTC format. If
             the value specified by this parameter is synchronized
             with the specified recurrence, it becomes the last
             instance of the recurrence.";
        }
      }
      case count {
        description
          "This case defines the number of occurrences at which
           to range-bound the recurrence.";
        leaf count {
          type uint32;
          description
            "The positive number of occurrences at which to
             range-bound the recurrence.";
        }
      }
    }
    uses recurrence;
  }
  
  grouping recurrence-with-time-zone {
    description
      "A simple definition of recurrence to specify the time
       with a local time and time zone identifier. This grouping
       is intended to be human-friendly.";
    container recurrence-first {
      description
        "Specifies the first instance of the recurrence.";
      leaf date-time-start {
        type yang:date-and-time;
        description
          "Defines the instant date and time of the first instance 
           in the recurrence set.";
      }
      leaf duration {
        type duration;
        description
          "When specified, it indicates how long the first
           occurrence last. Unless specified otherwise, it also
           applies to all the other instances in the recurrence
           set.";
      }
      leaf time-zone-identifier {
        type sys:timezone-name;
        description
          "Indicates the identifier for the time zone in a time
           zone database. This parameter MUST be specified if
           'date-time-start' or 'until' value is neither
           reported in the format of UTC nor time zone offset to
           UTC.";
      }
    }
    choice recurrence-bound {
      description
        "Modes to bound the recurrence rule. If no choice is
         indicated, the recurrence rule is considered to repeat
         forever.";
      case until {
        description
          "The end of the recurrence is indicated by a specific
           date-and-time value.";
        leaf until {
          type yang:date-and-time;
          description
            "Specifies a date and time value to bound the
             recurrence. If the value specified by this parameter
             is synchronized with the specified recurrence, it
             becomes the last instance of the recurrence.";
        }
      }
      case count {
        description
          "The end of the recurrence is indicated by the number
           of occurrences.";
        leaf count {
          type uint32;
          description
            "The positive number of occurrences at which to
             range-bound the recurrence.";
        }
      }
    }
    uses recurrence;
  }

  grouping recurrence-utc-with-date-times {
    description
      "This grouping defines an aggregate set of repeating 
       occurrences with UTC time format. The recurrence instances 
       are specified by the occurrences defined by both the
       recurrence rule and 'period-timeticks' list. Duplicate 
       instances are ignored.";
    uses recurrence-utc;
    list period-timeticks {
      key "period-start";
      description
        "A list of periods with timeticks formats.";      
      leaf period-start {
        type yang:timeticks;
        must
          "(not(derived-from(../../frequency,"
         +"'schedule:secondly')) or (current() < 100)) and "
         +"(not(derived-from(../../frequency,"
         +"'schedule:minutely')) or (current() < 6000)) and "
         +"(not(derived-from(../../frequency,'schedule:hourly'))"
         +" or (current() < 360000)) and "
         +"(not(derived-from(../../frequency,'schedule:daily'))"
         +" or (current() < 8640000)) and "
         +"(not(derived-from(../../frequency,'schedule:weekly'))"
         +" or (current() < 60480000)) and "
         +"(not(derived-from(../../frequency,"
         +"'schedule:monthly')) or (current() < 267840000)) and "
         +"(not(derived-from(../../frequency,'schedule:yearly'))"
         +" or (current() < 3162240000))" {
        error-message
          "The period-start must not exceed the frequency 
           interval.";
        }        
        description
          "Start time of the schedule within one recurrence.";
      }
      leaf period-end {
        type yang:timeticks;
        description
          "End time of the schedule within one recurrence.";
      }
    }
  }
  
  grouping recurrence-time-zone-with-date-times {
    description
      "This grouping defines an aggregate set of repeating 
       occurrences with local time format and time zone specified. 
       The recurrence instances are specified by the occurrences
       defined by both the recurrence rule and 'period' list. 
       Duplicate instances are ignored.";  
    uses recurrence-with-time-zone;
    list period {
      key "period-start";
      description
        "A list of periods with date-and-time formats.";
      uses period-of-time;
    }
  }

  grouping icalendar-recurrence {
    description
      "This grouping specifies properties of a recurrence rule.";
    reference
      "RFC 5545: Internet Calendaring and Scheduling Core Object
                 Specification (iCalendar), Section 3.8.5";
    uses recurrence-time-zone-with-date-times;
    leaf-list bysecond {
      type uint32 {
        range "0..60";
      }
      description
        "Specifies a list of seconds within a minute.";
    }
    leaf-list byminute {
      type uint32 {
        range "0..59";
      }
      description
        "Specifies a list of minutes within an hour.";
    }
    leaf-list byhour {
      type uint32 {
        range "0..23";
      }
      description
        "Specifies a list of hours of the day.";
    }
    list byday {
      key "weekday";
      description
        "Specifies a list of days of the week.";
      leaf-list direction {
        when "derived-from(../../frequency, 'schedule:monthly') or "
          +  "(derived-from(../../frequency, 'schedule:yearly') "
          +  " and not(../../byyearweek))";
        type int32 {
          range "-53..-1|1..53";
        }
        description
          "When specified, it indicates the nth occurrence of a
           specific day within the monthly or yearly recurrence
           rule. For example, within a monthly rule, +1 monday 
           represents the first monday within the month, whereas 
           -1 monday represents the last monday of the month.";
      }
      leaf weekday {
        type schedule:weekday;
        description
          "Corresponds to seven days of the week.";
      }
    }
    leaf-list bymonthday {
      type int32 {
        range "-31..-1|1..31";
      }
      description
        "Specifies a list of days of the month.";
    }
    leaf-list byyearday {
      type int32 {
        range "-366..-1|1..366";
      }
      description
        "Specifies a list of days of the year.";
    }
    leaf-list byyearweek {
      when "derived-from(../frequency, 'schedule:yearly')";
      type int32 {
        range "-53..-1|1..53";
      }
      description
        "Specifies a list of weeks of the year.";
    }
    leaf-list byyearmonth {
      type uint32 {
        range "1..12";
      }
      description
        "Specifies a list of months of the year.";
    }
    leaf-list bysetpos {
      type int32 {
        range "-366..-1|1..366";
      }
      description
        "Specifies a list of values that corresponds to the nth
         occurrence within the set of recurrence instances
         specified by the rule. It must only be used in conjunction
         with another by the rule part.";
    }
    leaf workweek-start {
      type schedule:weekday;
      description
        "Specifies the day on which the workweek starts. The 
         default value is 'monday'.";
    }
    leaf-list exception-dates {
      type yang:date-and-time;
      description
        "Defines a list of exceptions for recurrence.";
    }
  }

  grouping schedule-status {
    description
      "This grouping defines common properties of scheduling
       status.";
    leaf state {
      type identityref {
        base schedule-state;
      }
      description
        "Indicates the current state of the schedule.";
    }
    leaf version {
      type uint16;
      description
        "Indicates the version number of the schedule.";
    }
    leaf schedule-type {
      type identityref {
        base schedule-type;
      }
      description
        "Indicates the schedule type.";
    }
    leaf local-time {
      type yang:date-and-time;
      config false;
      description
        "Reports the local time as used by the entity that
         hosts the schedule.";
    }
    leaf last-update {
      type yang:date-and-time;
      config false;
      description
        "Reports the timestamp that the schedule is last updated.";
    }
    leaf counter {
      when "derived-from-or-self(../schedule-type, "
         + "'schedule:recurrence')";
      type yang:counter32;
      config false;
      description
        "The counter of occurrences since the schedule was enabled.
         The count wraps around when it reaches the maximum value.";
    }
    leaf last-occurrence {
      when "derived-from-or-self(../schedule-type, "
         + "'schedule:recurrence')";
      type yang:date-and-time;
      config false;
      description
        "Indicates the timestamp of last occurrence.";    
    }
    leaf upcoming-occurrence {
      when "derived-from-or-self(../schedule-type, "
         + "'schedule:recurrence')"
         + "and derived-from-or-self(../state, 'schedule:enabled')";
      type yang:date-and-time;
      config false;
      description
        "Indicates the timestamp of next occurrence.";
    }
    leaf last-failed-occurrence {
      when "derived-from-or-self(../schedule-type, "
         + "'schedule:recurrence')";
      type yang:date-and-time;
      config false;
      description
        "Indicates the timestamp of last failed action triggered by
         the schedule.";    
    }
    leaf failure-counter {
      when "derived-from-or-self(../schedule-type, "
         + "'schedule:recurrence')";
      type yang:counter32;
      config false;
      description
        "Counts the number of failures while invoking the scheduled
         action.";
    }
  }

  grouping schedule-status-with-name {
    description
      "This grouping defines common properties of scheduling
       status.";
    leaf schedule-id {
      type string;
      description
        "The schedule identifier that uniquely identifies a
         schedule within a device, controller, network, etc. 
         The unicity scope depends on the implementation.";
    }
    uses schedule-status;
  }
}
]]></sourcecode>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>This section uses the template described in <xref section="3.7" sectionFormat="of" target="I-D.ietf-netmod-rfc8407bis"/>.</t>
      <t>The "ietf-schedule" YANG module specified in this document defines schema for data
   that is designed to be accessed via network management protocols such
   as NETCONF <xref target="RFC6241"/> or RESTCONF <xref target="RFC8040"/>.  The lowest NETCONF layer
   is the secure transport layer, and the mandatory-to-implement secure
   transport is Secure Shell (SSH) <xref target="RFC6242"/>.  The lowest RESTCONF layer
   is HTTPS, and the mandatory-to-implement secure transport is TLS
   <xref target="RFC8446"/>.</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>The "ietf-schedule" module defines a set of types and
   groupings.  These nodes are intended to be reused by other YANG
   modules.  The module by itself does not expose any data nodes that
   are writable, data nodes that contain read-only state, or RPCs.  As
   such, there are no additional security issues related to the "ietf-
   schedule" module that need to be considered.</t>
      <t>Care must be taken when defining recurrences occurring very often and
   frequent that can be an additional source of attacks by keeping the system
   permanently busy with the management of scheduling.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <section anchor="the-ietf-xml-registry">
        <name>The "IETF XML" Registry</name>
        <t>This document registers the following URI in the "IETF XML Registry" <xref target="RFC3688"/>.</t>
        <artwork><![CDATA[
        URI: urn:ietf:params:xml:ns:yang:ietf-schedule
        Registrant Contact: The IESG.
        XML: N/A, the requested URI is an XML namespace.
]]></artwork>
      </section>
      <section anchor="the-yang-module-names-registry">
        <name>The "YANG Module Names" Registry</name>
        <t>This document registers the following YANG module in the "YANG Module Names"
   registry <xref target="RFC6020"/>.</t>
        <artwork><![CDATA[
        name:               ietf-schedule
        namespace:          urn:ietf:params:xml:ns:yang:ietf-schedule
        prefix:             schedule
        maintained by IANA? N
        reference:          RFC XXXX
]]></artwork>
      </section>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC3231">
          <front>
            <title>Definitions of Managed Objects for Scheduling Management Operations</title>
            <author fullname="D. Levi" initials="D." surname="Levi"/>
            <author fullname="J. Schoenwaelder" initials="J." surname="Schoenwaelder"/>
            <date month="January" year="2002"/>
            <abstract>
              <t>This memo defines a portion of the Management Information Base (MIB) for use with network management protocols in the Internet community. In particular, it describes a set of managed objects that are used to schedule management operations periodically or at specified dates and times. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3231"/>
          <seriesInfo name="DOI" value="10.17487/RFC3231"/>
        </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="RFC5545">
          <front>
            <title>Internet Calendaring and Scheduling Core Object Specification (iCalendar)</title>
            <author fullname="B. Desruisseaux" initials="B." role="editor" surname="Desruisseaux"/>
            <date month="September" year="2009"/>
            <abstract>
              <t>This document defines the iCalendar data format for representing and exchanging calendaring and scheduling information such as events, to-dos, journal entries, and free/busy information, independent of any particular calendar service or protocol. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5545"/>
          <seriesInfo name="DOI" value="10.17487/RFC5545"/>
        </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="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="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="RFC6242">
          <front>
            <title>Using the NETCONF Protocol over Secure Shell (SSH)</title>
            <author fullname="M. Wasserman" initials="M." surname="Wasserman"/>
            <date month="June" year="2011"/>
            <abstract>
              <t>This document describes a method for invoking and running the Network Configuration Protocol (NETCONF) within a Secure Shell (SSH) session as an SSH subsystem. This document obsoletes RFC 4742. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6242"/>
          <seriesInfo name="DOI" value="10.17487/RFC6242"/>
        </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="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="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="I-D.ietf-opsawg-ucl-acl">
          <front>
            <title>A YANG Data Model and RADIUS Extension for Policy-based Network Access Control</title>
            <author fullname="Qiufang Ma" initials="Q." surname="Ma">
              <organization>Huawei</organization>
            </author>
            <author fullname="Qin Wu" initials="Q." surname="Wu">
              <organization>Huawei</organization>
            </author>
            <author fullname="Mohamed Boucadair" initials="M." surname="Boucadair">
              <organization>Orange</organization>
            </author>
            <author fullname="Daniel King" initials="D." surname="King">
              <organization>Lancaster University</organization>
            </author>
            <date day="6" month="June" year="2024"/>
            <abstract>
              <t>   This document defines a YANG data model for policy-based network
   access control, which provides consistent and efficient enforcement
   of network access control policies based on group identity.
   Moreover, this document defines a mechanism to ease the maintenance
   of the mapping between a user group identifier and a set of IP/MAC
   addresses to enforce policy-based network access control.

   In addition, the document defines a Remote Authentication Dial-in
   User Service (RADIUS) attribute that is used to communicate the user
   group identifier as part of identification and authorization
   information.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-opsawg-ucl-acl-04"/>
        </reference>
        <reference anchor="I-D.contreras-opsawg-scheduling-oam-tests">
          <front>
            <title>A YANG Data Model for Network Diagnosis by scheduling sequences of OAM tests</title>
            <author fullname="Luis M. Contreras" initials="L. M." surname="Contreras">
              <organization>Telefonica</organization>
            </author>
            <author fullname="Victor Lopez" initials="V." surname="Lopez">
              <organization>Nokia</organization>
            </author>
            <date day="10" month="July" year="2023"/>
            <abstract>
              <t>   This document defines a YANG data model for network diagnosis on-
   demand using Operations, Administration, and Maintenance (OAM) tests.
   This document defines both 'oam-unitary-test' and 'oam-test-sequence'
   data models to enable on-demand activation of network diagnosis
   procedures.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-contreras-opsawg-scheduling-oam-tests-01"/>
        </reference>
        <reference anchor="I-D.ietf-tvr-schedule-yang">
          <front>
            <title>YANG Data Model for Scheduled Attributes</title>
            <author fullname="Yingzhen Qu" initials="Y." surname="Qu">
              <organization>Futurewei Technologies</organization>
            </author>
            <author fullname="Acee Lindem" initials="A." surname="Lindem">
              <organization>LabN Consulting, L.L.C.</organization>
            </author>
            <author fullname="Eric Kinzie" initials="E." surname="Kinzie">
              <organization>LabN Consulting, L.L.C.</organization>
            </author>
            <author fullname="Don Fedyk" initials="D." surname="Fedyk">
              <organization>LabN Consulting, L.L.C.</organization>
            </author>
            <author fullname="Marc Blanchet" initials="M." surname="Blanchet">
              <organization>Viagenie</organization>
            </author>
            <date day="16" month="April" year="2024"/>
            <abstract>
              <t>   The YANG model in this document includes three modules, and can be
   used to manage network resources and topologies with scheduled
   attributes, such as predictable link loss and link connectivity as a
   function of time.  The intent is to have this information be utilized
   by Time-Variant Routing systems.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-tvr-schedule-yang-00"/>
        </reference>
        <reference anchor="RFC8413">
          <front>
            <title>Framework for Scheduled Use of Resources</title>
            <author fullname="Y. Zhuang" initials="Y." surname="Zhuang"/>
            <author fullname="Q. Wu" initials="Q." surname="Wu"/>
            <author fullname="H. Chen" initials="H." surname="Chen"/>
            <author fullname="A. Farrel" initials="A." surname="Farrel"/>
            <date month="July" year="2018"/>
            <abstract>
              <t>Time-Scheduled (TS) reservation of Traffic Engineering (TE) resources can be used to provide resource booking for TE Label Switched Paths so as to better guarantee services for customers and to improve the efficiency of network resource usage at any moment in time, including network usage that is planned for the future. This document provides a framework that describes and discusses the architecture for supporting scheduled reservation of TE resources. This document does not describe specific protocols or protocol extensions needed to realize this service.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8413"/>
          <seriesInfo name="DOI" value="10.17487/RFC8413"/>
        </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="21" month="June" year="2024"/>
            <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-12"/>
        </reference>
        <reference anchor="RFC3339">
          <front>
            <title>Date and Time on the Internet: Timestamps</title>
            <author fullname="G. Klyne" initials="G." surname="Klyne"/>
            <author fullname="C. Newman" initials="C." surname="Newman"/>
            <date month="July" year="2002"/>
            <abstract>
              <t>This document defines a date and time format for use in Internet protocols that is a profile of the ISO 8601 standard for representation of dates and times using the Gregorian calendar.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3339"/>
          <seriesInfo name="DOI" value="10.17487/RFC3339"/>
        </reference>
        <reference anchor="RFC7951">
          <front>
            <title>JSON Encoding of Data Modeled with YANG</title>
            <author fullname="L. Lhotka" initials="L." surname="Lhotka"/>
            <date month="August" year="2016"/>
            <abstract>
              <t>This document defines encoding rules for representing configuration data, state data, parameters of Remote Procedure Call (RPC) operations or actions, and notifications defined using YANG as JavaScript Object Notation (JSON) text.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7951"/>
          <seriesInfo name="DOI" value="10.17487/RFC7951"/>
        </reference>
        <reference anchor="I-D.ietf-tvr-use-cases">
          <front>
            <title>TVR (Time-Variant Routing) Use Cases</title>
            <author fullname="Edward J. Birrane" initials="E. J." surname="Birrane">
              <organization>JHU/APL</organization>
            </author>
            <author fullname="Nicolas Kuhn" initials="N." surname="Kuhn">
              <organization>Thales Alenia Space</organization>
            </author>
            <author fullname="Yingzhen Qu" initials="Y." surname="Qu">
              <organization>Futurewei Technologies</organization>
            </author>
            <author fullname="Rick Taylor" initials="R." surname="Taylor">
              <organization>Ori Industries</organization>
            </author>
            <author fullname="Li Zhang" initials="L." surname="Zhang">
              <organization>Huawei</organization>
            </author>
            <date day="29" month="February" year="2024"/>
            <abstract>
              <t>   This document introduces use cases where Time-Variant Routing (TVR)
   computations (i.e. routing computations taking into considerations
   time-based or scheduled changes to a network) could improve routing
   protocol convergence and/or network performance.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-tvr-use-cases-09"/>
        </reference>
        <reference anchor="I-D.ietf-netmod-eca-policy">
          <front>
            <title>A YANG Data model for ECA Policy Management</title>
            <author fullname="Qin Wu" initials="Q." surname="Wu">
              <organization>Huawei</organization>
            </author>
            <author fullname="Igor Bryskin" initials="I." surname="Bryskin">
              <organization>Individual</organization>
            </author>
            <author fullname="Henk Birkholz" initials="H." surname="Birkholz">
              <organization>Fraunhofer SIT</organization>
            </author>
            <author fullname="Xufeng Liu" initials="X." surname="Liu">
              <organization>Volta Networks</organization>
            </author>
            <author fullname="Benoît Claise" initials="B." surname="Claise">
              <organization>Cisco</organization>
            </author>
            <date day="19" month="February" year="2021"/>
            <abstract>
              <t>   This document defines a YANG data model for Event Condition Action
   (ECA) policy management.  The ECA policy YANG module provides the
   ability to delegate some network management functions to the server
   (e.g., a NETCONF or RESTCONF server) which can take simple and
   instant action when a trigger condition on the managed objects is
   met.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-netmod-eca-policy-01"/>
        </reference>
        <reference anchor="I-D.liu-netmod-yang-schedule">
          <front>
            <title>A YANG Data Model for Configuration Scheduling</title>
            <author fullname="Xufeng Liu" initials="X." surname="Liu">
              <organization>Jabil</organization>
            </author>
            <author fullname="Igor Bryskin" initials="I." surname="Bryskin">
              <organization>Huawei Technologies</organization>
            </author>
            <author fullname="Vishnu Pavan Beeram" initials="V. P." surname="Beeram">
              <organization>Juniper Networks</organization>
            </author>
            <author fullname="Tarek Saad" initials="T." surname="Saad">
              <organization>Cisco Systems Inc</organization>
            </author>
            <author fullname="Himanshu C. Shah" initials="H. C." surname="Shah">
              <organization>Ciena</organization>
            </author>
            <author fullname="Oscar Gonzalez de Dios" initials="O. G." surname="de Dios">
              <organization>Telefonica</organization>
            </author>
            <date day="1" month="March" year="2018"/>
            <abstract>
              <t>   This document describes a data model for configuration scheduling.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-liu-netmod-yang-schedule-05"/>
        </reference>
      </references>
    </references>
    <?line 1698?>

<section anchor="usage">
      <name>Examples of Format Representation</name>
      <t>This section provides some examples to illustrate the use of the
   period and recurrence formats defined in <xref target="sec-schedule"/>. Note that a "grouping"
   does not define any data nodes in the schema tree; the examples illustrated are
   thus for the ease of understanding. Only the message body is provided with
   JSON used for encoding per the guidance in <xref target="RFC7951"/>.</t>
      <section anchor="the-generic-schedule-params-grouping">
        <name>The "generic-schedule-params" Grouping</name>
        <t><xref target="ex-0"/> indicates the example of a requested schedule that needs to start no earlier than
   08:00 AM, January 1, 2025 and end no later than 8:00 PM, January 31, 2025 (Beijing time).
   Schedule requests that fail to meet the requirements are ignored by the system.</t>
        <figure anchor="ex-0">
          <name>Generic Parameters for Schedule Validation</name>
          <artwork><![CDATA[
{
  "time-zone-identifier": "China/Beijing",
  "min-allowed-start": "2025-01-01T08:00:00",
  "max-allowed-end": "2025-01-31T20:00:00",
  "discard-action": "ietf-schedule:silently-discard"
}
]]></artwork>
        </figure>
      </section>
      <section anchor="the-period-of-time-grouping">
        <name>The "period-of-time" Grouping</name>
        <t><xref target="ex-1"/> shows an example of a period that starts at 08:00:00 UTC, on January 1, 2025 and ends at 18:00:00 UTC
   on December 31, 2027.</t>
        <figure anchor="ex-1">
          <name>Simple Start/End Schedule</name>
          <artwork><![CDATA[
{
  "period-start": "2025-01-01T08:00:00Z",
  "period-end": "2027-12-31T18:00:00Z"
}
]]></artwork>
        </figure>
        <t>An example of a period that starts at 08:00:00 UTC, on January 1, 2025 and lasts 15 days and
   5 hours and 20 minutes is encoded as shown in <xref target="ex-2"/>.</t>
        <figure anchor="ex-2">
          <name>Simple Schedule with Duration</name>
          <artwork><![CDATA[
{
  "period-start": "2025-01-01T08:00:00Z",
  "duration": "P15DT05:20:00"
}
]]></artwork>
        </figure>
        <t>An example of a period that starts at 2:00 A.M. in Los Angeles on November 19,
   2025 and lasts 20 weeks is depicted in <xref target="ex-3"/>.</t>
        <figure anchor="ex-3">
          <name>Simple Schedule with Time Zone Indication</name>
          <artwork><![CDATA[
{
  "period-start": "2025-11-19T02:00:00",
  "time-zone-identifier": "America/Los_Angeles",
  "duration": "P20W"
}
]]></artwork>
        </figure>
      </section>
      <section anchor="the-recurrence-grouping">
        <name>The "recurrence" Grouping</name>
        <t><xref target="ex-6"/> indicates a recurrence of every 2 days which starts immediately and repeat forever:</t>
        <figure anchor="ex-4">
          <name>Simple Schedule with Recurrence</name>
          <artwork><![CDATA[
{
  "recurrence-description": "forever recurrence rule",
  "frequency": "ietf-schedule:daily",
  "interval": 2,
}
]]></artwork>
        </figure>
      </section>
      <section anchor="the-recurrence-utc-grouping">
        <name>The "recurrence-utc" Grouping</name>
        <t><xref target="ex-5"/> indicates a recurrence from 8:00 AM to 9:00 AM every day, from
   December 1 to December 31, 2025 in UTC:</t>
        <figure anchor="ex-5">
          <name>Simple Schedule with Recurrence in UTC</name>
          <artwork><![CDATA[
{
  "recurrence-first": {
    "utc-start-time": "2025-12-01T08:00:00Z",
    "duration": 3600;
  },
  "frequency": "ietf-schedule:daily",
  "interval": 1,
  "utc-until": "2025-12-31T23:59:59Z"
}
]]></artwork>
        </figure>
      </section>
      <section anchor="the-recurrence-with-time-zone-grouping">
        <name>The "recurrence-with-time-zone" Grouping</name>
        <t><xref target="ex-6"/> indicates a recurrence of every 2 hours for 10 occurrences, lasting
   10 minutes, and starting at 3 p.m. on December 1, 2025 in New York:</t>
        <figure anchor="ex-6">
          <name>Simple Schedule with Recurrence with Time Zone Indication</name>
          <artwork><![CDATA[
{
  "recurrence-first": {
    "date-time-start": "2025-12-01T15:00:00",
    "duration": "PT00:10:00",
    "time-zone-identifier": "America/New_York"
  },
  "frequency": "ietf-schedule:hourly",
  "interval": 2,
  "count": 10
}
]]></artwork>
        </figure>
      </section>
      <section anchor="the-recurrence-utc-with-date-times-grouping">
        <name>The "recurrence-utc-with-date-times" Grouping</name>
        <t><xref target="ex-7"/> indicates a recurrence that occurs every two days starting at 9:00 AM
   and 3:00 PM for a duration of 30 minutes and 40 minutes respectively,
   from 2025-06-01 to 2025-06-30 in UTC:</t>
        <figure anchor="ex-7">
          <name>Example of Recurrence With Date Times</name>
          <artwork><![CDATA[
{
  "recurrence-first": {
    "utc-start-time": "2025-06-01T09:00:00Z",
  },
  "frequency": "ietf-schedule:daily",
  "interval": 2,
  "utc-until": "2025-06-30T23:59:59Z",
  "period-timeticks": [
    {
      "period-start": "3240000",
      "period-end": "3420000"
     },
     {
      "period-start": "5400000",
      "period-end": "5640000"
     }
   ]
}
]]></artwork>
        </figure>
      </section>
      <section anchor="the-recurrence-time-zone-with-date-times-grouping">
        <name>The "recurrence-time-zone-with-date-times" Grouping</name>
        <t><xref target="ex-8"/> indicates a recurrence that occurs every
   30 minutes and last for 15 minutes from 9:00 AM to 5:00 PM, and extra two occurrences
   at 6:00 PM and 6:30 PM with each lasting for 20 minutes on 2025-12-01 (New York):</t>
        <figure anchor="ex-8">
          <name>Example of Advanced Recurrence Schedule</name>
          <artwork><![CDATA[
{
  "recurrence-first": {
    "date-time-start": "2025-12-01T09:00:00",
    "duration": "PT00:15:00",
    "time-zone-identifier": "America/New_York"
  },
  "frequency": "ietf-schedule:minutely",
  "interval": 30,
  "until": "2025-12-01T17:00:00Z",
  "period": [
    {
      "period-start": "2025-12-01T18:00:00",
      "duration": "PT00:20:00"
    },
    {
      "period-start": "2025-12-01T18:30:00",
      "duration": "PT00:20:00"
    }
   ]
}
]]></artwork>
        </figure>
      </section>
      <section anchor="the-icalendar-recurrence-grouping">
        <name>The "icalendar-recurrence" Grouping</name>
        <t><xref target="ex-9"/> indicates 10 occurrences that occur at
   8:00 AM (EST), every last Saturday of the month starting in January 2024:</t>
        <figure anchor="ex-9">
          <name>Simple iCalendar Recurrence</name>
          <artwork><![CDATA[
{
  "recurrence-first": {
    "date-time-start": "2024-01-27T08:00:00",
    "time-zone-identifier": "America/New_York"
  },
  "frequency": "ietf-schedule:monthly",
  "count": 10,
  "byday": [
    {
      "direction": [-1],
      "weekday": "saturday"
    }
  ]
}
]]></artwork>
        </figure>
        <t><xref target="ex-10"/> is an example of a recurrence that occurs on the last
   workday of the month until December 25, 2025, from January 1, 2025:</t>
        <figure anchor="ex-10">
          <name>Example of Advanced iCalendar Recurrence</name>
          <artwork><![CDATA[
{
  "recurrence-first": {
  "date-time-start": "2025-01-01"
  },
  "frequency": "ietf-schedule:monthly",
  "until": "2025-12-25",
  "byday": [
    { "weekday": "monday"},
    { "weekday": "tuesday"},
    { "weekday": "wednesday"},
    { "weekday": "thursday"},
    { "weekday": "friday"}
  ],
  "bysetpos": [-1]
}
]]></artwork>
        </figure>
        <t><xref target="ex-11"/> indicates a recurrence that occurs every 20
   minutes from 9:00 AM to 4:40 PM (UTC), with the occurrence starting at 10:20 AM
   being excluded on 2025-12-01:</t>
        <figure anchor="ex-11">
          <name>Example of Advanced iCalendar Recurrence with Exceptions</name>
          <artwork><![CDATA[
{
  "recurrence-first": {
    "date-time-start": "2025-12-01T09:00:00Z"
  },
  "until": "2025-12-01T16:40:00Z",
  "frequency": "ietf-schedule:minutely",
  "byminute": [0, 20, 40],
  "byhour": [9, 10, 11, 12, 13, 14, 15, 16],
  "exception-dates": ["2025-12-01T10:20:00Z"]
}
]]></artwork>
        </figure>
      </section>
      <section anchor="the-schedule-status-grouping">
        <name>The "schedule-status" Grouping</name>
        <t><xref target="ex-12"/> indicates the scheduled recurrence status of <xref target="ex-11"/> at the time
   of 12:15 PM, 2025-12-01 (UTC):</t>
        <figure anchor="ex-12">
          <name>Example of a Schedule Status</name>
          <artwork><![CDATA[
{
  "state": "ietf-schedule:enabled",
  "version": 1,
  "schedule-type": "ietf-schedule:recurrence",
  "counter": 9,
  "last-occurrence": ["2025-12-01T12:00:00Z"],
  "upcoming-occurrence": ["2025-12-01T12:20:00Z"]
}
]]></artwork>
        </figure>
        <t>At the time of 12:15 PM, 2025-12-01 (UTC), the recurring event occurred at
  (note that occurrence at 10:20 AM is excluded):
  9:00, 9:20, 9:40, 10:00, 10:40, 11:00, 11:20, 11:40, 12:00.
  The last occurrence was at 12:00, the upcoming one is at 12:20.</t>
      </section>
    </section>
    <section anchor="sec-ext">
      <name>Examples of Using/Extending the "ietf-schedule" Module</name>
      <t>This non-normative section shows two examples for how the "ietf-schedule" module
   can be used or extended for scheduled events or attributes based on date and time.</t>
      <section anchor="features">
        <name>Example: Schedule Tasks to Execute Based on a Recurrence Rule</name>
        <t>Scheduled tasks can be used to execute specific actions based on certain recurrence rules (e.g.,
   every Friday at 8:00 AM). The following example module which "uses" the "icalendar-recurrence"
   grouping from "ietf-schedule" module shows how a scheduled task could be defined
   with different features used for options.</t>
        <artwork><![CDATA[
module example-scheduled-backup {
  yang-version 1.1;
  namespace "http://example.com/example-scheduled-backup";
  prefix "ex-scback";

  import ietf-inet-types {
    prefix "inet";
  }

  import ietf-schedule {
    prefix "schedule";
  }

  organization
    "Example, Inc.";

  contact
    "Support at example.com";

  description
    "Example of a module defining an scheduled based backup
     operation.";

  revision "2023-01-19" {
    description
      "Initial Version.";
    reference
      "RFC XXXX: A YANG Data Model for Scheduling.";
    }

  container scheduled-backup-tasks {
    description
      "A container for backing up all current running configuration
       on the device.";
    list tasks {
      key "task-id";
      description
        "The list of backing up tasks on this device.";
      leaf task-id {
        type string;
        description
          "The task identifier that uniquely identifies a scheduled 
           backup task.";
      }
      choice local-or-remote {
        description
          "Specifies whether the configuration to be backed up is
           local or remote.";
        case local {
          description
            "Configuration parameters for backing up of local
             devices.";
          leaf local {
            type empty;
            description
              "The parameter specifies the configuration to be
               backed up is on the local device.";
          }
        }
        case remote {
          description
            "Configuration parameters for backing up of remote
             devices.";
          leaf remote {
            type inet:domain-name;
            description
              "The parameter specifies the remote device domain
               name.";
          }
        }
      }

      container basic-recurrence-schedules {
        if-feature schedule:basic-recurrence-supported;
        description
          "Basic recurrence schedule specification, only applies when
           schedule:basic-recurrence-supported feaure is supported.";
        leaf schedule-id {
          type string;
          description
            "The schedule identifier for this recurrence rule.";
        }            
        uses schedule:recurrence;
       }

      container icalendar-recurrence-schedules {
        if-feature schedule:icalendar-recurrence-supported;
        description
          "Basic recurrence schedule specification, only applies when
           schedule:icalendar-recurrence-supported feaure is
           supported.";
        leaf schedule-id {
          type string;
          description
            "The schedule identifier for this recurrence rule.";
        }           
        uses schedule:icalendar-recurrence;
      }      
    }
  
    list schedule-set {
      key "schedule-id";
      description
        "The list of schedule status for the backup tasks.";
      uses schedule:schedule-status;
    }
  }
}
]]></artwork>
      </section>
      <section anchor="augments">
        <name>Example: Schedule Network Properties to Change Based on Date and Time</name>
        <t>Network properties may change over a specific period of time or based on a
   recurrence rule, e.g., <xref target="I-D.ietf-tvr-use-cases"/>.
   The following example module which augments the "recurrence-utc-with-date-times"
   grouping from "ietf-schedule" module shows how a scheduled based attribute
   could be defined.</t>
        <artwork><![CDATA[
module example-scheduled-link-bandwidth {
  yang-version 1.1;
  namespace "http://example.com/example-scheduled-link-bandwidth";
  prefix "ex-scattr";

  import ietf-network {
    prefix "nw";
    reference
      "RFC 8345: A YANG Data Model for Network Topologies";
  }

  import ietf-schedule {
    prefix "schedule";
    reference
      "RFC XXXX: A YANG Data Model for Scheduling";
  }

  organization
    "Example, Inc.";

  contact
    "Support at example.com";

  description
    "Example of a module defining a scheduled link bandwidth.";

  revision "2023-01-19" {
    description
      "Initial Version.";
    reference
      "RFC XXXX: A YANG Data Model for Scheduling.";
    }

  grouping link-bandwidth-grouping {
    description
      "Grouping of the link bandwidth definition.";
    leaf scheduled-bandwidth {
      type uint64;
      units "Kbps";
      description
        "Bandwidth values, expressed in kilobits per second.";
    }
  }

  container link-attributes {
    description
      "Definition of link attributes.";
    list link {
      key "source-node destination-node";
      description
        "Definition of link attributes.";
      leaf source-node {
        type nw:node-id;
        description
          "Indicates the source node identifier.";
      }
      leaf destination-node {
        type nw:node-id;
        description
          "Indicates the source node identifier.";
      }

      leaf default-bandwidth {
        type uint64;
        units "Kbps";
        description
          "Default bandwidth values when unspecified.";
      }

      choice time-variant-type {
        description
          "Controls the schedule type.";
        case period {
          uses schedule:period-of-time;
        }
        case recurrence {
          uses schedule:recurrence-utc-with-date-times {
            augment "period-timeticks" {
              description
                "Specifies the attributes inside each 
                 period-timeticks entry.";
              uses link-bandwidth-grouping;
            }
          }
        }
      }
    }
  }
}

]]></artwork>
        <t><xref target="ex-13"/> shows a configuration example of a link's bandwidth that is
  scheduled between 2025-12-01 0:00 UTC to the end of 2025-12-31 with a daily
  schedule. In each day, the bandwidth value is scheduled to be 500 Kbps between
  1:00 AM to 6:00 AM and 800 Kbps between 10:00 PM to 11:00 PM. The bandwidth
  value that's not covered by the period above is 1000 Kbps by default.</t>
        <figure anchor="ex-13">
          <name>Example of Scheduled Link's Bandwidth</name>
          <artwork><![CDATA[
<?xml version="1.0" encoding="utf-8"?>
<link-attributes
  xmlns="http://example.com/example-scheduled-link-bandwidth"
  xmlns:schedule="urn:ietf:params:xml:ns:yang:ietf-schedule">
  <link>
    <source-node>ne1</source-node>
    <destination-node>ne2</destination-node>
    <default-bandwidth>1000</default-bandwidth>
    <recurrence-first>
      <utc-start-time>2025-12-01T01:00:00Z</utc-start-time>
    </recurrence-first>
    <frequency>schedule:daily</frequency>
    <utc-until>2025-12-31T23:59:59Z</utc-until>
    <period-timeticks>
      <period-start>360000</period-start>
      <period-end>2160000</period-end>
      <scheduled-bandwidth>500</scheduled-bandwidth>
    </period-timeticks>
    <period-timeticks>
      <period-start>7920000</period-start>
      <period-end>8280000</period-end>
      <scheduled-bandwidth>800</scheduled-bandwidth>
    </period-timeticks>
  </link>
</link-attributes>
]]></artwork>
        </figure>
      </section>
    </section>
    <section anchor="ex-framework">
      <name>Examples of Using "ietf-schedule" Module for Scheduled Use of Resources Framework</name>
      <t>This section exemplifies how the architecture for supporting scheduled
   reservation of Traffic Engineering (TE) resources in <xref target="RFC8413"/> might leverage the "period-of-time"
   grouping defined in the "ietf-schedule" module to implement scheduled use of
   resources.</t>
      <t>The following example module shows how a scheduled link capacity reservation
   could be defined.</t>
      <artwork><![CDATA[
module example-sch-capacity-res {
  yang-version 1.1;
  namespace "http://example.com/example-sch-capacity-res";
  prefix "ex-schecaparev";

  import ietf-network-topology {
    prefix "nt";
  }

  import ietf-schedule {
    prefix "schedule";
  }

  container link-capability-reservations {
    list scheduled-link-capacity {
      key "schedule-id";
      leaf schedule-id {
        type string;
      }
      leaf link-id {
        type nt:link-id;
      }
      leaf reserved-capability {
        type uint64;
        units "Mbps";
      }
      uses schedule:period-of-time;
    }
  }
}
]]></artwork>
      <t><xref section="4" sectionFormat="of" target="RFC8413"/> defines the reference architecture for scheduled use
   of resources, the service requester sends a request to a Path Computation Element (PCE) and includes the
   parameters of the Label Switched Path (LSP) that the requester wishes to supply, the configuration
   example to provide the scheduled resource is shown in <xref target="ex-14"/>.</t>
      <figure anchor="ex-14">
        <name>Example of Scheduled Link's Bandwidth Reservation</name>
        <artwork><![CDATA[
<?xml version="1.0" encoding="utf-8"?>
<link-capability-reservations
  xmlns="http://example.com/example-sch-capacity-res"
  xmlns:schedule="urn:ietf:params:xml:ns:yang:ietf-schedule">
   <scheduled-link-capacity>
      <schedule-id>1</schedule-id>
      <link-id>1-2-1</link-id>
      <reserved-capability>500</reserved-capability>
      <period-start>2025-03-10T08:00:00Z</period-start>
      <period-end>2025-03-10T09:00:00Z</period-end>
   </scheduled-link-capacity>
   <scheduled-link-capacity>
      <schedule-id>2</schedule-id>
      <link-id>2-1-1</link-id>
      <reserved-capability>400</reserved-capability>
      <period-start>2025-04-01T00:00:00Z</period-start>
      <duration>PT09:00:00</duration>
   </scheduled-link-capacity>
   <scheduled-link-capacity>
      <schedule-id>3</schedule-id>
      <link-id>2-1-1</link-id>
      <reserved-capability>500</reserved-capability>
      <period-start>2025-04-01T09:00:00Z</period-start>
      <period-end>2025-04-01T23:59:59Z</period-end>
   </scheduled-link-capacity>
</link-capability-reservations>
]]></artwork>
      </figure>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>This work is derived from the <xref target="I-D.ietf-opsawg-ucl-acl"/>. There is a desire
   from the OPSAWG to see this model be separately defined for wide use in scheduling context.</t>
      <t>Thanks to Adrian Farrel, Wei Pan, Tianran Zhou, Joe Clarke, and Dhruv Dhody
   for their valuable comments and inputs to this work.</t>
      <t>Many thanks to the authors of <xref target="I-D.ietf-tvr-schedule-yang"/>, <xref target="I-D.contreras-opsawg-scheduling-oam-tests"/>, and <xref target="I-D.ietf-netmod-eca-policy"/>
   for the constructive discussion during IETF#118.</t>
      <t>Other related efforts were explored in the past, e.g., <xref target="I-D.liu-netmod-yang-schedule"/>.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
54/d12T+mxoXzTl+eaaIp8vM6RRVLq1+GOUM+KHocUZDMuwIL+QsvMpBdCq2
ItIZUS9jAhbFXoxMxCS/Yl7YyroUC1UcFFgYAXkEtxHUyoGPj5J5xRrRFfxn
qsSHWiOpLCVaONkcPYtv4XI3nUeTukBpSDDWVT5T1izbRFjkI2DpZP7CK3Wp
rYMtNmgcrM0MvXihepeBOVyWczn6xGJKLbi0MQ5k+iS9VOLZqL3GEkKC+OIW
uzCiJuzQAIUsHbOCJpixJPNDMYGv+30xIZKq/SyyftD5I3oSNjPnifVNWGeB
7QHqQ/yOvkIi1z1oBXDzckaFHzQdH9J5BJzTmdRdZvH7Pt0EknGf9Jxny7uk
2Z27WLPAoX+2AmCukmJWJLr3bZFMfuemvz43VQdSMdLvmfgNIz12zmOQrdLx
tw5F13ZsWJ9ra4u+1LzKSYevihiuVMiG0xk6Lshqmcu9QisAmX+HRLat+MPA
QBI6d13TEi70E822exYLEvsr3XiwO+wmXatH2v7isD1l76XL/DSHDeSP2dlo
waNOtQWDO6s3bjzBFszSY+dqQVerC7n3jMmDEqPRimYYRM/Rp8ZGJxkYzR1l
xcMy/3TGQw/DBToXgOYqj6kSOGSAAtE4SsaMh2uEPZ2lZCipgN9dQMeSFTNh
z1oiiiHc3Dpgo9FsIpdCC0PAXjYbXKlrM3/G1614fd6ns3qGPfBf44wgiUJ3
PQehPbqx+QJBI7NI0HmEElyMbGlRktE6H2nDkUe4SKmI2mIziYtpiuYOENDi
JeLjgg5Uog93mTYXbacHWWEkjSN9ETc68DSGfTUQDkBtuMMa1YC0zIk/mF5e
cFnNZdBCrXV699PWZcpFNZ0ENwiHA0AsWk8z7AG3d2AEeV2hsMCN1jOXtplM
uTPIUGbUAGQrDo0jyaI5mLYc78xMvtFlHaMbIb5Ez1CFdDVNXOWkB81ztKkD
wTV0Mn0kbvJ6OibbHhrolI4CUOBhG89SdrCXOewu8MkKBYGAV/K139Il/Zut
p0LKDddshN/e1sTmlVLEjBUT+TXRGXc01lHPurKuRuaDuqHNLS4j082QSjZI
nYzNGQ0OEhsTDQ2h7TTrXfVrd8PEPeizyky3p8wrRaU9SrwS8mxcoCVrgtZU
dQacRoMG4u4g02SIh5VoX+jWiupac8XPQjqtvWUraqh3V4PXZRa0vG08U3ZH
+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

-->

</rfc>
