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


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

]>


<rfc ipr="trust200902" docName="draft-ietf-grow-rpsl-registry-scoped-members-01" category="std" consensus="true" submissionType="IETF" xml:lang="en" updates="2622, 4012">
  <front>
    <title abbrev="Registry scoped members for RPSL set objects">Registry scoped members for RPSL set objects</title>

    <author initials="S." surname="Romijn" fullname="Sasha Romijn">
      <organization>Reliably Coded</organization>
      <address>
        <postal>
          <city>Amsterdam</city>
          <country>NL</country>
        </postal>
        <email>sasha@reliablycoded.nl</email>
      </address>
    </author>
    <author initials="J." surname="Bensley" fullname="James Bensley">
      <organization>Inter.link GmbH</organization>
      <address>
        <postal>
          <street>Boxhagener Str. 80</street>
          <city>Berlin</city>
          <code>10245</code>
          <country>DE</country>
        </postal>
        <email>james@inter.link</email>
      </address>
    </author>

    <date year="2026" month="October" day="31"/>

    
    
    <keyword>rpsl</keyword>

    <abstract>


<?line 40?>

<t>This document updates RFC2622 and RFC4012 by specifying <spanx style="verb">src-members</spanx>,
a new attribute on as-set and route-set
objects in the Routing Policy Specification Language (RPSL).
This attribute allows a specific registry to be defined for each member
in a set, avoiding problematic ambiguity when resolving set members.
A new validation rule allows gradual upgrades and backwards compatibility.</t>



    </abstract>



  </front>

  <middle>


<?line 49?>

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

<t>The Routing Policy Specification Language (RPSL) <xref target="RFC2622"/> defines the
as-set and route-set objects, extended in <xref target="RFC4012"/>.
These are among the most common objects in the Internet Routing Registry (IRR) system.
These sets can either reference a direct member of the set
(such as an AS number, IP prefix, etc.), or additional sets which themselves have
their own direct members and/or reference yet more sets, ad infinitum.
In both cases, this referencing uses the <spanx style="verb">members</spanx> and <spanx style="verb">mp-members</spanx>
attributes <xref target="RFC4012"/>.
Server and client software can follow these references to 
resolve a set down to its members, a set of prefixes or ASes.</t>

<t>A set may refer to another set by including the primary key in its
<spanx style="verb">(mp-)members</spanx> attribute.
The referred set may be in the same or in another IRR registry.
It is not possible to specify the IRR registry of
the referred set. This can lead to primary key collisions
when resolving a set:</t>

<t><list style="numbers" type="1">
  <t>There are multiple significant IRR registries.</t>
  <t>Sets often reference objects in registries other than the registry the set itself is stored in.</t>
  <t>There is no guaranteed uniqueness of object primary keys amongst the different registries.</t>
  <t>Hence, multiple objects may exist in the IRR system with the same primary key, 
making references to them ambiguous.</t>
  <t>Many IRR servers will mirror data from multiple IRR registries,
meaning that even within a single server, there are usually collisions.</t>
</list></t>

<t>The ambiguity encountered when resolving set members can result in either an
incorrect RPSL object being chosen, because an object with the same primary key
was retrieved from the wrong IRR registry, or the required RPSL object (which does exist)
is not found, because the resolving process didn't try to retrieve the object from
the correct IRR registry.
"Incorrect" and "wrong" in this context meaning: not as intended or expected by the operator.</t>

<t>Including members from the incorrect RPSL object can result in the computation of
unintentional routing policy information, which is then deployed to network infrastructure.
That could cause route leaking, or worse, aid in route hijacking.
This has been seen multiple times on the public Internet.</t>

<t>If intended policies are not included, because the object was not found,
prefixes that should be accepted, are not, and the prefixes are not reachable.</t>

<t>With either case, routing policy information may end up missing and connectivity 
may be disrupted.</t>

<t>There is no current way to prevent such ambiguity during set member resolution,
both for operators who create the legitimate objects and those who try to resolve them.</t>

<t>Two previous enhancements to reduce set name collisions have been standardized.
However, the problem persists:</t>

<t><list style="symbols">
  <t><xref target="RFC2622"/> Section 5.1 defines hierarchical set names, such as <spanx style="verb">AS65000:AS-EXAMPLE</spanx>
which may also have additional authorization requirements for the referred aut-num.
However, this authorization only works within a single IRR registry, and doesn't
allow the correct external IRR to be specified, if the object in question is not
local to the IRR registry storing the referring set.</t>
  <t><xref target="RFC2725"/> Section 9.6 defines external repository (IRR) references.
This allows for the correct IRR registry to be specified for a set member object
by using the SOURCE:: notation however, this syntax isn't supported in the members
field of set objects.</t>
</list></t>

<t>To solve this, this document adds <spanx style="verb">src-members</spanx> to as-set and route-set objects,
using a IRR registry name prefix with a double colon.
For example: "RIPE::AS-EXAMPLE", to refer specifically to an object "AS-EXAMPLE"
in the IRR registry "RIPE". This format is already widely used informally by operators,
including in platforms such as PeeringDB.
Continued availability of existing <spanx style="verb">(mp-)members</spanx> attributes
together with new validation rules, ensures backwards compatibility.</t>

<section anchor="requirements-language"><name>Requirements Language</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?>

</section>
</section>
<section anchor="the-src-members-attribute"><name>The <spanx style="verb">src-members</spanx> attribute</name>

<section anchor="as-set-class"><name>as-set class</name>

<t>The new <spanx style="verb">src-members</spanx> attribute on as-set is similar to the <spanx style="verb">members</spanx> attribute
from <xref target="RFC2622"/>, except that the AS set name <bcp14>MUST</bcp14> be prefixed with a registry name
and a double colon.</t>

<dl newline="true">
  <dt>Attribute:</dt>
  <dd>
    <t><spanx style="verb">src-members</spanx></t>
  </dd>
  <dt>Value:</dt>
  <dd>
    <t>list of ([<spanx style="verb">as-number</spanx>] or [<spanx style="verb">registry-name</spanx>]::[<spanx style="verb">as-set-name</spanx>])</t>
  </dd>
  <dt>Type:</dt>
  <dd>
    <t>optional, multi-valued</t>
  </dd>
</dl>

</section>
<section anchor="route-set-class"><name>route-set class</name>

<t>The new <spanx style="verb">src-members</spanx> attribute on route-set is similar to the <spanx style="verb">mp-members</spanx> attribute 
from <xref target="RFC4012"/>, except that any references to set names <bcp14>MUST</bcp14> 
be prefixed with a registry name and a double colon.</t>

<dl newline="true">
  <dt>Attribute:</dt>
  <dd>
    <t><spanx style="verb">src-members</spanx></t>
  </dd>
  <dt>Value:</dt>
  <dd>
    <t>list of ([<spanx style="verb">ipv4-address-prefix-range</spanx>] or [<spanx style="verb">ipv6-address-prefix-range</spanx>] or [<spanx style="verb">registry-name</spanx>]::[<spanx style="verb">route-set-name</spanx>] or [<spanx style="verb">registry-name</spanx>]::[<spanx style="verb">as-set-name</spanx>] or [<spanx style="verb">as-number</spanx>] or [<spanx style="verb">registry-name</spanx>]::[<spanx style="verb">route-set-name</spanx>][<spanx style="verb">range-operator</spanx>])</t>
  </dd>
  <dt>Type:</dt>
  <dd>
    <t>optional, multi-valued</t>
  </dd>
</dl>

</section>
<section anchor="resolving"><name>Resolving members through <spanx style="verb">src-members</spanx></name>

<t>IRR software that resolves the members of a set <bcp14>MUST</bcp14> have support for
objects with and without <spanx style="verb">src-members</spanx>.
These objects may be encountered if they were created or updated before
adoption of <spanx style="verb">src-members</spanx>, or the objects have not been updated since.</t>

<t>The resolving process is:</t>

<t><list style="numbers" type="1">
  <t>The resolver <bcp14>MUST</bcp14> include all members listed in the <spanx style="verb">src-members</spanx> attribute,
if any.
To find the referenced sets, the resolver <bcp14>MUST</bcp14> match on both the IRR registry
name and the set's primary key.
If the IRR registry is unknown to the resolver, no set can match the reference.</t>
  <t>The resolver <bcp14>MUST</bcp14> include all members listed in the <spanx style="verb">members</spanx> and <spanx style="verb">mp-members</spanx>
attributes, when their primary key was not already listed in <spanx style="verb">src-members</spanx>.
If there are multiple sets with a primary key known to the resolver,
the behavior is not defined by this document as this was a previously 
existing problem.</t>
</list></t>

<t>Note that the restriction to a specific IRR registry name is only used
to select the correct IRR registry to retrieve the referred object and its
attributes. During recursive resolving, if that set has references to further sets,
those <bcp14>MUST</bcp14> be retrieved from a potentially different registry. This could be either the
registry specified in the <spanx style="verb">src-members</spanx> attribute, if present, or the existing source
selection algorithm the IRR server currently uses when resolving using <spanx style="verb">(mp-)members</spanx>.
In other words, the restriction of the lookup to a specific IRR registry does not cascade.</t>

<section anchor="resolving-example"><name>Resolving example</name>

<figure title="Example objects for recursive lookups and attribute interactions"><sourcecode type="rpsl"><![CDATA[
route-set: RS-FIRST
members: RS-SECOND
mp-members: RS-LEGACY
src-members: RIPE::RS-SECOND
source: EXAMPLE

route-set: RS-SECOND
members: RS-THIRD
source: RIPE

route-set: RS-SECOND
members: AS65002
source: OTHER

route-set: RS-THIRD
members: AS65000
source: OTHER

route-set: RS-LEGACY
members: AS65001
source: OTHER
]]></sourcecode></figure>

<t>To perform a recursive lookup of RS-FIRST, the IRR software will:</t>

<t><list style="numbers" type="1">
  <t>Look up RS-FIRST.</t>
  <t>Determine that the members of RS-FIRST are RS-SECOND (RIPE registry only)
and RS-LEGACY (any registry). The mention of RS-SECOND in the <spanx style="verb">members</spanx>
attribute is not included, as <spanx style="verb">RS-SECOND</spanx> is already listed in <spanx style="verb">src-members</spanx>.</t>
  <t>Look up RS-SECOND in RIPE, and RS-LEGACY in any registry.</t>
  <t>Determine that the members of RS-LEGACY are AS65001, and the members
of RS-SECOND are RS-THIRD.</t>
  <t>Look up RS-THIRD in any registry.</t>
  <t>Determine that the members of RS-THIRD are AS65000.</t>
</list></t>

<t>If all mentioned registries are enabled, RS-FIRST would resolve to
AS65000 and AS65001.</t>

<t>The RS-SECOND object in the OTHER registry is never looked up,
and AS65002 is not included. This would happen even if there was no
RS-SECOND object found in RIPE.</t>

</section>
<section anchor="query-parameters"><name>Query parameters</name>

<t>When querying a set to resolve its members, IRR software typically
expects the primary key of the set as a query parameter from the user.
This reference is also ambiguous without referring to a specific registry.</t>

<t>IRR software <bcp14>MUST</bcp14> support a user-provided parameter to restrict the initial lookup
of the set object to a specific registry.
This restriction <bcp14>MUST NOT</bcp14> apply to further lookups performed by the IRR software
when resolving the set, i.e., this restriction also does not cascade.</t>

<t>For text based queries, IRR software is <bcp14>RECOMMENDED</bcp14> to allow this parameter to be
provided in similar syntax as the <spanx style="verb">src-members</spanx> value, e.g. RIPE::AS-DEMO,
to query the object with primary key AS-DEMO in registry RIPE,
and then continue resolving its members.</t>

<t>IRR software <bcp14>MAY</bcp14> provide a query option to disable the
processing of <spanx style="verb">src-members</spanx>. With that option, sets are resolved
only through their <spanx style="verb">(mp-)members</spanx> attributes, as software without
support for <spanx style="verb">src-members</spanx> would.
This option helps users compare results with those from software that does
not support <spanx style="verb">src-members</spanx>, and debug unexpected resolving results.</t>

</section>
</section>
</section>
<section anchor="relation-to-mp-members"><name>Relation to <spanx style="verb">(mp-)members</spanx></name>

<t>Existing IRR software will not be aware of the new <spanx style="verb">src-members</spanx> attribute
and instead refer to <spanx style="verb">(mp-)members</spanx>.
This is also why the existing attributes are not modified - this existing software
would consider e.g. <spanx style="verb">RIPE::AS-EXAMPLE</spanx> as the full primary key of a set, and fail
to look up the reference as intended.</t>

<t>Existing IRR objects may also not be updated with <spanx style="verb">src-members</spanx> for some time,
as this cannot be done automatically. Or, they may be partially updated
as for large sets, finding the intended IRR registry references
may take some time.
Deployment in both software and objects will be a gradual process, however,
even partial deployment will reduce the potential for issues from reference
mixups.</t>

<t>In order to keep support for existing IRR software, the contents of
<spanx style="verb">src-members</spanx> must match <spanx style="verb">(mp-)members</spanx> as close as possible,
which the IRR server will ensure.</t>

<section anchor="validation"><name>Additional validation</name>

<t>When an authoritative IRR registry processes a set object with a <spanx style="verb">src-members</spanx>
attribute, it <bcp14>MUST</bcp14> validate that all references in <spanx style="verb">src-members</spanx>, with the registry
names removed, are also listed in <spanx style="verb">members</spanx> or <spanx style="verb">mp-members</spanx>.
All values <bcp14>MUST</bcp14> be combined, regardless if they were listed in
one attribute, or in multiple repetitions of the attribute.</t>

<t>This ensures that the new <spanx style="verb">src-members</spanx> can be used, providing the benefits
for updated resolver software, while still having a consistent <spanx style="verb">(mp-)members</spanx> available
for older software.</t>

<t>IRR registry software is <bcp14>RECOMMENDED</bcp14> to make the <spanx style="verb">src-members</spanx> attribute
mandatory on all new as-set/route-set objects, and <bcp14>MAY</bcp14> make it required when modifying
existing objects.</t>

<t>Example of a valid object:</t>

<figure title="Valid object"><sourcecode type="rpsl"><![CDATA[
route-set: RS-EXAMPLE
members: 192.0.2.0/24
mp-members: 2001:db8::/32
mp-members: RS-OTHER
src-members: 192.0.2.0/24, RIPE::RS-OTHER, 2001:db8::/32
source: EXAMPLE
]]></sourcecode></figure>

<t>Example of an invalid object:</t>

<figure title="Invalid object: inconsistent inclusion of NTTCOM::RS-SRCMBRONLY, and 200:db8::/36 vs /32. Note: the inclusion RS-MPMBRONLY only in mp-members is permitted."><sourcecode type="rpsl"><![CDATA[
route-set: RS-EXAMPLE
members: 192.0.2.0/24
mp-members: 2001:db8::/36
mp-members: RS-OTHER, RS-MPMBRONLY
src-members: 192.0.2.0/24, RIPE::RS-OTHER
src-members: NTTCOM::RS-SRCMBRONLY, 2001:db8::/32
source: EXAMPLE
]]></sourcecode></figure>

</section>
<section anchor="automatic-generation-of-mp-members"><name>Automatic generation of <spanx style="verb">(mp-)members</spanx></name>

<t>Managing multiple copies of the same records is tedious for users.
Therefore, IRR registry software is <bcp14>RECOMMENDED</bcp14> to automatically
fill <spanx style="verb">(mp-)members</spanx>, if not specified by the user, based on <spanx style="verb">src-members</spanx>,
in authoritative objects, when the user creates or updates the object.</t>

<t>Specifically, for authoritative IRR registries:</t>

<t><list style="symbols">
  <t>It is <bcp14>RECOMMENDED</bcp14> that when creating/updating a route-set object
with a <spanx style="verb">src-members</spanx> attribute, but without both a <spanx style="verb">members</spanx> and <spanx style="verb">mp-members</spanx>
attribute, the software fills the <spanx style="verb">mp-members</spanx> attribute automatically with the contents
of <spanx style="verb">src-members</spanx>, with the IRR registry prefix removed from references.</t>
  <t>It is <bcp14>RECOMMENDED</bcp14> that when creating/updating an as-set object
with a <spanx style="verb">src-members</spanx> attribute, but without a <spanx style="verb">members</spanx>
attribute, the software fills the <spanx style="verb">members</spanx> attribute automatically with the contents
of <spanx style="verb">src-members</spanx>, with the IRR registry prefix removed from references.</t>
</list></t>

<t>When filling these attributes automatically, it is <bcp14>RECOMMENDED</bcp14> that the
software append a comment to each generated attribute, noting that its
value was synthesized from <spanx style="verb">src-members</spanx>. This shows users where the
data in the object originated, which aids debugging.
Alternatively, software <bcp14>MAY</bcp14> record this
in a generated <spanx style="verb">remarks</spanx> attribute instead.</t>

<figure title="Object with automatically generated mp-members and origin comment"><sourcecode type="rpsl"><![CDATA[
route-set: RS-EXAMPLE
src-members: 192.0.2.0/24, RIPE::RS-OTHER, 2001:db8::/32
mp-members: 192.0.2.0/24, RS-OTHER, 2001:db8::/32 # synthesized from src-members
source: EXAMPLE
]]></sourcecode></figure>

<t>The registry <bcp14>MAY</bcp14> return an informational message to the user about
the modifications.
The objects <bcp14>MUST NOT</bcp14> be modified if already submitted with any
<spanx style="verb">members</spanx> or <spanx style="verb">mp-members</spanx> attribute, though the <xref target="validation">validation rules noted
earlier</xref> <bcp14>MUST</bcp14> still be applied.
Non-authoritative servers <bcp14>MUST NOT</bcp14> generate <spanx style="verb">members</spanx> or <spanx style="verb">mp-members</spanx>
automatically.</t>

<t>IRR registry software <bcp14>MUST NOT</bcp14> attempt to automatically derive
<spanx style="verb">src-members</spanx> from <spanx style="verb">(mp-)members</spanx>, as this cannot be done reliably.</t>

</section>
<section anchor="multiple-references-to-the-same-primary-key"><name>Multiple references to the same primary key</name>

<t>Adding a IRR registry scope to each reference syntactically allows a new
behavior: having multiple references to the same RPSL primary key.
This is not permitted, and IRR registry software <bcp14>MUST</bcp14> reject this:</t>

<figure title="Invalid object fragment using multiple registry prefixes with the same RPSL primary key"><sourcecode type="rpsl"><![CDATA[
src-members: RIPE::AS-OTHER, ARIN::AS-OTHER
]]></sourcecode></figure>

<t>The IRR registry software <bcp14>MUST</bcp14> verify that, without their registry prefix,
all references from <spanx style="verb">src-members</spanx> are unique.</t>

<t>This reduces ambiguity regarding backwards compatibility with <spanx style="verb">(mp-)members</spanx>
described earlier.
If allowed, the attribute <spanx style="verb">src-members: RIPE::AS-OTHER, ARIN::AS-OTHER</spanx> would
refer to two different sets, whereas the translation <spanx style="verb">mp-members: AS-OTHER</spanx>
only refers to one set.</t>

</section>
</section>
<section anchor="references-in-policy-and-filter-attributes"><name>References in policy and filter attributes</name>

<t>Set objects are also referenced outside of <spanx style="verb">(mp-)members</spanx>, such as
policies in the <spanx style="verb">import</spanx>, <spanx style="verb">export</spanx>, <spanx style="verb">mp-import</spanx> and <spanx style="verb">mp-export</spanx>
attributes of aut-num objects, <spanx style="verb">(mp-)filter</spanx> on filter-set,
or similar attributes in other objects.
These references are equally ambiguous, but out of scope for this
document. The registry name prefix remains invalid syntax in these
attributes.</t>

<t>These attributes contain policy expressions rather than flat lists,
so the backwards compatibility approach of this document does not work:
having a parallel attribute would require validating that the two
policies are equivalent, which is complex. Modifying the existing
syntax would break existing parsers.
Registry scoped references in these attributes are left for
a potential future specification.</t>

</section>
<section anchor="IANA"><name>IANA Considerations</name>

<t>This memo includes no request to IANA.</t>

</section>
<section anchor="Security"><name>Security Considerations</name>

<t>This document removes a potential security issue where routing
policy could be manipulated by maliciously creating set objects,
which could be used in favor of legitimate objects.</t>

<t>While not a new issue, references between set objects can be
circular, and software <bcp14>MUST</bcp14> detect such cases while resolving.
It is <bcp14>RECOMMENDED</bcp14> to also limit the depth or size of their resolving
to prevent excessive resource use.</t>

</section>
<section anchor="acknowledgments"><name>Acknowledgments</name>

<t>The authors would like to thank Job Snijders, Douglas Fischer and
Stavros Konstantaras for their helpful suggestions and review of
this document.</t>

</section>


  </middle>

  <back>



    <references title='Normative References' anchor="sec-normative-references">



<reference anchor="RFC2622">
  <front>
    <title>Routing Policy Specification Language (RPSL)</title>
    <author fullname="C. Alaettinoglu" initials="C." surname="Alaettinoglu"/>
    <author fullname="C. Villamizar" initials="C." surname="Villamizar"/>
    <author fullname="E. Gerich" initials="E." surname="Gerich"/>
    <author fullname="D. Kessens" initials="D." surname="Kessens"/>
    <author fullname="D. Meyer" initials="D." surname="Meyer"/>
    <author fullname="T. Bates" initials="T." surname="Bates"/>
    <author fullname="D. Karrenberg" initials="D." surname="Karrenberg"/>
    <author fullname="M. Terpstra" initials="M." surname="Terpstra"/>
    <date month="June" year="1999"/>
    <abstract>
      <t>RPSL allows a network operator to be able to specify routing policies at various levels in the Internet hierarchy; for example at the Autonomous System (AS) level. At the same time, policies can be specified with sufficient detail in RPSL so that low level router configurations can be generated from them. RPSL is extensible; new routing protocols and new protocol features can be introduced at any time. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="2622"/>
  <seriesInfo name="DOI" value="10.17487/RFC2622"/>
</reference>
<reference anchor="RFC2725">
  <front>
    <title>Routing Policy System Security</title>
    <author fullname="C. Villamizar" initials="C." surname="Villamizar"/>
    <author fullname="C. Alaettinoglu" initials="C." surname="Alaettinoglu"/>
    <author fullname="D. Meyer" initials="D." surname="Meyer"/>
    <author fullname="S. Murphy" initials="S." surname="Murphy"/>
    <date month="December" year="1999"/>
    <abstract>
      <t>The implementation and deployment of a routing policy system must maintain some degree of integrity to be of any operational use. This document addresses the need to assure integrity of the data by providing an authentication and authorization model. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="2725"/>
  <seriesInfo name="DOI" value="10.17487/RFC2725"/>
</reference>
<reference anchor="RFC4012">
  <front>
    <title>Routing Policy Specification Language next generation (RPSLng)</title>
    <author fullname="L. Blunk" initials="L." surname="Blunk"/>
    <author fullname="J. Damas" initials="J." surname="Damas"/>
    <author fullname="F. Parent" initials="F." surname="Parent"/>
    <author fullname="A. Robachevsky" initials="A." surname="Robachevsky"/>
    <date month="March" year="2005"/>
    <abstract>
      <t>This memo introduces a new set of simple extensions to the Routing Policy Specification Language (RPSL), enabling the language to document routing policies for the IPv6 and multicast address families currently used in the Internet. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="4012"/>
  <seriesInfo name="DOI" value="10.17487/RFC4012"/>
</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>



    </references>





  </back>

<!-- ##markdown-source:
H4sIAAAAAAAAA8U76XLbRpr/+yl65R+xp0ha0jiZhDU7M7SljJXV4RGVyaaS
1KoJNMW2QIBBA6QZl/dZ9ln2yfY7+gJIyXaqpjZVVkgQ3f3ddw+HQ2EbVeb/
pYqq1GPZ1K0WZlXTJ9scHx5+c3gsMtWMpW1yYdvZ0lhrqrLZruD1s9Obb4Wq
tRpLsbkbC5FXWamW8Eteq3kzNLqZD+/qajOsV7YY1vrO2KbeDm1WrXQ+XOrl
TNd2eHgk2lWuGm3H8vir4+OBfHF4dCxEY5oC9rp2yyQvk26ZnFe1vH4zPZdW
N7KavdVZY4WazWq9/sxFhSrvxlKX4n4zFlIOJYIrVNssqnoshtKUANl0JK+r
pXlbwhuM5FTZhYoPq/oOzy2MmhVb+arKdQ5PM9Nsx3KytI2uc7XEJ1VbAmRj
eXkO3/RSmQLIi3v9rXarM1w8Kgt/9ncj+VKXttDbcPh38NcmT+n0sxJOGRWm
vJd/X85ew2OggdbAvpfVu4W606Wu5bSpR/LrQ4Ikh52ODo9ffBkgfalrWJ+C
eXIawXyLp/7NhGOEEGVVL1Vj1hpJd/3tK+Sg//in4y/dR+ToWJhyHt8Ww+FQ
qhlAqLJGiJuFsRIEqF3qspFOIPyGEoTUbyNnwNWVzsx8a8o7eWvrzIvS7UAo
WeqNVE1Tm1nbaFmVUtkhchu3qCt4ht+E4z3QVzYLDVxsG9ztTVWYbCuntL8B
yQdhl+cgHy1QTz5F0Xk2YljjGaooqg08cGCZTHpRl00lZ1rmem5KkEKUPq2y
hRNHoAcu0s1AqnVlcgRgVVezQiONMqmWM3PXAlvkZqFL2NRWxRpfQnQcyiMx
IYzXqjA5g1u3RYDprlZ5qwqgJ34CgiIVZiq736g6t8Dk5QoWzUwBp4yYJUuT
54UW4gmKU13lbYa7IoM+j0zy/XvHvQ8fHAUs0lrs44fXxYHU7xpdgvgjZ2gH
5PmHD0h0bQGvGv4tK4AB2basbINIwAPZ4yjpQgk7e5iDSXh6dn39TNotqOTS
bwsgADVUKbWBxTXQeq5rXWZwmMxNDRs7gstqTtujDD21LfBSIVHlZCrLFl8Y
yLM3wEXA9x0g02SjZwNQTqny3CCVgBd01mZhYC3stLS6WANlFmqtBXw3cMSm
7B5KbHtepWBtUQSqmiEH+UF6AYlN0wJOZ6WcVc0CELIafmxQXP1SJEVrmRXy
1isOceN2uQqaJIJ42y4bprpeAxnw/awwqKu2mjcb5AvSb16h4OHmQNUArkVF
ECzAmmUedB3QhMcGqOFOHbifgMZMQVgIWE+mGuQcBJ3kXm15X1yryorYhT+A
WTBlVrSkRojcqjZLBfy+1/gLniNunwKKzyLSHkcSA962BtHz54DqOmmyYPgQ
FNRYdyZIUdBzIHkjgcjwk1xV4CJBhxE+Z6dYIJP3AUPkdefEkSSzgkQsNPAT
lqcYZEBYg77Xip41IJr9DAb1CLfQNSvJsi0aswIwrLkrSUmBVQkMBmkKK6Yo
jcBB2tJLV6JL8XXJeDcLxTSJRo71ASmsiznSwTZVTSo8ikAReSRYiBog0fBr
W5pfW3BJFs93R6YoW1Z00HA8IDdzgq7pI/AaIR5EfD3syED9Dt4MFgGQZ62X
G9DyyNfkzIEEfwVL75GwXfFFXXUmuWr56AtVbnlbUgrQalMUYEDrGkQFrLGS
87paRtC65B/QUVqVLLCqkXoNXEDY2DHAc+Qf7Y1a7FnbWjDpRSoSIzbP0WEA
1Oi/NXLhYedBwga/AHxIJGf7VAmOKatqMkAULDnezDSuzxaV1eUAvmWqRYvs
Te/DVBUbhQYIsV6jG0Si4HubGg15qhhkK1m4fm0NQp8C8JStZl4BR4i1z4RT
ujlgm0eYeAePMfjUDKUsN3n5BUgT+2UPD73sDkDISDE9+l0lPzjzdDkgA3hA
CBywgKHuQmQM/ssz9ecxwaZQj5xTwwDgHRiFBj7PWHMgPq0V6Avw8CzYrxCv
elLt50iXfwz4ctU27JDByICO4dHO89TOFa7YfYdwrAJ2MmkN+QVwP3pVVFtN
Vgic6Kaq7/H1WgEhICBoazKZCp1vW4AnIKqTN0fjhdpDnIR1FnRTGXLn/PvC
vIX4A95wcdQC6DPTcKbFP0FXGoMBbsVYrdoZQBx8OpJqHolK6KCBQuVAirMf
0D2B8FKqUpERwdGQBtoF4QOGX2WZXjW4h9t1QCxnx+KW+PNqDOogcAeiSCl+
QDVwuoQeePAI3dlKwb7tSlJuhfYcXWtVlgCsWaMyC+eLcmPrFmFidQ82NWtr
MowbtWWvgXYEcKHoJJiEvK276s8a0hL7BcULGJ96ccQQBbYG1BomXwFqAEzB
r97EMkHAHNC7Qa/Yy6O9REA3DJEBowmYgvPINIb4lt+F8JKdB6Y1iUWjeMjJ
BaaoEK6a3xDz19VGe3voo2UJMFvQUYtecNgJPKeawlf55egoBKELAyjWGQg8
R2N0NgQfPpy7nUy/+vLw8HA8mQ5P/3Ny8eb89BYYyxqCvFCFrRjAJKzjfNH8
5oJwtl+M6TwYNefu4d1hiZGalAk+mFR0NqlKsPKoe3bHK3SNJjICrSKYN9hS
+RAsmDEMqmsEEpdxTuJyFRRwM0/1A04Bt2wJALausGVRIa3YC3YjGXT1PuJi
/JyUjQInIA1MOPHN6KvAiQBXrSFsMrCVD8+j70UiccLFKY0n5j4T3ceNXlap
zDOSsCVY39Z6wKdX31+/Oh2TvWbSLzpssduyUe+AHOg/bLtaVXXDKQplIWys
YVM4E6wHRDNJSoM6AJGg0wnj4/GQ6oII2W4WS5HtY0mSYMhVF/eSvS7aJnbF
kLpULUaioFYVhGLfkvdRSzCv4JoOrs/eAMpRxg8GrJIYW/tMluIMCrS9eBwk
C0QSWQUwaN8DF82yoZPEPTAlOYizyXWBtCf60e94BrAjWJ6BiIE8nLAqVIPv
2aCgb7RGKTt5ORKvwOWaskWdWitTKE5lkQUUIFCF4IGg34qmutNkpolce9Jo
zEdLC97OPpI0P3kCuWWi7T4P5pgMY3dQYVh3cPH99AaITP+Xl1f0+fr0H9+f
XZ+e4Ofp68n5efgg3BvT11ffn5/ET3Hlq6uLi9PLE14MT2XnkTi4mPx4wLbh
4OrNzdnV5eQ8xipR/mrt1IbqOiBAKNrKilzbDCjFcv7y1Zv//Z+jF6DR/4Yq
fXT0Dag0f/n66E8v4AuGmXwamy36CtTdCrVaacW5E4THmVqZBizoADkJ/hay
QPRlQMg//ISU+WUs/zzLVkcv/uIeIMKdh55mnYdEs90nO4uZiHse7TkmULPz
vEfpLryTHzvfPd2Th3/+awG2Tw6Pvv7rXwSWWVBKuvofRJSEy5mCrFDWskyh
pD6wIil4od0yS9CJ2hvu2z0nUISZeEyswGDkw/EQrppMo4MmfsxCCJR7Q9Mx
QgKFoG98xPvx2q5Upj+IiT98LMZdPNK3/qmKlt4oMIcDhX7680+3gBqXWW5/
/gUDTHgUysp4NDwej/k9gNk/epbue4O1a9i2WrHjdqnjcI3n5YJIHk3up1M9
rtlH+NW+VQnxubzSJT5ml90cNAQrzAjxMU7Ifx0nzGr9Ygi+C2yjHTIQQ8js
73TkDLzy1Ude2cu8QEn/9NM57d78VDHZOQmfIYRD74w+V3rIGfjE02dxzQIO
ulv0pOf9k5CifoCEBssIvpJG7HeBtE1jDKQ+xzMkABSDungEfW0oa7MwlCwV
gGT3aF/1TEslIEpp0YBjQjDjmGZwFkDZKxfmMUOC40DTcyYEwtWtxPtE3p9B
oGKyRDG93wbimEy76sVuwm5sLGt5ctSMuUvxyKN42qB4xqjsAVWlqgtgB8qF
kaWE2Axi0TzGr6hsuSurNjvnQjQDMUjlCqz94Ac3DHrnymJf2LQUQmeezXfD
JjAabXlfuqJoevAAczyyRap053eAHf1uCj1c/QUgY5w04BISF6fTmqRPpX1s
F7fviVvAeac4qYOwdnbeTwjcBx/MNEiTwXIsn+/7K1RR6cQ2lh8goCqkoRCd
4E4hQHRZJIjhZdXo6PjgXCABZy0YA8f+zm7cbSyHPRjXCrLUBUbLjyUqnQJU
SA1dmI0cwYp15MJInnAGD5u1kO6uE41xORwWMEBOFsr2/Ma8rX2dHKJrTtm9
K+/V5YBMFVWMKCzfqbpufZna10lcoQMbOzEnDPnXR3QRwQauWDggGIzAFlu1
daYFUxJ5oIo7yDWbxTKWc7kZ4QogTH7bL3hystTNAqhHwvVsCs4HOwx3fZ6i
qu7b1WPsp2okSmGmbKZyTRlB6gVcyiXEf8N/3FsOfmcsr6fDb8+upzfCgUZP
phBeXp6IqJH09Pz075NXP4qElvCYkri4hIk2li5FE72j/MbJrjevz67jOtzv
Y4u4PHIc1lzdvD697i/ibXtrDh9f4xDsLTrqLUIygkeWNB/w71+cMnmDo5lT
n8yrCPOPS1Ux8KJMRxGj7RcfKEEHf49JJkVQ3cUoCp5Lgyh63ldjzd+5qXN4
Hyt5/m2yzCeQT9VLDPmDYUmcuX+VzGKgtXyKfEjaRWBanpFRxj64J5R8yhEi
v/SMncCSq71ub7dd3+B37Lu3orFqijWwsPg2zd4ftPBd7OOxiMegBzY10SLg
n0YltxbJ5MQiFmRjAaaLtqMpiWIfRHr4+0DhpRGSQ65Hs6Ml6gOJkr4ZvqlL
rA8DbQPDN2RBQ7W0Em4zwsqh6CKjiFGs0SFYpA+dEKLEohXJLTbYVgMRNzvu
89lZcoZjgUl6yR0o4101+3exczyVzj13nb37R6sBhJWqwRs2yAzxA5rhX/Fx
6FKm9eFO37cb/W5XXHkS3CuxO+3c2ISn9jufEg+PbRPwB7XrM8TuJsmzrWIz
L0TJsYDZNfhRPrpxOvlQH38rOg0SnWptqC0RwGGsybW4Zo5B/+rsi0iwcQR+
6HSHSPRSvj4igX1cqfOu3hs+Z9divylFoN9KdmCAXx7pURgciMcR2fY4PKws
UudrprCuh+zABmeXrbBXUjYhHF2hGn7pEGumRaAiSJlPpl0VVtk9MQXlX5A+
j+5GMhQ2T04vrgYYjbF8pE0gDDlTiXJvJx3vLdsu4YxMSd09LDUm9EpkeEc0
Jj9Kh0QQUJcrAUC5sYpmBBaEKmY7uF8/ixrJH7inCnaIFw84ZMYTnCLlggJP
n2NylP5gzZOrbtF3kdyLJIXs0ZWsgxM8B/5CFyBXKOuuFsqwQEhvfQsY40vS
wW5Gi5IjUHL8eb2UkdoYetZCzFaGNmmktjsEDQ4O2ilPzC6yQpz6CHLHT7sE
VCp64vTukboOMd+U4PNUHqdO+qEkEccblc1i2w1jk0Ea3y9cVjmHx0MW/iTk
9XrJbVUIT0B+ahbr237B/tarwrwF1Hr20Q+WAQJzZQrUgsJ5v072mLanRz3a
pfUBQs6Rz2fvxO0u6VCCbLXk/i0oj0vAIHV1a3PwjtjmqmjGDa38SF5xO2/r
CxEgUi7/cCfhPrgzWIE7P/KEWbu3WaEV3InMYw5EHdRG3esI20icUI+b8kTj
8vkgLFTGDrUUoC4KTZimcxo7CF0iQX7Tge2a57QxrXVdTnJiPrcidIy1rXZN
/gCsWJp3YLhpHAByopxl7l7rVVrpiTKTCvnAJZzU88dwRXS5s2xt40oIfQsB
PCpQbeGDn2AaiDCllmZbhBO3Rbj7MYlN0KR/It8/id8+uHBAlb7F2dAYaJdh
jq7a+jmwxFirXn0yTSJdNcwd54yNIsqHLLgfsg7iuEqo3nBptdbLau0b/yT2
SdQbCIaWMqmYjMSkKNgL2ZBag3WcYWFigEeoOi+oqJVW1sLOgtQi4sSzZqFO
UuuVbojI1putZHiNLZDvVIWoddewYQVpRlERwMTeyavQTJd6jhWHeVLlCxWl
KGAgEli3aVAIsApDoR0ZKotCtyNX3JWD9JeGC4o82cy5zFg2eDhSWKLuPlJJ
AAUvc0X944rbTDQGTLXh53umTFG/0UPTvqaJ40YUEJF9xqhVBC2LzdyQb6KN
JZFzP2IS+FCK79PxkNoefXM8OhzBv+fHLzp5/jGE/eN89vV4/PyPx/0KACfA
nQJAutEglgPozUFvt35xoJdJ/zNBBrPiFFPICsp/LbJf7UWWEqaLNxcvr68u
z3/8dNS7b17e3IA4cZ3k+pXb7DOpc9bBf0wTWUHqKaeyLu9+4DSUOTgx4CvX
VsK5I4lVx7Gf8nLbpFhzZRHNQSAQqsgKs9QGx4GQWWiHvVeVNOmvQmG+Fx9d
qFLdUX/Cm5esWtGA5zyO79U6o641ToTpnKZ3yDJYinVp/Ag7AAP5qSrc8fli
jvajCxhVAyk6DOVDl7LgoQOXW1R9O05T9B2fErTcl61pA9fFsLGLYZOMABR7
msw8DHhy5CFXBcRCBfiD5LHfDqZofelgOg/I/JxOY0PZN0U4VrTHu6WeAP6G
/JSCFPV44T5ZSsz0HEGK+6nvvd3IDoOid/TRhJB7mjzhrZ4fpyEU50h78Q1I
z2fTLfS0fxfVVKfw9Sn0+f8kDgdKCI1zzVZ3cogUEIp99hES88oYzGJpJyc3
vaSoFLSRrqE4M6HzlCiggWEgGeMBimmoFIT5N4CDc3gMdi9XpSgEJzp8drih
KhLCQsPQrmrlojpQLDBCikYsOc5UBuwN5X93NB46KWg6DJUPUe2k1myeKLng
azQRl1sgrarvO+xzOdzo407rdzvX1Hv11u1fIZ/sUjQ5/WP+6CoNjjvSGUmR
OAzKaIjkXgyo8J3O8TNdm7Yu2d+HKVWFhU1r8W6Pa8mRQVUzrB1QfZQSWr4H
xN4hZE+hQjXTMe/F/qurKNOlwiZkk6rcigeD7K7u+nKH/Kk/tYUyDEmjVnVh
dP3L0yQReeZqdo1P6lYreAcE47Iqh11774f6Awaerg9nAaKb2D4U38aqHSC+
XDU77hG0oAYQetkb61zPZz6QYfurhCMeaLmIiUTvTsPusL7AfG53vJBuUgbT
EesHVJXLPODhLhzE38L3aX8e+1Rh+RE4aLi90y73xRW6WuMjHg6mHiFurbmO
uuARgqj0e5pnk6Cek+uzy/j98QAQuKHu+K6i7WHWMfTa9u5F9FH0avgINiCG
fItINYPg1bjQ1zttIHpp766d5iskdPfGZ45coLDJsDjnq4jXA3OPrvbTjSzj
xKBTvZHri1Qb5Fkna+0A9TFWuDqkCCW4ZlMlvWkuCJG3cRWxplaldRXC29Qy
hx25akobkgii0tDUMhUX07KBm9qnSppBl5SOkIppTCtjwSAZJAFWYQ1vNw4P
8+Yi3F/wbTqzxDIPvHGr3/lPsNQ9DkGf+zG9qoepGs+WxyiYj2XQbzF+5o/o
+QYCy3WuvJ5sY3xzPKS9N/0LfdTU+pUvIoVGCsddKJ04A00Gg8e1wUv7oQw/
q7JnahkdN3jqkGr6seuSw6B0GEL4+6ARaIzFVOQXUAcHz6hkAlY7XF2bg1hQ
3cUOwMVy7eMBGQfnUFdo7SgxSgdLQg8Ep/PHIhRCsI1RFLpI5Nz3+ajAEApk
PsIiYd1UonOHBd+FF2kqItzLQdAK/W4kL3x1olNnFo5YfNwMNOE+mXBRNedt
/Xvx3QLZbrCJJSo959kylVYvW7wDFMfEUdFIdc4mlxP5ytWtOR6Q75/g0w/O
2ID8V74HSddXkDTakhPE92ibKfbgkQU7W/lfPvSvjHNAbdMBFlBotw1VWl08
6m7jCCcnYZJlqUqzagvl7mYtFXKEx4V8SpLO9fvqaFjvRtrlXK0ruie8e2OG
onusn9HUFNWoCLJByoiZbjZ8HypaFi7ciczUGUBYs//rOolcN+iWyKjQxV9X
qgv9E39JdacJRxVOcKwkT7legWEns/Cbb5GYOu4ikhtGOKxqwyQSRqtIBGLg
JMMRrkLn5CPdBC3HV77lXJh7F0+q8l5+V83ktDRvc+oHn0BwV4At/9bYjO8k
5mLaqHVdWfkfIAiNAmGvVbgNAhBiW2reAs8hfeDrKxz04tAX0Jlu3Cby4m67
o+qL/wNeThh3CUMAAA==

-->

</rfc>

