<?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-09" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.30.0 -->
  <front>
    <title abbrev="Common Schedule YANG">A Common YANG Data Model for Scheduling</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-netmod-schedule-yang-09"/>
    <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="August" day="05"/>
    <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"/>).
<xref target="sec-ext"/> provides sample modules to exemplify how future modules can use the extensibility
provisions in the "ietf-schedule" module (<xref target="sec-schedule"/>). Also, <xref target="ex-framework"/> provides
an example of using the "ietf-schedule" module for scheduled use of a 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>Recurrence instance (or Recurrence, for short):</dt>
        <dd>
          <t>Refers to an instance that matches a recurrence rule.</t>
        </dd>
        <dt>Recurrence set:</dt>
        <dd>
          <t>Refers to a set of recurrence instances.</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 interval at which 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 (iCalender 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", "schedule-status-with-time-zone", 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-params' 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 occurrences 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 (e.g., the expected start is already passed).</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-basic' 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 "count" value <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 "count" value <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. This list uses
  "yang:timeticks" type defined in <xref target="RFC6991"/>. 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 defines
  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 are generated 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 are generated 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
   created 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", "schedule-status-with-time-zone", and "schedule-status-with-name" Groupings</name>
          <t>The "schedule-status", "schedule-status-with-time-zone", and "schedule-status-with-name" groupings (<xref target="sche-status-tree"/>) define common parameters
   for scheduling management/status exposure. The "schedule-status-with-time-zone" grouping has the same
   structure as "schedule-status" but with an additional parameter to identify a time zone. Similarly, the "schedule-status-with-name" grouping has the same structure as "schedule-status" but with an additional parameter to identify a schedule "schedule-name". These
   structures are defined in the module to allow for better modularity and flexibility.</t>
          <figure anchor="sche-status-tree">
            <name>'schedule-status-*' 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-time-zone:
    +--ro time-zone-identifier?  sys:timezone-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
  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 exist.</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 that created 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 available when the "schedule-type" is "recurrence".</t>
          <t>When no time zone is included, "local-time" reports the actual local time as seen by the entity that
   hosts a schedule. This parameter can be used by a controller to infer the offset to UTC. This use
   is similar to the use of "schedLocalTime" in <xref target="RFC3231"/>.</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 prioritized.</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 depends on the 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 specific 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 maximum day
number based on the month and year.</t>
        </li>
        <li>
          <t>Unless deployed in contexts where time synchronization is not subject to leap second adjustments (e.g., <xref section="4.3" sectionFormat="of" target="I-D.ietf-ntp-ntpv5"/>), the second for date and time values <bcp14>SHOULD</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).

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

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

     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 or 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 of 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 that is received out-of-date.";
  }

  identity conflicted {
    base schedule-state;
    description
      "Indicates a schedule with a conflicted state with other 
       schedules.";
  }
  
  identity discard-action-type {
    description
      "Base identity for 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. 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 time. This value is
             equivalent to the format of duration type except that
             the value cannot be negative. The period is considered
             to be 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 interval at which 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 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
           lasts. 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. 
             that is, if the value specified by this parameter is
             synchronized with the specified recurrence rule,
             it becomes the last instance of the recurrence rule.";
        }
      }
      case count {
        description
          "This case defines the number of occurrences at which
           to terminate the recurrence rule.";
        leaf count {
          type uint32 {
            range "1..max";
          }
          description
            "The positive number of occurrences at which to
             terminate the recurrence rule.";
        }
      }
    }
    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 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 rule 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.
           
           Given that the value is in timeticks format
           (i.e., 1/100 of a second), the values in the must
           statement translate to: 100 = 1s (secondly), 
           6000 = 60 s = 1 min (minutely), and so on for all
           instances in the must statement invariant.";
      }
      leaf period-end {
        type yang:timeticks;
        description
          "End time of the schedule within one recurrence.
           The period start MUST be no later than the period
           end.";
      }
    }
  }
  
  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 'byxxx' (bysecond, byminute, etc.) 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-time-zone {
    description
      "This grouping defines common properties of scheduling
       status, including timezone";
    leaf time-zone-identifier {
      type sys:timezone-name;
      config false;
      description
        "Indicates the identifier for the time zone in a time
         zone database.";
    } 
    uses schedule-status;
  }

  grouping schedule-status-with-name {
    description
      "This grouping defines common properties of scheduling
       status, including a schedule name.";
    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 YANG-based management protocols (1) have to use
   a secure transport layer (e.g., SSH <xref target="RFC4252"/>, TLS <xref target="RFC8446"/>, and QUIC <xref target="RFC9000"/>)
   and (2) have to use mutual authentication.</t>
      <t>The Network Configuration Access Control Model (NACM) <xref target="RFC8341"/>
   provides the means to restrict access for particular NETCONF or
   RESTCONF users to a preconfigured subset of all available NETCONF or
   RESTCONF protocol operations and content.</t>
      <t>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 difficult  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="7" month="July" 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, primarily intended for use by an SDN controller or
   network orchestrator, rather than by individual network nodes.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-opsawg-scheduling-oam-tests-01"/>
        </reference>
        <reference anchor="I-D.ietf-tvr-schedule-yang">
          <front>
            <title>YANG Data Model for Scheduled Attributes</title>
            <author fullname="Yingzhen Qu" initials="Y." surname="Qu">
              <organization>Futurewei Technologies</organization>
            </author>
            <author fullname="Acee Lindem" initials="A." surname="Lindem">
              <organization>Arrcus, Inc.</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="4" month="July" 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-05"/>
        </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="I-D.ietf-ntp-ntpv5">
          <front>
            <title>Network Time Protocol Version 5</title>
            <author fullname="Miroslav Lichvar" initials="M." surname="Lichvar">
              <organization>Red Hat</organization>
            </author>
            <author fullname="Tal Mizrahi" initials="T." surname="Mizrahi">
              <organization>Huawei</organization>
            </author>
            <date day="2" month="July" year="2025"/>
            <abstract>
              <t>   The Network Time Protocol (NTP) is a widely deployed protocol that
   allows hosts to obtain the current time of day from time servers.
   This document specifies version 5 of the protocol (NTPv5), which
   adopts a client-server model as its sole mode of operation.  Legacy
   operational modes supported in earlier versions have been removed to
   improve protocol robustness and clarity.  While this specification
   defines the protocol used for time distribution, it does not define
   the algorithms or heuristics employed by clients to determine or
   adjust their local time.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-ntp-ntpv5-05"/>
        </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 Shah" initials="H." 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 1635?>

<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 lasts for 15 minutes from 9:00 AM to 5:00 PM and an 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 feature 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 feature 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
          "Bandwidth value used for perdiods that don't match
           a schedule.";
      }

      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 is not covered by the period above is 1000 Kbps.</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, Robert Wilton, and Italo Busi
   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 YANG Doctors review, Mahesh Jethanandani for the AD review, Per Andersson for the OPSDIR review,
   Peter Yee for genart review, and Acee Lindem for the rtgdir review.</t>
      <t>Thanks to Éric Vyncke and Erik Kline for the IESG review.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
d61Eg8lUZ53NGYGuwAldWblHkJyS5U3QQjXMF2EfbzUehEtWI91Y5RSP0GfF
RpkvLCNVLHIkqZI0FBu9QNu2m5YGlygfQXZqO4nRRydfSQZ7RE7gPkjn+Azw
lZmm+MM+mM1v9IMm+gkNp7Uf/a3olUlNj8BXJRojDJeO0IwvbxmhqpMyNMTW
0iHO5MvlY1wn4yw8yvbSUd7qb1eYyyUI3tAwO8snoz5dPsqkSENj7C4d4yl/
uHyEErd1aIy95ZSlPl0wyqc2znCKal3jWtSguUl0hjJrl3C0jwZZecPW1tf/
6+uNbz/+V3/j9fr6+l83+4/+9vXG8ca362frm/TXxyH/swX/bP9tY83Zvl9H
awfwfPdv1Mb6dWPj42vV29u1bxZP7NgukHyZWGUkJcnXiHJKiY8aRPksldtf
1GGt/F3rfJuHc16qSOq1t2sSKH3TeHW8plMS0PUB9CmgFmx1SXf3DuQK24G6
/ceHCaXlgNRdg3RaO1vTSo2d8p5kOpMKZ6fJkzJbq/TJC8597ScGd+3FWrPn
0s7/Z4BEdYHUVMAfeovYkGDHsgWHqiVkPiS1gk9EQRtQ4Q3aqKeToriYGYex
Lv8tJxbYoizzUcpxGrhu/1TZ4oqSPcvfbP2gaNkbbFvmvqqv7DgF20U0eWL1
R5Yxxus6CPSsKwVxp2h0uaN9s1wfCNYbOpOkhlbclIqBwJ+Wmu06i7BmFVyV
zC7Xrrqgsko6KZ7fTkeAu3Xb7W1VrVK+PYQ0SWf5WShbWtQ9nzg3XfCnUdp9
5bLuqoc7V3dXHSwoiGVrvBpVDc3yjuhqPecIrY9bd/02+8VcqW3bMDqnlTUd
d7wV56NSNdFhf0tFFk2t+sBNarMEANP5sr4sYOK7XwAYSqovDRbfC18EFRWP
+cK4sqvrBEDi64tfGCa6X7mIrPjS6pemKjpXWgAW37L8wlBRTMICoJyQ5LvJ
afoy1HeSoVAKCx36aKUZW5KOLz2pblvHxexE5IS714FNtzywwjHp1s4rJ3GC
X0cYr3pRqtfgDmc5ft+Q625bUWaXUL2nsVWKaB1YYY0RAkHVfL332Vsd8/LQ
c77cqtUUFQcSVgncYry3FtESdYv6ivpTbvFzhCwW7NBaJseJBOrottfxVd+2
lfMNzuk6LjJjxhKyA9NcAeNStFv1N0tKijCzr+96kzPXEgJQOhykKGCG9wRh
Jt3dJ4BlCuZSNb3pS6t7w2ZjG+HSU6AYh0rzsJp+Q0DqsDaaZWpdA+ZT40V+
U10TTI7WpItgYLCOBjzXhOjfPtDuVrPPtC1NhWbsuN9CQsmBUUotZUqKTQdx
vYgjiaiqsqXgm5sDymieJvHEiSFR7hrLhaOcRSEPU/e1jqsNFUZzdXnlkKFB
Q5cUvdH9+4oLAXm2pORse71Z3Uc4I711MT4YdyeXFPinkSre3B9YkI3efB8c
YZWc9KaLJcnpmytB+wWJ0MF+87bXQvSfesk+7GnEE5P03682xDmC5ec88Qoe
S8ynd5OCKjdFJgDddECVkdQNibjiU93E2oUqkDDyFA57BSVFju0lcPBlF6Vn
K/3+EKeiVs1pSiCRwiAy4B6GZCCXgOCgQz0fDumUxTAdWC7CgOh07roMjB9s
ihf3TSdBSUzrS9cz/s4V5lO7Soi1aE66LOaEqg9OHl1Gaw2kr4VWJs1+uZUB
5fWXXRnxcP7zl2bFtXEqZzWAX2ssRnDFrGVFv9XnrFcY4S0zNTU3Jg7G5aqT
Ne8gCcLnoem4yow7G+vypHWOs1gHMudAK1Corne3SD1DiWERR3Yj6rBSGTC0
UAJBOFyZqUxUDAkTMB1o7QmGTRcZMthYY8tVvNyLBu361pmfg0eFHqKEtwoR
UdlHLoh38+s4HKCzgUe2ytXM23rPmpeUpG2SqJMH9nO222vGuHHB/ysreVbZ
oTUbQ2uRvV3WzCWZtVVrEJmvVyxG1ND6TA+3L0lksbaA+sfVgiIrXa9enBXQ
b98C5k0nZZDPrnMVXuhAr4Kj8dwCQ/5l+AWHExZrXnY+QW1iqnzF+YUtJtty
Nn7oc43UDihEAYtlZc1BDP4FSz+wWYBHLW4y0Lm1RQyU7ka0pZ7eFe1bsX06
LRNSTJJrTjnnTBx2afcgmc+xkdomGSLbKbOJKOCsqjSY24FfPy10hujL4EYP
9hFfpSGyeYyhYfMvrb4XiXDL1W9BFl5MyfqZHGfb4DaO5PxVDsAjaxx8Y8VJ
3CU6gn9uFSPh4rAdX4QxGw2B48gzo7DaSgL+gGaWXqFg1PGuhnfpjji6ihLC
OWfKgjV9qc1owwoYmyCbFfesPvgWajtNaq6+2U5qTRXGrwXarsQcqmKgrdUH
bDUhnID+nlWF5tiWBDfnpqsqs6Hjmlvpse5RbRNKzj7cBFWf7DiQctJxC0iK
xY+6w8EAFPpGvBUVLlobDB5oKNasb8k12hfXqM1MnmqYqYNz42lohnS1GC/6
mB/ngcETOv6I1F01ubgyOVQNBP4dcz4AK9tyNK/RIela6/c9O+Xy2v6a5Ajm
fLAJRedjdJO9CK0boq4+ZztI4Ahdt7W0HwW5VTBeYDHFTv2yF4t1G48GPQu9
sVNQhTHoc0qKetTqSkRdYRqvgLqG5x1ulFrKlbpbauiNNoVbf88i5aV6RovY
PJb7JE2InSKwCnU2+00bEwINdRAdWquo1Q7KsNDYOm0i1drpZgJ1hgpbVyLo
uktnRnePrXVEe7ZRytyaoptOWv2gZlouKnzb45S1buXaeDq1O6E0MGSRmETU
YewFQzlFsXZrqywm/xeqQI5kpbEvjMcN5ssKvKWct2nyPl9qEc2UJAQ5VotO
TzVflqt0pH+wGqhvPV3HcroyTWep5PZR87JR3oBUogVG0xrD3PHCc2bDJcSo
a0vemxLvObvte9oBO9E5PcAfDfH0hmI0MRtD0uBJmc05I7cHOUvruSqRV5vK
gdFX9kxiBJUpwEoq0kwr7AXopyg/R/kssTKat3NiRxvAn6BZwKmD7kBAOJgp
O+FkFhBB7OzbvB3nPpxEPj5cbUoL/oQVF3uq7TOjuSVGx1g8pQZRrTyppqIc
cX0vX0O2ztqXF7v/HP3Bil+2+ZiCuLBCIIzz6DddYrEu8eX1CIdHrSQKl2gL
6vl9qwU2nNYpAnKxlbQC+3tXQVhNK7C/b1UQ/snOWc5O5rp+6DneIUcjsnHk
u8Bp6xL+miFS9N1GayScF3lrre8tt+1tSsfzzx0LyHsYCB/W438+W7NbzMR9
n6yB6zYqndHkzPefqdJpda1lcKfgsSm2ZO8DhzNJ/YeGInevStzpUq3NXQ5X
3HqyYSUlzNOhylsoYSonrPm5hf51f6pX20L7a2xUMofXOqrMfSpa6vGvQeH6
DF2rRdPyi7Gvev6qLayF5aoVsPakiRaRAzr89sy3UJSEU10EC+QG6uLaVXG1
lheoY6JObhAKKnu+1iiTqz53q/SqZGWyFD7KAaHiwcXCLv4gmtQwF4CbnG9J
cIOqE6PWSTvGuF/GYzlQ9GrrQMEzX5vB6W4MdZEfs7ue5dU6cHY80e+jmrk+
GDywvaO9rk24X0cmffeBulCztkFp1NYl19n6RvQYK8lvcLVe//vPGVHdlAmN
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
gkjwPdh1rcZ2v2LjWLlFtdX9uaeons2CcFDyQ4JU4U6pVY57S2SPxnXY02Wd
3i1wJwaciY4NQCM1v8iqA3kT/IpnAICaWa2otL+wlXbV53KFtpE8wyQD3qFU
wGaDqeSpfBKiMgU0d7i9SbBHOtWRTdKTgjkFnaCom/NontIFZ/WEU8W+jkGf
Ospn81oyu53IPlx/fXTClW05lTQDhWNZZ0tioj+Pz5NpdAqqHMLFfa4/P329
YapQGDCu0/KSnYXIp6ai3DVOhdW2hnaSQKQRGSaWWurfIh7umGuwt1K3Wsh8
Vd3L3c6frXPZQtDZUw0hCZT+ZGhEI/6pmshGeDLsb/WHIgSt14G9wMpB6EVQ
2nNQ8XZ/uGnuRa6gsFhfPfK/UnqALeybCLgVdrYWYwdwsyp2du6AnR3SQTcX
Y0ddn3jyWqMEdGD18J7xsX1v+LgLtew4EburUgt9ZanUq1OLzKRle3ua4M6t
NEFU41RPrBUejt5l+TW05SME6JdrOyTj33epXkHX0utI66NAFKpQwScIyOdA
7dIJ4vN5GV9f9OvRtB+PppLykg/oYkrjXhBf1t++en16+PYHLmuY8CnajPy1
5ygWkPfQRXalnKFAuUb+igoX8NBSe3Q55/d7nfM7zjik73CM/qLoaQwm07QX
vU1S4PlZLzqDpwW8+M/LvO5Ff8yT6GgaF++SXnRagc4IWEun8OAiwRPK48ui
voL/5mMQAW9ywFAVvU2nFb5DsfOsiqd59H1dpjQ5PtxKCzLBKbE0VkTg5DIk
pECCSUE5watkysbUL5UGnRTmurrMC4kkNmiurgqTqwV5MiaMD6yDwU8/j2f9
CnPgqNzydnPJ6w9KXB+UtHR0wznf1TEdppSpiprunUaYXaUuSYmELY+ox4y+
Xw2H+zyLVxSvo9KHJ5MJVXy6RipI3s+nlFdHlOx5XFbW2ReCM01rBQ3pq2qW
ptCAQg9Q82U8jt7El7M406BeYLJq8f7nowpxh6cNyXUP0AvC/DL6Y4IoxsP4
LNWfHR7rZq8B+sMMqLwsc9MvEOrxszeqEULymiJCfkpYzblIMjyNVZ0ggg9H
8A424RhTdUs3RXUxTgtp5s/o//4vTEjzl5ts9I5PIk+K9F30pylFFUgHmL/Y
fP7/AJll8ZwTTgEA

-->

</rfc>
