<?xml version="1.0" encoding="utf-8"?>
<!-- name="GENERATOR" content="github.com/mmarkdown/mmark Mmark Markdown Processor - mmark.miek.nl" -->
<rfc version="3" ipr="trust200902" docName="draft-ietf-sidrops-aspa-notation-04" submissionType="IETF" category="info" xml:lang="en" xmlns:xi="http://www.w3.org/2001/XInclude" indexInclude="true" consensus="true">

<front>
<title abbrev="ASPA Notation">Human Readable ASPA Notation</title><seriesInfo value="draft-ietf-sidrops-aspa-notation-04" status="informational" name="Internet-Draft"></seriesInfo>
<author initials="T." surname="Bruijnzeels" fullname="Tim Bruijnzeels"><organization>RIPE NCC</organization><address><postal><street></street>
</postal><email>tbruijnzeels@ripe.net</email>
</address></author><author initials="O." surname="Borchert" fullname="Oliver Borchert"><organization>NIST</organization><address><postal><street></street>
</postal><email>oliver.borchert@nist.gov</email>
</address></author><author initials="D." surname="Ma" fullname="Di Ma"><organization>ZDNS</organization><address><postal><street></street>
</postal><email>madi@zdns.cn</email>
</address></author><author initials="T." surname="de Kock" fullname="Ties de Kock"><organization>RIPE NCC</organization><address><postal><street></street>
</postal><email>tdekock@ripe.net</email>
</address></author><date/>
<area>Internet</area>
<workgroup></workgroup>

<abstract>
<t>This document defines a human readable notation for Validated ASPA
Payloads (VAP, see ID-aspa-profile) for use with RPKI tooling based on
ABNF (RFC 5234).</t>
</abstract>

</front>

<middle>

<section anchor="requirements-notation"><name>Requirements notation</name>
<t>The key words &quot;MUST&quot;, &quot;MUST NOT&quot;, &quot;REQUIRED&quot;, &quot;SHALL&quot;, &quot;SHALL NOT&quot;, &quot;SHOULD&quot;,
&quot;SHOULD NOT&quot;, &quot;RECOMMENDED&quot;, &quot;NOT RECOMMENDED&quot;, &quot;MAY&quot;, and &quot;OPTIONAL&quot; in
this document are to be interpreted as described in BCP 14 <xref target="RFC2119"></xref>
<xref target="RFC8174"></xref> when, and only when, they appear in all capitals, as shown here.</t>
</section>

<section anchor="introduction"><name>Introduction</name>
<t>This informational document defines a human readable ASPA notation for
Validated ASPA Payloads (VAPs) <xref target="I-D.ietf-sidrops-aspa-profile"></xref>.</t>
<t>The main motivations for providing this notations style are:</t>

<ul spacing="compact">
<li>This can help to create consistency between RPKI Relying Party
software output (generators), making it easier for operators to compare results.</li>
<li>This can be used by RPKI Certificate Authorities (CA) command line
interfaces and/or configuration, where an automated process parses this syntax. E.g. allowing a CA to provide a
listing of intended VAPs which can be easily compared to RP output.</li>
<li>This can be used for documentation.</li>
</ul>
<t>The chosen notation style can be read from left to right to mean that
the holder of the customer ASN on the left authorizes one or more
provider ASNs on the right.</t>
<t>That said, this definition is informational. Implementations can choose
to use their own notation styles instead of, or in addition to this.</t>
</section>

<section anchor="aspa-notation-definition"><name>ASPA Notation Definition</name>
<t>This specification uses ABNF syntax specified in <xref target="RFC5234"></xref>.</t>

<artwork>notation            = customer-asid separator providers

customer-asid       = asn
separator           = &quot; =&gt; &quot;

providers           = providers-one-line / providers-multiline
providers-one-line  = asn *(*wsp &quot;,&quot; *wsp asn)
providers-multiline = &quot;[&quot; *wspml asn *(*wspml &quot;,&quot; *wspml asn) *wspml &quot;]&quot;

asn                 = &quot;AS&quot; uint32
uint32              = %d0-4294967295

wsp                 = space / tab

wspml               = space / tab / cr / lf

cr                  = %d13
lf                  = %d10

space               = %d32
tab                 = %d9
</artwork>

<section anchor="customer-asid"><name>customer-asid</name>
<t>This field represents the customerASID defined in section 3.2 of
<xref target="I-D.ietf-sidrops-aspa-profile"></xref></t>
</section>

<section anchor="providers"><name>providers</name>
<t>This field represents the providers defined in section 3.3 of
<xref target="I-D.ietf-sidrops-aspa-profile"></xref>. Note that the normative constraints
which are defined in that section mean that following constraints apply
to the content of ASPA objects:</t>

<ol spacing="compact">
<li>There must be at least one provider-as.</li>
<li>The customer-asid &quot;asn&quot; value must not appear in any provider-as.</li>
<li>The elements of providers must be ordered in ascending numerical order
by the &quot;asn&quot; value of the provider-as field.</li>
<li>Each &quot;asn&quot; value for used for a provider-as must be unique.</li>
</ol>
<t>A generator MUST ensure that the output matches all these normative constraints.
However, to be more resilient to input written by humans, a parser MUST accept
a list of providers that is not correctly sorted (3) but otherwise valid.</t>

<section anchor="provider-as"><name>provider-as</name>
<t>This field represents a Provider AS as defined in section 3.3 of
<xref target="I-D.ietf-sidrops-aspa-profile"></xref>.</t>
</section>
</section>

<section anchor="asn"><name>asn</name>
<t>This field consists of the string &quot;AS&quot; followed by a decimal value of a 32-bit
Autonomous System Number using the asplain presentation as specified in
<xref target="RFC5396"></xref>. Decimal values MUST represent a 32 bit value, and therefore MUST
be part of the range 0-4294967295.</t>
</section>
</section>

<section anchor="example-notations"><name>Example Notations</name>
<t>Some example notations are listed below. The last example is not advised for
readability but is technically allowed by this specification.</t>

<artwork>AS65000 =&gt; AS65001
AS65000 =&gt; AS65001
AS65000 =&gt; AS65002
AS65000 =&gt; AS65001, AS65002,AS65003

AS65000 =&gt; [ AS65001, AS65002, AS65003 ]

AS65000 =&gt; [
    AS65001,
    AS65002,
    AS65003
]

AS65000 =&gt; [AS65001,
                     AS65002
,AS65003
    ]
</artwork>
<t>The following example is valid for input only (i.e. while it is sorted in string order, it is not
sorted in numerical order):</t>

<artwork>AS65000 =&gt; [ AS4200000000, AS64496 ]
</artwork>
<t>note: private use AS number used because all documentation AS numbers have the
same textual prefix.</t>
</section>

<section anchor="iana-considerations"><name>IANA Considerations</name>
<t>This document has no IANA actions.</t>
</section>

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

<section anchor="acknowledgements"><name>Acknowledgements</name>
<t>Thanks to Randy Bush for suggesting to allow only one possible notation for AS
numbers.</t>
</section>

</middle>

<back>
<references><name>Normative References</name>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml-ids/reference.I-D.ietf-sidrops-aspa-profile.xml"/>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml"/>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.5234.xml"/>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.5396.xml"/>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml"/>
</references>

</back>

</rfc>
