<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.29 (Ruby 3.4.4) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-netmod-schedule-yang-07" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.28.1 -->
  <front>
    <title abbrev="Common Schedule YANG">A Common YANG Data Model for Scheduling</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-netmod-schedule-yang-07"/>
    <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="2025" month="June" day="12"/>
    <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 common types and groupings that are meant to be used
   for scheduling purposes such as event, policy, services, or resources based on
   date and time. For the sake of better modularity, the YANG module includes a
   set of recurrence related groupings with varying levels of representation
   (i.e., from basic to advanced) to accommodate a variety of requirements.
   It also defines groupings for validating requested schedules and reporting scheduling status.</t>
    </abstract>
    <note removeInRFC="true">
      <name>Discussion Venues</name>
      <t>This note is to be removed before publishing as an RFC.</t>
      <t>Discussion of this document takes place on the
    Network Modeling (NETMOD) Working Group mailing list (netmod@ietf.org),
    which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/netmod/"/>.</t>
      <t>Source for this draft and an issue tracker can be found at
    <eref target="https://github.com/netmod-wg/schedule-yang"/>.</t>
    </note>
  </front>
  <middle>
    <?line 66?>

<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.ietf-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. It also defines groupings for validating
requested schedules and reporting scheduling status.</t>
      <t>This document does not make any assumption about the nature of actions that are
triggered by the schedules. Detection and resolution of any schedule conflicts
are beyond the scope of this document.</t>
      <t><xref target="sec-mib"/> discusses the relationship with the Management Information Base (MIB)
managed objects for scheduling management operations 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>2025-05-30 --&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>Recurrence Rule:</dt>
        <dd>
          <t>Refers to a rule or repeating pattern for recurring events. See also <xref section="3.8.5.3" sectionFormat="of" target="RFC5545"/> for a comprehensive iCalendar recurrence rule specification.</t>
        </dd>
        <dt>Frequency:</dt>
        <dd>
          <t>Characterizes the type of a recurrence rule. Values are taken from "FREQ" rule in <xref section="3.3.10" sectionFormat="of" target="RFC5545"/>.</t>
        </dd>
        <dt/>
        <dd>
          <t>For example, repeating events based on an interval of a second or more are
classified as recurrence with a frequency value of "SECONDLY". Frequency values defined as identities
in the YANG module are used in lowercase.</t>
        </dd>
        <dt>iCalendar:</dt>
        <dd>
          <t>Refers to Internet Calendaring per <xref target="RFC5545"/>.</t>
        </dd>
        <dt>Interval:</dt>
        <dd>
          <t>Refers to an integer that specifies at which interval a recurrence rule repeats. Values are taken from "INTERVAL" rule in <xref section="3.3.10" sectionFormat="of" target="RFC5545"/>.</t>
        </dd>
        <dt/>
        <dd>
          <t>For example, "1", means every second for a secondly rule, every minute for a minutely rule, every hour for an hourly rule, etc.</t>
        </dd>
        <dt>System:</dt>
        <dd>
          <t>Refers to an entity that hosts 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. To that aim, a variety of representations of recurrence
   groupings ranging from basic to advanced (iclander like) are defined.
   To allow for different options, two features are defined in the data model:</t>
        <ul spacing="normal">
          <li>
            <t>"basic-recurrence"</t>
          </li>
          <li>
            <t>"icalendar-recurrence"</t>
          </li>
        </ul>
        <t>Refer to Sections <xref format="counter" target="sec-aug"/> and <xref format="counter" target="features"/> 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>"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 that has either the duration specified as 0 or the end time specified the same as start time, 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 (1) a start and end or (2) a start and positive duration of time. If neither an end nor a duration is indicated, the period is considered to last forever.</t>
              </li>
              <li>
                <t>recurrence: This type is used for a recurrence-based schedule. A recurrence may be periodic (i.e., repeat over the same period, e.g., every five minutes) or not (i.e., repeat in a non-regular manner, e.g., every day at 8 and 9 AM).</t>
              </li>
            </ul>
          </li>
          <li>
            <t>"frequency-type": Characterizes the repeating interval rule of a recurrence schedule (secondly, minutely, etc.).</t>
          </li>
          <li>
            <t>"schedule-state": Indicates the status of a schedule (enabled, disabled, conflicted, finished, etc.). This identity can also be used
to manage the state of individual instances of a recurrence-based schedule.</t>
          </li>
          <li>
            <t>"discard-action-type": Specifies the action for the responder to take (e.g., generate a warning or an error message) when
a requested schedule cannot be accepted for any reason and is discarded.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-grp">
        <name>Scheduling 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-basic" (<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-periods" (<xref target="sec-rec-utc-dt"/>)</t>
          </li>
          <li>
            <t>"recurrence-time-zone-with-periods" (<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>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 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[
  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
]]></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 <xref target="RFC7317"/> of the local date and time values. This parameter
   <bcp14>MUST</bcp14> be specified if any of the date and time values are in the format of local time.
   It <bcp14>MUST NOT</bcp14> be applied to date and time values which are specified in the format
   of UTC or time zone offset to UTC.</t>
          <t>The "validity" parameter specifies the date and time after which a schedule
   will not be considered as valid. It determines the latest time that a schedule
   can be started to execute independent of when it ends and takes precedence over
   similar attributes that are provided at the schedule instance itself. A requested
   schedule may still be accepted but any occurences that start later than the configured value will not be executed.</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 starts 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
   cannot be accepted for any reason and is discarded. Possible reasons include,
   but are not limited to, the requested schedule failing to satisfy the guards in this grouping,
   conflicting with existing schedules, or being 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 date and time ("period-start") and end date and time ("period-end"), or a
   start date and time ("period-start") and a non-negative time duration ("duration"). For the first
   format, the start of the period <bcp14>MUST</bcp14> be no later the end of the period. If neither an end date and time ("period-end")
   nor a duration ("duration") is indicated, the period is considered to last forever.
   If the duration ("duration") value is 0 or the end time ("period-end") is the same as the start time ("period-start"), the period
   is considered as a one-shot schedule. If no start date and time ("period-start")
   is specified, the period is considered to start immediately.</t>
          <t>The "time-zone-identifier" parameter indicates the identifier for the
   time zone. This parameter <bcp14>MUST</bcp14> be specified if either the "period-start" or "period-end"
   value is reported in local time format. It <bcp14>MUST NOT</bcp14> be applied to date and time
   values which are specified in the format of UTC or time zone offset to UTC.</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[
  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
]]></artwork>
          </figure>
        </section>
        <section anchor="sec-rec">
          <name>The "recurrence-basic" Grouping</name>
          <t>The "recurrence-basic" grouping (<xref target="rec-grp-tree"/>) specifies a simple recurrence rule which starts immediately and repeats forever.</t>
          <figure anchor="rec-grp-tree">
            <name>recurrence Grouping Tree Structure</name>
            <artwork><![CDATA[
  grouping recurrence-basic:
    +-- recurrence-description?   string
    +-- frequency?                identityref
    +-- interval?                 uint32
]]></artwork>
          </figure>
          <t>The frequency parameter ("frequency") identifies the type of a 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 interval the recurrence rule repeats. For example,
  within a "daily" recurrence rule, an interval value of "8" means every eight days.</t>
          <t>Note that per <xref section="4.13" sectionFormat="of" target="I-D.ietf-netmod-rfc8407bis"/>, neither a "default"
  nor a "mandatory" substatement is defined here for both "frequency" and "interval"
  parameters because there are cases (e.g., profiling) where using these statements is problematic.
  YANG modules using this grouping <bcp14>SHOULD</bcp14> refine these two nodes with either a
  "mandatory" or a "default" statement, if they always need to be configured or have default values.
  This recommendation <bcp14>MAY</bcp14> be ignored in cases such as when this grouping is used by another grouping.</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-basic"
   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[
  grouping recurrence-utc:
    +-- recurrence-first
    |  +-- start-time-utc?   yang:date-and-time
    |  +-- duration?         uint32
    +-- (recurrence-end)?
    |  +--:(until)
    |  |  +-- utc-until?          yang:date-and-time
    |  +--:(count)
    |     +-- count?              uint32
    +-- recurrence-description?   string
    +-- frequency?                identityref
    +-- interval?                 uint32
]]></artwork>
          </figure>
          <t>The "start-time-utc" 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 (e.g., through additional
   augmented parameters), the "duration" also applies to subsequent recurrence
   instances. When unspecified, each occurrence is considered as
   immediate completion (e.g., execute an immediate command that is considered
   to complete quickly) or hard to compute an exact duration (e.g., run a data
   analysis script whose execution time may depend on the data volume and
   computation resource availability). The behavior to follow when a task takes
   more time than specified by the "duration" is out of scope. Such considerations
   belong to task management, not schedule management.</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 occurrence will last. This document allows the interval between occurrences to be shorter than the duration of each occurrence (e.g., a recurring event is scheduled to start every day for a duration of 2 days).</t>
          <t>The repetition can be scoped by a specified end time or by a count of occurrences,
  indicated by the "recurrence-end" choice. The value of the "count" node <bcp14>MUST</bcp14> be greater than 1, the "start-time-utc" 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-basic" 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[
  grouping recurrence-with-time-zone:
    +-- recurrence-first
    |  +-- start-time?   yang:date-and-time
    |  +-- duration?     duration
    +-- time-zone-identifier?     sys:timezone-name
    +-- (recurrence-end)?
    |  +--:(until)
    |  |  +-- until?              yang:date-and-time
    |  +--:(count)
    |     +-- count?              uint32
    +-- recurrence-description?   string
    +-- frequency?                identityref
    +-- interval?                 uint32
]]></artwork>
          </figure>
          <t>The "recurrence-first" container includes "start-time" and "duration" parameters
   to specify the start time and period of the first occurrence. Unless specified otherwise (e.g., through additional
   augmented parameters), the "duration" also applies to subsequent recurrence instances. When unspecified, each occurrence is considered as
   immediate completion (e.g., execute an immediate command that is considered
   to complete quickly) or hard to compute an exact duration (e.g., run a data
   analysis script whose execution time may depend on the data volume and
   computation resource availability).</t>
          <t>The grouping also includes a
   "time-zone-identifier" parameter which <bcp14>MUST</bcp14> be specified if either the "start-time" or "until"
   value is reported in local time format. It <bcp14>MUST NOT</bcp14> be applied to date and time
   values which are specified in the format of UTC or 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-end" choice. The value of the "count" node <bcp14>MUST</bcp14> be greater than 1, the "start-time" 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-periods" Grouping</name>
          <t>The "recurrence-utc-with-periods" 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-periods Grouping Tree Structure</name>
            <artwork><![CDATA[
  grouping recurrence-utc-with-periods:
    +-- recurrence-first
    |  +-- start-time-utc?   yang:date-and-time
    |  +-- duration?         uint32
    +-- (recurrence-end)?
    |  +--:(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
]]></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 <bcp14>MUST NOT</bcp14> exceed the
  value indicated by the value of "frequency" instance, i.e., 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-periods" Grouping</name>
          <t>The "recurrence-time-zone-with-periods" 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-periods Grouping Tree Structure</name>
            <artwork><![CDATA[
  grouping recurrence-time-zone-with-periods:
    +-- recurrence-first
    |  +-- start-time?   yang:date-and-time
    |  +-- duration?     duration
    +-- time-zone-identifier?     sys:timezone-name
    +-- (recurrence-end)?
    |  +--:(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
]]></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-periods" 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[
  grouping icalendar-recurrence:
    +-- recurrence-first
    |  +-- start-time?   yang:date-and-time
    |  +-- duration?     duration
    +-- time-zone-identifier?     sys:timezone-name
    +-- (recurrence-end)?
    |  +--:(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
]]></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 instance. Valid values of "direction" are 1 to 5 or -5 to -1 within a "monthly" recurrence rule; and 1 to 53 or -53 to -1 within a "yearly" recurrence rule. 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. Note that per <xref section="4.13" sectionFormat="of" target="I-D.ietf-netmod-rfc8407bis"/>, neither a "default"
   nor a "mandatory" substatement is defined here because there are cases (e.g., profiling)
   where using these statements is problematic.
   YANG modules using this grouping <bcp14>SHOULD</bcp14> refine the "workweek-start" node with either a
   "mandatory" or a "default" statement, if it always needs to be configured or has a default value.
   This <bcp14>MAY</bcp14> be ignored in cases such as when this grouping is used by another grouping.</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-name". 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[
  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-name?            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-name" 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. For a recurrence-based schedule, it
   represents the state of the overall recurrence. The "identityref" type is used for this
   parameter to allow extensibility in future modules.</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 occurred and
   the count of failures for this schedule. Unless new parameters/operations are defined to allow the count of failures to be reset,
   "failure-counter" is reset by default only when the schedule starts.</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 for date and time values <bcp14>MUST</bcp14> have the value "60" at the end of months in which a leap
second occurs.</t>
        </li>
        <li>
          <t>Schedules received with a starting time in the past with respect to
current time <bcp14>SHOULD</bcp14> be ignored. When a local policy is provided, an implementation <bcp14>MAY</bcp14> omit the past occurrences and
start immediately (e.g., for a period-based schedule) or starts from the
date and time when the recurrence pattern is first satisfied from the current time (e.g., for a recurrence-based schedule).</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>Although no data nodes are defined in this document, <xref target="mapping"/> lists
how the 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-name</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">schedVariable</td>
            <td align="left">Not applicable</td>
          </tr>
          <tr>
            <td align="left">schedValue</td>
            <td align="left">Not applicable</td>
          </tr>
          <tr>
            <td align="left">schedTriggers</td>
            <td align="left">counter/failure-counter</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@2025-05-30.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) 2025 IETF Trust and the persons identified
     as authors of the code. All rights reserved.

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

     This version of this YANG module is part of RFC 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 2025-05-30 {
    description
      "Initial revision.";
    reference
      "RFC XXXX: A Common YANG Data Model for Scheduling";
  }
  
  feature basic-recurrence {
    description
      "Indicates that the server supports configuring a basic
       scheduled recurrence.";
  }

  feature icalendar-recurrence {
    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 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 with the duration being specified as
       0/end time being specified the same as start time, 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. If
       neither an end nor a duration is indicated, the period is
       considered to last forever.";
  }
  
  identity recurrence {
    base schedule-type;
    description
      "Indicates a recurrence-based schedule.";
  }

  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-state {
    description
      "Base identity for schedule state.";
  }

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

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

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

  identity out-of-date {
    base schedule-state;
    description
      "Indicates a schedule with an out-of-date state.";
  }

  identity conflicted {
    base schedule-state;
    description
      "Indicates a schedule with a conflicted state with other 
       schedules.";
  }
  
  identity discard-action-type {
    description
      "Indicates the action for the responder to take when a
       requested schedule cannot be accepted for any reason
       and is discarded.";
  }
  
  identity warning {
    base discard-action-type;
    description
      "Indicates that a warning message is generated
       when a schedule is discarded.";
  }

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

  identity silently-discard {
    base discard-action-type;
    description
      "Indicates that a schedule that is not valid 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. This parameter
         MUST be specified if any of the date and time values are
         in the format of local time. It MUST NOT be applied to
         date and time values which are specified in the format of
         UTC or time zone offset to UTC.";
    }
    leaf validity {
      type yang:date-and-time;
      description
        "Specifies the date and time after which a schedule will not
         be considered as valid. 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-type;
      }
      description
        "Specifies the behavior when a schedule is discarded for
         any reason, e.g., failing to satisfy 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;
      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 either the
         'period-start' or 'period-end' value is reported in local
         time format. It MUST NOT be applied to date and time
         values which are specified in the format of UTC or time
         zone offset to UTC.";
    }
    choice period-type {
      description
        "Indicates the type of the time period. Two types are
         supported. If no choice is indicated, the period is 
         considered to last forever.";
      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
            "A period of time is defined by a start and end time.
             The start MUST be no later than the end. The period
             is considered as a one-shot schedule if the end time
             is the same as the start time.";
        }
      }
      case duration {
        description
          "A period of time is defined by a start and a non-negative
           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 non-negative duration of the time. This value is
             equivalent to the format of duration type except that
             the value cannot be negative. The period is considered
             as a one-shot schedule if the value is 0";
        }
      }
    }
  }

  grouping recurrence-basic {
    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;
      }
      description
        "Specifies the frequency type of the recurrence rule.";
    }
    leaf interval {
      type uint32 {
        range "1..max";
      }
      must '../frequency' {
        error-message
          "Frequency must be provided.";
      }
      description
        "A positive integer representing at which interval the
         recurrence rule repeats. For example, within a 'daily'
         recurrence rule, a value of '8' means every eight days.";
    }
  }

  grouping recurrence-utc {
    description
      "A simple definition of recurrence with time specified in
       UTC format.";
    container recurrence-first {
      description
        "Specifies the first instance of the recurrence. If 
         unspecified, the recurrence is considered to start from
         the date and time when the recurrence pattern is first 
         satisfied.";
      leaf start-time-utc {
        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-end {
      description
        "Modes to control the end of a recurrence rule. If no
         choice is indicated, the recurrence rule is considered
         to repeat forever.";
      case until {
        description
          "This case defines a way that limits the end of a
           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 terminate 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 terminate the recurrence.";
        leaf count {
          type uint32 {
            range "1..max";
          }
          description
            "The positive number of occurrences at which to
             terminate the recurrence.";
        }
      }
    }
    uses recurrence-basic;
  }
  
  grouping recurrence-with-time-zone {
    description
      "A simple definition of recurrence to specify a recurrence
       rule with a time zone.";
    container recurrence-first {
      description
        "Specifies the first instance of the recurrence. If 
         unspecified, the recurrence is considered to start from
         the date and time when the recurrence pattern is first 
         satisfied.";
      leaf start-time {
        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 either
         the 'start-time' or 'until' value is reported in local
         time format. It MUST NOT be applied to date and time
         values which are specified in the format of UTC or time
         zone offset to UTC.";
    }    
    choice recurrence-end {
      description
        "Modes to terminate 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 terminate 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 {
            range "1..max";        
          }
          description
            "The positive number of occurrences at which to
             terminate the recurrence.";
        }
      }
    }
    uses recurrence-basic;
  }

  grouping recurrence-utc-with-periods {
    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-periods {
    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-periods;
    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.";
    }
    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 number of occurrences while invoking the scheduled 
         action successfully. 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-name {
      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 YANG-based management protocols, such
   as NETCONF <xref target="RFC6241"/> or RESTCONF <xref target="RFC8040"/>.  These protocols have to use
   a secure transport layer (e.g., SSH <xref target="RFC4252"/>, TLS <xref target="RFC8446"/>, and QUIC <xref target="RFC9000"/>)
   and have to use mutual authentication.</t>
      <t>The Network Configuration Access Control Model (NACM) <xref target="RFC8341"/>
   provides the means to restrict access for particular NETCONF or
   RESTCONF users to a preconfigured subset of all available NETCONF or
   RESTCONF protocol operations and content.</t>
      <t>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>Modules that use the groupings that are defined in this document
   should identify the corresponding security considerations, e.g.,:</t>
      <ul spacing="normal">
        <li>
          <t>Scheduling depends on reliable and accurate time synchronization. Inaccurate date
and time setting can lead to scheduling events being triggered at incorrect
intervals, potentially causing system failures or security vulnerabilities.</t>
        </li>
        <li>
          <t>Recurring events may conceal abnormal behavior or security threats, which
may be drowned out by normal events, especially when they are triggered frequently.</t>
        </li>
        <li>
          <t>The absence of detailed logs and audit records of each occurrence trigger time
and action results, and so on, may make security incidents difficient to trace.</t>
        </li>
        <li>
          <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>
        </li>
      </ul>
    </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 anchor="sec-combined-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="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="RFC6991">
          <front>
            <title>Common YANG Data Types</title>
            <author fullname="J. Schoenwaelder" initials="J." role="editor" surname="Schoenwaelder"/>
            <date month="July" year="2013"/>
            <abstract>
              <t>This document introduces a collection of common data types to be used with the YANG data modeling language. This document obsoletes RFC 6021.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6991"/>
          <seriesInfo name="DOI" value="10.17487/RFC6991"/>
        </reference>
        <reference anchor="RFC8341">
          <front>
            <title>Network Configuration Access Control Model</title>
            <author fullname="A. Bierman" initials="A." surname="Bierman"/>
            <author fullname="M. Bjorklund" initials="M." surname="Bjorklund"/>
            <date month="March" year="2018"/>
            <abstract>
              <t>The standardization of network configuration interfaces for use with the Network Configuration Protocol (NETCONF) or the RESTCONF protocol requires a structured and secure operating environment that promotes human usability and multi-vendor interoperability. There is a need for standard mechanisms to restrict NETCONF or RESTCONF protocol access for particular users to a preconfigured subset of all available NETCONF or RESTCONF protocol operations and content. This document defines such an access control model.</t>
              <t>This document obsoletes RFC 6536.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="91"/>
          <seriesInfo name="RFC" value="8341"/>
          <seriesInfo name="DOI" value="10.17487/RFC8341"/>
        </reference>
        <reference anchor="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="20" month="March" year="2025"/>
            <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-07"/>
        </reference>
        <reference anchor="I-D.ietf-opsawg-scheduling-oam-tests">
          <front>
            <title>A YANG Data Model for Network Diagnosis using Scheduled 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="29" month="January" year="2025"/>
            <abstract>
              <t>   This document defines a YANG data model for network diagnosis on-
   demand relying upon Operations, Administration, and Maintenance (OAM)
   tests.  This document defines both 'oam-unitary-test' and 'oam-test-
   sequence' YANG modules to manage the lifecycle of network diagnosis
   procedures.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-opsawg-scheduling-oam-tests-00"/>
        </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="22" month="April" year="2025"/>
            <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-04"/>
        </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="5" month="June" year="2025"/>
            <abstract>
              <t>   This document provides guidelines for authors and reviewers of
   specifications containing YANG data models, 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-28"/>
        </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="RFC6241">
          <front>
            <title>Network Configuration Protocol (NETCONF)</title>
            <author fullname="R. Enns" initials="R." role="editor" surname="Enns"/>
            <author fullname="M. Bjorklund" initials="M." role="editor" surname="Bjorklund"/>
            <author fullname="J. Schoenwaelder" initials="J." role="editor" surname="Schoenwaelder"/>
            <author fullname="A. Bierman" initials="A." role="editor" surname="Bierman"/>
            <date month="June" year="2011"/>
            <abstract>
              <t>The Network Configuration Protocol (NETCONF) defined in this document provides mechanisms to install, manipulate, and delete the configuration of network devices. It uses an Extensible Markup Language (XML)-based data encoding for the configuration data as well as the protocol messages. The NETCONF protocol operations are realized as remote procedure calls (RPCs). This document obsoletes RFC 4741. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6241"/>
          <seriesInfo name="DOI" value="10.17487/RFC6241"/>
        </reference>
        <reference anchor="RFC8040">
          <front>
            <title>RESTCONF Protocol</title>
            <author fullname="A. Bierman" initials="A." surname="Bierman"/>
            <author fullname="M. Bjorklund" initials="M." surname="Bjorklund"/>
            <author fullname="K. Watsen" initials="K." surname="Watsen"/>
            <date month="January" year="2017"/>
            <abstract>
              <t>This document describes an HTTP-based protocol that provides a programmatic interface for accessing data defined in YANG, using the datastore concepts defined in the Network Configuration Protocol (NETCONF).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8040"/>
          <seriesInfo name="DOI" value="10.17487/RFC8040"/>
        </reference>
        <reference anchor="RFC4252">
          <front>
            <title>The Secure Shell (SSH) Authentication Protocol</title>
            <author fullname="T. Ylonen" initials="T." surname="Ylonen"/>
            <author fullname="C. Lonvick" initials="C." role="editor" surname="Lonvick"/>
            <date month="January" year="2006"/>
            <abstract>
              <t>The Secure Shell Protocol (SSH) is a protocol for secure remote login and other secure network services over an insecure network. This document describes the SSH authentication protocol framework and public key, password, and host-based client authentication methods. Additional authentication methods are described in separate documents. The SSH authentication protocol runs on top of the SSH transport layer protocol and provides a single authenticated tunnel for the SSH connection protocol. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4252"/>
          <seriesInfo name="DOI" value="10.17487/RFC4252"/>
        </reference>
        <reference anchor="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="RFC9000">
          <front>
            <title>QUIC: A UDP-Based Multiplexed and Secure Transport</title>
            <author fullname="J. Iyengar" initials="J." role="editor" surname="Iyengar"/>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson"/>
            <date month="May" year="2021"/>
            <abstract>
              <t>This document defines the core of the QUIC transport protocol. QUIC provides applications with flow-controlled streams for structured communication, low-latency connection establishment, and network path migration. QUIC includes security measures that ensure confidentiality, integrity, and availability in a range of deployment circumstances. Accompanying documents describe the integration of TLS for key negotiation, loss detection, and an exemplary congestion control algorithm.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9000"/>
          <seriesInfo name="DOI" value="10.17487/RFC9000"/>
        </reference>
        <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="RFC9657">
          <front>
            <title>Time-Variant Routing (TVR) Use Cases</title>
            <author fullname="E. Birrane, III" initials="E." surname="Birrane, III"/>
            <author fullname="N. Kuhn" initials="N." surname="Kuhn"/>
            <author fullname="Y. Qu" initials="Y." surname="Qu"/>
            <author fullname="R. Taylor" initials="R." surname="Taylor"/>
            <author fullname="L. Zhang" initials="L." surname="Zhang"/>
            <date month="October" year="2024"/>
            <abstract>
              <t>This document introduces use cases where Time-Variant Routing (TVR) computations (i.e., routing computations that take into consideration time-based or scheduled changes to a network) could improve routing protocol convergence and/or network performance.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9657"/>
          <seriesInfo name="DOI" value="10.17487/RFC9657"/>
        </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 1588?>

<section anchor="usage">
      <name>Examples of Scheduling 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"/>. The following
   modules are used for illustration purposes and make examples verifiable:</t>
      <artwork><![CDATA[
module example-sch-usage-1 {
  yang-version 1.1;
  namespace "http://example.com/example-sch-usage-1";
  prefix "ex-schu-1";

  import ietf-schedule {
    prefix "schedule";
  }

  container generic-schedule-params {
    uses schedule:generic-schedule-params;
  }
  container schedule-status {
    uses schedule:schedule-status;
  }
}

module example-sch-usage-2 {
  yang-version 1.1;
  namespace "http://example.com/example-sch-usage-2";
  prefix "ex-schu2";

  import ietf-schedule {
    prefix "schedule";
  }

  container period-of-time {
    uses schedule:period-of-time;
  }
}

module example-sch-usage-3 {
  yang-version 1.1;
  namespace "http://example.com/example-sch-usage-3";
  prefix "ex-schu-3";

  import ietf-schedule {
    prefix "schedule";
  }

  container recurrence-basic {
    uses schedule:recurrence-basic {
      refine frequency {
        mandatory true;
      }
      refine interval {
        default 1;
      }
    }
  }
}

module example-sch-usage-4 {
  yang-version 1.1;
  namespace "http://example.com/example-sch-usage-4";
  prefix "ex-schu-4";

  import ietf-schedule {
    prefix "schedule";
  }

  container recurrence-utc {
    uses schedule:recurrence-utc;
  }
}

module example-sch-usage-5 {
  yang-version 1.1;
  namespace "http://example.com/example-sch-usage-5";
  prefix "ex-schu-5";

  import ietf-schedule {
    prefix "schedule";
  }

  container recurrence-with-time-zone {
    uses schedule:recurrence-with-time-zone;
  }
}

module example-sch-usage-6 {
  yang-version 1.1;
  namespace "http://example.com/example-sch-usage-6";
  prefix "ex-schu-6";

  import ietf-schedule {
    prefix "schedule";
  }

  container recurrence-utc-with-date-times {
    uses schedule:recurrence-utc-with-periods;
  }  
}

module example-sch-usage-7 {
  yang-version 1.1;
  namespace "http://example.com/example-sch-usage-7";
  prefix "ex-schu-8";

  import ietf-schedule {
    prefix "schedule";

  container recurrence-time-zone-with-date-times {
    uses schedule:recurrence-time-zone-with-periods;
  }  
}

module example-sch-usage-8 {
  yang-version 1.1;
  namespace "http://example.com/example-sch-usage-8";
  prefix "ex-schu-8";

  container icalendar-recurrence {
    uses schedule:icalendar-recurrence {
      refine workweek-start {
        default monday;
      }
    }
  }
}
]]></artwork>
      <t>For each example, 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"/> illustrates 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 as indicated by
"discard-action".</t>
        <figure anchor="ex-0">
          <name>Generic Parameters with 'max-allowed-end' for Schedule Validation</name>
          <artwork><![CDATA[
{
  "example-sch-usage-1:generic-schedule-params": {
    "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>
        <t>To illustrate the difference between "max-allowed-end" and "validity" parameters,
<xref target="ex-00"/> shows the example of a requested schedule that needs to start no earlier than
08:00 AM, January 1, 2025 (Beijing time), schedule requests that fail to meet the
requirements are ignored by the system as indicated by "discard-action". The
requested schedule may end after 8:00 PM, January 31, 2025, but any occurrences that are generated
after that time would not be considered as valid.</t>
        <figure anchor="ex-00">
          <name>Generic Parameters with 'validity' for Schedule Validation</name>
          <artwork><![CDATA[
{
  "example-sch-usage-1:generic-schedule-params": {
    "time-zone-identifier": "China/Beijing",
    "validity": "2025-01-31T20:00:00",
    "min-allowed-start": "2025-01-01T08: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[
{
  "example-sch-usage-2:period-of-time": {
    "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[
{
  "example-sch-usage-2:period-of-time": {
    "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[
{
  "example-sch-usage-2:period-of-time": {
    "period-start": "2025-11-19T02:00:00",
    "time-zone-identifier": "America/Los_Angeles",
    "duration": "P20W"
  }
}
]]></artwork>
        </figure>
      </section>
      <section anchor="the-recurrence-basic-grouping">
        <name>The "recurrence-basic" Grouping</name>
        <t><xref target="ex-6"/> indicates a recurrence of every 2 days which starts immediately and repeats forever:</t>
        <figure anchor="ex-4">
          <name>Simple Schedule with Recurrence</name>
          <artwork><![CDATA[
{
  "example-sch-usage-3:recurrence-basic": {
    "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[
{
  "example-sch-usage-4:recurrence-utc": {
    "recurrence-first": {
      "start-time-utc": "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[
{
  "example-sch-usage-5:recurrence-with-time-zone": {
    "recurrence-first": {
      "start-time": "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-periods-grouping">
        <name>The "recurrence-utc-with-periods" 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[
{
  "example-sch-usage-6:recurrence-utc-with-periods": {
    "recurrence-first": {
      "start-time-utc": "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-periods-grouping">
        <name>The "recurrence-time-zone-with-periods" 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[
{
  "example-sch-usage-7:recurrence-time-zone-with-periods": {
    "recurrence-first": {
      "start-time": "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[
{
  "example-sch-usage-8:icalendar-recurrence": {
    "recurrence-first": {
      "start-time": "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[
{
  "example-sch-usage-8:icalendar-recurrence": {
    "recurrence-first": {
      "start-time": "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[
{
  "example-sch-usage-8:icalendar-recurrence": {
    "recurrence-first": {
      "start-time": "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[
{
  "example-sch-usage-1:schedule-status": {
    "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 a 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;
        description
          "Basic recurrence schedule specification, only applies when
           schedule:basic-recurrence feaure is supported.";
        leaf schedule-id {
          type string;
          description
            "The schedule identifier for this recurrence rule.";
        }            
        uses schedule:recurrence-basic {
          refine frequency {
            mandatory true;
          }
          refine interval {
            default 1;
          }
        }
      }

      container icalendar-recurrence-schedules {
        if-feature schedule:icalendar-recurrence;
        description
          "Basic recurrence schedule specification, only applies when
           schedule:icalendar-recurrence feaure is supported.";
        leaf schedule-id {
          type string;
          description
            "The schedule identifier for this recurrence rule.";
        }           
        uses schedule:icalendar-recurrence {
          refine workweek-start {
            default monday;
          }
        }
      }      
    }
  
    list schedule-set {
      key "schedule-name";
      description
        "The list of schedule status for the backup tasks.";
      uses schedule:schedule-status-with-name;
    }
  }
}
]]></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="RFC9657"/>.
   The following example module which augments the "recurrence-utc-with-periods"
   grouping from "ietf-schedule" module shows how a scheduled 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-periods {
            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, Steve Baillargeon, Dhruv Dhody, and Robert Wilton
   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.ietf-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>
      <t>Thanks to Reshad Rahman for the great YANGDOCTORS review.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
3BUutj0cPobNyn8cDB/twh+wnhmPlmewavwnoPC2A8uYxEgSRFfj+CqtQIL1
UBKWwGWyCCkBFv4Pf0fM/DKKnpyPr4a7T+UBTth5qHDmPCScNZ80PmYkBh4F
htHYdJ57mHbhPfzZ+Vvh3Xr45BnIiyTqDw+ePe3I3mfNmli30F15Oz/PZ8RN
0QwDGRZfAB/jvWSkCn4u7Gxnd4sEi8tJaiX2SH+D9Z2nWT7LL25d0XQqHGsH
x8dFffR4T3WXmN5QCyhtEWT2JXaNG/Kd0bLfAT8eddDimoKRQ6pxVCDDJj0H
aIKUkKsY1fmM9iir6PiUVCRQEU5h7qTuWDAODgZ7Aw3p3t7uHpAffk5aKxDw
JUqmayDoIzH+Hd0fIRBupDnwc1KWsvEtwnt0GaOtlDAvJNZ5y1pG7Hc0iP4m
PBZ3EWAnY8ug+xyItMtjuQge7AyGWy7sAxgTjRyRdz0LOYwGowuCVKRdCpyd
4QFRg7pQjvYQgIAaF9iRM2SCyGxxj1kgk4iIAUSZLUsI7Kl7ChT9+vjlz10w
uNzXRouBzkA2A7erUrKgiZe4pgHiQRkAQBlJAWYq7m29FC5BvMDJZKD0HBk3
TQTqk7AWhZ/OC5m0R06MDVAvWSopGUMijxR1g63G0gmWy9YlfPH67OTd35Bn
3nMZu0Ngv7ixSeMvbtViManyH8ApsfeetIDdWVeJtOA/vBaXoNXw+4x+N6+r
MSDq9BY0/nkDTbRot4ylyxzsIwRA6Y30FJiG0nBZ2fJX1uIXvsT+JkKHIjZ6
c422THIDBiZqfLn8+ZmUrOh5QnZCKW+n8udnzQV9BW+Cvso5+SqVucMq/AJL
nqDHDmPlIkA9osjj8SVYe7noL+m85xvntqVfug4D7M6MgI4fxFDYBxCtp7D/
MtTYZun7ZMPm2GT1Awwxck1axUk6hWViq4EGBpl5k0cKNR67p9kbpCj9J+oS
FH0DcFe9SJX/03mJb4k+EHChaViVj09wWeIaDOOIjecneo0+ixJlWyDwi3rP
anR0pr1HLzSjkNUmx1L7UivXQsNUcFbeyBvDiBQWutq2x6G6I2AuE+TwDR6u
2rHxb4kwBt7COMidKbKsiH6+BQ6c9EFlqUb0pd5AN2CjRWLo4m5jI1h2G9r7
KanHtHg1m4ZGH0auuhUJbhMx863X7PqaJ6QuVXFRUQPWtOBd5hjVDAoYvOSH
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

-->

</rfc>
