<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE rfc [
  <!ENTITY nbsp "&#160;">
  <!ENTITY zwsp "&#8203;">
  <!ENTITY nbhy "&#8209;">
  <!ENTITY wj "&#8288;">
]>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude"
     ipr="trust200902" category="info"
     docName="draft-matsushima-dmm-mup-why-01" version="3"
     submissionType="IETF">
  <front>
    <title abbrev="Why MUP Is the Way It Is">Why the Mobile User Plane Is the
    Way It Is</title>
    <seriesInfo name="Internet-Draft" value="draft-matsushima-dmm-mup-why-01"/>
    <author fullname="Satoru Matsushima" initials="S." surname="Matsushima">
      <organization>SoftBank</organization>
      <address>
        <postal><country>Japan</country></postal>
        <email>satoru.matsushima@g.softbank.co.jp</email>
      </address>
    </author>
    <abstract>
      <t>The Mobile User Plane (MUP) architecture transforms session
      information from a mobile service system into routing information,
      so that ordinary routing nodes can take on the roles of user plane
      anchors and intermediate points.  The architecture document that
      defines MUP is a normative text: it defines concepts, route types,
      and resolution procedures, but it does not explain why they are
      the way they are.  This companion reader supplies that "why",
      outside the normative text.</t>
      <t>The technical content follows one worked example end to end,
      with concrete prefixes, SIDs, and tunnel endpoint identifiers,
      and follows the architecture document throughout.  The
      explanations are organized around a small set of shapes that
      recur in the design: places deliberately left undecided, meaning
      that arises only when two pieces of information meet, and a
      strict separation between a name and the thing it points at.
      The Introduction gives these shapes a name borrowed from Zen,
      once, and then lets them do their work quietly.</t>
      <t>This document is not normative.  It defines no protocol and no
      encoding.</t>
    </abstract>
  </front>
  <middle>
<section anchor="introduction"><name>Introduction</name>
<t>This document is a companion reader to the SRv6 MUP (Mobile User Plane)
architecture. Before anything else, however, there is one thing to settle: how
to read it.</t>
<t><strong>Read MUP as Zen.</strong></t>
<t>This is not, of course, a claim that the designers of MUP designed it by
reference to Zen. It is, rather, the observation that if you follow MUP's
design decisions one by one, the same shapes keep appearing — shapes that Zen
has, for a very long time, put into words. Treat this as a declaration of a
discipline of reading, offered to the reader.</t>
<t>The shapes that appear are, for example, these.</t>
<t><strong>Not deciding is itself a design decision.</strong> The architecture
does not decide whether a segment is on the access side
(<xref target="symmetry"/>). An ST2 route does not carry the prefixes of its
destinations (<xref target="worked-example"/>). The architecture document
itself carries no encoding (<xref target="why-bgp"/>). None of these is an
"undecided" point or an omission: each is a place deliberately left empty, for
the sake of the freedom that not deciding opens up. What Zen calls emptiness
(ku) does not mean that something is missing; it points, instead, to the
margin that lets a thing do its work.</t>
<t><strong>Meaning is not in things; it arises when they meet.</strong> An ST
route, on its own, cannot forward anything, because it carries no SID. A
segment advertisement (a DSD or ISD route), on its own, does not say which
session it concerns. Only when the two meet inside a MUP PE and are resolved
does the meaning of a forwarding action arise for the first time. Meaning does
not reside in individual things; it stands up in the relations between them.
On the Zen side, this structure has long been called dependent origination
(<xref target="indirection"/>).</t>
<t><strong>A name is only a finger pointing at a thing.</strong> A SID is not
a segment (Sections <xref target="worked-example" format="counter"/> and
<xref target="mondo" format="counter"/>). A label is not a role
(<xref target="symmetry"/>). A finger points at the moon, but the finger is
not the moon. Get caught up in the name, and you mistake the thing itself.
Many of the misunderstandings of MUP are born of exactly that mistake.</t>
<t><strong>Clinging to what is fixed makes the path longer.</strong> A user
plane tied to an anchor takes the long way around even to a nearby server
(<xref target="problem"/>). Each time one fixation is removed, the path
becomes freer. In the end, that is what this document writes about, again and
again.</t>
<t><strong>Tools are not made; they are borrowed.</strong> Using BGP for
distribution is a choice to restrain the appetite for a new mechanism and to
ride on what already exists (<xref target="why-bgp"/>). Say only what needs to
be said, and leave the rest elsewhere. The division of labour between
documents is made of the same attitude.</t>
<t>And the final chapter takes the form of a mondo, a question-and-answer
dialogue (<xref target="mondo"/>). A mondo is not a device for adding
doctrine. It is a form for watching misunderstandings come undone.</t>
<t>At the head of each chapter, a single line states that chapter's thread of
reading. The technical content of every chapter is, as before, built from the
text of the architecture document, draft-ietf-dmm-mup-architecture
<xref target="I-D.ietf-dmm-mup-architecture"/>, and from examples with
concrete values. Zen is a layer of reading laid over that. The boundary
between what the text asserts and what belongs to the reading is recorded in
the author's checking notes at the end of each chapter.</t>
<t>Now, to <xref target="problem"/> — and first, to what we are tied to.</t>
</section>
<section anchor="problem"><name>Why the User Plane Is a Problem</name>
<blockquote><t>A fixed exit makes for a detour.</t></blockquote>
<t>The way to read this companion is as declared in the Preface (preface.md):
read MUP as Zen. The main document, draft-ietf-dmm-mup-architecture, defines
the concepts of MUP, the types of its routes, and the procedures for resolving
them, as a normative text — but it does not write about <em>why</em> things
are the way they are. In a normative document, justification and background
are not the job of the main text. This companion exists to put that "why"
outside the normative text.</t>
<t>The job of <xref target="problem"/> is to establish the starting point:
what shape the mobile user plane has today, and where, in that shape, the
problems lie. This is explained as structure, not as criticism.</t>
<section anchor="current-shape"><name>The Current Shape: Tunnels and an
Anchor</name>
<t>Reduce the 5G user plane, roughly, and it has the following shape.</t>
<ul><li><t>A packet from a terminal (UE) is placed, at the base station (gNB),
into a tunnel called GTP-U.</t></li><li><t>The far end of the tunnel is a node
called the UPF. The UPF behaves as the anchor of the session, and the IP
address of the terminal has its meaning relative to the
UPF.</t></li><li><t>Beyond the UPF, ordinary IP routing carries the packet out
to a data network (DN).</t></li></ul>
<t>For as long as the session lasts, packets pass through this anchor. Even
when the terminal moves and its base station changes, re-establishing the
tunnel preserves the property that "the exit is the same UPF." Session
continuity holds because of this shape. As a mechanism for handling mobility,
the model of GTP and an anchor is well made.</t>
<t>The problem is what gets fixed in exchange for those virtues. The following
sections take what is fixed apart into three pieces.</t>
</section>
<section anchor="anchor-concentration"><name>Problem 1: Concentration on the
Anchor, and the Long Way Around</name>
<t>That the anchor is fixed means that the path of the traffic is determined
not by where the destination is, but by where the anchor is.</t>
<t>Suppose a server sits right next to the terminal, but the UPF that anchors
that session is far away. The packet is then carried once to the distant UPF
and only then comes back. The more use cases arise that want processing done
nearby — edge computing being the obvious one — the more conspicuous this
detour becomes.</t>
<t>RFC 7333 <xref target="RFC7333"/>, which sets out the requirements for
Distributed Mobility Management (DMM), raises precisely this point in its
first requirement (REQ1). In substance, it says that a mobility solution must
make it possible to avoid the situation in which traffic is forced to traverse
a single mobility anchor located far from the optimal route. The Introduction
of the main document, draft-ietf-dmm-mup-architecture, quotes this requirement
because MUP is designed as an answer to this problem.</t>
<t>Distribute the anchor — that is, create an exit nearby, per session or per
service. The direction itself was already known. The difficulty is in the
mechanism by which it is to be achieved.</t>
</section>
<section anchor="tunnel-vs-forwarding"><name>Problem 2: The Separation of the
Tunnel Layer and the Forwarding Layer</name>
<t>The second problem concerns how paths are decided.</t>
<t>To the transport network, a packet travelling inside a GTP tunnel is
nothing more than "one flow from the gNB to the UPF." Whatever the inner
destination may be, the routing of the transport network sees only the two
endpoints of the tunnel. The choice of path is determined by the positions of
the tunnel endpoints, and the destination and requirements of the inner flow
do not enter into the transport network's decisions.</t>
<t>Put differently, two layers are being optimised separately.</t>
<ul><li><t>The mobile layer manages sessions and tunnels. But it has no
flexibility over the actual path.</t></li><li><t>The transport layer has the
power to compute paths. But it knows nothing about sessions.</t></li></ul>
<t>As long as this separation stands, judgements about the path of an
individual session — "this session to the nearby server," "this session
through another exit" — arise naturally in neither layer. What is available is
adjustment at the granularity of moving a tunnel endpoint or rearranging the
placement of UPFs.</t>
</section>
<section anchor="inflexible-paths"><name>Problem 3: Inflexible Paths, and
Intermediate Functions Fixed in Place</name>
<t>The third problem follows from Sections
<xref target="anchor-concentration" format="counter"/> and
<xref target="tunnel-vs-forwarding" format="counter"/>.</t>
<ul><li><t>Because the exit (the anchor) is fixed in association with the
session, it is hard to re-choose the exit in response to where the traffic is
going or to the state of the network.</t></li><li><t>The intermediate
functions a packet passes through — the various kinds of processing borne by
the UPF — are likewise fixed onto the path. Moving the place where processing
happens becomes a change to the configuration of the network.</t></li></ul>
<t>In short, the current shape is stable for the purpose of "keeping sessions
continuous," but rigid for the purpose of "recomposing the path as occasion
demands." This rigidity is not a matter of good or bad implementation; it is a
property of the model itself — of tunnels and an anchor. That is why this
chapter treats it as a matter of the structure of the model, and not as a
criticism of GTP.</t>
</section>
<section anchor="what-is-needed"><name>So What Is Needed?</name>
<t>Turn the three problems over, and what is needed comes into view.</t>
<ol><li><t>Avoid concentration on an anchor, and be able to deliver each
session to a nearby exit
(<xref target="anchor-concentration"/>).</t></li><li><t>Let the facts of a
session enter into the decisions of the transport layer. That is, rather than
sessions and routing being optimised separately, let the path be assembled
from the information of the session
(<xref target="tunnel-vs-forwarding"/>).</t></li><li><t>Let paths be unfixed,
so that they can be exchanged later, and chosen place by place
(<xref target="inflexible-paths"/>).</t></li></ol>
<t>The core idea of MUP lies in the second of these. <strong>Transform session
information into routing information.</strong> Take the facts of the mobile
side — the two ends of a session, the address of a UE — transcribe them into a
form the routing world can handle (a route), and distribute them to
general-purpose PEs, and the path assembles itself by the ordinary machinery
of routing. A node need not be a dedicated anchor in order to serve as the
exit for a session.</t>
<t>Doing this, of course, raises new problems. A step comes to stand between
the facts of a session and the behaviour of forwarding
(<xref target="indirection"/>), the role of a segment can no longer be fixed
(<xref target="symmetry"/>), and tools for distribution, together with a
division of labour between documents, become necessary
(<xref target="why-bgp"/>). The remaining chapters of this companion explain
what is gained in exchange for those costs.</t>
<t>But first, it is quicker to watch the thing move. In the next chapter, we
stop talking about definitions and follow a single example — one terminal only
— from beginning to end, with concrete address values.</t>
</section>
</section>
<section anchor="worked-example"><name>Walking Through the Core Idea with a
Single Example</name>
<blockquote><t>The finger is not the moon.</t></blockquote>
<t>We do not start from definitions. First, we follow a single example,
involving just one terminal, from beginning to end -- and we follow it with
actual addresses, not symbols.</t>
<t>What we want the reader to take away from this chapter is not memorized
terminology. It is the following single flow:</t>
<blockquote><t>Session information is born -&gt; it becomes routing
information (an ST route) -&gt; it is matched against segment information
distributed by a separate path and resolved -&gt; as a result, a SID and a
forwarding behavior are decided -&gt; a packet flows</t></blockquote>
<t>MUP is hard to follow because this flow is not a straight line from start
to finish. The session information, the destination of a packet, and the SID
actually placed on the packet each come from a different source. In this
chapter, we deliberately postpone the explanation of why, and first show the
way these pieces appear separately and merge along the way. Why they are
separated is the job of <xref target="indirection"/>.</t>
<t>The example is the one in Section 7.2 of the base document
(draft-ietf-dmm-mup-architecture-03): a 3GPP 5G network, with PEs on which MUP
is enabled placed at the edges of an SR domain. The base document writes it
with symbols such as U/u, V/v, and S1::; here, as in
<xref target="tab-value-assignment"/> below, we assign concrete values to
everything. The values are examples for this chapter only: documentation
address ranges (203.0.113.0/24 and 198.51.100.0/24) are used for the UE and
the N3 network, 2001:db8::/32 for the SIDs, and private addresses
(10.10.0.0/16) for the DN.</t>
<t>Note that in this chapter the user plane is uniformly IPv4. The address of
the UE and the addresses of the servers in the DN are IPv4. That does not mean
IPv6 disappears altogether: an SRv6 SID is an IPv6 address, so the SIDs alone
remain IPv6. This two-layer structure -- "the user's packets are IPv4;
transport inside the domain is SRv6" -- is worth distinguishing from the
start, so that the two do not get mixed up later.</t>
<section anchor="cast"><name>The Cast: One Terminal and Three PEs</name>
<t>First, we hand over the list of values up front. Every address that appears
in this chapter is in this table.</t>
<table anchor="tab-value-assignment"><name>Assignment of concrete values in
this section</name>
<thead><tr><th>Symbol in the base document</th><th>Value in this
chapter</th><th>What it is</th></tr></thead>
<tbody>
<tr><td>UE address U/u</td><td><strong>203.0.113.100</strong> (as a route,
<strong>203.0.113.100/32</strong>)</td><td>The IPv4 address assigned to the
terminal. An IPv4 UE has a single address, so the prefix is a /32</td></tr>
<tr><td>N3 network V/v</td><td><strong>198.51.100.0/24</strong></td><td>The
GTP-U transport network on the radio (RAN) side</td></tr>
<tr><td>gNB</td><td><strong>198.51.100.10</strong></td><td>The N3-side address
of the base station</td></tr>
<tr><td>UPF (N3 side) X/x</td><td><strong>198.51.100.20</strong> (treated as a
/32)</td><td>The N3-side address of the UPF</td></tr>
<tr><td>DN (S1 side) E/e</td><td><strong>10.10.1.0/24</strong>, server A is
<strong>10.10.1.10</strong></td><td>The data network near S1</td></tr>
<tr><td>DN (S2 side) W/w</td><td><strong>10.10.2.0/24</strong>, server B is
<strong>10.10.2.10</strong></td><td>The data network near S2</td></tr>
<tr><td>SRv6 locator of
S1</td><td><strong>2001:db8:100::/48</strong></td><td>All SIDs of S1 come out
of this range</td></tr>
<tr><td>SRv6 locator of
S2</td><td><strong>2001:db8:200::/48</strong></td><td>All SIDs of S2 come out
of this range</td></tr>
</tbody></table>
<t>The scene is as follows. There is one UE, hanging off a gNB. The data
network side is split between two locations: server A is near PE
<strong>S1</strong>, and server B is near PE <strong>S2</strong>. There is
also a conventional UPF, hanging off PE <strong>S3</strong>. S3 does not have
MUP enabled; it is an ordinary L3VPN PE.</t>
<t>What matters here is that the UPF has not disappeared. In this example, MUP
applies only to the traffic of the single session described below. The traffic
of the other UEs passes through the UPF via S3, as before. MUP is not a
declaration that the existing user plane will be replaced; it is a mechanism
that lets the path of a specific session be assembled by routing.</t>
<t>The PEs on which MUP is enabled are S1 and S2. These two become MUP
PEs.</t>
<figure anchor="fig-cast"><name>The cast of the worked example</name>
<artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" width="1000" height="560" viewBox="0 0 1000 560">
<rect x="0" y="0" width="1000" height="560" fill="white"/>
<text x="500" y="26" text-anchor="middle" font-family="sans-serif" font-size="13" font-weight="bold" fill="black">Session information U1</text>
<line x1="500" y1="34" x2="500" y2="52" stroke="black" stroke-width="1.6"/>
<polygon points="500,58 495,46 505,46" fill="black"/>
<rect x="440" y="58" width="120" height="46" rx="8" fill="white" stroke="black" stroke-width="1.4"/>
<text x="500" y="87" text-anchor="middle" font-family="sans-serif" font-size="15" font-weight="bold" fill="black">MUP-C</text>
<rect x="150" y="140" width="700" height="255" rx="18" fill="white" stroke="black" stroke-width="3" stroke-dasharray="14,6"/>
<rect x="688" y="128" width="144" height="24" rx="4" fill="white" stroke="black" stroke-width="1.4"/>
<text x="760" y="145" text-anchor="middle" font-family="sans-serif" font-size="13" font-weight="bold" fill="black">SR domain</text>
<line x1="500" y1="104" x2="500" y2="300" stroke="black" stroke-width="1.6"/>
<line x1="300" y1="215" x2="700" y2="215" stroke="black" stroke-width="1.6"/>
<rect x="190" y="190" width="110" height="50" rx="8" fill="white" stroke="black" stroke-width="1.4"/>
<text x="245" y="212" text-anchor="middle" font-family="sans-serif" font-size="15" font-weight="bold" fill="black">MUP PE S1</text>
<text x="245" y="232" text-anchor="middle" font-family="sans-serif" font-size="11" fill="black">2001:db8:100::/48</text>
<rect x="700" y="190" width="110" height="50" rx="8" fill="white" stroke="black" stroke-width="1.4"/>
<text x="755" y="212" text-anchor="middle" font-family="sans-serif" font-size="15" font-weight="bold" fill="black">MUP PE S2</text>
<text x="755" y="232" text-anchor="middle" font-family="sans-serif" font-size="11" fill="black">2001:db8:200::/48</text>
<rect x="440" y="300" width="120" height="56" rx="8" fill="white" stroke="black" stroke-width="1.4"/>
<text x="500" y="325" text-anchor="middle" font-family="sans-serif" font-size="15" font-weight="bold" fill="black">S3</text>
<text x="500" y="344" text-anchor="middle" font-family="sans-serif" font-size="11" fill="black">(L3VPN PE, no MUP)</text>
<line x1="472" y1="356" x2="472" y2="430" stroke="black" stroke-width="1.6"/>
<line x1="528" y1="356" x2="528" y2="430" stroke="black" stroke-width="1.6"/>
<text x="464" y="418" text-anchor="end" font-family="sans-serif" font-size="11" fill="black">N3UPF</text>
<text x="536" y="418" font-family="sans-serif" font-size="11" fill="black">N6UPF</text>
<rect x="440" y="430" width="120" height="56" rx="8" fill="white" stroke="black" stroke-width="1.4"/>
<text x="500" y="455" text-anchor="middle" font-family="sans-serif" font-size="15" font-weight="bold" fill="black">UPF</text>
<text x="500" y="474" text-anchor="middle" font-family="sans-serif" font-size="11" fill="black">198.51.100.20</text>
<rect x="30" y="36" width="200" height="82" rx="26" fill="white" stroke="black" stroke-width="1.4"/>
<text x="130" y="62" text-anchor="middle" font-family="sans-serif" font-size="12.5" font-weight="bold" fill="black">N3 RAN: 198.51.100.0/24</text>
<text x="130" y="82" text-anchor="middle" font-family="sans-serif" font-size="12" fill="black">gNB 198.51.100.10</text>
<text x="130" y="101" text-anchor="middle" font-family="sans-serif" font-size="12" fill="black">UE 203.0.113.100</text>
<line x1="130" y1="118" x2="130" y2="168" stroke="black" stroke-width="1.6"/>
<line x1="130" y1="168" x2="239" y2="168" stroke="black" stroke-width="1.6"/>
<line x1="239" y1="168" x2="239" y2="190" stroke="black" stroke-width="1.6"/>
<line x1="245" y1="240" x2="245" y2="470" stroke="black" stroke-width="1.6"/>
<rect x="145" y="470" width="200" height="64" rx="26" fill="white" stroke="black" stroke-width="1.4"/>
<text x="245" y="496" text-anchor="middle" font-family="sans-serif" font-size="12.5" font-weight="bold" fill="black">N6 DN</text>
<text x="245" y="516" text-anchor="middle" font-family="sans-serif" font-size="12" fill="black">Server A 10.10.1.10</text>
<line x1="755" y1="240" x2="755" y2="470" stroke="black" stroke-width="1.6"/>
<rect x="655" y="470" width="200" height="64" rx="26" fill="white" stroke="black" stroke-width="1.4"/>
<text x="755" y="496" text-anchor="middle" font-family="sans-serif" font-size="12.5" font-weight="bold" fill="black">N6 DN</text>
<text x="755" y="516" text-anchor="middle" font-family="sans-serif" font-size="12" fill="black">Server B 10.10.2.10</text>
</svg></artwork></figure>
<t>How to read the diagram is simple: the left side is the radio side, and the
right side is the data network side. All that happens from here is that,
within this diagram, "how to deliver to 203.0.113.100" and "how to deliver
from 203.0.113.100" are assembled from session information.</t>
</section>
<section anchor="segments-introduce-themselves"><name>Before Any Packet
Arrives, the Segments Have Already Introduced Themselves</name>
<t>Before we get to the story of the session, something has already been done:
each MUP PE has announced, to the whole domain, the segments it hosts.</t>
<t>A segment here is something different from a segment in SR. A MUP segment
is an abstraction of a network or a service attached to a MUP PE. It is not a
node, and it is not the stretch of network between PEs. It is a declaration:
"beyond this PE, there is a network or service of this kind."</t>
<t>The introductions of S1 and S2, with concrete values, are as follows.</t>
<t><strong>S1 -- the radio side (Interwork Segment)</strong></t>
<ul><li><t>It advertises, with an Interwork Segment Discovery (ISD) route,
that it hosts the N3 network 198.51.100.0/24. This is the ISD route for V/v in
the base document.</t></li><li><t>Along with it, it attaches the SRv6 SID
<strong>2001:db8:100:1::</strong>, which is S1:: in the base document's
notation. We take its behavior to be <strong>End.M.GTP4.E</strong>, that is,
"convert a received SRv6 packet into a GTP-U packet (IPv4 transport) and send
it out toward the radio side" (in this chapter, the GTP-U transport is fixed
to IPv4).</t></li></ul>
<t><strong>S1 and S2 -- the data network side (Direct Segment)</strong></t>
<ul><li><t>Both advertise their own N6DN as a Direct Segment (a Direct Segment
Discovery, or DSD, route). The identifier that refers to this segment is
<strong>D1</strong>.</t></li><li><t>S1 attaches the SID
<strong>2001:db8:100:2::</strong> (S1:1:: in the base document), and S2
attaches the SID <strong>2001:db8:200:2::</strong> (S2:: in the base
document). The behavior of both is <strong>End.DT4</strong>, that is, "remove
the encapsulation and look the destination up again in the routing instance of
that segment (in this case, the N6DN)."</t></li></ul>
<t>Note also the pattern in the SID values. Both of S1's SIDs lie within the
locator 2001:db8:100::/48, and the trailing part (:1:: or :2::) distinguishes
the behavior. For S2's End.DT4, only the locator changes, to
2001:db8:200::/48, and the part expressing the behavior is the same :2:: as
S1's. "Which PE, and which behavior" is expressed in the shape of the address
itself.</t>
<t>At this point, hold on to just one distinction, which will matter
later.</t>
<t><strong>A SID is not the segment itself.</strong> A SID identifies a
forwarding behavior executed by the MUP PE that hosts the segment. That is
why, for one and the same Direct Segment D1, there are separate SIDs for S1
(2001:db8:100:2::) and for S2 (2001:db8:200:2::). A segment is "what is out
there"; a SID is "what to have this PE do in order to deliver there."</t>
<t>At this point, the RIB of, say, S2 conceptually contains information like
the following (the display format is a pseudo-display for purposes of
explanation).</t>
<figure anchor="fig-rib-of-s2"><name>RIB of S2, before any session
arrives</name>
<artwork>  ISD 198.51.100.0/24, from S1: SID 2001:db8:100:1:: (End.M.GTP4.E)
  DSD segment D1, from S1: SID 2001:db8:100:2:: (End.DT4, N6DN)
  DSD segment D1, local:   SID 2001:db8:200:2:: (End.DT4, N6DN)</artwork></figure>
<t>However, these introductions (the DSD / ISD routes) alone do not yet decide
what to do with which UE's packets. The introductions only prepare "candidate
destinations and how to deliver to them." Which session they will be used for
is decided only when the session information of the next section arrives.</t>
</section>
<section anchor="session-u1"><name>Session Information U1 Is Born</name>
<t>Now the UE (203.0.113.100) starts communicating. In the mobile system, one
piece of session information is created for this UE. In this chapter,
following the base document, we call it <strong>U1</strong>.</t>
<t>The contents of U1 are written in the words of the mobile world, not in the
words of routing. Written out with values, the information is as follows.</t>
<figure anchor="fig-session-information-u1"><name>Session information
U1</name>
<artwork>  UE address               : 203.0.113.100 (treated as a /32)
  gNB-side F-TEID (downlink) : IP 198.51.100.10, TEID 0x00001001
  UPF-side F-TEID (uplink)   : IP 198.51.100.20, TEID 0x00002001
  QFI                      : 9</artwork></figure>
<t>An F-TEID is the pair of "the destination IP address of the tunnel plus the
TEID (tunnel identifier)" that identifies an endpoint of a GTP-U tunnel. On
the downlink, the gNB is the receiving endpoint, so the gNB's pair is
recorded; on the uplink, the UPF is the receiving endpoint, so the UPF's pair
is recorded; these are the two ends of the session.</t>
<t>This is a statement of fact: "the two ends of the tunnel are here." By
itself, it still does not tell S1 or S2 what to write into their FIBs. An
F-TEID is not a route, and the SID for delivering to 203.0.113.100/32
(2001:db8:100:1::) is not written here either.</t>
<t>Filling that gap is the transformation at the core of MUP.</t>
</section>
<section anchor="session-to-routes"><name>The MUP-C Transforms Session
Information into Routes</name>
<t>The session information is handed to the <strong>MUP Controller
(MUP-C)</strong>. The MUP-C has a single job: to transform the session
information received from the mobile system into routing information, and to
advertise it to the MUP network. The result of that transformation is the
<strong>Session Transformed route, or ST route for short</strong>.</t>
<t>From U1, two ST routes are born. There is a reason there are two: on the
downlink and on the uplink, "what a packet is matched on" differs.</t>
<section anchor="st1-route"><name>The ST1 Route, for the Downlink</name>
<t>The downlink is the traffic from the DN side toward the UE. The destination
can be looked up by the IP prefix 203.0.113.100/32. The ST1 route therefore
has the form closest to an ordinary route.</t>
<figure anchor="fig-st1-route"><name>ST1 route (advertised by the
MUP-C)</name>
<artwork>  NLRI            : 203.0.113.100/32
  Session info    : gNB F-TEID 198.51.100.10 / 0x00001001, QFI 9
  Route Target    : 65000:3  (C3 in the base doc; imported by N6DN)</artwork></figure>
<t>That is, ST1 expresses the reachability "203.0.113.100/32 is reachable via
the radio-side endpoint of this session (198.51.100.10, TEID 0x1001)." Note,
however, that ST1 itself carries no SID. "Behind which PE is that endpoint?"
and "by which SID is a packet to be delivered there?" are not written in ST1.
They are decided in the next stage, resolution, by matching against the
introductions of <xref target="segments-introduce-themselves"/>.</t>
</section>
<section anchor="st2-route"><name>The ST2 Route, for the Uplink</name>
<t>The uplink is the traffic from the UE toward the DN side. Here the picture
differs. What S1 receives from the radio side is a GTP-U packet, and its outer
destination is not the UE's communication peer but the F-TEID of the UPF,
namely 198.51.100.20 / TEID 0x00002001. Before looking at the contents of the
packet (the inner destination), it is first necessary to match on "a packet
addressed to this tunnel endpoint belongs to this session."</t>
<t>So what the ST2 route carries is not a destination prefix.</t>
<figure anchor="fig-st2-route"><name>ST2 route (advertised by the
MUP-C)</name>
<artwork>  Matching key    : UPF F-TEID = 198.51.100.20 / TEID 0x00002001
  MUP community   : D1 (the destination is Direct Segment D1)
  Route Target    : 65000:2  (C2 in the base doc; imported by N3RAN)
  Note: it does not carry a destination prefix</artwork></figure>
<t>ST2 expresses, in the form of a route, the instruction: "for a packet that
arrives addressed to TEID 0x2001 at 198.51.100.20, remove the encapsulation
and look the destination up again within Direct Segment D1." Here, too, ST2
itself does not decide which PE's which SID (2001:db8:100:2:: or
2001:db8:200:2::) D1 will become.</t>
</section>
<section anchor="summary-so-far"><name>Summary So Far</name>
<table anchor="tab-st1-st2-side-by-side"><name>The two routes of session U1,
side by side</name>
<thead><tr><th></th><th>ST1 route (for the downlink)</th><th>ST2 route (for
the uplink)</th></tr></thead>
<tbody>
<tr><td>Source session information</td><td>203.0.113.100/32, gNB F-TEID
(...100.10 / 0x1001), QFI 9</td><td>UPF F-TEID (...100.20 / 0x2001)</td></tr>
<tr><td>How packets are matched</td><td>The inner destination prefix
203.0.113.100/32</td><td>The tunnel endpoint 198.51.100.20 / TEID
0x2001</td></tr>
<tr><td>What it does not carry</td><td>The SID to deliver with</td><td>A
destination prefix; the SID to deliver with</td></tr>
<tr><td>Discovery route used for resolution</td><td>ISD route</td><td>DSD
route</td></tr>
</tbody></table>
<t>Both are the facts of a session transcribed into the form of a route, but
as they stand, neither can forward. The SID is still missing. The next stage
is the one most easily overlooked in MUP.</t>
</section>
</section>
<section anchor="resolution"><name>Resolution: Where ST Routes and
Introductions Meet</name>
<t>A MUP PE does not write a received ST route into the FIB as-is. First, it
checks whether the reachability of that ST route can be
<strong>resolved</strong> with the DSD / ISD routes it has received and holds.
Only when resolution succeeds does a forwarding entry using the corresponding
SID come into being.</t>
<t>For U1, it goes as follows.</t>
<t><strong>Resolution of ST1 (downlink)</strong></t>
<ul><li><t>S1 and S2 look up the reachability of the radio-side endpoint,
198.51.100.10, that ST1 points to, using ISD
routes.</t></li><li><t>198.51.100.10 is contained in the ISD route's
198.51.100.0/24. The match is the ISD route that S1
advertised.</t></li><li><t>As a result, the SID that was attached to the ISD
route, <strong>2001:db8:100:1::</strong>, goes into the FIB entry for
203.0.113.100/32.</t></li></ul>
<t>The FIB of S2 conceptually looks like this.</t>
<figure anchor="fig-fib-of-s2"><name>FIB of S2 (N6DN, after resolution of
ST1)</name>
<artwork>  203.0.113.100/32  -&gt;  attach SID 2001:db8:100:1:: and forward to S1
                          (retained: gNB F-TEID 0x1001, QFI 9)
  10.10.1.0/24 -&gt;  ordinary route toward S1 (to server A)
  10.10.2.0/24 -&gt;  locally connected (to server B)</artwork></figure>
<t>Only now does the way downlink packets are delivered become concrete. "For
destinations to 203.0.113.100/32, use the behavior of 2001:db8:100:1::" was
written neither in the session information nor in ST1. ST1 (the facts on the
session side) and the ISD (the introduction on the segment side) were
distributed separately, met inside the receiving MUP PE, and only then was
this information born.</t>
<t><strong>Resolution of ST2 (uplink)</strong></t>
<ul><li><t>S1 looks up the Direct Segment community <strong>D1</strong>
attached to ST2, using DSD routes.</t></li><li><t>Two PEs announce D1: S1
itself (SID 2001:db8:100:2::) and S2 (SID 2001:db8:200:2::). S1 adopts its own
local N6DN as D1 (this is the choice to prefer the closer
segment).</t></li><li><t>As a result, for packets matching TEID 0x2001, a
forwarding entry is created for the processing "terminate the GTP-U, and look
the contents up in the local N6DN."</t></li></ul>
<figure anchor="fig-forwarding-entry-of-s1"><name>Forwarding entry of S1
(N3RAN, after resolution of ST2)</name>
<artwork>  Matches GTP-U dst 198.51.100.20, TEID 0x00002001
    -&gt;  decapsulate, and look the inner packet up in the N6DN
        (= the behavior of the local End.DT4, SID 2001:db8:100:2::)</artwork></figure>
<t>Note that, for an ST route that fails to resolve, no forwarding entry is
created. In that case, packets matching that prefix or endpoint follow the
ordinary IP routing of the routing instance. MUP applies only to "the sessions
that could be resolved"; it is not a mechanism that drops the ones it cannot
resolve onto a broken path.</t>
<t>This completes the preparation. On the control plane, in the end, the
following three things were distributed separately and met at the
receiver:</t>
<ol><li><t>The introductions of the segments (the DSD / ISD routes, and their
SIDs and behaviors)</t></li><li><t>The routes transformed from the session
(the ST1 / ST2 routes)</t></li><li><t>The procedure of resolution, which
matches the two against each other</t></li></ol>
</section>
<section anchor="packet-flow"><name>Now Let the Packets Flow</name>
<t>Now we run actual packets, one round trip. For both, we write the header
values as well.</t>
<section anchor="downlink-flow"><name>Downlink: from Server B to the UE</name>
<t>Suppose a reply packet leaves server B (10.10.2.10) for the UE
(203.0.113.100).</t>
<figure anchor="fig-downlink-packet-flow"><name>Downlink packet flow</name>
<artwork>(1) Within the DN (until it reaches S2)
   IPv4  src 10.10.2.10  -&gt;  dst 203.0.113.100

(2) In the N6DN FIB of S2: 203.0.113.100/32 -&gt; SID 2001:db8:100:1::
   SRv6  dst 2001:db8:100:1::   (the original packet is kept inside)

(3) S1 executes the behavior of the SID, End.M.GTP4.E
   GTP-U/IPv4  src (N3 addr of S1) -&gt; dst 198.51.100.10, TEID 0x1001
               QFI 9 in the PDU session container
               Inside is the original IPv4 packet (dst 203.0.113.100)

(4) The gNB ends the GTP-U and delivers it to the UE, 203.0.113.100</artwork></figure>
<t>What deserves attention is that, at step (3), S1 goes back to "the mobile
way of doing things." Inside the domain, packets are carried by routing and
SRv6; only at the final exit are they converted into the user-plane protocol
that the peer understands (here, GTP-U). What the term Interwork Segment
refers to is this conversion at the exit.</t>
<t>Note that how the SID appears in the packet that leaves S2 in step (2)
depends on whether the ingress is remote or local (Section 7.2 of the base
document contains a note to the effect that, in a packet from the local E/e to
U/u, S1:: does not appear on the wire). This chapter confines itself to the
point that "as a result of resolution, the packet heads toward the behavior of
S1," and does not distinguish the wire format.</t>
</section>
<section anchor="uplink-flow"><name>Uplink: from the UE to Server A</name>
<t>This time, suppose a packet leaves the UE (203.0.113.100) for server A
(10.10.1.10), which is near S1.</t>
<figure anchor="fig-uplink-packet-flow"><name>Uplink packet flow</name>
<artwork>(1) The inner packet sent by the UE
   IPv4  src 203.0.113.100  -&gt;  dst 10.10.1.10

(2) The gNB puts it in GTP-U, addressed to the UPF (as usual)
   GTP-U/IPv4  src 198.51.100.10 -&gt; dst 198.51.100.20, TEID 0x00002001
               Inside is the packet of (1)

(3) It reaches the N3RAN of S1; outer dst and TEID match the ST2 key
   (198.51.100.20 / 0x2001)
    -&gt;  terminate the GTP-U, and look the inner packet up in the N6DN

(4) The FIB of the N6DN: 10.10.1.0/24 is locally connected
    -&gt;  it is delivered to server A, 10.10.1.10, as-is</artwork></figure>
<t>On the uplink, the packet does not pass through the UPF. A packet that the
gNB sent addressed to the UPF (198.51.100.20) is received along the way by S1,
based on the session information; S1 removes the encapsulation and hands it
directly to the routing on the DN side. That is the substance of what MUP is
doing in this example. It is not that "the UPF disappears"; it is that "for
this session, a path that can deliver without passing through the UPF is
assembled from routing."</t>
<t>If the destination were server B (10.10.2.0/24), everything is the same up
to step (3). The difference is in the result of the re-lookup in step (4): the
packet is carried toward S2, following the ordinary routing of the N6DN.</t>
<t>And, to repeat, the target is only the session of U1. Packets addressed to
F-TEIDs other than TEID 0x2001, and packets of UEs that have no ST route (for
example, a terminal with the address 203.0.113.101), go to the UPF via S3,
exactly as before.</t>
</section>
</section>
<section anchor="example-takeaways"><name>What This Chapter Wants You to Hold
On To</name>
<t>Having walked through one example, we write the flow shown at the start
once more, this time with values.</t>
<blockquote><t>Session information <strong>U1</strong> is born on the mobile
side (UE 203.0.113.100/32, gNB F-TEID 0x1001, UPF F-TEID 0x2001, QFI 9) -&gt;
the MUP-C transforms it into an <strong>ST1 route (toward
203.0.113.100/32)</strong> and an <strong>ST2 route (toward TEID
0x2001)</strong> and distributes them -&gt; each MUP PE matches them against
the <strong>ISD route (SID 2001:db8:100:1::) / DSD route (D1, SID
...:2::)</strong> distributed beforehand, and <strong>resolves</strong> them
-&gt; as a result of resolution, SIDs and their behaviors enter the FIB -&gt;
packets flow with SRv6 inside the domain, and with GTP-U at the
exit</t></blockquote>
<figure anchor="fig-session-to-forwarding"><name>The overall picture of
<xref target="worked-example"/>. The session information (the facts on the
mobile side) and the introductions of the segments (the facts on the PE side)
are distributed separately, and become forwarding only upon resolution inside
the receiving MUP PE.</name>
<artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" width="1000" height="430" viewBox="0 0 1000 430">
<title>Figure 1: One session, from session information to forwarding</title>
<rect width="1000" height="430" fill="white"/>

<rect x="15" y="25" width="225" height="118" rx="8" fill="white" stroke="black" stroke-width="1.4"/>
<text x='127.5' y='46' text-anchor='middle' font-family="sans-serif" font-size='14.5' font-weight='bold' fill="black">Session information U1</text>
<text x='127.5' y='62' text-anchor='middle' font-family="sans-serif" font-size='12' fill="black">(mobile side)</text>
<text x='127.5' y='80' text-anchor='middle' font-family="sans-serif" font-size='12.5' fill="black">UE 203.0.113.100/32</text>
<text x='127.5' y='97.5' text-anchor='middle' font-family="sans-serif" font-size='12.5' fill="black">gNB F-TEID 0x1001</text>
<text x='127.5' y='115' text-anchor='middle' font-family="sans-serif" font-size='12.5' fill="black">UPF F-TEID 0x2001, QFI 9</text>
<rect x="300" y="25" width="240" height="118" rx="8" fill="white" stroke="black" stroke-width="1.4"/>
<text x='420.0' y='46' text-anchor='middle' font-family="sans-serif" font-size='14.5' font-weight='bold' fill="black">MUP-C turns it into routes</text>
<text x='420.0' y='62' text-anchor='middle' font-family="sans-serif" font-size='12' fill="black">(distributed by BGP)</text>
<text x='420.0' y='82' text-anchor='middle' font-family="sans-serif" font-size='12' fill="black">ST1 route (downlink):</text>
<text x='420.0' y='98' text-anchor='middle' font-family="sans-serif" font-size='12' fill="black">203.0.113.100/32</text>
<text x='420.0' y='118' text-anchor='middle' font-family="sans-serif" font-size='12' fill="black">ST2 route (uplink): TEID 0x2001</text>
<rect x="600" y="25" width="385" height="118" rx="8" fill="white" stroke="black" stroke-width="1.4"/>
<text x='792.5' y='51' text-anchor='middle' font-family="sans-serif" font-size='15' font-weight='bold' fill="black">Segment advertisements (PEs, separately)</text>
<text x='792.5' y='70' text-anchor='middle' font-family="sans-serif" font-size='12.5' fill="black">ISD (S1): N3 -> SID 2001:db8:100:1::</text>
<text x='792.5' y='87.5' text-anchor='middle' font-family="sans-serif" font-size='12.5' fill="black">DSD (S1): D1 -> SID 2001:db8:100:2::</text>
<text x='792.5' y='105.0' text-anchor='middle' font-family="sans-serif" font-size='12.5' fill="black">DSD (S2): D1 -> SID 2001:db8:200:2::</text>
<line x1='240' y1='84' x2='296' y2='84' stroke="black" stroke-width='1.6'/><polygon points="296.0,84.0 286.0,88.2 286.0,79.8" fill="black"/>
<line x1='845' y1='143' x2='845' y2='196' stroke="black" stroke-width='1.6' stroke-dasharray='5,4'/><polygon points="845.0,196.0 840.8,186.0 849.2,186.0" fill="black"/>
<line x1='420' y1='143' x2='560' y2='196' stroke="black" stroke-width='1.6' stroke-dasharray='5,4'/><polygon points="560.0,196.0 549.1607250360579,196.38745097245695 552.1347452591241,188.53154849643332" fill="black"/>
<rect x="300" y="200" width="640" height="92" rx="8" fill="white" stroke="black" stroke-width="1.4"/>
<text x='620.0' y='226' text-anchor='middle' font-family="sans-serif" font-size='15' font-weight='bold' fill="black">Resolution in the MUP PE builds the FIB</text>
<text x='620.0' y='245' text-anchor='middle' font-family="sans-serif" font-size='12.5' fill="black">ST1 x ISD -> 203.0.113.100/32 -> SID 2001:db8:100:1:: (FIB of S2)</text>
<text x='620.0' y='262.5' text-anchor='middle' font-family="sans-serif" font-size='12.5' fill="black">ST2 x DSD (D1) -> S1 uses its local End.DT4 (2001:db8:100:2::)</text>
<rect x="15" y="322" width="970" height="88" rx="8" fill="white" stroke="black" stroke-width="1.4"/>
<text x='500.0' y='348' text-anchor='middle' font-family="sans-serif" font-size='15' font-weight='bold' fill="black">Packet flow</text>
<text x='500.0' y='367' text-anchor='middle' font-family="sans-serif" font-size='12.5' fill="black">Downlink: server B -> S2 --SRv6--> S1 (End.M.GTP4.E) --GTP-U / TEID 0x1001--> gNB -> UE</text>
<text x='500.0' y='384.5' text-anchor='middle' font-family="sans-serif" font-size='12.5' fill="black">Uplink: UE -> gNB --GTP-U / TEID 0x2001--> S1 terminates (End.DT4) -> server A (no UPF)</text>
<line x1='620' y1='292' x2='620' y2='318' stroke="black" stroke-width='1.6'/><polygon points="620.0,318.0 615.8,308.0 624.2,308.0" fill="black"/>
</svg></artwork></figure>
<t>Within this flow, three things are intentionally kept separate: the facts
of the session (known by the mobile side), where the segments are and how to
deliver to them (known by the MUP PEs), and the resolution that ties the two
together (executed by the receiver). Why go to the trouble of separating them,
and what becomes replaceable by separating them? That is the subject of the
next chapter, <xref target="indirection"/>.</t>
<t>If you have read this far, Sections 5, 6, and 7 of the base document should
be readable as "a normative rewriting of a story you already know." That is
the aim of this companion.</t>
</section>
</section>
<section anchor="indirection"><name>Why the Indirection Is Necessary</name>
<blockquote><t>Meaning is not inside things; it arises when they
meet.</t></blockquote>
<t>To be honest, the flow of <xref target="worked-example"/> is
roundabout.</t>
<t>Session information U1 is born, the MUP-C transforms it into ST1 / ST2
routes, that alone still cannot forward, each MUP PE matches them against DSD
/ ISD routes and resolves them, and only then is the SID decided. A single UE
has been added, and yet three kinds of routing information are flying
around.</t>
<t>The naive question is this. <strong>Why doesn't the MUP-C compute
everything down to the SID from the start and distribute that?</strong> The
session information holds the F-TEIDs of both ends, so writing it all in one
statement -- "for 203.0.113.100/32, send with SID 2001:db8:100:1::" -- looks
easier for both the reader and the implementer.</t>
<t>In this chapter, we deliberately take that naive proposal seriously.
Indirection is not complexity for complexity's sake. If we line up what goes
wrong when the direct approach is taken, the reasons it had to be separated
come into view.</t>
<t>This chapter also uses the example of <xref target="worked-example"/> as-is
(the UE is 203.0.113.100, the gNB is 198.51.100.10, the UPF is 198.51.100.20,
the locator of S1 is 2001:db8:100::/48, and that of S2 is
2001:db8:200::/48).</t>
<section anchor="writing-directly"><name>The Problem with Writing Directly:
More Things the MUP-C Has to Know</name>
<t>With the direct approach, at the point in time when the MUP-C creates an ST
route, it must decide everything down to the final SID. The SID
2001:db8:100:1:: is a value that comes out of the locator of S1. That is, in
addition to the facts of the session, the MUP-C would have to know the
following as well:</t>
<ul><li><t>Behind which PE the radio-side network 198.51.100.0/24 lies (in
this example, S1)</t></li><li><t>Which SID and which behavior that PE assigned
to that segment (2001:db8:100:1::, End.M.GTP4.E)</t></li><li><t>Which PEs the
DN-side segment D1 is at, and which PE should be chosen (2001:db8:100:2:: of
S1, or 2001:db8:200:2:: of S2)</t></li></ul>
<t>This is a conflation of roles. The original input of the MUP-C was supposed
to be the facts of the session that the mobile system knows (the address of
the UE, the F-TEIDs of both ends, the QFI). The direct approach makes it take
on, in addition, all of the circumstances on the network side: the topology of
the SR domain and the SID assignments of each PE.</t>
<t>Moreover, those circumstances change. A PE is added, SID assignments
change, the number of PEs that offer the same segment grows. Each time, the
knowledge on the side that distributes the sessions must be made to follow.
The job of transforming session information and the job of managing the
configuration of the domain pile up in a single place.</t>
<t>MUP's way of dividing it is the reverse of this.</t>
<ul><li><t><strong>Where a segment is, and how to deliver to it, is announced
by the MUP PE that hosts it, itself</strong> (the DSD / ISD routes). A PE
knows its own affairs best.</t></li><li><t><strong>The facts of the session
are transcribed by the MUP-C into the form of a route</strong> (the ST route).
But it does not write the SID. Not because it cannot, but because it does
not.</t></li><li><t><strong>What ties the two together is the resolution that
the MUP PE that received them performs on the spot.</strong></t></li></ul>
<t>No one knows the whole. But if each party distributes only what it knows,
the whole is assembled at the receiver. This is the first reason for the
indirection: <strong>separating where knowledge resides</strong>.</t>
</section>
<section anchor="timescales"><name>Do Not Mix Things That Change at Different
Speeds</name>
<t>Another reason for the separation is the timescale.</t>
<t>An introduction of a segment (for example, "beyond S1 there is the N3
network 198.51.100.0/24," or "D1 is at S1 and S2") changes only when equipment
or configuration changes. It is a matter of days or months.</t>
<t>Sessions are different. A session is born each time a UE connects and a
session is set up, and disappears when it ends. In
<xref target="worked-example"/>, U1 was a single case, but in actual operation
the number piles up to tens of thousands or millions, in constant
turnover.</t>
<t>If the SID were embedded in the ST route, information that ought to change
slowly (SID assignments and the placement of segments) would end up replicated
in bulk inside information that turns over quickly (the individual sessions).
A single change of placement would force the redistribution of the routing
information of every session affected by it.</t>
<t>If the two are kept separate, a change of placement is finished with a
change of the introductions alone. For example, even if the set of PEs that
offer D1 changes, the ST1 route for 203.0.113.100/32 itself does not change by
a single character. Each PE re-resolves it at hand, and follows the new
placement. <strong>Distribute things that change quickly and things that
change slowly, separately.</strong> This is a principle that has existed in
the world of routing for a long time, and MUP can be read as having applied it
to session information as well.</t>
</section>
<section anchor="late-binding"><name>Resolution Is "Late Binding": The Same ST
Route Yields a Different Answer at Each PE</name>
<t>Let us look once more at a scene that appeared in
<xref target="worked-example"/>. The ST2 route carried the identifier D1 of a
Direct Segment, and there were two PEs that announced D1: S1 (SID
2001:db8:100:2::) and S2 (SID 2001:db8:200:2::). S1 adopted its own local N6DN
as D1.</t>
<t>What is happening here is that <strong>the same input yields a different
forwarding result, depending on the PE that interprets it</strong>. If another
PE were to receive the same ST2, that PE would choose the D1 that is
appropriate as seen from its own position (for example, the one of S2, or its
own local segment). The ST route carries only the intent "to D1"; the decision
of "which PE's D1 it is" is left to the receiver.</t>
<t>This is not so by accident. The base document states that when multiple DSD
routes match, which one the route is resolved with is left to BGP best path
selection (Section 5.1 of the architecture document). That is, the selection
mechanism does not invent something new; it uses, as-is, the property that
routing originally has, that "the receiver chooses the best with the
information in its hands."</t>
<t>The direct approach cannot obtain this suppleness. At the point in time
when the distributing side has fixed the SID to one value, an answer common to
all PEs is fixed. Room for judgments that differ by place -- "I want to use
the closer segment," "at this PE, let the local one take precedence" --
disappears.</t>
<t>Inserting the one stage of resolution also moves the decision from the
distributing side to the receiving side. In technical terminology, this is
late binding; in plain words, it is <strong>"specify the segment to deliver to
by name, and decide which PE it actually is on the spot, each
time."</strong></t>
<figure anchor="fig-late-binding"><name>Late binding. An ST2 route specifies
the destination by name (D1) only; which PE's segment it is is decided by the
receiver, on the spot.</name>
<artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" width="1000" height="330" viewBox="0 0 1000 330">
<title>Figure 2: The same ST2 route, resolved to a different SID at each
PE</title>
<rect width="1000" height="330" fill="white"/>

<rect x="30" y="105" width="280" height="110" rx="8" fill="white" stroke="black" stroke-width="1.4"/>
<text x='170.0' y='131' text-anchor='middle' font-family="sans-serif" font-size='15' font-weight='bold' fill="black">ST2 route (what is distributed)</text>
<text x='170.0' y='150' text-anchor='middle' font-family="sans-serif" font-size='12.5' fill="black">Destination given by name: Direct Segment D1</text>
<text x='170.0' y='167.5' text-anchor='middle' font-family="sans-serif" font-size='12.5' fill="black">No SID is written in it</text>
<rect x="560" y="25" width="410" height="110" rx="8" fill="white" stroke="black" stroke-width="1.4"/>
<text x='765.0' y='51' text-anchor='middle' font-family="sans-serif" font-size='15' font-weight='bold' fill="black">Received at S1</text>
<text x='765.0' y='70' text-anchor='middle' font-family="sans-serif" font-size='12.5' fill="black">DSD (D1): advertised by S1 itself</text>
<text x='765.0' y='87.5' text-anchor='middle' font-family="sans-serif" font-size='12.5' fill="black">Resolves to SID 2001:db8:100:2:: (End.DT4, local N6DN)</text>
<rect x="560" y="185" width="410" height="110" rx="8" fill="white" stroke="black" stroke-width="1.4"/>
<text x='765.0' y='211' text-anchor='middle' font-family="sans-serif" font-size='15' font-weight='bold' fill="black">Received at S2</text>
<text x='765.0' y='230' text-anchor='middle' font-family="sans-serif" font-size='12.5' fill="black">DSD (D1): advertised by S2 itself</text>
<text x='765.0' y='247.5' text-anchor='middle' font-family="sans-serif" font-size='12.5' fill="black">Resolves to SID 2001:db8:200:2:: (End.DT4, N6DN of S2)</text>
<line x1='310' y1='135' x2='552' y2='88' stroke="black" stroke-width='1.6'/><polygon points="552.0,88.0 542.9841646412348,94.0294869419908 541.3826835831763,85.78356319624342" fill="black"/>
<text x='431.0' y='105.5' text-anchor='middle' font-family="sans-serif" font-size='12' fill="black">Resolution</text>
<line x1='310' y1='185' x2='552' y2='232' stroke="black" stroke-width='1.6'/><polygon points="552.0,232.0 541.3826835831763,234.21643680375655 542.9841646412348,225.9705130580092" fill="black"/>
<text x='431.0' y='202.5' text-anchor='middle' font-family="sans-serif" font-size='12' fill="black">Resolution</text>
<text x='500' y='322' text-anchor='middle' font-family="sans-serif" font-size='13' fill="black">The decision sits with the receiver, not the sender (late binding). ST routes go to all PEs in the same form.</text>
</svg></artwork></figure>
</section>
<section anchor="replacing-things"><name>You See It When You Try Replacing
Things: The Example of S4 Joining</name>
<t>The effect of the indirection is clearest when the configuration is
changed. We use the example of Section 7.3 of the base document: the case in
which a new PE, <strong>S4</strong>, joins the SR domain and hosts a new group
of edge servers. When values are assigned in the style of
<xref target="worked-example"/>, it looks like this.</t>
<figure anchor="fig-s4-joining"><name>S4 joining (only the things that are
added)</name>
<artwork>  Locator           : 2001:db8:400::/48
  DN                : 10.10.3.0/24, server C is 10.10.3.10
  Introduction (DSD): segment D2, SID 2001:db8:400:2:: (End.DT4)
                        Note: the :2:: function follows the same
                        pattern as the DSDs of S1 / S2</artwork></figure>
<t>Now, among the existing things, what changes?</t>
<ul><li><t>The ST1 / ST2 routes of U1: <strong>they do not change</strong>. U1
remains a session toward D1.</t></li><li><t>The introductions of S1 / S2:
<strong>they do not change</strong>. They remain D1.</t></li><li><t>What is
newly needed: only that, for a session that uses server C (10.10.3.10), the
MUP-C issues an ST route with D2 attached. For example, if the session U1' of
another UE (203.0.113.101) is toward D2, D2 is attached to its ST2; when S1
receives it, it is resolved with the DSD for D2 (SID 2001:db8:400:2::), and
the packets head toward S4.</t></li></ul>
<t>The addition closes within the addition, and there is no need to rebuild
the routing information of existing sessions. This is the result of combining
the "separation of the speeds of change" described in
<xref target="timescales"/> with the "specify by name, and leave the
resolution to the receiver" of <xref target="late-binding"/>. With the direct
approach, the joining of S4 would have been the work of "the MUP-C learns the
SID of S4, and changes the contents it distributes for the related
sessions."</t>
<t>Note that, in this example, as the behavior that S1 uses for packets toward
D2, the base document lists behaviors for bridging to a remote segment, such
as H.M.GTP4.D and End.M.GTP6.D. How to behave when the destination of
resolution turns out to be a segment that is not at one's own location is also
decided as a result of resolution. The details are beyond the scope of this
chapter; here, we hold on only to the point that the behavior itself switches
depending on "local or remote."</t>
</section>
<section anchor="collapsed-configuration"><name>The Same ST Route Works in a
Different Placement: The Collapsed Configuration</name>
<t>Replaceability is not only a matter of adding PEs. Section 7.4 of the base
document introduces a collapsed configuration in which the only MUP PE is S1.
S2 and S3 remain L3VPN PEs that do not have MUP enabled.</t>
<t>What is interesting in this configuration is that there are cases in which
S1 does not advertise ISD / DSD routes for its own local segments. Since it
hosts them itself, it knows them; there is no need to go out of its way to
announce them with BGP and receive them itself. Instead, S1, as a result of
importing the ST1 route, directly creates a GTP encapsulation entry in the
FIB, and advertises the UE prefix 203.0.113.100/32 to S2 as an ordinary L3VPN
route with the SID 2001:db8:100:2:: attached.</t>
<t>That is, the discovery procedure is a means "to learn about a remote
segment," and is not an end in itself. If things close locally, that stage can
be omitted. The form of the input, the ST route, does not change in either the
full configuration or the configuration collapsed into a single unit.
<strong>The input (the facts of the session) is the same, and the way it is
resolved and the way forwarding is assembled differ by deployment.</strong>
This, too, is a freedom of placement that is possible only because the one
stage of resolution sits in between.</t>
</section>
<section anchor="cost-of-indirection"><name>The Cost of Indirection, Stated
Honestly</name>
<t>So far we have lined up only the advantages, but indirection is not free.
There is a price, for the reader and for the operator alike.</t>
<ul><li><t><strong>The cost of tracing</strong>: when a packet does not
arrive, the places to investigate are not just one. It is necessary to look,
in order, at the three stages: has the ST route arrived, have the DSD / ISD
routes arrived, and are the two being resolved?</t></li><li><t><strong>The
opacity of state</strong>: an entry that has entered the FIB (for example,
203.0.113.100/32 -&gt; SID 2001:db8:100:1::) does not, from the entry itself,
reveal which combination of inputs produced it. To trace its origin,
information on the RIB side is needed.</t></li><li><t><strong>The silence when
resolution fails</strong>: an ST route that cannot be resolved does not enter
the FIB, and the packet follows ordinary routing
(<xref target="worked-example"/>). This is safe in the sense that packets are
not dropped onto a broken path, but there is also the aspect that it makes it
hard to notice that "MUP is not taking effect."</t></li></ul>
<t>Turned around, these three stages become, just as they are, an inspection
procedure.</t>
<figure anchor="fig-inspection"><name>Inspection when a packet does not
arrive</name>
<artwork>  1. Is there an ST route?
       In the RIB of S2, is there ST1: 203.0.113.100/32 (RT 65000:3)?
       In S1's RIB, is there ST2 for TEID 0x2001 (D1, RT 65000:2)?
  2. Are there introductions?
       Is there the ISD: 198.51.100.0/24 + SID 2001:db8:100:1::?
       Is there DSD: D1 + SID 2001:db8:100:2:: / 2001:db8:200:2::?
  3. Is it being resolved?
       In the FIB of S2, is 203.0.113.100/32 -&gt; 2001:db8:100:1:: in?
       If not, this narrows it down to which of 1 and 2 is missing</artwork></figure>
<t>With the direct approach, the inspection would be finished in one stage. In
exchange, all of the suppleness seen from Sections
<xref target="writing-directly" format="counter"/> through
<xref target="collapsed-configuration" format="counter"/> would be lost. The
design of MUP is making the choice to accept the trouble of inspection, in
exchange for taking the separation of knowledge and replaceability. We believe
that writing this trade-off down, self-consciously, is the honest thing to do,
both for reviewers and for implementers.</t>
</section>
<section anchor="indirection-takeaways"><name>What This Chapter Wants You to
Hold On To</name>
<t>There is not just one reason why the indirection is necessary. They
overlap.</t>
<ol><li><t><strong>Where knowledge resides</strong>: the PE knows about
segments; the MUP-C knows about sessions. Neither needs to know the
circumstances of the other.</t></li><li><t><strong>Separation of the speeds of
change</strong>: the placement of segments changes slowly; sessions change
quickly. Do not replicate the information of the slow side inside the fast
side.</t></li><li><t><strong>Late binding</strong>: an ST route specifies a
segment by name (D1), and which PE's segment it is is decided by the receiver,
on the spot. The same input becomes a different, appropriate answer at each
place.</t></li><li><t><strong>Freedom of placement</strong>: the addition of a
PE (S4, D2) closes within the addition, and in the collapsed configuration,
the discovery stage itself can be omitted. The form of the input does not
change.</t></li></ol>
<t>The flow that looked "roundabout" in <xref target="worked-example"/> is the
form that satisfies all four of these. In the next chapter, we look at the
same "benefit of not deciding" along one more axis: why it is not decided
whether a segment is on the radio side or not.</t>
</section>
</section>
<section anchor="symmetry"><name>Why Segments Are Symmetric</name>
<blockquote><t>Water does not hold the shape of its vessel in
advance.</t></blockquote>
<t>Sections <xref target="worked-example" format="counter"/> and
<xref target="indirection" format="counter"/> talked only about N3 (the radio
side). The distinction between the radio side and the data network side has
presumably been an implicit premise whenever the word "segment" came up.</t>
<t>Yet if one reads the main document carefully, the word "access side"
appears nowhere in the definition of a segment. The only distinction given is
between Direct Segments and Interwork Segments, and that is a distinction
about how a segment is reached: whether reaching it requires interworking --
conversion -- with a user plane protocol of the mobile service architecture.
Which position a segment occupies in the topology of the network is not
defined.</t>
<t>This is not an omission. In this chapter, we look at why position is left
undefined, and at what becomes treatable by one and the same mechanism once it
is left undefined, using the home routed (HR) roaming example in Section 7.5
of the main document. We again follow the example with concrete values;
roaming brings more characters onto the stage, so we hand over the values
first.</t>
<figure anchor="fig-hr-example"><name>The HR roaming example (extending the
assignment from Section 3)</name>
<artwork>  Setting          : serving SR domain; the UE subscribes to HO-A
  N3 network       : 198.51.100.0/24 (same as in Section 3)
    gNB                      : 198.51.100.10
    N3 side of serving UPF   : 198.51.100.20
  N9A (interconnection toward HO-A) : 10.20.1.0/24
    UPF of HO-A              : 10.20.1.10
    N9 endpoint on serving side : 10.20.1.20
  N9B (toward HO-B) : 10.20.2.0/24 (UPF of HO-B is 10.20.2.10)
  SIDs (the behavior is End.M.GTP4.E in all cases)
    ISD of S1 for N3   : 2001:db8:100:1:: (as in Section 3; default)
    ISD of S2 for N9A  : 2001:db8:200:1::   (community I1)
    ISD of S1 for N9B  : 2001:db8:100:3::   (community I2)</artwork></figure>
<t>Note the arrangement of the SID values. For N3 and for N9A, the locators
differ, but the function part is :1:: in both cases, and the behavior is the
same End.M.GTP4.E. Whether it is the radio side or the side of an
interconnection toward another operator, from the point of view of MUP the two
stand side by side as nothing more than instances of "an Interwork Segment
that requires conversion with GTP-U."</t>
<section anchor="if-not-symmetric"><name>First, Consider What Would Happen If
Segments Were Not Symmetric</name>
<t>Suppose the architecture baked labels such as "access side" and "the other
(non-access) side" into segments. Those labels would find their way into the
route types and the resolution rules as well. A definition such as "the
destination endpoint of an ST2 route is an endpoint on the non-access side" is
the typical example.</t>
<t>At first sight, this looks helpful. A reader could tell the role from the
label, and an implementation could branch by side.</t>
<t>But this assumption breaks down in the face of HR roaming. As the next
section shows, in a roaming session the same kind of route (an ST2 route)
takes "the F-TEID of a UPF on the N9 side" as its destination endpoint in one
direction, and "the F-TEID of a gNB on the N3 side" as its destination
endpoint in the other direction. That is, the destination endpoint can be on
the access side or on the other side, depending on the direction. Whichever
side one inserts into the sentence "the destination of an ST2 route is on the
... side," the sentence becomes false for the other direction.</t>
<t>And this is not a contrived counterexample. If the axis of sides is brought
into the definitional text of the architecture, one direction of a real
deployment falls outside the definition. That is the practical reason symmetry
is needed.</t>
</section>
<section anchor="hr-roaming-both-directions"><name>Following an HR Roaming
Session in Both Directions</name>
<t>Let us set the scene. The serving operator has enabled MUP: S1 hosts the N3
network, S2 hosts the N9 interconnection toward HO-A (N9A), and S1 hosts the
N9 interconnection toward HO-B (N9B), each as an Interwork Segment. N9A and
N9B are placed in separate routing instances, because the routing and
addressing policies differ from one home operator to another. It is therefore
acceptable for both home operators to use the same IP address ranges.</t>
<t>Roaming sessions that are not handled by MUP continue to pass between N3
and N9 through the serving UPF (behind S3), as before. MUP handles only the
sessions selected as its targets.</t>
<t>Now a roaming session of a UE subscribing to HO-A arrives. The session
information contains four F-TEIDs.</t>
<figure anchor="fig-hr-session-information"><name>Session information (HR
roaming, HO-A)</name>
<artwork>  V1 : F-TEID of the gNB
       IP 198.51.100.10, TEID 0x00001101 (N3 side)
  Xa : F-TEID on the serving core side (toward the serving UPF)
       IP 198.51.100.20, TEID 0x00002101 (N3 side)
  A1 : F-TEID of the UPF of HO-A
       IP 10.20.1.10, TEID 0x00003101 (N9A side)
  Z1 : F-TEID on the serving N9 side (entry point seen from HO-A)
       IP 10.20.1.20, TEID 0x00004101 (N9A side)</artwork></figure>
<t>On the conventional path, the uplink runs gNB -&gt; (toward Xa) -&gt;
serving UPF -&gt; (toward A1) -&gt; UPF of HO-A, and the downlink traverses
the reverse. What MUP does is to connect the two tunnels that sandwich the
serving UPF directly, across the SR domain. For that purpose, the MUP-C
originates two ST2 routes.</t>
<section anchor="uplink-hr"><name>Uplink: the Match Is on the N3 Side, the
Destination Is on the N9 Side</name>
<figure anchor="fig-st2-route-uplink"><name>ST2 route (for the uplink)</name>
<artwork>  Matching key          : Xa (198.51.100.20 / TEID 0x00002101)
  Destination endpoint  : A1 (10.20.1.10 / TEID 0x00003101)
  MUP community         : I1 (destination: Interwork Segment N9A)
  Route Target  : 65000:2 (C2 in the main doc; imported by N3RAN)</artwork></figure>
<t>The N3RAN instance on S1 imports this route. Resolution is performed only
with ISD routes carrying community I1. The match is the ISD route for N9A
advertised by S2 (SID 2001:db8:200:1::). Resolution does not happen with the
ISD route for N3, which carries no I1, or with the ISD route for N9B, which
carries I2. Even if the address spaces overlap, there is no confusing one
segment with another whose policy differs.</t>
<t>The packet flow is as follows. S1 receives the GTP-U packet that the gNB
sent toward Xa, matches it against the ST2 route, decapsulates it, and places
the inner packet onto SRv6. The SID used at that point is composed from the
resolution result, 2001:db8:200:1::, with the information of the destination
endpoint A1 embedded in it as an argument. S2 executes the behavior of that
SID, End.M.GTP4.E, converts the packet into GTP-U toward A1, and hands it to
the UPF of HO-A.</t>
</section>
<section anchor="downlink-hr"><name>Downlink: the Match Is on the N9 Side, the
Destination Is on the N3 Side</name>
<figure anchor="fig-st2-route-downlink"><name>ST2 route (for the
downlink)</name>
<artwork>  Matching key          : Z1 (10.20.1.20 / TEID 0x00004101)
  Destination endpoint  : V1 (198.51.100.10 / TEID 0x00001101)
  MUP community         : none (default Interwork Segment = N3RAN)
  Route Target  : C5 (main doc; imported by N9A instance)</artwork></figure>
<t>The N9A instance on S2 imports this route. Since there is no community,
resolution is performed with the ISD routes of the default Interwork Segment,
and the match is the ISD route for N3 of S1 (SID 2001:db8:100:1::). S2
receives the GTP-U packet that the UPF of HO-A sent toward Z1, decapsulates
it, and places it onto SRv6; S1 converts it, by End.M.GTP4.E, into GTP-U
toward V1 and delivers it to the gNB.</t>
</section>
<section anchor="side-by-side"><name>Placing the Two Side by Side</name>
<table anchor="tab-hr-st2-side-by-side"><name>ST2 in the uplink and the
downlink, side by side</name>
<thead><tr><th></th><th>ST2 (uplink)</th><th>ST2 (downlink)</th></tr></thead>
<tbody>
<tr><td>Matching key</td><td>Xa (endpoint on the N3 side)</td><td>Z1 (endpoint
on the N9 side)</td></tr>
<tr><td>Destination endpoint</td><td>A1 (UPF on the N9 side)</td><td>V1 (gNB
on the N3 side)</td></tr>
<tr><td>ISD used for resolution</td><td>ISD of N9A, with I1</td><td>ISD of the
default (N3)</td></tr>
<tr><td>Resolved SID</td><td>2001:db8:200:1:: (S2)</td><td>2001:db8:100:1::
(S1)</td></tr>
<tr><td>Final behavior</td><td>End.M.GTP4.E</td><td>End.M.GTP4.E</td></tr>
</tbody></table>
<t>The route type is the same, the resolution rule is the same, and the final
behavior is the same. What differs is only which network the matching key and
the destination endpoint belong to, and whether a community that narrows the
scope of resolution is attached. And even that difference does not come from a
decision of the architecture: it comes from the circumstances of the
deployment, namely that this session is a roaming session.</t>
<t>If the definition of an ST2 route contained a sentence such as "the
destination endpoint is on the non-access side," the downlink row would
violate the definition. If it said "access side" instead, the uplink row would
be the violation. It is precisely because neither sentence is written that
both routes can be processed by the same rule. This is the practical substance
of the statement that segments are symmetric.</t>
<figure anchor="fig-hr-roaming"><name>The two ST2 routes of HR roaming. The
uplink is resolved to N9A by I1; the downlink is resolved to the default N3
with no community. N9B (I2, SID 2001:db8:100:3::) is co-located with N3 on S1.
Note that the SID of N9B is a value reassigned in this companion document to
avoid a collision of values, and differs from the notation in Section 7.5 of
the main document (S1:1::). The companion's examples are self-contained and
use their own consistent assignment.</name>
<artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" width="1040" height="470" viewBox="0 0 1040 470">
<title>Figure 3: HR roaming -- the same ST2 type with destinations on the N9
side and on the N3 side</title>
<rect width="1040" height="470" fill="white"/>

<rect x="15" y="60" width="200" height="120" rx="8" fill="white" stroke="black" stroke-width="1.4"/>
<text x='115.0' y='86' text-anchor='middle' font-family="sans-serif" font-size='15' font-weight='bold' fill="black">gNB (visited RAN)</text>
<text x='115.0' y='105' text-anchor='middle' font-family="sans-serif" font-size='12.5' fill="black">V1: 198.51.100.10</text>
<text x='115.0' y='122.5' text-anchor='middle' font-family="sans-serif" font-size='12.5' fill="black">TEID 0x00001101 (N3)</text>
<rect x="300" y="40" width="300" height="170" rx="8" fill="white" stroke="black" stroke-width="1.4"/>
<text x='450.0' y='66' text-anchor='middle' font-family="sans-serif" font-size='15' font-weight='bold' fill="black">MUP PE S1</text>
<text x='450.0' y='85' text-anchor='middle' font-family="sans-serif" font-size='12.5' fill="black">ISD for N3 (default): 2001:db8:100:1::</text>
<text x='450.0' y='102.5' text-anchor='middle' font-family="sans-serif" font-size='12.5' fill="black">ISD for N9B (community I2): 2001:db8:100:3::</text>
<text x='450.0' y='120.0' text-anchor='middle' font-family="sans-serif" font-size='12.5' fill="black">-> N3 and N9B co-located on one PE</text>
<rect x="685" y="40" width="300" height="170" rx="8" fill="white" stroke="black" stroke-width="1.4"/>
<text x='835.0' y='66' text-anchor='middle' font-family="sans-serif" font-size='15' font-weight='bold' fill="black">MUP PE S2</text>
<text x='835.0' y='85' text-anchor='middle' font-family="sans-serif" font-size='12.5' fill="black">ISD for N9A (community I1)</text>
<text x='835.0' y='102.5' text-anchor='middle' font-family="sans-serif" font-size='12.5' fill="black">SID 2001:db8:200:1::</text>
<text x='835.0' y='120.0' text-anchor='middle' font-family="sans-serif" font-size='12.5' fill="black">(End.M.GTP4.E)</text>
<rect x="830" y="300" width="200" height="105" rx="8" fill="white" stroke="black" stroke-width="1.4"/>
<text x='930.0' y='326' text-anchor='middle' font-family="sans-serif" font-size='15' font-weight='bold' fill="black">HO-A UPF</text>
<text x='930.0' y='345' text-anchor='middle' font-family="sans-serif" font-size='12.5' fill="black">A1: 10.20.1.10</text>
<text x='930.0' y='362.5' text-anchor='middle' font-family="sans-serif" font-size='12.5' fill="black">TEID 0x00003101 (N9A)</text>
<line x1='215' y1='95' x2='296' y2='95' stroke="black" stroke-width='1.6'/><polygon points="296.0,95.0 286.0,99.2 286.0,90.8" fill="black"/>
<text x='255.5' y='89.0' text-anchor='middle' font-family="sans-serif" font-size='12' fill="black">Uplink GTP-U (key Xa)</text>
<line x1='600' y1='95' x2='681' y2='95' stroke="black" stroke-width='1.6'/><polygon points="681.0,95.0 671.0,99.2 671.0,90.8" fill="black"/>
<text x='640.5' y='89.0' text-anchor='middle' font-family="sans-serif" font-size='12' fill="black">SRv6 (resolved by I1)</text>
<line x1='880' y1='210' x2='905' y2='296' stroke="black" stroke-width='1.6'/><polygon points="905.0,296.0 898.1755275104954,287.56990063878277 906.2416252304204,285.2251047899674" fill="black"/>
<text x='892.5' y='247.0' text-anchor='middle' font-family="sans-serif" font-size='12' fill="black">GTP-U</text>
<line x1='830' y1='330' x2='604' y2='190' stroke="black" stroke-width='1.6'/><polygon points="604.0,190.0 614.712824837274,191.6956957291584 610.2892707612086,198.83657588052108" fill="black"/>
<text x='695' y='238' text-anchor='middle' font-family="sans-serif" font-size='12' fill="black">Downlink</text>
<text x='520' y='262' text-anchor='middle' font-family="sans-serif" font-size='12.5' fill="black">Uplink ST2: key Xa (N3 side) -> endpoint A1 (N9 side).</text>
<text x='520' y='278' text-anchor='middle' font-family="sans-serif" font-size='12.5' fill="black">Community I1 scopes resolution to N9A</text>
<text x='520' y='300' text-anchor='middle' font-family="sans-serif" font-size='12.5' fill="black">Downlink ST2: key Z1 (N9 side) -> endpoint V1 (N3 side).</text>
<text x='520' y='316' text-anchor='middle' font-family="sans-serif" font-size='12.5' fill="black">No community = default Interwork Segment (N3)</text>
<text x='520' y='440' text-anchor='middle' font-family="sans-serif" font-size='13' fill="black">Same route type, same resolution rule. Only which network the key and destination belong to differs -- and the deployment decides that.</text>
<text x='330' y='358' text-anchor='middle' font-family="sans-serif" font-size='12.5' fill="black">Sessions of HO-B are handled inside S1, because their destination is N9B (no other PE is traversed)</text>
</svg></artwork></figure>
</section>
</section>
<section anchor="colocation-and-separation"><name>Another Place Where Symmetry
Pays Off: Co-location and Separation</name>
<t>The same example contains two further ways in which symmetry is at
work.</t>
<t><strong>Co-location is possible.</strong> In a session of HO-B, the
destination is N9B, and N9B is hosted by S1. S1 also hosts N3. That is, within
a single PE, the segment of the radio side and the segment of the
interconnection side are co-located, and the packets of that session are
processed inside S1 without traversing another PE (Section 7.5 of the main
document states this). Had segments carried labels of sides, with the role of
each PE fixed by them, this co-location would have had to be treated as an
exception.</t>
<t><strong>Separation is possible.</strong> N9A and N9B are both on the
"interconnection side," yet they are treated as distinct segments by means of
the distinct communities I1 and I2, and their scopes of resolution are
separate as well. Symmetry does not mean "treat everything the same." It is a
design in which distinctions are made where they are needed for resolution
(the separation of policies), by means of communities, and are not made where
they are not needed (whether something is on the access side or not). How the
axes are chosen is determined not by a preconception about roles, but by
whether the information is needed to perform resolution correctly.</t>
</section>
<section anchor="who-knows-the-side"><name>So Who Knows Which Side Is the
Access Side?</name>
<t>If the architecture does not decide it, that does not mean the information
itself does not exist. In this roaming example, too, everyone involved knows
that N3 is the radio side and N9 is the home operator side.</t>
<t>Those who know are on the side of the deployment and of the session
information.</t>
<ul><li><t>Which network is N3 and which is N9 is decided by the 3GPP
architecture and by the configuration of that operator.</t></li><li><t>Which
network each F-TEID in the session information belongs to is known by the
system on the mobile side, and the MUP-C receives it from
there.</t></li><li><t>Based on that knowledge, the MUP-C selects the
communities (whether to attach I1, and so on) and assembles the ST
routes.</t></li></ul>
<t>What the architecture itself takes on is only the mechanism part: "resolve
an endpoint within the scope of the segment specified by name." The knowledge
of roles is left on the input side and is not brought into the mechanism side.
Because of this division, the same mechanism can be used for N3 and N9 in 5G,
for other mobile architectures, and for future configurations. The moment the
architecture fixed the sides in 3GPP terminology, that generality would be
lost.</t>
<t>In the words of <xref target="worked-example"/>, it comes down to this.
What a PE advertises is only the fact that "there is such a network beyond
me"; the interpretation "and it is on the access side" is not included in the
advertisement. The interpretation arrives later, together with the
session.</t>
</section>
<section anchor="cost-of-symmetry"><name>The Cost of Symmetry</name>
<t>As in <xref target="indirection"/>, we also write down the price.</t>
<ul><li><t><strong>The burden on the reader</strong>: Looking only at the type
of a segment does not reveal what role that segment has. To know the role, the
context of the deployment and of the session is needed. Half of the reason
<xref target="worked-example"/> was written to "go through a concrete example
first" is this.</t></li><li><t><strong>The burden on the writer</strong>: When
writing definitions, convenient turns of phrase such as "the ... on the access
side" are unavailable. A destination endpoint can only be described as
"determined by resolution," which can look vague at first reading. That this
burden invites reviewers to ask "please be clear about which side this
concerns" is the other side of the same coin.</t></li><li><t><strong>The
balance against what is gained</strong>: In exchange, one gains what the table
in <xref target="hr-roaming-both-directions"/> shows -- two routes in
different directions handled by a single rule -- and the generality of
<xref target="who-knows-the-side"/>. If only one specific deployment were
under consideration, the trade would not be worthwhile; but as a burden to be
borne by a document that calls itself an architecture, we believe this side of
the trade is the right one.</t></li></ul>
</section>
<section anchor="symmetry-takeaways"><name>What to Take Away from This
Chapter</name>
<ol><li><t>The distinction between segment types (Direct / Interwork) is a
distinction about how a segment is reached (whether conversion is required),
not a distinction about position in the topology.</t></li><li><t>In HR
roaming, one and the same ST2 route type takes an endpoint on the N9 side as
its destination in one direction and an endpoint on the N3 side in the other.
If a label of sides is baked into the definitions, one of the two falls
outside them.</t></li><li><t>The knowledge of roles resides on the side of the
deployment and the session information; the architecture takes on only the
mechanism of "resolving an endpoint within a scope narrowed by
name."</t></li><li><t>Symmetry is not uniformity. Distinctions that resolution
needs, such as the separation of policies (I1 / I2), are attached by means of
communities.</t></li></ol>
<t>In the next chapter, we turn to who carries the distribution. Why is BGP
used to distribute this mechanism, and why are the definitions of the BGP
extensions not in this document but in a BESS document?</t>
</section>
</section>
<section anchor="why-bgp"><name>Why BGP?</name>
<blockquote><t>Do not build tools; borrow them. Say only what needs to be
said.</t></blockquote>
<t>In the chapters so far, we have written as if it were self-evident that
routing information is "distributed." The MUP-C distributes ST routes, and MUP
PEs distribute DSD / ISD routes. About how they are distributed, the main
document states explicitly that it recommends BGP (Sections 1 and 3).</t>
<t>Two kinds of questions tend to attach themselves to this choice.</t>
<ol><li><t><strong>To begin with, why BGP?</strong> Is BGP not the protocol of
inter-domain routing on the Internet? Should such a heavyweight mechanism be
used to distribute information that churns as finely as sessions
do?</t></li><li><t><strong>Why are the definitions of the BGP extensions not
in this document?</strong> The architecture document talks about BGP, yet the
formats of the SAFI and the NLRI are not written in it. Is it not an ambiguity
of responsibility that they are in another document (draft-ietf-bess-mup-safi
<xref target="I-D.ietf-bess-mup-safi"/>)?</t></li></ol>
<t>Both are fair questions. This chapter answers them in turn.</t>
<section anchor="what-is-distributed"><name>First, Check What Has to Be
Distributed</name>
<t>Before asking "why BGP," let us line up "what has to be distributed" once
more, using the values from <xref target="worked-example"/>.</t>
<ul><li><t><strong>Reachability itself</strong>, such as prefixes and
endpoints (203.0.113.100/32, 198.51.100.0/24, TEID
0x00002001)</t></li><li><t>The <strong>metadata</strong> that accompanies it
(segment identifiers such as D1 and I1, session information, the SID
2001:db8:100:1:: as a data plane attribute, and so
on)</t></li><li><t><strong>Control over the scope of distribution</strong> (an
ST1 route is to be installed only into N6DN; that is, only into the instances
that import RT 65000:3)</t></li><li><t><strong>Selection when there are
multiple candidates</strong> (D1 exists on both S1 and S2; the receiver
selects one of them locally)</t></li><li><t><strong>Prevention of
mix-ups</strong> (as with N9A and N9B in <xref target="symmetry"/>, resolution
must not happen in a segment of a different policy even if the address spaces
overlap)</t></li></ul>
<t>This is not a distribution for which mere delivery suffices. It is a
distribution that carries reachability with metadata attached, narrows the
delivered scope by policy, and lets the receiver choose among candidates.</t>
<t>And this form of distribution already has a name: the distribution of
BGP/MPLS VPNs. What the MUP PEs were doing in the example of
<xref target="worked-example"/> -- holding VRFs (routing instances),
controlling import and export with Route Targets, and carrying attributes in
extended communities -- is exactly what the PEs of an L3VPN do every day. The
examples in Section 7 of the main document are also built, in their underlying
part, on "typical routing policy control using the BGP extended
community."</t>
<t>So the question is, precisely, not "shall we choose BGP as a new
distribution mechanism." It is: <strong>shall we place one more kind of MUP
route onto the VPN distribution substrate that is already running on the PEs,
or shall we build a separate distribution mechanism dedicated to
MUP?</strong></t>
</section>
<section anchor="tools-already-there"><name>The Reason to Use BGP Is That the
Tools Are Already There</name>
<t>If a dedicated mechanism were built, all of the requirements listed in
<xref target="what-is-distributed"/> would have to be designed from scratch:
how to attach metadata, how to narrow the scope, how to select among
candidates, how to handle non-delivery, and the tools and experience for
operating all of that.</t>
<t>With BGP, most of that can be covered by existing components. Mapped
against the text of the main document, it looks like this.</t>
<table anchor="tab-distribution-requirements"><name>Distribution requirements
and the existing tools of BGP</name>
<thead><tr><th>Distribution requirement (6.1)</th><th>Existing tool of
BGP</th><th>Where it appears in the main document</th></tr></thead>
<tbody>
<tr><td>Carry reachability plus metadata</td><td>The NLRI of MP-BGP and
extended communities</td><td>ST / DSD / ISD routes and the MUP Extended
Community (the semantics in the main document, the format in BESS)</td></tr>
<tr><td>Narrow the scope of distribution</td><td>Import policy by Route
Target; a route can be discarded on mismatch</td><td>The descriptions of
import and discard in Sections 5, 6.1, and 6.2</td></tr>
<tr><td>Select one among candidates</td><td>Best path
selection</td><td>Section 5.1: when several DSD routes match, the one used for
resolution is selected by best path</td></tr>
<tr><td>Do not confuse one segment with another</td><td>Scoping of resolution
by community</td><td>Section 6.2: an ST2 route is resolved only with the ISD
routes of the destination segment</td></tr>
<tr><td>Distribute at scale</td><td>The existing operational substrate of iBGP
(sessions, policies, monitoring)</td><td>Section 1: a MUP network is normally
iBGP within a single administrative domain</td></tr>
</tbody></table>
<t>There is one more point that tends to be overlooked: how well this fits the
"separation of where knowledge resides" described in
<xref target="indirection"/>. In BGP, the distributing side merely originates
routes; whether to import them, and which one to select, is decided by the
policy and the best path selection of the receiving side. The MUP-C can
originate ST routes to all PEs in the same form, and each PE accepts or
rejects them according to its own VRFs and policies. The distribution
mechanism itself is built on the premise of autonomy on the receiving
side.</t>
<t>That a MUP PE is a BGP speaker is also a small additional burden. S1 and S2
in <xref target="worked-example"/> were already speaking BGP as L3VPN PEs
before MUP was enabled on them. MUP adds kinds of routes for them to speak.
The same holds for the MUP-C: it joins the domain as a node that advertises
session information in BGP.</t>
</section>
<section anchor="inter-domain-misconception"><name>On the Misconception That
"BGP Is for Inter-domain Use"</name>
<t>The direct answer to the first question is this. The BGP in this context is
not the inter-domain routing of the Internet.</t>
<t>As Section 1 of the main document states, a MUP network is normally placed
within a single administrative domain, and DSD / ISD / ST routes are
distributed among the MUP PEs and the MUP-C over <strong>iBGP</strong>.
Distribution across domains is limited to cases such as the HR roaming
examined in <xref target="symmetry"/>.</t>
<t>Distributing VPN routes over iBGP is standard practice in carrier networks,
and as a use of BGP it is a second pillar standing alongside inter-domain use.
The association "BGP means the whole Internet" sees only half of how BGP is
used.</t>
<t>Note, however, that one point remains: the rate at which sessions churn,
and the update processing of BGP. This is not a misconception; it is a
legitimate design question. As a measure on the side of the main document,
aggregation by longest match over endpoint prefixes can be applied to ST2
routes (Section 6.2 of the main document), so session-level information does
not necessarily translate into a proportional number of routes. Even so,
whether BGP distribution suffices for an assumed scale of sessions and update
frequency is something to be estimated for each deployment, and this companion
does not guarantee that it "always suffices." As with the "cost of
indirection" written about in <xref target="indirection"/>, we state this
explicitly as a price of the choice.</t>
</section>
<section anchor="bess-encoding"><name>Why the Encoding Lives in a BESS
Document</name>
<t>The second question is about the division of labor among documents. The
division is as follows.</t>
<ul><li><t><strong>draft-ietf-dmm-mup-architecture (DMM, the main document
that this companion accompanies)</strong> decides: the types and semantics of
segments; the types and semantics of the DSD / ISD / ST1 / ST2 routes; the
procedures for distribution and resolution; and the behavior required of MUP
PEs and of the MUP-C. For the MUP Extended Community as well, its
<strong>semantics</strong> -- that it indicates which segment a route is
about, and carries metadata including the type of the segment -- is decided
here.</t></li><li><t><strong>draft-ietf-bess-mup-safi (BESS)</strong> decides:
the <strong>format</strong>. The BGP-MUP SAFI, the encoding of its NLRI, the
format of the MUP Extended Community, and the corresponding IANA allocations.
The main document makes no IANA requests at
all.</t></li><li><t><strong>IDR</strong> decides: the base protocol of BGP
itself. The extensions for MUP do not change the base protocol of BGP. Adding
a new SAFI and a community falls within the work of BESS, which handles the
encodings on the service side.</t></li></ul>
<t>The view that "this is a BGP extension, so it should be an IDR document" is
a natural one, but it is not accurate. As with each of the VPN schemes, the
encoding of what is carried over BGP is borne by the working group on the side
of the service that uses it. MUP stands in that same line.</t>
<t>This division has one practical consequence. To read the main document and
conclude that "the BGP extensions are written only as an example, and there is
no way to implement this" is to overlook the division. The absence of encoding
in the main document is neither an omission nor a vagueness; the material is
simply placed elsewhere. An implementer reads the semantics and the procedures
in the main document, and the formats in the BESS document. The two documents
refer to each other, and the BESS document lists the main document as a
normative reference.</t>
<t>Conversely, criticism of the kind "why is there no wire format" directed at
the main document is not resolved by fixing the main document. The answer is
the explanation of the division itself, and a place like this companion is the
right venue for it (the policy of not bringing justification arguments into
the body of the main document is as stated in the Introduction).</t>
<figure anchor="fig-bgp-distribution-split"><name>Distribution takes place
over iBGP within a single domain, and the division among documents is split as
"the semantics in DMM, the formats in BESS, and the base protocol left to
IDR."</name>
<artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" width="1000" height="420" viewBox="0 0 1000 420">
<title>Figure 4: iBGP distribution within one domain, and the semantics /
format split between documents</title>
<rect width="1000" height="420" fill="white"/>

<rect x='15' y='20' width='970' height='185' rx='10' fill="white" stroke="black" stroke-width='1.4'/>
<text x='500' y='46' text-anchor='middle' font-family="sans-serif" font-size='14' font-weight='bold' fill="black">A single administrative domain</text>
<rect x="60" y="70" width="240" height="105" rx="8" fill="white" stroke="black" stroke-width="1.4"/>
<text x='180.0' y='96' text-anchor='middle' font-family="sans-serif" font-size='15' font-weight='bold' fill="black">MUP-C</text>
<text x='180.0' y='108' text-anchor='middle' font-family="sans-serif" font-size='12' fill="black">Turns session information into</text>
<text x='180.0' y='124' text-anchor='middle' font-family="sans-serif" font-size='12' fill="black">ST routes and advertises them</text>
<rect x="380" y="70" width="240" height="105" rx="8" fill="white" stroke="black" stroke-width="1.4"/>
<text x='500.0' y='96' text-anchor='middle' font-family="sans-serif" font-size='15' font-weight='bold' fill="black">MUP PE S1</text>
<text x='500.0' y='108' text-anchor='middle' font-family="sans-serif" font-size='12' fill="black">Advertises DSD / ISD,</text>
<text x='500.0' y='124' text-anchor='middle' font-family="sans-serif" font-size='12' fill="black">resolves ST routes</text>
<rect x="700" y="70" width="240" height="105" rx="8" fill="white" stroke="black" stroke-width="1.4"/>
<text x='820.0' y='96' text-anchor='middle' font-family="sans-serif" font-size='15' font-weight='bold' fill="black">MUP PE S2</text>
<text x='820.0' y='108' text-anchor='middle' font-family="sans-serif" font-size='12' fill="black">Advertises DSD / ISD,</text>
<text x='820.0' y='124' text-anchor='middle' font-family="sans-serif" font-size='12' fill="black">resolves ST routes</text>
<line x1='300' y1='110' x2='376' y2='110' stroke="black" stroke-width='1.6'/><polygon points="376.0,110.0 366.0,114.2 366.0,105.8" fill="black"/>
<text x='338.0' y='104.0' text-anchor='middle' font-family="sans-serif" font-size='12' fill="black">iBGP</text>
<line x1='620' y1='110' x2='696' y2='110' stroke="black" stroke-width='1.6'/><polygon points="696.0,110.0 686.0,114.2 686.0,105.8" fill="black"/>
<text x='658.0' y='104.0' text-anchor='middle' font-family="sans-serif" font-size='12' fill="black">iBGP</text>
<line x1='300' y1='145' x2='376' y2='145' stroke="black" stroke-width='1.6'/><polygon points="376.0,145.0 366.0,149.2 366.0,140.8" fill="black"/>
<line x1='620' y1='145' x2='696' y2='145' stroke="black" stroke-width='1.6'/><polygon points="696.0,145.0 686.0,149.2 686.0,140.8" fill="black"/>
<text x='500' y='196' text-anchor='middle' font-family="sans-serif" font-size='12.5' fill="black">Route Targets scope the distribution, best path selection chooses among candidates -- the existing VPN substrate, as-is</text>
<rect x="15" y="245" width="310" height="130" rx="8" fill="white" stroke="black" stroke-width="1.4"/>
<text x='170.0' y='271' text-anchor='middle' font-family="sans-serif" font-size='15' font-weight='bold' fill="black">Semantics and behavior</text>
<text x='170.0' y='290' text-anchor='middle' font-family="sans-serif" font-size='11.5' fill="black">draft-ietf-dmm-mup-architecture (DMM)</text>
<text x='170.0' y='302' text-anchor='middle' font-family="sans-serif" font-size='11' fill="black">Segment and route types and their</text>
<text x='170.0' y='317' text-anchor='middle' font-family="sans-serif" font-size='11' fill="black">semantics, distribution and resolution</text>
<text x='170.0' y='332' text-anchor='middle' font-family="sans-serif" font-size='11' fill="black">procedures, the meaning of the MUP</text>
<text x='170.0' y='347' text-anchor='middle' font-family="sans-serif" font-size='11' fill="black">Extended Community. No IANA requests</text>
<rect x="345" y="245" width="310" height="130" rx="8" fill="white" stroke="black" stroke-width="1.4"/>
<text x='500.0' y='271' text-anchor='middle' font-family="sans-serif" font-size='15' font-weight='bold' fill="black">Format (encoding)</text>
<text x='500.0' y='290' text-anchor='middle' font-family="sans-serif" font-size='11.5' fill="black">draft-ietf-bess-mup-safi (BESS)</text>
<text x='500.0' y='318' text-anchor='middle' font-family="sans-serif" font-size='11' fill="black">BGP-MUP SAFI, NLRI encoding,</text>
<text x='500.0' y='333' text-anchor='middle' font-family="sans-serif" font-size='11' fill="black">the format of the MUP Extended</text>
<text x='500.0' y='348' text-anchor='middle' font-family="sans-serif" font-size='11' fill="black">Community, IANA allocations</text>
<rect x="675" y="245" width="310" height="130" rx="8" fill="white" stroke="black" stroke-width="1.4"/>
<text x='830.0' y='271' text-anchor='middle' font-family="sans-serif" font-size='15' font-weight='bold' fill="black">Base protocol</text>
<text x='830.0' y='290' text-anchor='middle' font-family="sans-serif" font-size='11.5' fill="black">BGP itself (IDR)</text>
<text x='830.0' y='302' text-anchor='middle' font-family="sans-serif" font-size='11' fill="black">No changes for MUP. A new SAFI</text>
<text x='830.0' y='317' text-anchor='middle' font-family="sans-serif" font-size='11' fill="black">and community are the work of</text>
<text x='830.0' y='332' text-anchor='middle' font-family="sans-serif" font-size='11' fill="black">the WG that uses them</text>
<line x1='655' y1='280' x2='560' y2='300' stroke="black" stroke-width='1.6' stroke-dasharray='5,4'/><polygon points="560.0,300.0 568.9202538294581,293.8299860925572 570.6507418702769,302.0498042864459" fill="black"/>
<text x='500' y='405' text-anchor='middle' font-family="sans-serif" font-size='12.5' fill="black">The BESS document lists the architecture as a normative reference. That the architecture has no wire format is the result of this division.</text>
</svg></artwork></figure>
</section>
<section anchor="recommended-not-only"><name>A Caveat: "Recommended," Not "the
Only Option"</name>
<t>Finally, a caveat for precision of language. The main document
<strong>recommends</strong> BGP, and describes its procedures in the terms of
BGP. The core of the architecture -- the semantics of segments, the types of
routes, and the procedure of resolution -- is defined in a form that does not
depend on a specific distribution protocol, as the structure examined through
<xref target="indirection"/> shows.</t>
<t>Nevertheless, the recommendation is BGP because, as
<xref target="tools-already-there"/> shows, the tools that fit the
requirements and the operational substrate are already in place on the PEs;
this is not a statement that forbids examining other distribution means in the
future. This caveat is not a weakness. It is the thoroughness of the division:
by keeping "semantics" and "the means of carriage" apart, a debate about the
means of carriage does not break the debate about the semantics.</t>
</section>
<section anchor="bgp-takeaways"><name>What to Take Away from This
Chapter</name>
<ol><li><t>The distribution requirements of MUP are "reachability plus
metadata, control over scope, selection on the receiving side, and prevention
of mix-ups," and that is exactly the form that the distribution substrate of
BGP/MPLS VPNs already provides.</t></li><li><t>The BGP here is normally iBGP
within a single administrative domain. The association of BGP with "an
inter-domain heavyweight" does not apply to this use.</t></li><li><t>The
division is: the semantics in the main document of DMM, and the formats (the
SAFI, the NLRI, the format of the community, and IANA) in
draft-ietf-bess-mup-safi of BESS; since the base protocol of BGP is not
changed, this is not the work of IDR.</t></li><li><t>The absence of encoding
in the main document is a result of the division; it is neither treatment as
an example nor an omission.</t></li></ol>
<t>The next chapter is a mondo, a question-and-answer exchange. We will untie,
one by one, the misunderstandings that have come up repeatedly so far.</t>
</section>
</section>
<section anchor="mondo"><name>Mondo: Frequently Asked Questions</name>
<blockquote><t>A question is not for obtaining an answer, but for untying a
knot.</t></blockquote>
<t>This chapter collects, in question form, the misunderstandings that have
recurred throughout the preceding five chapters. Each answer is kept short,
with a pointer to the chapter where the fuller explanation can be found. The
questions are numbered from Q1.</t>
<t>The form of this chapter is mondo, a question-and-answer exchange. Mondo is
not a form for adding new teaching. It is a form for setting down one question
at a time and watching a misunderstanding come undone. That is why every
answer here is short. If you want to know more, follow the pointer at the end
of each answer back to the earlier chapters.</t>
<t>---</t>
<t><strong>Q1. Is a SID the segment itself?</strong></t>
<t>No. A segment is an abstraction of a network or a service attached to a MUP
PE. A SID identifies a forwarding behavior executed by the MUP PE that hosts
that segment. That is why the same Direct Segment, D1, has two different SIDs:
one for S1 (2001:db8:100:2::) and one for S2 (2001:db8:200:2::). In short: the
segment is what lies beyond the PE; the SID is what you ask that PE to do in
order to reach it. (See <xref target="worked-example"/>,
<xref target="segments-introduce-themselves"/>.)</t>
<t><strong>Q2. Is the "segment" of a MUP segment the same thing as a Segment
Routing segment?</strong></t>
<t>No. As Section 3 of the architecture document states explicitly, a MUP
segment is not a Segment Routing-specific term. "Segment" is a word used
broadly across networking technologies; in MUP it denotes an abstraction of a
body of network that takes part in a mobile service. Confusing it with an SR
segment — an instruction or a topological element represented by a SID — leads
directly to the misunderstanding in Q1. (See <xref target="worked-example"/>,
<xref target="segments-introduce-themselves"/>, and
<xref target="symmetry"/>.)</t>
<t><strong>Q3. Does introducing MUP make the UPF disappear?</strong></t>
<t>No. In the example of <xref target="worked-example"/>, the UPF remains
beyond S3, and traffic for sessions that MUP does not handle continues to pass
through the UPF as before. What MUP does is, for a session selected for
handling, build from routing a path that can deliver its packets without
traversing the UPF. It is not a mechanism for migrating all sessions at once.
(See <xref target="worked-example"/>, Sections
<xref target="cast" format="counter"/> and
<xref target="packet-flow" format="counter"/>.)</t>
<t><strong>Q4. Do tunnels go to zero?</strong></t>
<t>No. GTP-U remains at the boundary with an Interwork Segment. In the
downlink of <xref target="worked-example"/>, S1 finally converts the packet to
GTP-U and sends it out to the gNB; in the uplink, S1 receives what the gNB has
sent, as before, over GTP-U addressed to the UPF. What changes is the carriage
inside the domain: instead of being pinned end to end by a tunnel, packets are
carried inside by SRv6 routing and converted back to the peer's protocol only
at the exit. (See <xref target="worked-example"/>,
<xref target="packet-flow"/>, and <xref target="symmetry"/>.)</t>
<t><strong>Q5. Are the BGP extensions merely given as an example?</strong></t>
<t>No. The architecture document (draft-ietf-dmm-mup-architecture) normatively
defines the route types and their semantics, the procedures, and the required
behavior. The encoding — the BGP-MUP SAFI, the NLRI, and the format of and
IANA allocations for the MUP Extended Community — is deliberately defined in a
separate document, draft-ietf-bess-mup-safi. The absence of a wire format in
the architecture document is neither treatment as an example nor an omission;
it is a division of labor between documents. (See <xref target="why-bgp"/>,
<xref target="bess-encoding"/>.)</t>
<t><strong>Q6. If this is about BGP, why is it not an IDR
document?</strong></t>
<t>The MUP extensions do not modify the base BGP protocol. Adding a new SAFI
and an extended community is encoding on the side of the service that uses
them, and that work belongs to BESS. What IDR is responsible for is the base
BGP protocol itself. (See <xref target="why-bgp"/>,
<xref target="bess-encoding"/>.)</t>
<t><strong>Q7. Does the MUP-C replace the mobile-side control plane, such as
the SMF?</strong></t>
<t>No. The job of the MUP-C is to receive session information from the mobile
service system, transform it into routing information (ST routes), and
distribute it. Session management itself remains the job of the mobile-side
system, and how the MUP-C receives session information — the interfaces and
APIs — is out of scope of the architecture document and is dealt with in
separate documents for each system. (See <xref target="worked-example"/>,
<xref target="session-to-routes"/>, and Section 6.3 of the architecture
document.)</t>
<t><strong>Q8. Is MUP a mobility management mechanism?</strong></t>
<t>No. Section 1 of the architecture document states that MUP is not a
mobility management system itself, but an architecture that enables the mobile
user plane to be integrated into the data plane of an IP network. Handover
control and session lifecycle management remain on the side of the existing
mobile architecture.</t>
<t><strong>Q9. Is SRv6 mandatory for MUP?</strong></t>
<t>Not for the architecture. The architecture document describes the SRv6 case
because of the DMM requirements and its suitability for scalable deployments.
At the same time, the principle of its Section 3 is that the auto-discovery
routes and the ST routes must be dataplane independent. This companion uses
SRv6 values in its examples because that is the representative case. (See
<xref target="indirection"/>, <xref target="collapsed-configuration"/>, and
<xref target="why-bgp"/>, <xref target="recommended-not-only"/>.)</t>
<t><strong>Q10. If an ST route cannot be resolved, are its packets
dropped?</strong></t>
<t>No. For an ST route that fails to resolve, no FIB entry is installed, and
its packets follow the normal IP routing of the routing instance. MUP takes
effect only for sessions that could be resolved; it is not a mechanism that
breaks the conventional path when it does not take effect. One qualification
is worth stating plainly. The conventional path is the path the mobile
service's session was originally established on, so in falling back, delivery
follows that session and its packets do not stop flowing. What the fallback
does not preserve is the service requirement for which the session information
was converted into routing information — the treatment MUP was there to
provide. Falling back keeps the session working; it does not keep the
requirement satisfied. (See <xref target="worked-example"/>,
<xref target="resolution"/>, and <xref target="indirection"/>,
<xref target="cost-of-indirection"/>.)</t>
<t><strong>Q11. Does MUP apply to the traffic of all UEs?</strong></t>
<t>No — only to sessions for which there is an ST route. In the examples in
the architecture document, this is realized by having the ST2 route preferred,
by longest match, over the ordinary VPN routes in instances such as N3RAN, so
that only that session is handled by MUP. The remaining traffic passes through
the conventional user plane. (See <xref target="worked-example"/>,
<xref target="packet-flow"/>, and <xref target="symmetry"/>,
<xref target="hr-roaming-both-directions"/>.)</t>
<t><strong>Q12. Where can I look to tell whether a segment is on the "access
side"?</strong></t>
<t>That is not written anywhere in the architecture — and that is how it
should be. Which network is on the access side is determined by the deployment
(for example, the 3GPP configuration) and by the session information; the
architecture gives segments no side label. If you want to know a segment's
role, look not at the specification but at the configuration of that network
and the context of the session. (See <xref target="symmetry"/>.)</t>
<t><strong>Q13. Is BGP not a protocol for use between domains on the Internet?
Is distributing session information with it not overkill?</strong></t>
<t>The BGP used in MUP is normally iBGP within a single administrative domain,
distributing routes among the MUP PEs and the MUP-C. PEs distributing VPN
routes over iBGP is existing operational practice itself; MUP adds route types
to it. But reuse should not be read as a performance guarantee: the
architecture does not promise that distribution keeps up with the rate at
which mobile sessions are created and updated. Whether an implementation does
keep up is a matter for its evaluation in each deployment — a separate
question from the architecture, and not something the architecture asserts.
(See <xref target="why-bgp"/>, Sections
<xref target="tools-already-there" format="counter"/> and
<xref target="inter-domain-misconception" format="counter"/>.)</t>
</section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>This document is an explanatory companion to the MUP
      architecture.  It specifies no protocol, no encoding, and no new
      behavior, and therefore introduces no new security
      considerations.  The security considerations of the architecture
      itself are discussed in the architecture document
      <xref target="I-D.ietf-dmm-mup-architecture"/>.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions.</t>
    </section>
  </middle>
  <back>
    <references>
      <name>Informative References</name>
      <xi:include
        href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7333.xml"/>
      <xi:include
        href="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-dmm-mup-architecture.xml"/>
      <xi:include
        href="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-bess-mup-safi.xml"/>
    </references>
    <section anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>This companion grew out of the questions raised in reviews of
      the MUP architecture document, in particular the Routing
      Directorate early review, and out of the discussions with the
      co-authors of that document.  The misunderstandings collected in
      the mondo section are, for the most part, real questions that were
      actually asked.</t>
    </section>
  </back>
</rfc>
