<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.30 (Ruby 3.4.8) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-piraux-space-constellation-code-01" category="info" consensus="true" submissionType="IRTF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.31.0 -->
  <front>
    <title abbrev="Constellation code">A code to describe satellite constellations</title>
    <seriesInfo name="Internet-Draft" value="draft-piraux-space-constellation-code-01"/>
    <author fullname="Maxime Piraux">
      <organization>Aerospacelab</organization>
      <address>
        <email>maxime.piraux@aerospacelab.com</email>
      </address>
    </author>
    <author fullname="Juan A. Fraire">
      <organization>Inria / Saarland University</organization>
      <address>
        <email>juan.fraire@inria.fr</email>
      </address>
    </author>
    <date year="2026" month="March" day="02"/>
    <area>IRTF</area>
    <workgroup>Systems and Protocol Aspects for Circumstellar Environments RG</workgroup>
    <abstract>
      <?line 46?>

<t>When considering a satellite constellation forming a non-terrestrial network, the characteristics of this constellation heavily influences the network topology it forms.
To improve the analysis of such non-terrestrial networks across various tools developed by the network community, this document proposes a notation to describe common constellation patterns.
In addition, this document may serve as an introduction to satellite constellations for IETF participants.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://mpiraux.github.io/draft-piraux-space-constellation-code/draft-piraux-space-constellation-code.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-piraux-space-constellation-code/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Systems and Protocol Aspects for Circumstellar Environments RG Research Group mailing list (<eref target="mailto:space@irtf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/space/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/space/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/mpiraux/draft-piraux-space-constellation-code"/>.</t>
    </note>
  </front>
  <middle>
    <?line 52?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>The network topology of a satellite constellation is heavily influenced by its orbital characteristics. With recent technologies enabling Optical Inter-Satellite Links (OISL) between satellites, a network is formed by establishing links between neighbour satellites. The resulting topology can be dynamic as the distance between neighbour satellites changes throughout their orbital period. A common notation for the network community could improve the reproducibility of evaluations, measurements and simulations of satellite constellation networks.</t>
      <t>The true position of a satellite is often represented using a Two-Line Element set (TLE). A TLE contains a number of fields describing the orbital elements at a given time of a given satellite. Combined with a simplified perturbation model, the TLE can be used to predict the future position and velocity of the satellite relatively accurately. However, when studying satellite constellations, TLEs may not be appropriate. First, they assume each satellite has a known absolute position, which is derived from the launch time and parameters which may not be known at the time of study. Second, they involve complex calculations given the chosen perturbation model which may not scale well to large-scale experiments. Third, TLEs are not sufficient to determine how the links are established within the constellation as they do not indicate its characteristics but only the position of its satellites.</t>
      <t>The approach of this document is based on the mission parameters of a satellite constellation. Based on these parameters, the expected position of each satellite within the constellation can then be computed. While this approach does not capture the small discrepancies that can occur during the launch and operation of the satellites, we argue that it is sufficient in our context.</t>
      <t>This version of the specification applies only to circular orbital shells. The rationale for this restriction is that circular orbits are the most common in current satellite constellations and simplify the code syntax. Elliptical orbits, such as those used in Molniya or Flower constellations, are outside the current scope but could be supported in a future extension of this document.</t>
      <t>The notation defined in this document can also specify patterns for links within a shell of a constellation. Each pattern is repeated to establish the connectivity of a satellite with its neighbours within the shell. This is inspired by the works of network researchers on constellation network topology design <xref target="BhSi2019"/>.</t>
      <t>The rest of this document is organised as follows.
<xref target="satellite-constellations"/> introduces two variants of the Walker pattern for orbital shells. These are used to define many of the existing satellite constellations. <xref target="constellation-code"/> defines the constellation code syntax using an ABNF grammar <xref target="RFC5234"/> and the code semantics. <xref target="examples-of-constellation-codes"/> contains examples of existing constellations defined using the constellation code. <xref target="links"/> augments the constellation code with a pattern notation to describe links within a shell. Finally, <xref target="considerations"/> concludes with considerations for future versions of this document.</t>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <?line -18?>

</section>
    <section anchor="satellite-constellations">
      <name>Satellite constellations</name>
      <t>A constellation greatly improves the availability of a satellite service up to global or near-global coverage on Earth.
From the user perspective, a constellation offers more guarantees that a satellite can be reached at all times.
A constellation is composed of a set of orbital planes. Typically, several satellites are present on an orbital plane. They can be close together to perform formation flying or are equally spread within the plane.
Orbital planes are distributed in a complementary manner, i.e., they share some properties (e.g. altitude and inclination) but differ in others (e.g. longitude of ascending node).</t>
      <t>When all orbital planes of a constellation are circular orbits sharing the same altitude, they are said to constitute an orbital shell. Constellations often consist of a single orbital shell but more complex deployments can have several shells.</t>
      <t>The rest of this section describes two common shells based on the Walker pattern.</t>
      <section anchor="walker-constellations">
        <name>Walker constellations</name>
        <t>A Walker constellation consists of circular orbits sharing the same inclination. Two variants of the Walker pattern exist:</t>
        <ul spacing="normal">
          <li>
            <t>Walker Star, where orbits are distributed over 180 degrees around the equator.</t>
          </li>
          <li>
            <t>Walker Delta, where orbits are distributed over 360 degrees around the equator.</t>
          </li>
        </ul>
        <section anchor="walker-star">
          <name>Walker Star</name>
          <t><xref target="fig-walker-star"/> is an illustration of a Walker Star constellation considering the Earth equator as horizontal in the Figure. The orbit trajectories are depicted by a dashed line, while satellites and their travel direction are indicated by arrow heads.</t>
          <t>The orbits of a Walker Star constellation typically have an inclination close to 90 degrees with respect to the equator plane, though this is not a geometric constraint and other inclinations are possible. Given that they are distributed over 180 degrees around the equator plane, one half-sphere has satellites ascending from the south pole to the north pole while the other has them descending from north pole to south pole. This is depicted on the two sides of <xref target="fig-walker-star"/>.
Over the south and north poles, all orbits are crossing paths before going over the other half-sphere.</t>
          <figure anchor="fig-walker-star">
            <name>A Walker Star constellation</name>
            <artwork align="center"><![CDATA[
          /  / \  \
        , - ~ ~ ~ - ,
    , '/    ^   v    \' ,
  ,   ^    /     \    v  ,
 ,   /    ^       v    \   ,
,   ^     |       |     v   ,
,   |     ^       v     |   ,
,   ^     |       |     v   ,
 ,   \    ^       v    /   ,
  ,   ^   \       /   v   ,
    ,  \   ^     v   / , '
      ' - , _ _ _ ,  '
          \  \ /  /
]]></artwork>
          </figure>
          <t>In a Walker Star constellation, a seam can be observed at the start and end of the orbit distribution around the equator plane. That is the first orbit (resp. last orbit) is next to the last orbit (resp. first orbit) going in the opposite direction of the sphere. It can be observed at the center of the <xref target="fig-walker-star"/>. The seam effect in Walker Star constellations may limit cross-plane ISL links at the seam boundary, though cross-plane links are still possible elsewhere; for instance, the Iridium constellation uses a Walker Star pattern with cross-plane ISLs. However, the Delta variant is often preferred for OISL-capable constellations due to the absence of the seam effect.</t>
          <t><xref target="fig-walker-star-topo"/> illustrates a part of a possible network topology for Walker Star constellations, with four orbital planes depicted vertically, each containing three satellites. In this example, links are only established in-plane, i.e., within the same orbit, though cross-plane links are also possible. Each orbit forms a ring, where the last satellite is connected to the first satellite.</t>
          <figure anchor="fig-walker-star-topo">
            <name>A Walker Star constellation network topology</name>
            <artwork align="center"><![CDATA[
  :        :        :        :
  |        |        |        |
+~~~+    +~~~+    +~~~+    +~~~+
[0/0]    [1/0]    [2/0]    [3/0]
+~~~+    +~~~+    +~~~+    +~~~+
  |        |        |        |
  |        |        |        |
+~~~+    +~~~+    +~~~+    +~~~+
[0/1]    [1/1]    [2/1]    [3/1]
+~~~+    +~~~+    +~~~+    +~~~+
  |        |        |        |
  |        |        |        |
+~~~+    +~~~+    +~~~+    +~~~+
[0/2]    [1/2]    [2/2]    [3/2]
+~~~+    +~~~+    +~~~+    +~~~+
  |        |        |        |
  :        :        :        :
]]></artwork>
          </figure>
        </section>
        <section anchor="walker-delta">
          <name>Walker Delta</name>
          <t><xref target="fig-walker-delta"/> is an illustration of a Walker Delta constellation with only two orbits due to graphical constraints. The orbits of a Walker Delta constellation typically have an inclination ranging from 45 to 65 degrees with respect to the equator plane, though any inclination is geometrically valid. Combined with the altitude, the inclination directly limits the latitude coverage of a constellation, while Walker Star constellations have a complete latitude coverage.</t>
          <t>Given that the orbits are distributed around the entire equator plane, there is no seam effect as in the Walker Star pattern. Instead, each orbit progresses in the same direction and cross paths twice with every other orbit. In this case, satellites can establish links with neighbouring orbits in addition to links within the same orbit.</t>
          <figure anchor="fig-walker-delta">
            <name>A Walker Delta constellation</name>
            <artwork align="center"><![CDATA[
    /   , - ~ ~ ~ - ,   \
    , '               ' ,
  ,   \                   ,
 ,      ^           /      ,
,         \        v        ,
,           ^   /           ,
,             \v            ,
 ,           /  ^          ,
  ,         v     \       ,
    ,    /             , '
      ' - , _ _ _ ,  '
      \               /
]]></artwork>
          </figure>
          <t><xref target="fig-walker-delta-topo"/> illustrates a part of a possible network topology for Walker Delta constellations, with four orbital planes depicted vertically, each containing three satellites. Links are established in-plane and cross-plane, i.e., from one orbit to the other.</t>
          <figure anchor="fig-walker-delta-topo">
            <name>A Walker Delta constellation network topology</name>
            <artwork align="center"><![CDATA[
      :        :        :        :
      |        |        |        |
    +~~~+    +~~~+    +~~~+    +~~~+
..--[0/0]----[1/0]----[2/0]----[3/0]--..
    +~~~+    +~~~+    +~~~+    +~~~+
      |        |        |        |
      |        |        |        |
    +~~~+    +~~~+    +~~~+    +~~~+
..--[0/1]----[1/1]----[2/1]----[3/1]--..
    +~~~+    +~~~+    +~~~+    +~~~+
      |        |        |        |
      |        |        |        |
    +~~~+    +~~~+    +~~~+    +~~~+
..--[0/2]----[1/2]----[2/2]----[3/2]--..
    +~~~+    +~~~+    +~~~+    +~~~+
      |        |        |        |
      :        :        :        :
]]></artwork>
          </figure>
        </section>
      </section>
    </section>
    <section anchor="constellation-code">
      <name>Constellation code</name>
      <t><xref target="constellation-code-abnf-def"/> defines the constellation code using an ABNF grammar <xref target="RFC5234"/>. The code can define a constellation with multiple shells. Each shell can follow a Walker Star or Walker Delta pattern.</t>
      <figure anchor="constellation-code-abnf-def">
        <name>ABNF Grammar for the constellation code</name>
        <artwork type="abnf" align="center" name="syntax"><![CDATA[
constellation = shell [ "+" constellation ]
shell = walker ":" altitude ":" inclination ":" plane-params
shell =/ [ ":" mean-anomaly ]
walker = "D" / "S"
altitude = float
inclination = float
plane-params = no-sats "/" no-planes "/" phasing-factor
no-sats = int
no-planes = int
phasing-factor = int
mean-anomaly = float

int = 1*DIGIT
float = 1*DIGIT [ "." 1*DIGIT ]
DIGIT = %x30-39

]]></artwork>
      </figure>
      <t>In addition to the grammar presented above defining the syntax of the code, a number of requirements on the semantics of the code are listed below.</t>
      <ul spacing="normal">
        <li>
          <t>The altitude is expressed in kilometres with reference to the Earth's surface.</t>
        </li>
        <li>
          <t>The inclination is expressed in degrees and <bcp14>MUST</bcp14> be within the range of [0, 180] degrees. Inclinations greater than 90° represent retrograde orbits.</t>
        </li>
        <li>
          <t>The number of satellites must be evenly divisible by the number of planes.</t>
        </li>
        <li>
          <t>The phasing factor must be within the range [0, no-planes - 1]. It represents the relative offset between satellites in adjacent orbital planes. It determines how satellites in one plane are shifted in their orbital position compared to the satellites in the neighbouring plane, enabling optimal coverage patterns.</t>
        </li>
        <li>
          <t>The mean anomaly is expressed in degrees and <bcp14>MUST</bcp14> be within the range of [0, 360] degrees. It is optional and represents the orbital position of the first satellite in the first plane of the constellation. When absent it is considered equal to zero. The reference epoch for the mean anomaly is defined by the user's simulation environment or application context.</t>
        </li>
      </ul>
    </section>
    <section anchor="examples-of-constellation-codes">
      <name>Examples of constellation codes</name>
      <t>This section provides some examples of how the constellation code can be used to define existing satellite constellations sourced from public information. In some cases, when the phasing factor is not known, it is speculative.</t>
      <table anchor="example-table">
        <name>Examples of constellation codes</name>
        <thead>
          <tr>
            <th align="left">Name</th>
            <th align="left">Description</th>
            <th align="left">Constellation code</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">Iridium</td>
            <td align="left">Walker Star, 780 km altitude, 86.4° inclination, 66 satellites, 6 planes</td>
            <td align="left">S:780:86.4:66/6/1</td>
          </tr>
          <tr>
            <td align="left">OneWeb</td>
            <td align="left">Walker Star, 1 200 km altitude, 87.9° inclination, 672 satellites, 12 planes</td>
            <td align="left">S:1200:87.9:672/12/11</td>
          </tr>
          <tr>
            <td align="left">Starlink (shell 1)</td>
            <td align="left">Walker Delta, 550 km altitude, 53° inclination, 1584 satellites, 72 planes</td>
            <td align="left">D:550:53:1584/72/39 <xref target="StFrHe2022"/></td>
          </tr>
          <tr>
            <td align="left">GPS</td>
            <td align="left">Walker Delta, 20 180 km, 55° inclination, 24 satellites, 6 planes</td>
            <td align="left">D:20180:55:24/6/1</td>
          </tr>
        </tbody>
      </table>
    </section>
    <section anchor="links">
      <name>Describing links in a shell</name>
      <t>In this section, we extend the code notation with a complementary YAML format to specify the patterns of links within a shell. Each YAML document following the format defined in this I-D specifies a constellation that may be composed of several shells. An example of such a document is as follows:</t>
      <figure anchor="constellation-yaml-example">
        <name>Example of YAML document specifying a two-shell constellation</name>
        <artwork type="yaml" align="center" name="syntax"><![CDATA[
version: draft-piraux-space-constellation-code-01
shells:
- code: D:1200:55:400/20/19
  link_patterns:
  - rank_offset: 1   # Establish an in-plane link towards the next sat.
  - plane_offset: 1  # Establish a cross-plane link in a staggered pattern
    conditions:      # e.g. when only three links are possible.
    - eq: [{mod: [rank, 2]}, {mod: [plane, 2]}] # rank % 2 == plane % 2

- code: S:1210:89:52/4/1
  link_patterns:
  - rank_offset: 1   # Establish an in-plane link towards the next sat.
]]></artwork>
      </figure>
      <t><xref target="constellation-yaml-example"/> specifies a two-shell constellation. The first shell is a Walker Delta shell in which satellites have three links towards neighbours. The second one is a Walker Star pattern with two in-plane links per satellite.</t>
      <t>These patterns are encoded through the <tt>link_patterns</tt> key. It contains a list of patterns with optional conditions. Each pattern can specify how to reach a neighbour given local plane and rank offsets to establish a bidirectional link. For instance, the first pattern of the first shell specifies that a link is formed with the next satellite in the same orbit.</t>
      <t>For each pattern, a list of conditions can be expressed with the <tt>conditions</tt> key. These are evaluated for each satellite within the shell to determine whether the corresponding pattern should be applied to form a link. By applying each patterns to all satellites, the set of links within the constellation shell is established.</t>
      <section anchor="detailed-specification">
        <name>Detailed specification</name>
        <section anchor="top-level-keys">
          <name>Top-level keys</name>
          <dl>
            <dt><tt>version</tt></dt>
            <dd>
              <t>Indicates the version of this I-D that the YAML document should be interpreted with.</t>
            </dd>
            <dt><tt>shells</tt></dt>
            <dd>
              <t>A list of shells.</t>
            </dd>
          </dl>
        </section>
        <section anchor="shell">
          <name>Shell</name>
          <dl>
            <dt><tt>code</tt></dt>
            <dd>
              <t>The shell code following the specification in <xref target="constellation-code"/>.</t>
            </dd>
            <dt><tt>link_patterns</tt></dt>
            <dd>
              <t>A list of link patterns.</t>
            </dd>
          </dl>
        </section>
        <section anchor="link-pattern">
          <name>Link pattern</name>
          <dl>
            <dt><tt>rank_offset</tt></dt>
            <dd>
              <t>An integer specifying the offset in rank to reach the neighbour for this link.</t>
            </dd>
            <dt><tt>plane_offset</tt></dt>
            <dd>
              <t>An integer specifying the offset in plane to reach the neighbour for this link. When this offset causes the plane index to wrap around to the first plane, the rank index of the target satellite is adjusted according to the phasing factor of the shell.</t>
            </dd>
          </dl>
          <t>Both types of offset can be included for a single pattern. When one is absent, it is considered to be equal to zero.
In addition, they naturally wrap around at the boundaries of a shell.</t>
          <dl>
            <dt><tt>conditions</tt></dt>
            <dd>
              <t>A list of conditions that must be met for this link to be added.</t>
            </dd>
          </dl>
        </section>
        <section anchor="condition">
          <name>Condition</name>
          <t>Each condition is a predicate on two expressions encoded as mapping. The predicate is the key while the two expressions form a sequence as the value. This version of the document only specifies the equality predicate indicated by the <tt>eq</tt> key.</t>
        </section>
        <section anchor="expression">
          <name>Expression</name>
          <t>It can be an integer, a context element or an operation on two expressions.
Context elements are strings and include <tt>rank</tt> for the current rank index and <tt>plane</tt> for the current plane index of the satellite considered when evaluating a given link pattern.</t>
          <t>An operation is encoded as mapping, with the key defining the type of operation and the value containing a sequence with the two expressions.
This version of the document only specifies the modulo operation indicated by the <tt>mod</tt> key.</t>
        </section>
      </section>
    </section>
    <section anchor="considerations">
      <name>Considerations for future versions of this document</name>
      <t>The code presented in this document does not consider the capabilities of satellites within a constellation to establish links. It focuses on defining the stable network topology that is expected for a constellation. Future versions of this document could consider means to define the capabilities of Optical Communication Terminals (OCTs) used to establish ISLs. This is complementary to the description of the network topology, which forms more of an intent, while capabilities define the space of possible links.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>As the code specified in this document is foreseen as a user input into software that performs simulations, evaluations and analysis of satellite constellations, implementers <bcp14>SHOULD</bcp14> consider validation and sanitisation measures.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC5234">
          <front>
            <title>Augmented BNF for Syntax Specifications: ABNF</title>
            <author fullname="D. Crocker" initials="D." role="editor" surname="Crocker"/>
            <author fullname="P. Overell" initials="P." surname="Overell"/>
            <date month="January" year="2008"/>
            <abstract>
              <t>Internet technical specifications often need to define a formal syntax. Over the years, a modified version of Backus-Naur Form (BNF), called Augmented BNF (ABNF), has been popular among many Internet specifications. The current specification documents ABNF. It balances compactness and simplicity with reasonable representational power. The differences between standard BNF and ABNF involve naming rules, repetition, alternatives, order-independence, and value ranges. This specification also supplies additional rule definitions and encoding for a core lexical analyzer of the type common to several Internet specifications. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="68"/>
          <seriesInfo name="RFC" value="5234"/>
          <seriesInfo name="DOI" value="10.17487/RFC5234"/>
        </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>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="TvdLCode" target="https://github.com/Tim024/ConstellationCode">
          <front>
            <title>Constellation Code</title>
            <author initials="" surname="Tim van der Lee">
              <organization/>
            </author>
            <date year="2023" month="July"/>
          </front>
        </reference>
        <reference anchor="BhSi2019">
          <front>
            <title>Network topology design at 27,000 km/hour</title>
            <author fullname="Debopam Bhattacherjee" initials="D." surname="Bhattacherjee">
              <organization>ETH Zürich</organization>
            </author>
            <author fullname="Ankit Singla" initials="A." surname="Singla">
              <organization>ETH Zürich</organization>
            </author>
            <date month="December" year="2019"/>
          </front>
          <seriesInfo name="Proceedings of the 15th International Conference on Emerging Networking Experiments And Technologies" value="pp. 341-354"/>
          <seriesInfo name="DOI" value="10.1145/3359989.3365407"/>
          <refcontent>ACM</refcontent>
        </reference>
        <reference anchor="StFrHe2022">
          <front>
            <title>Distributed On-Demand Routing for LEO Mega-Constellations: A Starlink Case Study</title>
            <author fullname="Gregory Stock" initials="G." surname="Stock">
              <organization>Saarland Informatics Campus,Saarland University &amp;#x2013; Computer Science,66123 Saarbr&amp;#x00FC;cken,Germany</organization>
            </author>
            <author fullname="Juan A. Fraire" initials="J." surname="Fraire">
              <organization>Saarland Informatics Campus,Saarland University &amp;#x2013; Computer Science,66123 Saarbr&amp;#x00FC;cken,Germany</organization>
            </author>
            <author fullname="Holger Hermanns" initials="H." surname="Hermanns">
              <organization>Saarland Informatics Campus,Saarland University &amp;#x2013; Computer Science,66123 Saarbr&amp;#x00FC;cken,Germany</organization>
            </author>
            <date month="September" year="2022"/>
          </front>
          <seriesInfo name="2022 11th Advanced Satellite Multimedia Systems Conference and the 17th Signal Processing for Space Communications Workshop (ASMS/SPSC)" value="pp. 1-8"/>
          <seriesInfo name="DOI" value="10.1109/asms/spsc55670.2022.9914716"/>
          <refcontent>IEEE</refcontent>
        </reference>
      </references>
    </references>
    <?line 338?>

<section anchor="changelog">
      <name>Changelog</name>
      <section anchor="since-draft-piraux-space-constellation-code-00">
        <name>Since draft-piraux-space-constellation-code-00</name>
        <ul spacing="normal">
          <li>
            <t>Add YAML format to specify link patterns within shells of a constellation.</t>
          </li>
          <li>
            <t>Improvement of the text and examples.</t>
          </li>
        </ul>
      </section>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>We thank Tim van der Lee for his work on a code <xref target="TvdLCode"/> that served as the basis for this document.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
yW0xM8vTVJYsMm05CoP/B4z5a7LLTQAA

-->

</rfc>
