<?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc2629 version 1.6.5 (Ruby 2.7.0) -->


<!DOCTYPE rfc  [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">

]>


<rfc ipr="trust200902" docName="draft-ietf-netmod-schedule-yang-00" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title abbrev="Common Schedule YANG">A Common YANG Data Model for Scheduling</title>

    <author fullname="Qiufang Ma" role="editor">
      <organization>Huawei</organization>
      <address>
        <postal>
          <street>101 Software Avenue, Yuhua District</street>
          <city>Jiangsu</city>
          <code>210012</code>
          <country>China</country>
        </postal>
        <email>maqiufang1@huawei.com</email>
      </address>
    </author>
    <author fullname="Qin Wu">
      <organization>Huawei</organization>
      <address>
        <postal>
          <street>101 Software Avenue, Yuhua District</street>
          <city>Jiangsu</city>
          <code>210012</code>
          <country>China</country>
        </postal>
        <email>bill.wu@huawei.com</email>
      </address>
    </author>
    <author fullname="Mohamed Boucadair" role="editor">
      <organization>Orange</organization>
      <address>
        <postal>
          <city>Rennes</city>
          <code>35000</code>
          <country>France</country>
        </postal>
        <email>mohamed.boucadair@orange.com</email>
      </address>
    </author>
    <author fullname="Daniel King">
      <organization>Lancaster University</organization>
      <address>
        <postal>
          <country>United Kingdom</country>
        </postal>
        <email>d.king@lancaster.ac.uk</email>
      </address>
    </author>

    <date year="2024" month="April" day="16"/>

    <area>Operations and Management</area>
    <workgroup>OPSAWG</workgroup>
    <keyword>calendaring</keyword> <keyword>scheduling</keyword> <keyword>YANG</keyword> <keyword>groupings</keyword>

    <abstract>


<t>This document defines a common schedule YANG module which is
   designed to be applicable for scheduling information such as event, policy,
   services, or resources based on date and time. For the sake of better modularity,
   the module includes basic, intermediate, and advanced versions of recurrence
   related groupings.</t>



    </abstract>



  </front>

  <middle>


<section anchor="intro"><name>Introduction</name>

<t>Several specifications include a provision for scheduling. Examples of such specifications
are (but not limited to) <xref target="I-D.ietf-opsawg-ucl-acl"/>, <xref target="I-D.contreras-opsawg-scheduling-oam-tests"/>, and <xref target="I-D.united-tvr-schedule-yang"/>.
Both <xref target="I-D.ietf-opsawg-ucl-acl"/> and <xref target="I-D.contreras-opsawg-scheduling-oam-tests"/> use the "ietf-schedule" module
initially specified in <xref target="I-D.ietf-opsawg-ucl-acl"/>.</t>

<t>Given that the applicability of the "ietf-schedule" module is more general than scheduled
policy and OAM tests, this document defines "ietf-schedule" as a common schedule YANG module. The module includes a set of reusable groupings which
are designed to be applicable for scheduling information such as event, policy,
services or resources based on date and time.</t>

<t>Examples to illustrate the use of the common groupings are provided in <xref target="usage"/>. Also, sample modules to exemplify how future modules can use the extensibility provisions in "ietf-schedule" are provided in <xref target="sec-ext"/>.</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>

<t><list style="symbols">
  <t>XXXX --&gt; the assigned RFC number for this draft</t>
  <t>YYYY --&gt; the assigned RFC number for <xref target="I-D.ietf-netmod-rfc6991-bis"/></t>
  <t>2023-01-19 --&gt; the actual date of the publication of this document</t>
</list></t>

</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>

<t>The meanings of the symbols in tree diagrams are defined in
   <xref target="RFC8340"/>.</t>

<t>Also, this document uses the YANG terminology defined in <xref section="3" sectionFormat="of" target="RFC7950"/>.</t>

</section>
<section anchor="module-overview"><name>Module Overview</name>

<t>The "ietf-schedule" module (<xref target="sec-schedule"/>) defines the following groupings:</t>

<t><list style="symbols">
  <t>"generic-schedule-params" (<xref target="sec-gen"/>)</t>
  <t>"period-of-time" (<xref target="sec-period"/>)</t>
  <t>"recurrence" (<xref target="sec-rec"/>)</t>
  <t>"recurrence-with-date-times" (<xref target="sec-rec-dt"/>)</t>
  <t>"icalendar-recurrence" (<xref target="sec-ical-rec"/>)</t>
  <t>"schedule-status" (<xref target="sec-schedule-status"/>)</t>
</list></t>

<t><xref target="schedule-tree"/> provides an overview of the tree structure <xref target="RFC8340"/> of
   the "ietf-schedule" module in terms of its groupings.</t>

<figure title="Overall Schedule Tree Structure" anchor="schedule-tree"><artwork><![CDATA[
module: ietf-schedule

  grouping generic-schedule-params:
    ...
  grouping period-of-time:
    ...
  grouping recurrence:
    ...
  grouping recurrence-with-date-times:
    ...
  grouping icalendar-recurrence:
    ...
  grouping schedule-status:
    ...
]]></artwork></figure>

<t>Each of these groupings is presented in the following subsections. Examples
   are provided in <xref target="usage"/>.</t>

<section anchor="sec-gen"><name>The "generic-schedule-params" Grouping</name>

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

<figure title="Generic Schedule Configuration Tree Structure" anchor="gsp-tree"><artwork><![CDATA[
module: ietf-schedule

  grouping generic-schedule-params:
    +-- 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?         enumeration
  grouping period-of-time:
    ...
  grouping recurrence:
    ...
  grouping recurrence-with-date-times:
    ...
  grouping icalendar-recurrence:
    ...
  grouping schedule-status:
    ...
]]></artwork></figure>

</section>
<section anchor="sec-period"><name>The "period-of-time" Grouping</name>

<t>The "period-of-time" grouping (<xref target="pt-tree"/>) represents a time period using
   either a start ("period-start") and end date and time ("period-end"), or a
   start ("period-start") and a positive time duration ("duration"). For the first
   format, the start of the period <bcp14>MUST</bcp14> be before the end of the period.</t>

<figure title="Period of Time Grouping Tree Structure" anchor="pt-tree"><artwork><![CDATA[
module: ietf-schedule

  grouping generic-schedule-params:
    ...
  grouping period-of-time:
    +-- period-start?           yang:date-and-time
    +-- time-zone-identifier?   sys:timezone-name
    +-- (period-type)?
       +--:(explicit)
       |  +-- period-end?       yang:date-and-time
       +--:(duration)
          +-- duration?         duration
  grouping recurrence:
    ...
  grouping recurrence-with-date-times:
    ...
  grouping icalendar-recurrence:
    ...
  grouping schedule-status:
    ...
]]></artwork></figure>

</section>
<section anchor="sec-rec"><name>The "recurrence" Grouping</name>

<t>The "recurrence" grouping (<xref target="rec-grp-tree"/>) specifies a simple recurrence rule, the definition
  conforms to part of the "recurrence rule" properties in <xref section="3.3.10" sectionFormat="of" target="RFC5545"/>.</t>

<figure title="Recurrence Grouping Tree Structure" anchor="rec-grp-tree"><artwork><![CDATA[
module: ietf-schedule

  grouping generic-schedule-params:
    ...
  grouping period-of-time:
    ...
  grouping recurrence:
    +-- recurrence-first
    |  +-- date-time-start?        union
    |  +-- time-zone-identifier?   sys:timezone-name
    |  +-- duration?               duration
    +-- frequency?          identityref
    +-- interval?           uint32
    +-- (recurrence-bound)?
       +--:(until)
       |  +-- until?        union
       +--:(count)
          +-- count?        uint32
  grouping recurrence-with-date-times:
    ...
  grouping icalendar-recurrence:
    ...
  grouping schedule-status:
    ...
]]></artwork></figure>

<t>The "recurrence-first" container defines the first instance in the recurrence set.
  It also determines the start time and duration (if specified) of subsequent recurrence instances. If the
  "date-time-start" node is specified as a date-no-zone value type with no duration specified,
  the recurrence's duration is taken to be one day.</t>

<t>The frequency ("frequency") identifies the type of recurrence rule. For example,
  a "daily" frequency value specifies repeating events based on an interval of a day or more.</t>

<t>The interval represents at which intervals the recurrence rule repeats. For example,
  within a daily recurrence rule, an interval value of "8" means every eight days.</t>

<t>The repetition can be scoped by a specified end time or by a count of occurrences,
  indicated by the "recurrence-bound" choice. The "date-time-start" value always counts
  as the first occurrence.</t>

</section>
<section anchor="sec-rec-dt"><name>The "recurrence-with-date-times" Grouping</name>

<t>The "recurrence-with-date-times" grouping (<xref target="rec-dt-grp-tree"/>) uses the "recurrence" grouping (<xref target="sec-rec"/>) and
  adds a "date-times-choice" statement to define an aggregate set of repeating occurrences.</t>

<figure title="Recurrence with Date Times Grouping Tree Structure" anchor="rec-dt-grp-tree"><artwork><![CDATA[
module: ietf-schedule

  grouping generic-schedule-params:
    ...
  grouping period-of-time:
    ...
  grouping recurrence:
    ...
  grouping recurrence-with-date-times:
    +-- recurrence-first
    |  +-- date-time-start?        union
    |  +-- time-zone-identifier?   sys:timezone-name
    |  +-- duration?               duration
    +-- frequency?                identityref
    +-- interval?                 uint32
    +-- (recurrence-bound)?
    |  +--:(until)
    |  |  +-- until?              union
    |  +--:(count)
    |     +-- count?              uint32
    +-- (date-times-choice)?
       +--:(date-time)
       |  +-- date-times*         yang:date-and-time
       +--:(date)
       |  +-- dates*              yang:date-no-zone
       +--:(period-timeticks)
       |  +-- period-timeticks* [period-start]
       |     +-- period-start?   yang:timeticks
       |     +-- period-end?     yang:timeticks
       +--:(period)
          +-- period* [period-start]
             +-- period-start?           yang:date-and-time
             +-- time-zone-identifier?   sys:timezone-name
             +-- (period-type)?
                +--:(explicit)
                |  +-- period-end?       yang:date-and-time
                +--:(duration)
                   +-- duration?         duration
  grouping icalendar-recurrence:
    ...
  grouping schedule-status:
    ...
]]></artwork></figure>

<t>The recurrence instances are defined by the union of occurrences defined by
  both date-times and recurrence rule. When duplicate instances are generated,
  only one recurrence is considered.</t>

<t>Date-times definition inside "recurrence-with-date-times" grouping refers to
  but does not fully comply with <xref section="3.8.5.2" sectionFormat="of" target="RFC5545"/>. A timeticks
  type based period is added.</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-with-date-times" grouping (<xref target="sec-rec-dt"/>)
  and add more data nodes to enrich the definition of recurrence. The structure of the "icalendar-recurrence" grouping conforms to
  the definition of recurrence component defined in <xref section="3.8.5" sectionFormat="of" target="RFC5545"/>.</t>

<figure title="iCalendar Recurrence Grouping Tree Structure" anchor="ical-grp-tree"><artwork><![CDATA[
module: ietf-schedule

  grouping generic-schedule-params:
    ...
  grouping period-of-time:
    ...
  grouping recurrence:
    ...
  grouping recurrence-with-date-times:
    ...
  grouping icalendar-recurrence:
    +-- recurrence-first
    |  +-- date-time-start?        union
    |  +-- time-zone-identifier?   sys:timezone-name
    |  +-- duration?               duration
    +-- frequency?                identityref
    +-- interval?                 uint32
    +-- (recurrence-bound)?
    |  +--:(until)
    |  |  +-- until?              union
    |  +--:(count)
    |     +-- count?              uint32
    +-- (date-times-choice)?
    |  +--:(date-time)
    |  |  +-- date-times*         yang:date-and-time
    |  +--:(date)
    |  |  +-- dates*              yang:date-no-zone
    |  +--:(period-timeticks)
    |  |  +-- period-timeticks* [period-start]
    |  |     +-- period-start?   yang:timeticks
    |  |     +-- period-end?     yang:timeticks
    |  +--:(period)
    |     +-- period* [period-start]
    |        +-- 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*          union
  grouping schedule-status:
    ...
]]></artwork></figure>

<t>An array of the "bysecond" (or "byminut", "byhour") specifies a list of
   seconds within a minute (or minutes within an hour, hours of the day).</t>

<t>The parameter "byday" specifies a list of days of the week, with an optional
   direction which indicates the nth occurrence of a specific day within
   the "monthly" or "yearly" frequency. For example, within a "monthly" rule,
   the "weekday" with a value of "monday" and the "direction" with a value of "-1"
   represents the last Monday of the month.</t>

<t>An array of the "bymonthday" (or byyearday", "byyearweek", or "byyearmonth") specifies a list of
   days of the month (or days of the year, weeks of the year, or months of the year).</t>

<t>The "bysetpos" conveys a list of values that corresponds to the nth occurrence
   within the set of recurrence instances to be specified. For example, in a "monthly"
   recurrence rule, the "byday" data node specifies every Monday of the week, the
   "bysetpos" with value of "-1" represents the last Monday of the month.
   Not setting the "bysetpos" data node represents every Monday of the month.</t>

<t>The "workweek-start" data node specifies the day on which the week starts. This is
   significant when a "weekly" recurrence rule has an interval greater than 1, and
   a "byday" data node is specified. This is also significant when in a "yearly" rule
   and a "byyearweek" is specified. The default value is "monday".</t>

<t>The "exception-dates" data node specifies a list of exceptions for recurrence. The
   final recurrence set is generated by gathering all of the date and time values
   generated by any of the specified recurrence rule and date-times, and then
   excluding any start date and time values specified by "exception-dates" parameter.</t>

</section>
<section anchor="sec-schedule-status"><name>The "schedule-status" Grouping</name>

<t>The "schedule-status" grouping (<xref target="sche-status-tree"/>) defines common parameters
   for scheduling management/status exposure.</t>

<figure title="Schedule Status Grouping Tree Structure" anchor="sche-status-tree"><artwork><![CDATA[
module: ietf-schedule

  grouping generic-schedule-params:
    ...
  grouping period-of-time:
    ...
  grouping recurrence:
    ...
  grouping recurrence-with-date-times:
    ...
  grouping icalendar-recurrence:
    ...
  grouping schedule-status:
    +-- schedule-id?           string
    +-- state?                 identityref
    +-- version?               uint16
    +--ro schedule-type?         identityref
    +--ro last-update?           yang:date-and-time
    +--ro counter?               uint32
    +--ro last-occurrence?       yang:date-and-time
    +--ro upcoming-occurrence?   yang:date-and-time
]]></artwork></figure>

<t>The "schedule-id" parameter is useful to uniquely identify a schedule in
   a network device or controller if multiple scheduling contexts exists.</t>

<t>The "state" parameter is defined to configure/expose the scheduling state,
   depending on the use of the grouping. The "identityref" type is used for this
   parameter to allow extensibility in future modules. For example, a "conflict"
   state is valid in scheduling contexts where multiple systems struggle for the
   scheduling of the same property. The conflict may be induced by, e.g., multiple entities managing the schedules for the same target component.</t>

<t>The "version" parameter is used to track the current schedule version information. The version can be bumped by the entity who create the schedule.
   The "last-update" parameter identifies when the schedule was last modified.
   In some contexts, this parameter can be used to track the configuration of a
   given schedule. In such cases, the "version" may not be used.</t>

<t>The "schedule-type" parameter identifies the type of the current schedule.
   The "counter", "last-occurrence", and "upcoming-occurrence" data nodes are
   only avaliable when the "schedule-type" is "recurrence".</t>

<t>The current grouping captures common parameters that is applicable
   to typical scheduling contexts known so far. Future modules can define other useful
   parameters as needed. For example, in a  scheduling context with multiple
   system sources to feed the schedules, the "source" and "precedence" parameters may be needed to
   reflect how schedules from different sources should be prioritised.</t>

</section>
</section>
<section anchor="features-and-augmentations"><name>Features and Augmentations</name>

<t>The "ietf-schedule" data model defines the recurrence related groupings using
   a modular approach. Basic, intermediate, and advanced representation of recurrence
   groupings are defined, with each reusing the previous one and adding more parameters.
   To allow for different options, two features are defined in the data model:</t>

<t><list style="symbols">
  <t>'basic-recurrence-supported'</t>
  <t>'icalendar-recurrence-supported'</t>
</list></t>

<t><xref target="features"/> provides an example about how that could be used. Implementations
   may support a basic recurrence rule or an advanced one as needed, by declaring
   different features. Whether only one or both features are supported is implementation
   specific and depend on specific scheduling context.</t>

<t>These groupings can also be augmented to support specific needs. As an example,
   <xref target="augments"/> demonstrates how additional parameters can be added to comply with specifc schedule needs.</t>

</section>
<section anchor="note-and-restrictions"><name>Note and Restrictions</name>

<t>There are some restrictions that need to be followed when using groupings defined
   in "ietf-schedule" yang module:</t>

<t><list style="symbols">
  <t>The instant in time represented by "period-start" <bcp14>MUST</bcp14> be before the
"period-end" for "period-of-time" grouping</t>
  <t>The combination of the day, month, and year represented for date and time
value <bcp14>MUST</bcp14> be valid. See <xref section="5.7" sectionFormat="of" target="RFC3339"/> for the maxinum day
number based on the month and year.</t>
  <t>The second <bcp14>MUST</bcp14> have the value "60" at the end of months in which a leap
second occurs for date and time value</t>
  <t>Care must be taken when defining recurrence 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>
  <t>Schedules received with a starting time in the past with respect to
current time <bcp14>SHOULD</bcp14> be ignored</t>
</list></t>

</section>
<section anchor="sec-schedule"><name>The "ietf-schedule" YANG Module</name>

<t>This module imports types defined in <xref target="I-D.ietf-netmod-rfc6991-bis"/>.</t>

<figure><artwork><![CDATA[
<CODE BEGINS> file "ietf-schedule@2023-01-19.yang"
module ietf-schedule {
  yang-version 1.1;
  namespace "urn:ietf:params:xml:ns:yang:ietf-schedule";
  prefix schedule;

  import ietf-yang-types {
    prefix yang;
    revision-date 2023-01-23;
    reference
      "RFC YYYY: Common YANG Data Types";
  }

  import ietf-system {
    prefix sys;
    reference
      "RFC 7317: A YANG Data Model for System Management";
  }

  organization
    "IETF OPSAWG Working Group";
  contact
    "WG Web: <https://datatracker.ietf.org/wg/opsawg/>
     WG List: <mailto:opsawg@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 two groupings for iCalendar (Internet
     Calendaring and Scheduling Core Object Specification) data
     types: period of time and recurrence rule, for representing and
     exchanging calendaring and scheduling information. The YANG
     module complies with Sections 3.3.9 and 3.3.10 of RFC 5545.

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

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

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

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

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

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

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

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

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

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

  identity frequency-type {
    description
      "Base identity for frequency type.";
  }
  identity secondly {
    base frequency-type;
    description
      "Identity for a repeating event based on an interval of
       a second or more.";
  }
  identity minutely {
    base frequency-type;
    description
      "Identity for a repeating event based on an interval of
       a minute or more.";
  }
  identity hourly {
    base frequency-type;
    description
      "Identity for a repeating event based on an interval of
       an hour or more.";
  }
  identity daily {
    base frequency-type;
    description
      "Identity for a repeating event based on an interval of
       a day or more.";
  }
  identity weekly {
    base frequency-type;
    description
      "Identity for a repeating event based on an interval of
       a week or more.";
  }
  identity monthly {
    base frequency-type;
    description
      "Identity for a repeating event based on an interval of
       a month or more.";
  }
  identity yearly {
    base frequency-type;
    description
      "Identity for a repeating event based on an interval of
       a year or more.";
  }
  identity schedule-type {
    description
      "Base identity for schedule type.";
  }
  identity period {
    base schedule-type;
    description
      "Identity for a period based schedule.";
  }
  
  identity recurrence {
    base schedule-type;
    description
      "Identity for a recurrence based schedule.";
  }
  identity schedule-state {
    description
      "Base identity for schedule state.";
  }
  identity enabled {
    description
      "Identity for the recurrence with enabled state.";
  }
  identity disabled {
    description
      "Identity for the recurrence with disabled state.";
  }
  identity out-of-date {
    description
      "Identity for the recurrence with out-of-date state.";
  }  

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

       These parameters apply to all schedules.

        Such parameters are used as guards to prevent, e.g., stale
        configuration.";
    leaf time-zone-identifier {
      type sys:timezone-name;
      description
        "Indicates the identifier for the time zone in a time zone
         database.";
    }
    leaf validity {
      type yang:date-and-time;
      description
        "Specifies the date and time after which a schedule will
         be considered as invalid. This paratemer 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 date and time after which a requested schedule
         instance cannot be accepted by the entity. Specifically, 
         a requested schedule will be rejected if the first occurence
         of that new schedule exceeds 'max-allowed-start'.";
    }
    leaf min-allowed-start {
      type yang:date-and-time;
      description
        "Specifies the date and time before which a requested
         schedule instance cannot be accepted by the entity.
         Specifically, a requested schedule will be rejected if the
         first occurence of that new schedule is to be scheduled
         before 'min-allowed-start'.";
    }
    leaf max-allowed-end {
      type yang:date-and-time;
      description
        "A requested schedule will be rejected if the last
         occurence of that schedule or its duratioon exceed
         'max-allowed-end'.";
    }
    leaf discard-action {
      type enumeration {
        enum warning {
          description
            "A warning message is generated when a schedule is
             discarded when enforcing the guards in this grouping
             or it is received out-of-date.";
        }
        enum silently-discard {
          description
           "Discards silently a schedule when it is invalid because
            it is not consistent with the guards in this grouping or
            it is received out-of-date.";
        }
      }
      description
        "Specifies the behavior when a schedule is discarded.";    
    }
  }

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

  grouping recurrence {
    description
      "A simple definition of recurrence.";
    container recurrence-first {
      description
        "Specifies the first instance of the recurrence.";
      leaf date-time-start {
        type union {
          type yang:date-no-zone;
          type yang:date-and-time;
        }
        description
          "Defines the first instance in the recurrence set. If it is
           specified as a date-no-zone value type with no duration
           specified, the recurrence's duration is taken to be one
           day.";
        reference
          "RFC 5545: Internet Calendaring and Scheduling Core Object
                     Specification (iCalendar), Section 3.3.10";
      }
      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 'start'
           value is neither reported in the format of UTC nor time
           zone offset to UTC.";
      }
      leaf duration {
        type duration;
        description
          "When specified, it refers to the duration of
           the first occurrence. The exact duration also applies to
           all the recurrence instance.";
      }
    }
    leaf frequency {
      type identityref {
        base frequency-type;
      }
      description
        "This parameter is defined to identify the frequency type of
         the recurrence rule.";
    }
    leaf interval {
      type uint32;
      description
        "A positive integer representing at which intervals the
         recurrence rule repeats. For example, within a 'daily'
         recurrence rule, a value of '8' means every eight days.";
    }
    choice recurrence-bound {
      description
        "Modes to bound the recurrence rule. If no choice is
         indicated, the recurrence rule is considered to repeat
         forever.";
      case until {
        description
          "This case defines a way that bounds the recurrence
           rule in an inclusive manner.";
        leaf until {
          type union {
            type yang:date-no-zone;
            type yang:date-and-time;
          }
          description
            "This parameter specifies a date-no-zone or
             date-time value to bounds the recurrence. If the value
             specified by this parameter is synchronized with the
             specified recurrence, it becomes the last instance of
             the recurrence. The value MUST have the same value type
             as the value type of 'start' parameter.";
        }
      }
      case count {
        description
          "This case defines the number of occurrences at which
           to range-bound the recurrence.";
        leaf count {
          type uint32;
          description
            "The positive number of occurrences at which to
             range-bound the recurrence.";
        }
      }
    }
  }

  grouping recurrence-with-date-times {
    description
      "This grouping defines an aggregate set of repeating
       occurrences. The recurrence instances are defined by
       the union of occurrences defined by both the
       'recurrence' and 'date-times'. Duplicate instances
       are ignored.";
    uses recurrence;
    choice date-times-choice {
      description
        "Specify a list of occurrences which complement the
         recurrence set defined by 'recurrence' grouping. If
         it is specified as a period value, the duration of
         the recurrence instance will be the one specified
         by it, and not the duration defined inside the
         recurrence-first parameter.";
      case date-time {
        description
          "Specify a list of occurrences with date-and-time
           values.";
          leaf-list date-times {
            type yang:date-and-time;
            description
              "Specifies a set of date-and-time values of
               occurrences.";
          }
      }
      case date {
        description
          "Specifies a list of occurrences with date-no-zone
           values.";
          leaf-list dates {
            type yang:date-no-zone;
            description
              "Specifies a set of date-no-zone values of
               occurrences.";
          }
      }
      case period-timeticks {
        description
          "Specifies a list of occurrences with period span of
           timeticks format.";
          list period-timeticks {
            key "period-start";
            description
              "A list of period 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 scheduled value within one
                 recurrence.";
            }
            leaf period-end {
              type yang:timeticks;
              description
                "End time of the scheduled value within one
                 recurrence.";
            }
          }
      }
      case period {
        description
          "Specifies a list of occurrences with period span
           of date-and -time format.";
        list period {
          key "period-start";
          description
            "A list of period with date-and-time formats.";
          uses period-of-time;
        }
      }
    }
  }

  grouping icalendar-recurrence {
    description
      "This grouping is defined to identify properties
       that contain a recurrence rule.";
    reference
      "RFC 5545: Internet Calendaring and Scheduling
                 Core Object Specification (iCalendar),
                 Section 3.8.5";

    uses recurrence-with-date-times;
    leaf-list bysecond {
      type uint32 {
        range "0..60";
      }
      description
        "A list of seconds within a minute.";
    }
    leaf-list byminute {
      type uint32 {
        range "0..59";
      }
      description
        "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
          "Corredponds to seven days of the week.";
      }
    }

    leaf-list bymonthday {
      type int32 {
        range "-31..-1|1..31";
      }
      description
        "Specifies a list of days of the month.";
    }
    leaf-list byyearday {
      type int32 {
        range "-366..-1|1..366";
      }
      description
        "Specifies a list of days of the year.";
    }
    leaf-list byyearweek {
      when "derived-from(../frequency, 'schedule:yearly')";
      type int32 {
        range "-53..-1|1..53";
      }
      description
        "Specifies a list of weeks of the year.";
    }
    leaf-list byyearmonth {
      type uint32 {
        range "1..12";
      }
      description
        "Specifies a list of months of the year.";
    }
    leaf-list bysetpos {
      type int32 {
        range "-366..-1|1..366";
      }
      description
        "Specifies a list of values that corresponds to the nth
         occurrence within the set of recurrence instances
         specified by the rule. It must only be used in conjunction
         with another by the rule part.";
    }
    leaf workweek-start {
      type schedule:weekday;
      default "monday";
      description
        "Specifies the day on which the workweek starts.";
    }
    leaf-list exception-dates {
      type union {
        type yang:date-no-zone;
        type yang:date-and-time;
      }
      description
        "Defines a list of exceptions for recurrence.";
    }
  }
  
  grouping schedule-status {
    description
      "This grouping is defined to identify common properties of 
       scheduling status.";
    leaf schedule-id {
      type string;
      description
        "The schedule identifier that globally identifies a
         schedule in a device, controller, network, etc. 
         The unicity scope depends on the implementation.";
    }
    leaf state {
      type identityref {
        base schedule-state;
      }
      description
        "The current state of the schedule.";
    }
    leaf version {
      type uint16;
      description
        "The version number of the schedule.";
    }
    leaf schedule-type {
      type identityref {
        base schedule-type;
      }
      config false;
      description
        "The schedule type.";
    }
    leaf last-update {
      type yang:date-and-time;
      config false;
      description
        "The timestamp that the schedule is last updated.";
    }
    leaf counter {
      when "derived-from-or-self(../schedule-type, "
         + "'schedule:recurrence')";
      type uint32;
      config false;
      description
        "The counter of occurrences since the schedule was enabled.
         The count wraps around when it reaches the maximum value.";
    }
    leaf last-occurrence {
      when "derived-from-or-self(../schedule-type, "
         + "'schedule:recurrence')";
      type yang:date-and-time;
      config false;
      description
        "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
        "The timestamp of next occurrence.";
    }    
  }
}
<CODE ENDS>
]]></artwork></figure>

</section>
<section anchor="security-considerations"><name>Security Considerations</name>

<t>This section uses the template described in <xref section="3.7" sectionFormat="of" target="I-D.ietf-netmod-rfc8407bis"/>.</t>

<t>The "ietf-schedule" YANG module specified in this document defines schema for data
   that is designed to be accessed via network management protocols such
   as NETCONF <xref target="RFC6241"/> or RESTCONF <xref target="RFC8040"/>.  The lowest NETCONF layer
   is the secure transport layer, and the mandatory-to-implement secure
   transport is Secure Shell (SSH) <xref target="RFC6242"/>.  The lowest RESTCONF layer
   is HTTPS, and the mandatory-to-implement secure transport is TLS
   <xref target="RFC8446"/>.</t>

<t>The Network Configuration Access Control Model (NACM) <xref target="RFC8341"/>
   provides the means to restrict access for particular NETCONF or
   RESTCONF users to a preconfigured subset of all available NETCONF or
   RESTCONF protocol operations and content.</t>

<t>The "ietf-schedule" module defines a set of types and
   groupings.  These nodes are intended to be reused by other YANG
   modules.  The module by itself does not expose any data nodes that
   are writable, data nodes that contain read-only state, or RPCs.  As
   such, there are no additional security issues related to the "ietf-
   schedule" module that need to be considered.</t>

</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>

<figure><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></figure>

</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>

<figure><artwork><![CDATA[
        name:               ietf-schedule
        namespace:          urn:ietf:params:xml:ns:yang:ietf-schedule
        prefix:             schedule
        maintained by IANA: N
        reference:          RFC XXXX
]]></artwork></figure>

</section>
</section>


  </middle>

  <back>


    <references title='Normative References'>



<reference anchor='RFC2119' target='https://www.rfc-editor.org/info/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' target='https://www.rfc-editor.org/info/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' target='https://www.rfc-editor.org/info/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' target='https://www.rfc-editor.org/info/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='I-D.ietf-netmod-rfc6991-bis' target='https://datatracker.ietf.org/doc/html/draft-ietf-netmod-rfc6991-bis-15'>
   <front>
      <title>Common YANG Data Types</title>
      <author fullname='Jürgen Schönwälder' initials='J.' surname='Schönwälder'>
         <organization>Constructor University</organization>
      </author>
      <date day='23' month='January' year='2023'/>
      <abstract>
	 <t>   This document defines a collection of common data types to be used
   with the YANG data modeling language.  This version of the document
   adds several new type definitions and obsoletes RFC 6991.

	 </t>
      </abstract>
   </front>
   <seriesInfo name='Internet-Draft' value='draft-ietf-netmod-rfc6991-bis-15'/>
   
</reference>

<reference anchor='RFC6241' target='https://www.rfc-editor.org/info/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' target='https://www.rfc-editor.org/info/rfc8040'>
  <front>
    <title>RESTCONF Protocol</title>
    <author fullname='A. Bierman' initials='A.' surname='Bierman'/>
    <author fullname='M. Bjorklund' initials='M.' surname='Bjorklund'/>
    <author fullname='K. Watsen' initials='K.' surname='Watsen'/>
    <date month='January' year='2017'/>
    <abstract>
      <t>This document describes an HTTP-based protocol that provides a programmatic interface for accessing data defined in YANG, using the datastore concepts defined in the Network Configuration Protocol (NETCONF).</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='8040'/>
  <seriesInfo name='DOI' value='10.17487/RFC8040'/>
</reference>

<reference anchor='RFC6242' target='https://www.rfc-editor.org/info/rfc6242'>
  <front>
    <title>Using the NETCONF Protocol over Secure Shell (SSH)</title>
    <author fullname='M. Wasserman' initials='M.' surname='Wasserman'/>
    <date month='June' year='2011'/>
    <abstract>
      <t>This document describes a method for invoking and running the Network Configuration Protocol (NETCONF) within a Secure Shell (SSH) session as an SSH subsystem. This document obsoletes RFC 4742. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='6242'/>
  <seriesInfo name='DOI' value='10.17487/RFC6242'/>
</reference>

<reference anchor='RFC8446' target='https://www.rfc-editor.org/info/rfc8446'>
  <front>
    <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
    <author fullname='E. Rescorla' initials='E.' surname='Rescorla'/>
    <date month='August' year='2018'/>
    <abstract>
      <t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol. TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
      <t>This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961. This document also specifies new requirements for TLS 1.2 implementations.</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='8446'/>
  <seriesInfo name='DOI' value='10.17487/RFC8446'/>
</reference>

<reference anchor='RFC8341' target='https://www.rfc-editor.org/info/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' target='https://www.rfc-editor.org/info/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' target='https://www.rfc-editor.org/info/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 title='Informative References'>




<reference anchor='I-D.ietf-opsawg-ucl-acl' target='https://datatracker.ietf.org/doc/html/draft-ietf-opsawg-ucl-acl-03'>
   <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='2' month='February' year='2024'/>
      <abstract>
	 <t>   This document defines a YANG data model for policy-based network
   access control, which provides consistent and efficient enforcement
   of network access control policies based on group identity.
   Moreover, this document defines a mechanism to ease the maintenance
   of the mapping between a user group identifier and a set of IP/MAC
   addresses to enforce policy-based network access control.

   In addition, the document defines a 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-03'/>
   
</reference>


<reference anchor='I-D.contreras-opsawg-scheduling-oam-tests' target='https://datatracker.ietf.org/doc/html/draft-contreras-opsawg-scheduling-oam-tests-01'>
   <front>
      <title>A YANG Data Model for Network Diagnosis by scheduling sequences of OAM tests</title>
      <author fullname='Luis M. Contreras' initials='L. M.' surname='Contreras'>
         <organization>Telefonica</organization>
      </author>
      <author fullname='Victor Lopez' initials='V.' surname='Lopez'>
         <organization>Nokia</organization>
      </author>
      <date day='10' month='July' year='2023'/>
      <abstract>
	 <t>   This document defines a YANG data model for network diagnosis on-
   demand using Operations, Administration, and Maintenance (OAM) tests.
   This document defines both &#x27;oam-unitary-test&#x27; and &#x27;oam-test-sequence&#x27;
   data models to enable on-demand activation of network diagnosis
   procedures.

	 </t>
      </abstract>
   </front>
   <seriesInfo name='Internet-Draft' value='draft-contreras-opsawg-scheduling-oam-tests-01'/>
   
</reference>


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

	 </t>
      </abstract>
   </front>
   <seriesInfo name='Internet-Draft' value='draft-united-tvr-schedule-yang-01'/>
   
</reference>

<reference anchor='RFC8340' target='https://www.rfc-editor.org/info/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='RFC3339' target='https://www.rfc-editor.org/info/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-netmod-rfc8407bis' target='https://datatracker.ietf.org/doc/html/draft-ietf-netmod-rfc8407bis-10'>
   <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='15' month='April' year='2024'/>
      <abstract>
	 <t>   This memo provides guidelines for authors and reviewers of
   specifications containing YANG modules, including IANA-maintained
   modules.  Recommendations and procedures are defined, which are
   intended to increase interoperability and usability of Network
   Configuration Protocol (NETCONF) and RESTCONF protocol
   implementations that utilize YANG modules.  This document obsoletes
   RFC 8407.

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

	 </t>
      </abstract>
   </front>
   <seriesInfo name='Internet-Draft' value='draft-ietf-netmod-rfc8407bis-10'/>
   
</reference>

<reference anchor='RFC7951' target='https://www.rfc-editor.org/info/rfc7951'>
  <front>
    <title>JSON Encoding of Data Modeled with YANG</title>
    <author fullname='L. Lhotka' initials='L.' surname='Lhotka'/>
    <date month='August' year='2016'/>
    <abstract>
      <t>This document defines encoding rules for representing configuration data, state data, parameters of Remote Procedure Call (RPC) operations or actions, and notifications defined using YANG as JavaScript Object Notation (JSON) text.</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='7951'/>
  <seriesInfo name='DOI' value='10.17487/RFC7951'/>
</reference>


<reference anchor='I-D.ietf-tvr-use-cases' target='https://datatracker.ietf.org/doc/html/draft-ietf-tvr-use-cases-09'>
   <front>
      <title>TVR (Time-Variant Routing) Use Cases</title>
      <author fullname='Edward J. Birrane' initials='E. J.' surname='Birrane'>
         <organization>JHU/APL</organization>
      </author>
      <author fullname='Nicolas Kuhn' initials='N.' surname='Kuhn'>
         <organization>Thales Alenia Space</organization>
      </author>
      <author fullname='Yingzhen Qu' initials='Y.' surname='Qu'>
         <organization>Futurewei Technologies</organization>
      </author>
      <author fullname='Rick Taylor' initials='R.' surname='Taylor'>
         <organization>Ori Industries</organization>
      </author>
      <author fullname='Li Zhang' initials='L.' surname='Zhang'>
         <organization>Huawei</organization>
      </author>
      <date day='29' month='February' year='2024'/>
      <abstract>
	 <t>   This document introduces use cases where Time-Variant Routing (TVR)
   computations (i.e. routing computations taking into considerations
   time-based or scheduled changes to a network) could improve routing
   protocol convergence and/or network performance.

	 </t>
      </abstract>
   </front>
   <seriesInfo name='Internet-Draft' value='draft-ietf-tvr-use-cases-09'/>
   
</reference>


<reference anchor='I-D.ietf-netmod-eca-policy' target='https://datatracker.ietf.org/doc/html/draft-ietf-netmod-eca-policy-01'>
   <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>




    </references>


<section anchor="usage"><name>Examples of Format Representation</name>

<t>This section provides some examples to illustrate the use of the
   period and recurrence formats defined as YANG groupings. Note that "grouping"
   does not define any data nodes in the schema tree, the examples illustrated are
   just for the ease of understanding. Only the message body is provided with
   JSON used for encoding <xref target="RFC7951"/>.</t>

<section anchor="the-period-of-time-grouping"><name>The "period-of-time" Grouping</name>

<t>The 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 is encoded as shown in <xref target="ex-1"/>.</t>

<figure title="Simple Start/End Schedule" anchor="ex-1"><artwork><![CDATA[
{
  "period-start": "2025-01-01T08:00:00Z",
  "period-end": "2027-12-01T18: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 title="Simple Schedule with Duration" anchor="ex-2"><artwork><![CDATA[
{
  "period-start": "2025-01-01T08:00:00Z",
  "duration": "P15DT05:20:00"
}
]]></artwork></figure>

<t>An example of a period that starts at 2:00 A.M. in Los Angeles on November 19,
   2025 and lasts 20 weeks is depicted in <xref target="ex-3"/>.</t>

<figure title="Simple Schedule with Time Zone Indication" anchor="ex-3"><artwork><![CDATA[
{
  "period-start": "2025-11-19T02:00:00",
  "time-zone-identifier": "America/Los_Angeles",
  "duration": "P20W"
}
]]></artwork></figure>

</section>
<section anchor="the-recurrence-grouping"><name>The "recurrence" Grouping</name>

<t><xref target="ex-4"/> indicates a recurrence of every 2 days for
   10 occurrences, starting at 3 p.m. on December 1, 2025 in the Eastern United States time zone:</t>

<figure title="Simple Schedule with Recurrence" anchor="ex-4"><artwork><![CDATA[
{
  "recurrence-first": {
    "date-time-start": "2025-11-01T15:00:00",
    "time-zone-identifier": "America/New_York"
  },
  "frequency": "ietf-schedule:daily",
  "interval": 2,
  "count": 10
}
]]></artwork></figure>

<t><xref target="ex-5"/> illustrates an example of an anniversary that will occur annually, from 1997-11-25, until 2050-11-25:</t>

<figure title="Simple Schedule with Recurrence and End Date" anchor="ex-5"><artwork><![CDATA[
{
  "recurrence-first": {
    "date-time-start": "1979-11-25"
  },
  "frequency": "ietf-schedule:yearly",
  "until": "2050-11-25"
}
]]></artwork></figure>

</section>
<section anchor="the-recurrence-with-date-times-grouping"><name>The "recurrence-with-date-times" Grouping</name>

<t><xref target="ex-6"/> indicates a recurrence that occurs every 2
   hours from 9:00 AM to 5:00 PM, and 6PM UTC time on 2025-12-01:</t>

<figure title="Example of Recurrence With Date Times" anchor="ex-6"><artwork><![CDATA[
{
  "recurrence-first": {
    "date-time-start": "2025-12-01T09:00:00Z"
  },
  "frequency": "ietf-schedule:hourly",
  "interval": 2,
  "until": "2025-12-01T17:00:00Z",
  "date-times": ["2025-12-01T18:00:00Z"]
}
]]></artwork></figure>

<t><xref target="ex-7"/> indicates a recurrence that occurs every
   30 minutes and last for 15 minutes from 9:00 AM to 5:00 PM, and extra two occurrences
   at 6:00 PM and 6:30 PM with each lasting for 20 minutes on 2025-12-01:</t>

<figure title="Example of Advanced Recurrence Schedule" anchor="ex-7"><artwork><![CDATA[
{
  "recurrence-first": {
    "date-time-start": "2025-12-01T09:00:00Z",
    "duration": "PT00:15:00"
  },
  "frequency": "ietf-schedule:minutely",
  "interval": 30,
  "until": "2025-12-01T17:00:00Z",
  "period": [
    {
      "period-start": "2025-12-01T18:00:00Z",
      "duration": "PT00:20:00"
    },
    {
      "period-start": "2025-12-01T18:30:00Z",
      "duration": "PT00:20:00"
    }
   ]
}
]]></artwork></figure>

</section>
<section anchor="the-icalendar-recurrence-grouping"><name>The "icalendar-recurrence" Grouping</name>

<t><xref target="ex-8"/> indicates 10 occurrences that occur at
   8:00 AM (EST), every last Saturday of the month starting in January 2024:</t>

<figure title="Simple iCalendar Recurrence" anchor="ex-8"><artwork><![CDATA[
{
  "recurrence-first": {
    "date-time-start": "2024-01-27T08:00:00",
    "time-zone-identifier": "America/New_York"
  },
  "frequency": "ietf-schedule:monthly",
  "count": 10,
  "byday": [
    {
      "direction": [-1],
      "weekday": "saturday"
    }
  ]
}
]]></artwork></figure>

<t><xref target="ex-9"/> is an example of a recurrence that occurs on the last
   workday of the month until December 25, 2024, from January 1, 2024:</t>

<figure title="Example of Advanced iCalendar Recurrence" anchor="ex-9"><artwork><![CDATA[
{
  "recurrence-first": {
  "date-time-start": "2024-01-01"
  },
  "frequency": "ietf-schedule:monthly",
  "until": "2024-12-25",
  "byday": [
    { "weekday": "monday"},
    { "weekday": "tuesday"},
    { "weekday": "wednesday"},
    { "weekday": "thursday"},
    { "weekday": "friday"}
  ],
  "bysetpos": [-1]
}
]]></artwork></figure>

<t><xref target="ex-10"/> indicates a recurrence that occur 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 title="Example of Advanced iCalendar Recurrence with Exceptions" anchor="ex-10"><artwork><![CDATA[
{
  "recurrence-first": {
    "date-time-start": "2025-12-01T09:00:00Z"
  },
  "until": "2025-12-01T16:40:00Z",
  "frequency": "ietf-schedule:minutely",
  "byminute": [0, 20, 40],
  "byhour": [9, 10, 11, 12, 13, 14, 15, 16],
  "exception-dates": ["2025-12-01T10:20:00Z"]
}
]]></artwork></figure>

</section>
</section>
<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>

<figure><artwork><![CDATA[
module example-scheduled-backup {
  yang-version 1.1;
  namespace "http://example.com/example-scheduled-backup";
  prefix "ex-scback";

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

  import ietf-schedule {
    prefix "schedule";
  }

  organization
    "Example, Inc.";

  contact
    "Support at example.com";

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

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

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

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

      container icalendar-recurrence-schedules {
        if-feature schedule:icalendar-recurrence-supported;
        description
          "Basic recurrence schedule specification, only applies when
           schedule:icalendar-recurrence-supported feaure is
           supported.";
        leaf schedule-id {
          type string;
          description
            "The schedule identifier for this recurrence rule.";
        }           
        uses schedule:icalendar-recurrence;
      }      
    }
  
    list schedule-set {
      key "schedule-id";
      description
        "The list of schedule status for the backup tasks.";
      uses schedule:schedule-status;
    }
  }
}
]]></artwork></figure>

</section>
<section anchor="augments"><name>Example: Schedule Network Properties to Change Based on Date and Time</name>

<t>Network properties may change over a specific period of time or based on a
   recurrence rule, e.g., <xref target="I-D.ietf-tvr-use-cases"/>.
   The following example module which augments the "recurrence-with-date-times"
   grouping from "ietf-schedule" module shows how a scheduled based attribute
   could be defined.</t>

<figure><artwork><![CDATA[
module example-scheduled-link-bandwidth {
  yang-version 1.1;
  namespace "http://example.com/example-scheduled-link-bandwidth";
  prefix "ex-scattr";

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

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

  organization
    "Example, Inc.";

  contact
    "Support at example.com";

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

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

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

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

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

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

]]></artwork></figure>

<t><xref target="ex-11"/> shows a configuration example of a link's bandwidth that is
  scheduled between 2023/12/01 0:00 UTC to the end of 2023/12/31 with a daily
  schedule. In each day, the bandwidth value is scheduled to be 500 Kbps between
  1:00 AM to 6:00 AM and 800 Kbps between 10:00 PM to 11:00 PM. The bandwidth
  value that's not covered by the period above is 1000 Kbps by default.</t>

<figure title="Example of Scheduled Link's Bandwidth" anchor="ex-11"><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>
      <date-time-start>2023-12-01T01:00:00Z</date-time-start>
    </recurrence-first>
    <frequency>schedule:daily</frequency>
    <until>2023-12-31T23:59:59Z</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 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, and Joe Clarke
   for their valuable comments and inputs to this work.</t>

<t>Many thanks to the authors of <xref target="I-D.united-tvr-schedule-yang"/>, <xref target="I-D.contreras-opsawg-scheduling-oam-tests"/>, and <xref target="I-D.ietf-netmod-eca-policy"/>
   for the constructive discussion during IETF#118.</t>

</section>


  </back>

<!-- ##markdown-source:
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

-->

</rfc>

