<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<!--
  XML2RFC offers an include feature described in the XML2RFC README
  file.  That syntax, however, contradicts the DTD requirements to
  have <reference> elements within the <references> element, so an 
  XML parser is likely to find your XML file invalid.  It may be
  possible that XML2RFC will change their DTD so that the XML file
  remains valid when their style of include is used.

  In the meantime therefore, we use an alternative valid-XML approach
  to includes, which unfortunately require that define your includes
  at the beginning of the file. Since the biggest benefit of includes
  is for references, this requires that your references be defined in
  ENTITY clauses here before being "included" and cited elsewhere in
  the file.
-->
<?rfc toc="yes"?>
<?rfc symrefs="yes"?>
<?rfc compact="yes"?>
<?rfc subcompact="no"?>
<?rfc strict="no"?>
<?rfc rfcedstyle="yes"?>
<!--
  This template is for authors of IETF specifications containing MIB
  modules.  This template can be used as a starting point to produce
  specifications that comply with the Operations &amp; Management Area
  guidelines for MIB module documents.
-->
<!--
  Throughout this template, the marker "[TODO]" is used to indicate an
  element or text that requires replacement or removal.
-->
<!-- Intellectual Property section -->
<!--
  The Intellectual Property section will be generated automatically by
  XML2RFC, based on the ipr attribute in the rfc element.
-->
<!-- 
  [TODO] specify the name of the output document. This is optional;
the default is to use the base portion of the XML filename. 
[TODO]For Internet-drafts, indicate which intellectual property notice 
to use per the rules of RFC3978.
Specify this in the ipr attribute.  The value can be:
    full3978 -
    noModification3978 -
    noDerivatives3978 -
[TODO] Specify the category attribute per RFC2026 
options are info, std, bcp, or exp.
[TODO] if this document updates an RFC, specify the RFC in the 
"updates" attribute
-->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" category="info" docName="draft-lhan-satellite-instructive-routing-01" ipr="trust200902" obsoletes="" updates="" submissionType="IETF" xml:lang="en" tocInclude="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.9.0 -->
  <front>
    <!--
  Throughout this template, the marker "[TODO]" is used to indicate an
  element or text that requires replacement or removal.
-->

    <!--
[TODO] Enter the full document title and an abbreviated version
  to use in the page header.
-->

    <title abbrev="Satellite Instructive Routing">
	Semantic Address Based Instructive Routing for Satellite Network</title>
    <seriesInfo name="Internet-Draft" value="draft-lhan-satellite-instructive-routing-01"/>
    <!-- [TODO] copy the author block as many times as needed, one for each author.-->

    <!-- If the author is acting as editor, use the <role=editor> attribute-->

    <!-- see RFC2223 for guidelines regarding author names -->

    <author fullname="Lin Han" initials="L" role="editor" surname="Han">
      <organization>Futurewei Technologies, Inc.</organization>
      <address>
        <postal>
          <street>2330 Central Express Way</street>
          <city>Santa Clara, CA 95050</city>
          <country>USA</country>
        </postal>
        <email>lhan@futurewei.com</email>
      </address>
    </author>

    <author fullname="Alvaro Retana" initials="A" surname="Retana">
      <organization>Futurewei Technologies, Inc.</organization>
      <address>
        <postal>
          <street>2330 Central Express Way</street>
          <city>Santa Clara, CA 95050</city>
          <country>USA</country>
        </postal>
        <email>alvaro.retana@futurewei.com</email>
      </address>
    </author>

    <author fullname="Richard Li" initials="R" surname="Li">
      <organization>Futurewei Technologies, Inc.</organization>
      <address>
        <postal>
          <street>2330 Central Express Way</street>
          <city>Santa Clara, CA 95050</city>
          <country>USA</country>
        </postal>
        <email>rli@futurewei.com</email>
      </address>
    </author>
    <!-- [TODO]: month and day will be generated automatically by XML2RFC; 
be sure the year is current.-->

    <date year="2022"/>
    <!--[TODO] IETF area is optional -->


    <area>Internet Area</area>
    <workgroup>Network Working Group</workgroup>
    <keyword>Satellite</keyword>
    <keyword>Internet</keyword>
    <keyword>Constellation</keyword>
    <keyword>Relay</keyword>
    <!--[TODO] add additional keywords here for IETF website search engine -->

    <abstract>
      <t>This document presents a method to do IP routing over satellite network that consists of LEO (Low Earth Orbit) satellites and 
	  ground-stations. The method uses the source routing mechanism. The whole routing info is obtained by
	  path calculation. The routing path information is converted to be a list of instructions and embedded into user packet's
	  IPv6 extension header. 
	  At each hop or each satellite, the routing process 
	  engine will forward the packet based on the specified instruction for the satellite. 
	  Until the packet reaches the edge of satellite network, or the last satellite, 
	  the packet will be sent to a ground station.</t>
	 
      <!--Remember, don't put any citations in the abstract, and expand your acronyms. -->
    </abstract>
  </front>
  <middle>
    <section numbered="true" toc="default">
      <name>Introduction</name>
	  <t>Massive LEO constellation is expected to be used for future Internet. It has raised challenges to 
	  the current IP networking technologies to support such super-fast-moving network. 
	  <xref target="I-D.lhan-problems-requirements-satellite-net"/> has analyzed the problems when using the
	  regular routing protocols in such network.</t>
      <t>Since all satellites in a LEO constellation are well organized and form a kind of multi-layered grid network, each satellite's
	  relative position in the satellite network will be steady during its life time.
	  <xref target="I-D.lhan-satellite-semantic-addressing"/> has proposed to use couple of indexes to
	  identify each satellite in the network. The combination of the indexes is called the satellite semantic address. The
	  semantic address can be embedded into the field of the interface identifier 
	  (i.e., the rightmost 64 bits) of the IPv6 address, if IPv6 is used in the satellite network.</t>
	  <t>This memo proposes a method for routing for LEO satellite network, it is based on
	  the satellite semantic address. It is a source routing mechanism and conceptually similar to SRv6 (IPv6 Segment Routing) <xref target="RFC8754"/>
	  with loose-hop, but with many differences in the architecture and details. 
	  The routing information is embedded into the IPv6 packet as routing extension header defined in <xref target="RFC8200"/>.
	  Unlike the SRv6 <xref target="RFC8754"/> and programming <xref target="RFC8986"/>,
	  The new method will not use IPv6 SID (Segment Identifier) to represent the segments on the routing path.
	  Instead, it will convert the segments on the path to be a list of instructions since each satellite
	  could be represented by the semantic address. Each instruction can
	  tell each satellite how to forward the packet to an adjacent satellite and when to stop, either on the same orbit, or on the adjacent orbit. </t>
	  <t>Compared with the traditional IP forwarding, the new method will not use TCAM (Ternary Content-addressable Memory)
	  lookup for IP prefix. Each satellite
	  only needs to store a simple adjacency table. Therefore, the new method can save significant TCAM and the processing
	  time for routing/forwarding tables.</t>
	  <t>It must be noted this memo just describes one aspect of the whole solution for satellite constellation used for Internet access
	  and NTN (Non-Terrestrial Network) integration with 5G, following
	  areas are not covered in this memo and will be addressed in other documents separately:</t>
	  <ol spacing="normal" type="1">
		  <li>IP forwarding path calculation for a LEO constellation.</li>
		  <li>Data planes for different scenarios, such as Internet access and NTN integration.</li>
		  <li>Other protocols for control plane.</li>
      </ol>
	   
    </section>
    <section anchor="Terminology" numbered="true" toc="default">
      <name>Terminology</name>
      <!-- 2, line 143-->
  <dl newline="false" spacing="normal" indent="18">
        <dt>LEO</dt>
        <dd>Low Earth Orbit with the altitude from 180 km to 2000 km.</dd>
		<dt>LEO constellation</dt>
        <dd>LEO constellation consists of certain number of LEOs. Each LEO has pre-assigned orbit element.</dd>
        <dt>ISL</dt>
        <dd>Inter Satellite Link</dd>
        <dt>GS</dt>
        <dd>Ground Station, a device on ground connecting satellite. In the document, GS will hypothetically 
	provide L2 and/or L3 functionality in addition to process/transmit/receive radio wave. It might be different as the reality that
	the device to process/transmit/receive radio wave and the device to provide L2 and/or L3 functionality could be separated.</dd>
        <dt>L2</dt>
        <dd>Layer 2, or Data Link Layer in OSI model <xref target="OSI-Model" format="default"/></dd>
        <dt>L3</dt>
        <dd>Layer 3, or Network Layer in OSI model <xref target="OSI-Model" format="default"/>, it is also called IP layer in TCP/IP model</dd>
        <dt>OS</dt>
        <dd>Operating System</dd>
		<dt>NTN</dt>
        <dd>Non-Terrestrial Network</dd>
		<dt>SID</dt>
		<dd>Segment Identifier</dd>
		<dt>Sat-GS Links</dt>
		<dd>Wireless links between satellites and ground-stations, it consists of uplink (from ground to satellite) and downlink (from satellite to ground.</dd>
		<dt>Link Metrics</dt>
		<dd>The cost of the outgoing interface for routing, typically, it may indicate the bandwidth, delay or other costs for the interface.</dd>
		<dt>Sat_ID</dt>
        <dd>Satellite Index, the Index for the satellite in a orbit plane, see <xref target="I-D.lhan-satellite-semantic-addressing"/></dd>
		<dt>Obp_ID</dt>
        <dd>Orbit Plane Index, the Index for the orbit plane in a shell group of satellite, see <xref target="I-D.lhan-satellite-semantic-addressing"/></dd>
		<dt>Shl_ID</dt>
        <dd>Shell Index, the Index for the shell group of satellite in a satellite constellation, see <xref target="I-D.lhan-satellite-semantic-addressing"/></dd>
	    <dt>Intf_ID</dt>
		<dd>Interface Index</dd>
	    <dt>Sat_Addr</dt>
		<dd>Satellite Semantic Address, it consists of indexes Shl_ID, Obp_ID and Sat_ID. It is 32-bit long and
		is defined in Section 5.4 in <xref target="I-D.lhan-satellite-semantic-addressing"/></dd>
	    <dt>Sat_MacAddr</dt>
		<dd>The MAC (Media Access Control) Address for a satellite</dd>
	  
	  
	  </dl>
    </section>
<section title="Review of LEO satellite constellation for future Internet" anchor="ReviewForLEO">
	  <t>LEO satellite constellation is expected to be integrated with terrestrial network in future Internet. 
	  StarLink project <xref target="StarLink"/> has launched its satellites and provided the beta service in some areas.
	  3GPP <xref target="ThreeGPP"/> has studied the issues when  NTN is integrated with Internet and 5G. 
	  3GPP <xref target="TR38-821"/> has also proposed the 
	  Satellite-based NG-RAN architectures for NTN integration.
	  In the 3GPP new Release 18 (in-progress), there is a working item "Study on 5G System with Satellite Backhaul" <xref target="TR23-700"/>. In which,
	  LEO satellite network will provide the transport functionality for 5G RAN access network.
	  As a summary, the targets of LEO constellation for future Internet and NTN integration are as follows:</t>
	    <ol spacing="normal" type="1">
		  <li>Global coverage: The Satellite network should cover all places on earth and any flying objects 
		  as long as the place or objects are below LEO attitude and within the coverage footprint of satellite constellation, 
		  the satellite network should be the complementary to terrestrial network.</li>
          <li>Internet access: The Satellite network can provide the Internet access service for covered areas.</li>
          <li>NTN integration: The Satellite network is fully integrated with Internet including Wireless 
		  such as 4G or 5G.</li>
          <li>Competitive service: The Satellite network can provide the services that are competitive 
		  to terrestrial network
		  in terms of service stability, Quality of Service, especially the latency for Satellite network is shorter.</li>
        </ol>	  
	  <t>As a new form of network, LEO constellation has lots of difference with the
	  steady terrestrial network especially in the mobility. <xref target="I-D.lhan-problems-requirements-satellite-net"/> 
	  has analyzed the movement and coverage of satellite. For a massive LEO constellation, all satellites are moving 
	  on the allocated orbits, and form one or multiple layers of network. Finally, the massive LEO constellation
	  will have the following unprecedented mobility:</t>
	    <ol spacing="normal" type="1">
		  <li>Each LEO moves at the speed of 7.x km/s.</li>
          <li>Ground Stations move at the speed of 463 m/s due to earth rotation.</li>
          <li>Half of LEOs move on the direction that is different with another half of LEOs.</li>
          <li>Huge number of links between satellites and ground-stations, and all of them are constantly flipping within 
		  short period of time. All Link Metrics of Sat-GS Links are also constantly changing.</li>
          <li>All Link Metrics of ISL on the Longitude direction are constantly changing.</li>
          <li>All Links of ISL on the Longitude direction may be interrupted at two polar areas.</li>
          <li>All Link Metrics of ISL on the radius direction (for satellites with different altitude) are constantly changing.</li>
          <li>All Links of ISL on the radius direction can only last for a limited time.</li>
        </ol>
</section>
<section title="Basics of Instructive Routing" anchor="InstructiveRoutingForLEO">
<t>In IP routing or forwarding, the IP path consists of a list of IP nodes (hops). In LEO satellite network, the IP forwarding
path is a list of satellites. Instructive routing essentially is a mechanism that converts satellites on the path to a list of
segment and then to a list of instructions. It will utilize the special characters of LEO satellite network to achieve 
the minimized packet overhead while the forwarding functions can be executed quickly.</t>
<t>A typical LEO satellite network is an interleaved and meshed network moving constantly. Each satellite only has limited adjacent
satellites, thus the limited packet forwarding directions (see <xref target="LimitedFwdDirections"/>). </t>
<t>The satellites on a forwarding path can be converted to a list of segments. 
The number of segments is normally much smaller than the number of satellites on the path. </t>
<t>The number of segment type will determine the number of instruction type. Since the segment type is also 
limited (see <xref target="LimitedSegs"/>), so the instruction type is limited.</t>
<t>Finally, combining the above characters and with the use of semantic address, the Instructive Routing will only 
introduce limited overhead that is much smaller than SRv6 and SRv6 with compressed SID.</t>
<section title="Forwarding Directions" anchor="LimitedFwdDirections">
<t>When using ISL for satellites in a LEO constellation, each layer of network will
have satellite nodes connected by limited ISLs. A typical satellite will have about six ISL to connected to
its adjacent satellites in 3D space. Additionally, there might have very few numbers of ISL working as un-steady link to connect
to other satellites. Un-stead links are those between satellites moving to different directions, see 
<xref target="I-D.lhan-problems-requirements-satellite-net"/> for the detailed explanation.
After using the semantic address for each satellite,
the satellite relationship will be static. <xref target="SatellitesRelationship"/> illustrates one satellite
and its six direct connected adjacent satellites, it is easy to determine some indexes 
of its adjacent satellites: </t>
        <ol spacing="normal" type="1">
		  <li>S0, S1 and S2 have the same Shl_ID, the difference of Obp_ID between 
		  S0 and S1, S0 and S2 are both equal to one.</li>
		  <li>S0, S3 and S4 have the same Shl_ID and Obp_ID, the difference of Sat_ID between 
		  S0 and S3, S0 and S4 are both equal to one.</li>
		  <li>S0, S5 and S6 have different Shl_ID, and the difference of Shl_ID between 
		  S0 and S5, S0 and S6 are both equal to one.</li>
        </ol>
<t>Another benefit to use the semantic address is that the packet forwarding for routing and switching will be 
simplified significantly. There will be only six major forwarding directions to the directly connected 
adjacent satellites described above, plus one or few specified directions probably. 
The specified direction is to forward packet to a specified adjacent satellite through an un-steady link. 
The un-steady link can connect to any satellite but only last for a short time. The usages
of un-steady links are expected to be limited and are not major scenarios in a LEO constellation. 
Following are all directions for forwarding:</t>
        <ol spacing="normal" type="1">
		  <li>Forward to the Sat_ID Incremental or Decremental directions.</li>
		  <li>Forward to the Obp_ID Incremental or Decremental directions.</li>
		  <li>Forward to the Shl_ID Incremental or Decremental directions.</li>
		  <li>Forward to a specified satellite through an un-steady link.</li>		  
        </ol>
<figure anchor="SatellitesRelationship">
          <name>The LEO Satellite Relationship in 3D Space</name>
<artwork align="center" name="" type="" alt="">
<![CDATA[
             ^ Shl_ID Incremental direction
             |    
               /
              /  
             S5    ^ Sat_ID Increment direction
            /|    /
           / |   S3
        / /  |  /       /
       / /   | /       /
      /      |/       /
     S2------S0------S1  -> Obp_ID Increment direction
    /       /|   /  /
   /       / |  /  /
  /       /  | /  /
         S4  |/
             S6
            /
           /
          /
		  
]]></artwork>
</figure>
</section>
<section title="Forwarding Segments" anchor="LimitedSegs">
<t>A forwarding segment is defined as a list of satellites, 
and four type segments are defined for LEO satellite network where semantic address is used:</t>
<ol spacing="normal" type="1">
<li>Segment with adjacent Shl_ID: For any direct adjacent satellites on the segment, 
their Shl_ID are also adjacent (differ by one).</li>
<li>Segment with adjacent Obp_ID: For any direct adjacent satellites on the segment, 
their Obp_ID are also adjacent (differ by one), the Shl_ID are the same.</li>
<li>Segment with adjacent Sat_ID: For any direct adjacent satellites on the segment, 
their Sat_ID are also adjacent (differ by one), the Obp_ID and Shl_ID are identical.</li>
<li>Segment with non-adjacent index: this segment only has two satellites and two 
satellites do not belong to the above three categories.</li>
</ol>
</section>
<section title="Forwarding Instructions" anchor="Instructions">
<t>Each forwarding instruction consists of Functional Code and Argument (see <xref target="InstructionList"/>). 
For the most often used instructions, the Argument represents one specified index (Sat_ID or Obp_ID or Shl_ID) 
of a satellite semantic address and only has the size of one octet.</t>
<t>Each segment maps to a forwarding instruction that can guides the packet
forwarded at each satellite from the start to the end of the segment. 
For the segment types (1) to (3) described in <xref target="LimitedSegs"/>, 
there are two directions to forward packet, each direction can be defined as either an 
increment or a decrement of a specified index. For type (4), there is one direction to forward packet. 
In total we have seven directions to forward packets among all satellites: to the satellite ahead or behind; 
to either sides; above or below; or to another non-adjacent satellite.</t>
<t>When an IP packet is forwarded on a segment by an instruction, at each satellite, 
the forwarding logic needs to check if the packet reaches the end of
the segment. In the regular segment routing, the long size of SID is used to do such indication.
But for satellite network, since 32-bit satellite's semantic address is embedded into the IPv6 address, 
it is not needed to include the long SID into the packet header.
Instead, we only need to compare one octet index of the current satellite's semantic address,
instead of whole IPv6 address, with the Argument in the instruction.</t>

</section>

<section title="Example" anchor="Example">
<t><xref target="SatelliteNetPakFwd"/> illustrates a 2D example. It shows 
how a packet is forwarded in a grid satellite network. Intuitively, we can obtain the list of instructions to guide the packet and get 
the forwarding behaviors at different satellites. Following is an example:</t>
        <ol spacing="normal" type="1">
		  <li>At S1 to S2, forward packet to the Sat_ID Incremental direction, until the packet reaches S2</li>
		  <li>At S2 to S3, forward packet to the Obp_ID Incremental direction, until the packet reaches 
		      the orbit plane of S3</li>
		  <li>At S3 to S4, forward packet to the Sat_ID Incremental direction, until the packet reaches S4</li>
		  <li>At S4 to S5, forward packet to the Obp_ID Decremental direction, until the packet reaches 
		      the orbit plane of S5</li>
		  <li>At S5 to S6, forward packet to the Sat_ID Decremental direction, until the packet reaches S6</li>
        </ol>
<t>By using a specified index of semantic address as the argument as described in <xref target="Instructions"/>, we can further simplify 
the above instructions as: </t>
        <ol spacing="normal" type="1">
		  <li>At S1 to S2, forward packet to the Sat_ID Incremental direction, until the packet reaches a satellite and the satellite's 
		      Sad_ID is equal to the given instruction argument (S2's Satellite Index)</li>
		  <li>At S2 to S3, forward packet to the Obp_ID Incremental direction, until the packet reaches a satellite and the satellite's 
		      Obp_ID is equal to the given instruction argument (S3's Orbit Plane Index)</li>
		  <li>At S3 to S4, forward packet to the Sat_ID Incremental direction, until the packet reaches a satellite and the satellite's 
		      Sat_ID is equal to the given instruction argument (S4's Satellite Index)</li>
		  <li>At S4 to S5, forward packet to the Obp_ID Decremental direction, until the packet reaches a satellite and the satellite's 
		      Obp_ID is equal to the given instruction argument (S5's Orbit Plane Index)</li>
		  <li>At S5 to S6, forward packet to the Sat_ID Decremental direction, until the packet reaches a satellite and the satellite's 
		      Sat_ID is equal to the given instruction argument (S6's Satellite Index)</li>
        </ol>
<figure anchor="SatelliteNetPakFwd">
          <name>Packet Forwarding in 2D LEO satellite constellation network</name>
          <artwork align="center" name="" type="" alt="">
<![CDATA[

  ^ Sat_ID Incremental Direction
  |
  |
  +----> Obp_ID Incremental Direction
  
  x: The ISL is down
  
       Obp_ID Obp_ID+1 Obp_ID+2 Obp_ID+3 Obp_ID+4
          |       |       |       |       |
      ----+-------S5<<<<<<S<<<<<<<S4------+----     
          |       V       x       ^       |
          |       V       |       ^       |		  
      ----+-------S6------+---x---S-------+----     
          |       |       |       ^       |
          x       x       x       ^       |
      ----S2>>>>>>S>>>>>>>S>>>>>>>S3------+----     
          ^       |       |       |       |
          ^       |       |       |       |
      ----S---x---+-------+-------+-------+----     
          ^       |       |       |       |
          ^       |       |       |       |
      ----S1--x---+-------+-------+-------+----     
          |       |       |       |       |
          |       |       |       |       |	 
]]></artwork>
</figure>

</section>
		
</section>
		
<section title="IPv6 Routing Header for Instructive Routing" anchor="HeaderForInstructiveRouting">
<t>For instructive routing, IPv6 routing header is used with a new routing type "Instructive Routing Type". 
The format of the new routing header is illustrated in <xref target = "IPv6_Routing_Hdr_with_Instructive_Routing_Type"/>.</t>
        <figure anchor="IPv6_Routing_Hdr_with_Instructive_Routing_Type">
          <name>The IPv6 Routing Hdr for Instructive Routing</name>
          <artwork align="center" name="" type="" alt="">
		  <![CDATA[
  0                   1                   2                   3 
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+                           
| Next Header   |  Hdr Ext Len  | Routing Type  | Inst. Offset  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Remained Inst. | ST  |              Rsvd                       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                            Inst. List                         ~
|                                               +-+-+-+-+-+-+-+-+
|                                               ~   paddings    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

        ]]></artwork>
        </figure>
<dl newline="false" spacing="normal" indent="16">
        <dt>Routing Type</dt>
		<dd>Instructive Routing Type</dd>
		<dt>Inst. Offset</dt>
        <dd>The offset in the number of octets from the start of Instruction List. 
		    The initial value is set to 0 and it points to the 1st instruction to be executed.
            The value is incremented by the number of octets of
            the total size of an instruction after the instruction is executed.</dd>
        <dt>Remained Inst.</dt>
        <dd>Remained Number of Instructions.
		    The initial value is set to the total number of
            instructions. The value will be decremented by one
            after one instruction is executed. The minimum number is one, and it
			indicates that the end of instruction stack is reached.</dd>
        <dt>ST</dt>
        <dd>The satellite address type, default is 0.</dd>
		<dt>Inst. List</dt>
        <dd>A list of instructions, the size is variable.</dd>
		<dt>Paddings</dt>
        <dd>Pad1 or PadN options to make the packet extension header alignment, see <xref target="RFC8200"/></dd>
</dl>
</section>
<section title="Instruction List for Instructive Routing" anchor="InstructionList">
<t>For instructive routing, the instruction list is used to instruct each satellite how to do routing job.
The format of the instruction list is illustrated in <xref target = "InstructionListFormat"/>.
Each instruction consists of Function Code and Arguments.</t>
        <figure anchor="InstructionListFormat">
          <name>The Instruction List for Instructive Routing</name>
          <artwork align="center" name="" type="" alt="">
		  <![CDATA[
  0                   1                   2                   3 
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+                           
|  Func. Code   |    Arguments  | Func. Code    |  Arguments    ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
\--------------\/--------------/ \--------------\/--------------/
         instruction[0]                   instruction[1]...
        ]]></artwork>
        </figure>
<dl newline="false" spacing="normal" indent="16">
        <dt>Funct. Code</dt>
		<dd>Function Code, size is 1 octet</dd>
        <dt>Arguments</dt>
		<dd>Arguments for the function, Variable length</dd>
</dl>
</section>
<section title="Instructive Routing Behaviors" anchor="InstructiveRoutingBehaviors">
<t>The behavior for each satellite for instructive routing is described here. <xref target = "Table-Functions-Arguments"/>
is the summary of the name, Hex values of all functions, arguments and size. New functions can be defined if needed.</t>
<t>The subsections below are the detailed explanation for each function.</t>
        <table anchor="Table-Functions-Arguments" align="center">
          <name>Functions, Arguments and Reference</name>
          <thead>
            <tr>
              <th align="center">Func Name/Hex Value</th>
              <th align="center">Arguments/Size(Octet)</th>
              <th align="center">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="center">Fwd.Inc.Sat_ID/0X01</td>
              <td align="center">Sat_ID/1</td>
              <td align="center"><xref target="Fwd.Inc.Sat_ID"/></td>
            </tr>
            <tr>
              <td align="center">Fwd.Dec.Sat_ID/0X02</td>
              <td align="center">Sat_ID/1</td>
              <td align="center"><xref target="Fwd.Dec.Sat_ID"/></td>
            </tr>
            <tr>
              <td align="center">Fwd.Inc.Obp_ID/0X03</td>
              <td align="center">Obp_ID/1</td>
              <td align="center"><xref target="Fwd.Inc.Obp_ID"/></td>
            </tr>
            <tr>
              <td align="center">Fwd.Dec.Obp_ID/0X04</td>
              <td align="center">Obp_ID/1</td>
              <td align="center"><xref target="Fwd.Dec.Obp_ID"/></td>
            </tr>
			<tr>
              <td align="center">Fwd.Inc.Shl_ID/0X05</td>
              <td align="center">Shl_ID/1</td>
              <td align="center"><xref target="Fwd.Inc.Shl_ID"/></td>
            </tr>
            <tr>
              <td align="center">Fwd.Dec.Shl_ID/0X06</td>
              <td align="center">Shl_ID/1</td>
              <td align="center"><xref target="Fwd.Dec.Shl_ID"/></td>
            </tr>
            <tr>
              <td align="center">End.Intf_ID/0X07</td>
              <td align="center">Intf_ID/1</td>
              <td align="center"><xref target="End.Intf_ID"/></td>
            </tr>
            <tr>
              <td align="center">End.Punt/0X08</td>
              <td align="center">0X0/1</td>
              <td align="center"><xref target="End.Punt"/></td>
            </tr>
            <tr>
              <td align="center">End.Lookup/0X09</td>
              <td align="center">0X0/1</td>
              <td align="center"><xref target="End.Lookup"/></td>
            </tr>
            <tr>
              <td align="center">End.Lookup.IPv4/0X0A</td>
              <td align="center">IPv4_Addr/4</td>
              <td align="center"><xref target="End.Lookup.IPv4"/></td>
            </tr>
            <tr>
              <td align="center">End.Lookup.IPv6/0X0B</td>
              <td align="center">IPv6_Addr/16</td>
              <td align="center"><xref target="End.Lookup.IPv6"/></td>
            </tr>
            <tr>
              <td align="center">Fwd.Sat_Addr/0X0C</td>
              <td align="center">Sat_Addr/4</td>
              <td align="center"><xref target="Fwd.Sat_Addr"/></td>
            </tr>
            <tr>
              <td align="center">Fwd.Sat_MacAddr/0X0D</td>
              <td align="center">Sat_MacAddr/6</td>
              <td align="center"><xref target="Fwd.Sat_MacAddr"/></td>
            </tr>
          </tbody>
        </table>

	<t>The functions in <xref target = "Fwd.Inc.Sat_ID"/> to <xref target = "Fwd.Dec.Shl_ID"/> 
	are used for the instructions to forward packet to one of the six major
	directions discussed in <xref target = "InstructiveRoutingForLEO"/>. They will call 
	API in <xref target = "Forwarding_API"/> to forward the packet to the specified direction.</t>
	<t>The functions in <xref target = "Fwd.Sat_Addr"/> and <xref target = "Fwd.Sat_MacAddr"/>
	are used for the instructions to forward packet to a specified adjacent satellite discussed in <xref target = "InstructiveRoutingForLEO"/>.
	They will call APIs in <xref target = "Forwarding_API_SAT"/> and <xref target = "Forwarding_API_SAT_MAC"/>
	respectively to forward the packet to the specified adjacent satellite.</t>
	<t>In order to forward packet, each satellite should have an adjacency table stored locally; the table should contain 
	the information about all adjacent satellites, it should at least store:</t>
	    <ol spacing="normal" type="1">
		  <li>Each adjacent satellite's semantic address.</li>
		  <li>The ID of local interface connecting to each adjacent satellite.</li>
		  <li>The MAC address for the remote interface of each adjacent satellite.</li>
        </ol>
	
	
	<section title="Fwd.Inc.Sat_ID" anchor="Fwd.Inc.Sat_ID">
	<t>The definition of this function is "Forward the packet on the Satellite Index Incremental Direction until the packet reaches a 
	Satellite whose Satellite Index is equal to the value specified in the argument"</t>
	<t>This function is used for the instruction to forward packet to one of the six major
	directions discussed in <xref target = "InstructiveRoutingForLEO"/>.</t>
	<t>When a satellite receives a packet with new routing header, assume the satellite indexes in the address are
Shl_index, Obp_index, Sat_index respectively, the satellite does the following. During the forwarding, the 
Forwarding_API in <xref target = "Forwarding_API"/> is called to forward the packet to the specified direction.</t>    
<sourcecode type="pseudocode" markers="false">
S01. When an IRH is processed {
S02.   If ((RI &gt; 1) and (Argument != Sat_index)) {
S03.      Input_Satellite = Current Satellite;
S04.      Input_Direction = Satellite Index Incremental direction;
S05.      Forwarding_API(Packet,Input_Satellite,Input_Direction);          
S06.   } else {
S07.      IOF += 2;
S08.      RI --;
S09.      if (RI &lt;= 0) 
              Send an ICMP Parameter Problem to the Source Address
              with Code 0 (Erroneous header field encountered)
              and Pointer set to the RI field,
              interrupt packet processing, and discard the packet; 
S10.      Proceed to execute the next Instruction;
S11.   }
S12.}
</sourcecode>

	</section>
	<section title="Fwd.Dec.Sat_ID" anchor="Fwd.Dec.Sat_ID">
	<t>The definition of this function is "Forward the packet on the Satellite Index Decremental Direction until the packet reaches a 
	Satellite whose Satellite Index is equal to the value specified in the argument"</t>
	<t>This function is used for the instruction to forward packet to one of the six major 
	directions discussed in <xref target = "InstructiveRoutingForLEO"/>.</t>
	<t>When a satellite receives a packet with new routing header, assume the satellite indexes in the address are
Shl_index, Obp_index, Sat_index respectively, the satellite does the following. During the forwarding, the
Forwarding_API in <xref target = "Forwarding_API"/> is called to forward the packet to the specified direction.</t>
<sourcecode type="pseudocode" markers="false">
S01. When an IRH is processed {
S02.   If ((RI &gt; 1) and (Argument != Sat_index)) {
S03.      Input_Satellite = Current Satellite;
S04.      Input_Direction = Satellite Index Decremental direction;
S05.      Forwarding_API(Packet,Input_Satellite,Input_Direction); 
S06.   } else {
S07.      IOF += 2;
S08.      RI --;
S09.      if (RI &lt;= 0) 
              Send an ICMP Parameter Problem to the Source Address
              with Code 0 (Erroneous header field encountered)
              and Pointer set to the RI field,
              interrupt packet processing, and discard the packet; 
S10.      Proceed to execute the next Instruction;
S11.   }
S12.}
</sourcecode>     

	</section>
	<section title="Fwd.Inc.Opb_ID" anchor="Fwd.Inc.Obp_ID">
	<t>The definition of this function is "Forward the packet on the Orbit Plane Index Incremental Direction until the packet reaches a 
	Satellite whose Orbit Plane Index is equal to the value specified in the argument"</t>
	<t>This function is used for the instruction to forward packet to one of the six major 
	directions discussed in <xref target = "InstructiveRoutingForLEO"/>.</t>
	<t>When a satellite receives a packet with new routing header, assume the satellite indexes in the address are
Shl_index, Obp_index, Sat_index respectively, the satellite does the following. During the forwarding, the
Forwarding_API in <xref target = "Forwarding_API"/> is called to forward the packet to the specified direction.</t> 
<sourcecode type="pseudocode" markers="false">
S01. When an IRH is processed {
S02.   If ((RI &gt; 1) and (Argument != Obp_index)) {
S03.      Input_Satellite = Current Satellite;
S04.      Input_Direction = Orbit Plane Index Incremental direction;
S05.      Forwarding_API(Packet,Input_Satellite,Input_Direction);          
S06.   } else {
S07.      IOF += 2;
S08.      RI --;
S09.      if (RI &lt;= 0) 
              Send an ICMP Parameter Problem to the Source Address
              with Code 0 (Erroneous header field encountered)
              and Pointer set to the RI field,
              interrupt packet processing, and discard the packet; 
S10.      Proceed to execute the next Instruction;
S11.   }
S12.}
</sourcecode>       

	</section>
	<section title="Fwd.Dec.Opb_ID" anchor="Fwd.Dec.Obp_ID">
	<t>The definition of this function is "Forward the packet on the Orbit Plane Index Decremental Direction until the packet reaches a 
	Satellite whose Orbit Plane Index is equal to the value specified in the argument"</t>
	<t>This function is used for the instruction to forward packet to one of the six major 
	directions discussed in <xref target = "InstructiveRoutingForLEO"/>.</t>
	<t>When a satellite receives a packet with new routing header, assume the satellite indexes in the address are
Shl_index, Obp_index, Sat_index respectively, the satellite does the following. During the forwarding, the
Forwarding_API in <xref target = "Forwarding_API"/> is called to forward the packet to the specified direction.</t>
<sourcecode type="pseudocode" markers="false">
S01. When an IRH is processed {
S02.   If ((RI &gt; 1) and (Argument != Obp_index)) {
S03.      Input_Satellite = Current Satellite;
S04.      Input_Direction = Orbit Plane Index Decremental direction;
S05.      Forwarding_API(Packet,Input_Satellite,Input_Direction);         
S06.   } else {
S07.      IOF += 2;
S08.      RI --;
S09.      if (RI &lt;= 0) 
              Send an ICMP Parameter Problem to the Source Address
              with Code 0 (Erroneous header field encountered)
              and Pointer set to the RI field,
              interrupt packet processing, and discard the packet; 
S10.      Proceed to execute the next Instruction;
S11.   }
S12.}
</sourcecode> 

	</section>
	<section title="Fwd.Inc.Shl_ID" anchor="Fwd.Inc.Shl_ID">
	<t>The definition of this function is "Forward the packet on the Orbit Shell Index Incremental Direction until the packet reaches a 
	Satellite whose Orbit Shell Index is equal to the value specified in the argument"</t>
	<t>This function is used for the instruction to forward packet to one of the six major 
	directions discussed in <xref target = "InstructiveRoutingForLEO"/>.</t>
	<t>When a satellite receives a packet with new routing header, assume the satellite indexes in the address are
Shl_index, Obp_index, Sat_index respectively, the satellite does the following. During the forwarding, the
Forwarding_API in <xref target = "Forwarding_API"/> is called to forward the packet to the specified direction.</t>
<sourcecode type="pseudocode" markers="false">
S01. When an IRH is processed {
S02.   If ((RI &gt; 1) and (Argument != Shl_index)) {
S03.      Input_Satellite = Current Satellite;
S04.      Input_Direction = Orbit Shell Index Incremental direction;
S05.      Forwarding_API(Packet,Input_Satellite,Input_Direction);         
S06.   } else {
S07.      IOF += 2;
S08.      RI --;
S09.      if (RI &lt;= 0) 
              Send an ICMP Parameter Problem to the Source Address
              with Code 0 (Erroneous header field encountered)
              and Pointer set to the RI field,
              interrupt packet processing, and discard the packet; 
S10.      Proceed to execute the next Instruction;
S11.   }
S12.}
</sourcecode>

	</section>
	<section title="Fwd.Dec.Shl_ID" anchor="Fwd.Dec.Shl_ID">
	<t>The definition of this function is "Forward the packet on the Orbit Shell Index Decremental Direction until the packet reaches a 
	Satellite whose Orbit Shell Index is equal to the value specified in the argument"</t>
	<t>This function is used for the instruction to forward packet to one of the six major 
	directions discussed in <xref target = "InstructiveRoutingForLEO"/>.</t>
	<t>When a satellite receives a packet with new routing header, assume the satellite indexes in the address are
Shl_index, Obp_index, Sat_index respectively, the satellite does the following. During the forwarding, the
Forwarding_API in <xref target = "Forwarding_API"/> is called to forward the packet to the specified direction.</t>
<sourcecode type="pseudocode" markers="false">
S01. When an IRH is processed {
S02.   If ((RI &gt; 1) and (Argument != Shl_index)) {
S03.      Input_Satellite = Current Satellite;
S04.      Input_Direction = Orbit Shell Index Decremental direction;
S05.      Forwarding_API(Packet,Input_Satellite,Input_Direction);          
S06.   } else {
S07.      IOF += 2;
S08.      RI --;
S09.      if (RI &lt;= 0) 
              Send an ICMP Parameter Problem to the Source Address
              with Code 0 (Erroneous header field encountered)
              and Pointer set to the RI field,
              interrupt packet processing, and discard the packet; 
S10.      Proceed to execute the next Instruction;
S11.   }
S12.}
</sourcecode>

	</section>
	<section title="End.Intf_ID" anchor="End.Intf_ID">
	<t>The definition of this function is "End of processing for the Instructive routing, 
	remove the Instructive Routing Header, Forward the packet to the interface specified in the argument"</t>
	<t>This function is normally used on the Dst_Sat to forward packet to Dst_GS.</t>
	<t>When a satellite receives a packet with new routing header, the satellite does the following,
Forwarding_GS_API in <xref target = "Forwarding_GS_API"/> is called to forward the packet to the specified interface.</t>
<sourcecode type="pseudocode" markers="false">
S01. When an IRH is processed {
S02.   Change the Next header in the packet header to be
          the Next Header field in the Instructive Routing header;
S03.   Remove the Instructive Routing Header;
S04.   Forwarding_GS_API(Packet, Argument);
S05.}
</sourcecode>
	</section>

	<section title="End.Punt" anchor="End.Punt">
	<t>The definition of this function is "End of processing for the Instructive routing, 
	remove the Instructive Routing Header, Punt the packet to the OS for process"</t>
	<t>This function is normally used send packet to a satellite. At the destination satellite,
	the packet is punted to the OS to be processed further.</t>
	<t>When a satellite receives a packet with new routing header, the satellite does the following:</t>
<sourcecode type="pseudocode" markers="false">
S01. When an IRH is processed {
S02.   Change the Next header in the packet header to be
         the Next Header field in the Instructive Routing header;
S03.   Remove the Instructive Routing Header;
S04.   Punt packet to the local CPU for process;
S05.}
</sourcecode>
	</section>

	<section title="End.Lookup" anchor="End.Lookup">
	<t>The definition of this function is "End of processing for the Instructive routing, 
	remove the Instructive Routing Header, Lookup the destination address in packet header
	and forward the packet accordingly"</t>
	<t>This function is normally used to send packet to Dst_GS. After the packet reaches the Dst_Sat,
	the packet is forwarded to Dst_GS by looking up the destination address in the IPv6 packet header.</t>
	<t>When a satellite receives a packet with new routing header, the satellite does the following:</t>
<sourcecode type="pseudocode" markers="false">
S01. When an IRH is processed {
S02.   Change the Next header in the packet header to be
         the Next Header field in the Instructive Routing header;
S03.   Remove the Instructive Routing Header;
S04.   Lookup the destination address in packet hdr and forward 
         the packet;
S05.}
</sourcecode>
	</section>

	<section title="End.Lookup.IPv4" anchor="End.Lookup.IPv4">
	<t>The definition of this function is "End of processing for the Instructive routing, 
	remove the Instructive Routing Header, Lookup the IPv4 address specified in the argument
	and forward the packet accordingly"</t>
	<t>This function is normally used to send packet to Dst_GS. After the packet reaches the Dst_Sat,
	the packet is forwarded to Dst_GS by looking up the IPv4 destination address specified in the Function Argument.</t>
	<t>When a satellite receives a packet with new routing header, the satellite does the following:</t>
<sourcecode type="pseudocode" markers="false">
S01. When an IRH is processed {
S02.   Fetch the IPv4 addr in the argument;
S03.   Change the Next header in the packet header to be
         the Next Header field in the Instructive Routing header;
S04.   Remove the Instructive Routing Header;
S05.   Lookup the fetched IPv4 address and forward the packet;
S06.}
</sourcecode>
	</section>
	
	<section title="End.Lookup.IPv6" anchor="End.Lookup.IPv6">
	<t>The definition of this function is "End of processing for the Instructive routing, 
	remove the Instructive Routing Header, Lookup the IPv6 address specified in the argument
	and forward the packet accordingly"</t>
		<t>This function is normally used to send packet to Dst_GS. After the packet reaches the Dst_Sat,
	the packet is forwarded to Dst_GS by looking up the IPv6 destination address specified in the Function Argument.</t>
	<t>When a satellite receives a packet with new routing header, the satellite does the following:</t>
<sourcecode type="pseudocode" markers="false">
S01. When an IRH is processed {
S02.   Fetch the IPv6 addr in the argument;
S03.   Change the Next header in the packet header to be
         the Next Header field in the Instructive Routing header;
S04.   Remove the Instructive Routing Header;
S05.   Lookup the fetched IPv6 address and forward the packet;
S06.}
</sourcecode>
	</section>
	
	<section title="Fwd.Sat_Addr" anchor="Fwd.Sat_Addr">
	<t>The definition of this function is "Forward the packet to the adjacent satellite with the address specified in
	the argument"</t>
	<t>This function is normally used for the instruction to forward packet to an adjacent satellite specified by its Satellite Semantic Address.
	The Satellite Semantic Address is 32-bit long and is defined in Section 5.4 in <xref target="I-D.lhan-satellite-semantic-addressing"/></t>
	<t>When a satellite receives a packet with new routing header, assume the satellite semantic address is Sat_Addr, the satellite does the following:</t>
<sourcecode type="pseudocode" markers="false">
S01. When an IRH is processed {
S02.   If ((RI > 1) and (Argument != Sat_Addr)) {
S03.      Input_Satellite = Current Satellite;
S04.      SatAddr = Argument;
S05.      Forwarding_API_SAT(Packet,Input_Satellite,SatAddr);
S06.   } else {
S07.      IOF += 4;
S08.      RI --;
S09.      if (RI &lt;= 0) 
              Send an ICMP Parameter Problem to the Source Address
              with Code 0 (Erroneous header field encountered)
              and Pointer set to the RI field,
              interrupt packet processing, and discard the packet.       
S10.      Proceed to execute the next Instruction;
S11.   }
S12.}
</sourcecode>
	</section>

	<section title="Fwd.Sat_MacAddr" anchor="Fwd.Sat_MacAddr">
	<t>The definition of this function is "Forward the packet to the adjacent satellite with the MAC address specified as
	the argument"</t>
	<t>This function is normally used for the instruction to forward packet to an adjacent satellite specified by its MAC address.</t>
	<t>When a satellite receives a packet with new routing header, assume the satellite Mac address is Sat_MacAddr, the satellite does the following:</t>
<sourcecode type="pseudocode" markers="false">
S01. When an IRH is processed {
S02.   If ((RI > 1) and (Argument != Sat_MacAddr)) {
S03.      Input_Satellite = Current Satellite;
S04.      SatMacAddr = Argument;
S05.      Forwarding_API_Mac(Packet,Input_Satellite,SatMacAddr);
S06.   } else {
S07.      IOF += 6;
S08.      RI --;
S09.      if (RI &lt;= 0) 
              Send an ICMP Parameter Problem to the Source Address
              with Code 0 (Erroneous header field encountered)
              and Pointer set to the RI field,
              interrupt packet processing, and discard the packet.       
S10.      Proceed to execute the next Instruction;
S11.   }
S12.}
</sourcecode>
	</section>

<section title="Forwarding_API(Packet,Input_Satellite,Input_Direction)" anchor="Forwarding_API">
<t>This API will forward a packet to the specified direction. When a satellite executes the API, it will do following:</t>
<sourcecode type="pseudocode" markers="false">
S01. Forwarding_API(Packet,Input_Satellite,Input_Direction) {
S02.    Lookup the local adjacency table to find out
           1) The adjacent satellite of "Input_Satellite" on the   
              direction equal to "Input_Direction" (The adjacent
              satellite's semantic address can be inferred by 
              the "Input_Satellite" and "Input_Direction").
           2) The L2 address for the adjacent satellite;
           3) The local interface connecting to the adjacent 
              satellite;
S03.    Rewrite the L2 header of the Packet by the L2 address;
S04.    Send the Packet to the local interface;
S05.}
</sourcecode>
</section>

<section title="Forwarding_API_SAT(Packet,Input_Satellite,Sat_Addr)" anchor="Forwarding_API_SAT">
<t>This API will forward a packet to the specified adjacent satellite with the semantic address as the argument. When a satellite executes the API, it will do following:</t>
<sourcecode type="pseudocode" markers="false">
S01. Forwarding_API_SAT(Packet,Input_Satellite,SatAddr) {
S02.    Lookup the local adjacency table to find out
           1) The adjacent satellite of "Input_Satellite"
              (The adjacent satellite address is SatAddr);
           2) The L2 address for the adjacent satellite;
           3) The local interface connecting to the adjacent
              satellite;
S03.    Rewrite the L2 header of the Packet by the L2 address;
S04.    Send the Packet to the local interface;
S05.}
</sourcecode>
</section>

<section title="Forwarding_API_MAC(Packet,Input_Satellite,Sat_MacAddr)" anchor="Forwarding_API_SAT_MAC">
<t>This API will forward a packet to the specified adjacent satellite with the MAC address as the argument. When a satellite executes the API, it will do following:</t>
<sourcecode type="pseudocode" markers="false">
S01. Forwarding_API_MAC(Packet,Input_Satellite,SatMacAddr) {
S02.    Lookup the local adjacency table to find out
           1) The adjacent satellite of "Input_Satellite"
              (The adjacent satellite MAC address is SatMacAddr);
           2) The L2 address for the adjacent satellite;
           3) The local interface connecting to the adjacent
              satellite;
S03.    Rewrite the L2 header of the Packet by the L2 address;
S04.    Send the Packet to the local interface;
S05.}
</sourcecode>
</section>

<section title="Forwarding_GS_API(Packet,Input_Interface)" anchor="Forwarding_GS_API">
<t>This API will forward a packet to ground station the connected to the specified interface. When a satellite executes the API, it will do following:</t>
<sourcecode type="pseudocode" markers="false">
S01. Forwarding_API(Packet,Input_Interface) {
S02.    Lookup the local adjacency table to find out
           1) The connected GS to the interface 
              equal to "Input_Interface";
           2) The L2 address for the GS;
S03.    Rewrite the L2 header of the Packet by the L2 address;
S04.    Send the Packet to the "Input_Interface";
S05.}
</sourcecode>
</section>
	
</section>


    <section title="IANA Considerations">
	<t>This document defines a new IPv6 Routing Type: the "Instructive Routing
	Header". It needs to be assigned a number by IANA.</t>
	<t>This document also defines an 8-bit Function Name, for which IANA will
   create and will maintain a new sub-registry entitled "Instructive Routing Function Name" under the "Internet Protocol Version 6 (IPv6)
   Parameters" <xref target="IPv6_Parameters"/> registry.  Initial values for the
   subtype registries are given in <xref target="Table-Functions-Arguments"/>.</t>

	</section>
    <!-- The Author's Addresses section will be generated automatically by XML2RFC from the front information -->

    <section title="Security Considerations">
	<t>The instructive routing is only applicable to a satellite network that is using the satellite semantic address.
	It will add instructive routing header at a GS and the header will be removed before reaching another GS.
	Normally, a satellite network including all GS is trusted domain. Traffic will be filtered at the domain boundaries. 
	Non-authorized users cannot access the satellite network.</t>

	
	</section>
    <!-- The Author's Addresses section will be generated automatically by XML2RFC from the front information -->

    <section title="Contributors">

      <t><!--[TODO] Change this section to mention contributors to your MIB module document.--></t>
    </section>

    <section title="Acknowledgements">
      

    </section>
	
  </middle>
  <back>
    <!-- References Section -->

    <!-- Section 4.7f of [RFC2223bis] specifies the requirements for the
   references sections.  In particular, there MUST be separate lists of
   normative and informative references, each in a separate section.
   The style SHOULD follow that of recently published RFCs.

   The standard MIB boilerplate available at
   http://www.ops.ietf.org/mib-boilerplate.html includes lists of
   normative and informative references that MUST appear in all IETF
   specifications that contain MIB modules.  If items from other MIB
   modules appear in an IMPORTS statement in the Definitions section,
   then the specifications containing those MIB modules MUST be included
   in the list of normative references.  When items are imported from an
   IANA-maintained MIB module the corresponding normative reference
   SHALL point to the on-line version of that MIB module.  It is the
   policy of the RFC Editor that all references must be cited in the
   text;  such citations MUST appear in the overview section where
   documents containing imported definitions (other those already
   mentioned in the MIB boilerplate) are required to be mentioned (cf.
   Section 3.2).

In general, each normative reference SHOULD point to the most recent
version of the specification in question.
-->

    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>



		<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8200.xml"/>
		<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8754.xml"/>
		<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8986.xml"/>
        <!--  <t>[TODO]: Add your own normative references.</t>-->
    </references>
      <references>
        <name>Informative References</name>
        <!-- <t>[TODO] RFC3410 is required to support the boilerplate text.</t>-->

<xi:include href="https://datatracker.ietf.org/doc/bibxml3/draft-lhan-problems-requirements-satellite-net.xml"/>
<xi:include href="https://datatracker.ietf.org/doc/bibxml3/draft-lhan-satellite-semantic-addressing.xml"/>

        <reference anchor="StarLink" target="https://en.wikipedia.org/wiki/Starlink">
          <front>
            <title>Star Link</title>
            <author/>
            <date/>
          </front>
        </reference>
		
        <reference anchor="ThreeGPP" target="https://www.3gpp.org/">
          <front>
            <title>3GPP</title>
            <author/>
            <date/>
          </front>
        </reference>		
		
        <reference anchor="OSI-Model" target="https://en.wikipedia.org/wiki/OSI_model">
          <front>
            <title>OSI Model</title>
            <author/>
            <date/>
          </front>
        </reference>


        <reference anchor="TR38-821" target="https://portal.3gpp.org/desktopmodules/Specifications/SpecificationDetails.aspx?specificationId=3525">
          <front>
            <title>Solutions for NR to support Non-Terrestrial Networks (NTN)</title>
            <author/>
            <date/>
          </front>
        </reference>

		<reference anchor="TR23-700" target="https://portal.3gpp.org/desktopmodules/Specifications/SpecificationDetails.aspx?specificationId=4000">
          <front>
            <title>Study on support of satellite backhauling in 5GS</title>
            <author/>
            <date/>
          </front>
        </reference>

		<reference anchor="IPv6_Parameters" target="https://www.iana.org/assignments/ipv6-parameters/ipv6-parameters.xhtml#ipv6-parameters-3">
        <front>
          <title>Internet Protocol Version 6 (IPv6) Parameters</title>
          <author>
            <organization>IANA</organization>
          </author>

        </front>
      </reference>
	  
	</references> 
    </references>
    <!--
<section anchor="appendix" title="Appendix A">
	<t>You can add appendices just as regular sections, the only
difference is that they go under "back" element, and get letters 
instead of numbers</t>
</section>
-->

    <section numbered="true" toc="default">
      <name>Change Log</name>
      <ul spacing="normal">
        <li>Initial version, 02/28/2022</li>
		<li>Revision 1, 09/02/2022</li>

      </ul>
    </section>
    <!--
$Log: draft-harrington-text-mib-doc-template.xml,v $
Revision 1.2  2007/03/16 02:46:57  H73653
*** empty log message ***

Revision 1.1  2006/10/31 14:13:50  H73653
*** empty log message ***

Revision 1.10  2006/06/15 13:11:34  H73653
-00- internet-draft
made it a mib-doc-template rather than a mib-template

Revision 1.9  2006/06/14 17:32:11  H73653
saved from XXE, and reflects XXE automatic changes to formatting.

Revision 1.8  2006/04/24 23:37:55  H73653
changed from cvs header to cvs id to eliminate directory differences

Revision 1.7  2006/04/24 15:52:16  H73653
started -02- revision

Revision 1.6  2006/04/01 04:14:49  dbh
misc fixes

Revision 1.5  2005/12/24 05:35:21  dbh
pretty printed the XML

Revision 1.4  2005/12/20 00:09:39  dbh
submitted to mreview for Last Call. Runs cleanly through Bill's validator, and the production and dev versions of xml2rfc. Also aubmitted the output file produced by the web service from this source file. Note that the rfcedstyle is disabled because the directive is only available in the "bleeding edge" version.

	place for source control log here
  -->
  </back>
</rfc>
