| rfc8743xml2.original.xml | rfc8743.xml | |||
|---|---|---|---|---|
| <?xml version='1.0' encoding='utf-8'?> | ||||
| <!DOCTYPE rfc SYSTEM "rfc2629-xhtml.ent"> | ||||
| <rfc | ||||
| xmlns:xi="http://www.w3.org/2001/XInclude" | ||||
| number="8743" | ||||
| updates="" | ||||
| obsoletes="" | ||||
| category="info" | ||||
| submissionType="independent" | ||||
| ipr="trust200902" | ||||
| sortRefs="true" | ||||
| symRefs="true" | ||||
| xml:lang="en" | ||||
| tocInclude="true" | ||||
| docName="draft-kanugovi-intarea-mams-framework-04" | ||||
| version="3"> | ||||
| <front> | ||||
| <title abbrev="MAMS">Multi-Access Management Services (MAMS)</title> | ||||
| <seriesInfo name="RFC" value="8743"/> | ||||
| <author fullname="Satish Kanugovi" initials="S." surname="Kanugovi"> | ||||
| <organization>Nokia Bell Labs</organization> | ||||
| <address> | ||||
| <email>satish.k@nokia-bell-labs.com</email> | ||||
| </address> | ||||
| </author> | ||||
| <author fullname="Florin Baboescu" initials="F." surname="Baboescu"> | ||||
| <organization>Broadcom</organization> | ||||
| <address> | ||||
| <email>florin.baboescu@broadcom.com</email> | ||||
| </address> | ||||
| </author> | ||||
| <author fullname="Jing Zhu" initials="J." surname="Zhu"> | ||||
| <organization>Intel</organization> | ||||
| <address> | ||||
| <email>jing.z.zhu@intel.com</email> | ||||
| </address> | ||||
| </author> | ||||
| <author fullname="SungHoon Seo" initials="S." surname="Seo"> | ||||
| <organization>Korea Telecom</organization> | ||||
| <address> | ||||
| <email>sh.seo@kt.com</email> | ||||
| </address> | ||||
| </author> | ||||
| <date month="March" year="2020"/> | ||||
| <keyword>Integration</keyword> | ||||
| <keyword>Aggregation</keyword> | ||||
| <keyword>Switching</keyword> | ||||
| <keyword>MPTCP</keyword> | ||||
| <keyword>MPQUIC</keyword> | ||||
| <keyword>GMA</keyword> | ||||
| <keyword>5G</keyword> | ||||
| <keyword>LTE</keyword> | ||||
| <keyword>Wi-Fi</keyword> | ||||
| <keyword>Ethernet</keyword> | ||||
| <keyword>Edge</keyword> | ||||
| <keyword>Proxy</keyword> | ||||
| <abstract> | ||||
| <t>In multiconnectivity scenarios, the clients can | ||||
| simultaneously connect to multiple networks based on different access | ||||
| technologies and network architectures like Wi-Fi, LTE, and DSL. Both the | ||||
| quality of experience of the users and the overall network | ||||
| utilization and efficiency may be improved through the smart | ||||
| selection and combination of access and core network paths that can | ||||
| dynamically adapt to changing network conditions.</t> | ||||
| <t>This document presents a unified problem statement and introduces a | ||||
| solution for managing multiconnectivity. The solution has been | ||||
| developed by the authors based on their experiences in multiple | ||||
| standards bodies, including the IETF and the 3GPP. However, this document | ||||
| is not an Internet Standards Track specification, and it does not represent | ||||
| the consensus opinion of the IETF.</t> | ||||
| <t>This document describes requirements, solution principles, and the | ||||
| architecture of the Multi-Access Management Services (MAMS) framework. | ||||
| The MAMS framework aims to provide best performance while being easy to imple | ||||
| ment | ||||
| in a wide variety of multiconnectivity deployments. It specifies the protoco | ||||
| l for | ||||
| (1) flexibly selecting the best combination of access and core network | ||||
| paths for the uplink and downlink, and (2) determining the user-plane | ||||
| treatment (e.g., tunneling, encryption) and traffic distribution over | ||||
| the selected links, to ensure network efficiency and the best possible | ||||
| application performance.</t> | ||||
| </abstract> | ||||
| </front> | ||||
| <middle> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>Introduction</name> | ||||
| <t>Multi-Access Management Services (MAMS) is a programmable framework tha | ||||
| t | ||||
| provides mechanisms for the flexible selection of network paths in a | ||||
| multi-access (MX) communication environment, based on the application's nee | ||||
| ds. | ||||
| The MAMS framework leverages network intelligence and policies to dynamical | ||||
| ly adapt traffic | ||||
| distribution across selected paths and user-plane treatments (e.g., encrypt | ||||
| ion needed | ||||
| for transport over Wi-Fi, or tunneling needed to overcome a NAT between cli | ||||
| ent and multipath | ||||
| proxy) to changing network/link conditions. The network path selection and | ||||
| configuration | ||||
| messages are carried as user-plane data between the functional elements | ||||
| in the network and the client, and thus without any impact on | ||||
| the control-plane signaling schemes of the underlying access networks. | ||||
| For example, in a multi-access network with LTE and Wi-Fi | ||||
| technologies, existing LTE and Wi-Fi signaling procedures will | ||||
| be used to set up the LTE and Wi-Fi connections, respectively, and | ||||
| MAMS-specific control-plane messages are carried as LTE or Wi-Fi | ||||
| user-plane data. The MAMS framework defined in this document provides the | ||||
| capability to make a smart selection of a flexible combination of access pa | ||||
| ths and | ||||
| core network paths, as well as to choose the user-plane treatment when the | ||||
| traffic | ||||
| is distributed across the selected paths. Thus, it is a broad programmable | ||||
| framework that provides functions beyond the simple sharing of network | ||||
| policies such as those provided by the Access Network Discovery and Selecti | ||||
| on | ||||
| Function (ANDSF) <xref target="ANDSF" format="default"/>, which offers poli | ||||
| cies and rules for | ||||
| assisting 3GPP clients to discover and select available access networks. | ||||
| Further, it allows the choice and configuration of user-plane treatment | ||||
| for the traffic over the paths, depending on the application's needs.</t> | ||||
| <t>The MAMS framework mechanisms are not dependent on any specific access | ||||
| network types or user-plane protocols (e.g., TCP, UDP, Generic Routing | ||||
| Encapsulation (GRE) <xref target="RFC2784" format="default"/> <xref target= | ||||
| "RFC2890" format="default"/>, | ||||
| Multipath TCP (MPTCP) <xref target="RFC6824" format="default"/>). The MAMS | ||||
| framework coexists and complements | ||||
| the existing protocols by providing a way to negotiate and configure those | ||||
| protocols to match their use to a given multi-access scenario based on clie | ||||
| nt | ||||
| and network capabilities, and the specific needs of each access network pat | ||||
| h. | ||||
| Further, the MAMS framework allows load balancing of the traffic flows acro | ||||
| ss the selected | ||||
| access network paths, and the exchange of network state information to be u | ||||
| sed for | ||||
| network intelligence to optimize the performance of such protocols.</t> | ||||
| <t>This document presents the requirements, solution principles, | ||||
| functional architecture, and protocols for realizing the MAMS | ||||
| framework. An important goal for the MAMS framework is to ensure that it r | ||||
| equires | ||||
| either minimum dependency or (better) no dependency on the actual access | ||||
| technologies of the participating links, beyond the fact that MAMS | ||||
| functional elements form an IP overlay across the multiple paths. | ||||
| This allows the scheme to be "future proof" by allowing independent | ||||
| technology evolution of the existing access and core networks as well | ||||
| as seamless integration of new access technologies.</t> | ||||
| <t>The solution described in this document has been developed by the | ||||
| authors, based on their experiences in multiple standards bodies, | ||||
| including the IETF and the 3GPP. However, this document is not an | ||||
| Internet Standards Track specification, and it does not represent | ||||
| the consensus opinion of the IETF.</t> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>Terminology</name> | ||||
| <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14 | ||||
| >REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", | ||||
| "<bcp14>SHALL NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bc | ||||
| p14>", "<bcp14>RECOMMENDED</bcp14>", | ||||
| "<bcp14>NOT RECOMMENDED</bcp14>", "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONA | ||||
| L</bcp14>" in this document | ||||
| are to be interpreted as described in BCP 14 | ||||
| <xref target="RFC2119" format="default"/> <xref target="RFC8174" format="de | ||||
| fault"/> when, | ||||
| and only when, they appear in all capitals, as shown here.</t> | ||||
| <dl newline="false" spacing="normal"> | ||||
| <dt>Client:</dt> | ||||
| <dd>An end-user device that supports connections with | ||||
| multiple access nodes, possibly over different access technologies. Also cal | ||||
| led | ||||
| a user device or user equipment (UE).</dd> | ||||
| <dt>Multiconnectivity Client:</dt> | ||||
| <dd>A client with multiple network connections.</dd> | ||||
| <dt>Access Network:</dt> | ||||
| <dd>The segment in the network that delivers user | ||||
| data packets to the client via an access link such as a Wi-Fi airlink, | ||||
| an LTE airlink, or DSL.</dd> | ||||
| <dt>Core:</dt> | ||||
| <dd>The functional element that anchors the client IP | ||||
| address used for communication with applications via the network.</dd> | ||||
| <dt>Network Connection Manager (NCM):</dt> | ||||
| <dd>A functional entity in the | ||||
| network that handles MAMS control messages from the client and configures | ||||
| the distribution of data packets over the available access and core | ||||
| network paths, and manages the user-plane treatment (e.g., tunneling, | ||||
| encryption) of the traffic flows.</dd> | ||||
| <dt>Client Connection Manager (CCM):</dt> | ||||
| <dd>A functional entity in the | ||||
| client that exchanges MAMS signaling messages with the NCM, and which config | ||||
| ures | ||||
| the network paths at the client for the transport of user data.</dd> | ||||
| <dt>Network Multi-Access Data Proxy (N-MADP):</dt> | ||||
| <dd>A functional entity | ||||
| in the network that handles the forwarding of user data traffic across | ||||
| multiple network paths. The N-MADP is responsible for MAMS-related | ||||
| user-plane functionalities in the network.</dd> | ||||
| <dt>Client Multi-Access Data Proxy (C-MADP):</dt> | ||||
| <dd>A functional entity | ||||
| in the client that handles the forwarding of user data traffic across | ||||
| multiple network paths. The C-MADP is responsible for MAMS-related | ||||
| user-plane functionalities in the client.</dd> | ||||
| <dt>Anchor Connection:</dt> | ||||
| <dd>Refers to the network path from the N-MADP | ||||
| to the user-plane gateway (IP anchor) that has assigned an IP address | ||||
| to the client.</dd> | ||||
| <dt>Delivery Connection:</dt> | ||||
| <dd>Refers to the network path from the | ||||
| N-MADP to the client.</dd> | ||||
| <dt>Uplink (also referred to as "UL" in this document):</dt> | ||||
| <dd>Refers to the direction of a connection | ||||
| from a client toward the network.</dd> | ||||
| <dt>Downlink (also referred to as "DL" in this document):</dt> | ||||
| <dd>Refers to the direction of a connection | ||||
| from the network toward a client.</dd> | ||||
| </dl> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>Problem Statement</name> | ||||
| <t>Typically, a client has access to multiple communication | ||||
| networks based on different technologies for accessing application services | ||||
| , | ||||
| for example, LTE, Wi-Fi, DSL, or MulteFire. Different technologies | ||||
| exhibit benefits and limitations in different scenarios. For example, | ||||
| Wi-Fi provides high throughput for end users when their Wi-Fi | ||||
| coverage is good, but the throughput degrades significantly as a given user | ||||
| moves closer to the edge of its Wi-Fi coverage area (typically in | ||||
| the range of a few tens of meters) or if the user population is large (due | ||||
| to a contention-based Wi-Fi access scheme). In LTE networks, the | ||||
| capacity is often constrained by the limited availability of licensed | ||||
| spectrum. However, the quality of the service is predictable even in | ||||
| multi-user scenarios, due to controlled scheduling and | ||||
| licensed-spectrum usage.</t> | ||||
| <t>Additionally, the use of a particular access network path is often | ||||
| coupled with the use of its associated core network and the services that | ||||
| are offered by that network. For example, in an enterprise that has deploy | ||||
| ed both | ||||
| Wi-Fi and LTE networks, the enterprise services, such as printers and | ||||
| corporate audio/video conferencing, are accessible only via Wi-Fi | ||||
| access connected to the enterprise-hosted (Wi-Fi) core, whereas the | ||||
| LTE access can be used to get operator services, including access to the | ||||
| public Internet.</t> | ||||
| <t>Thus, application performance in different scenarios becomes | ||||
| dependent on the choice of access networks (e.g., Wi-Fi, LTE) and | ||||
| the network and transport protocols used (e.g., VPN, MPTCP, GRE). | ||||
| Therefore, to achieve the best possible application performance in a wide | ||||
| range of scenarios, a framework is needed that allows the selection and | ||||
| flexible combination of access and core network paths as well as the | ||||
| protocols used for uplink and downlink data delivery.</t> | ||||
| <t>For example, in uncongested scenarios and when the user's Wi-Fi | ||||
| coverage is good, to ensure best performance for enterprise applications | ||||
| at all times, it would be beneficial to use Wi-Fi access for both | ||||
| the uplink and downlink for connecting to enterprise applications. | ||||
| However, in congested scenarios or when the user is getting close to | ||||
| the edge of its Wi-Fi coverage area, the use of Wi-Fi in the | ||||
| uplink by multiple users can lead to degraded capacity and increased delays | ||||
| due to contention. In this case, it would be beneficial to at least use | ||||
| the LTE access for increased uplink coverage, while Wi-Fi may still | ||||
| continue to be used for the downlink.</t> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>Requirements</name> | ||||
| <t>The requirements set out in this section define the behavior of the MAM | ||||
| S | ||||
| mechanism and the related functional elements.</t> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>Access-Technology-Agnostic Interworking</name> | ||||
| <t>The access nodes <bcp14>MAY</bcp14> use different technology types (L | ||||
| TE, Wi-Fi, etc.). | ||||
| The framework, however, <bcp14>MUST</bcp14> be agnostic about the type of | ||||
| underlying | ||||
| technology used by the access network.</t> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>Support for Common Transport Deployments</name> | ||||
| <t>The network path selection and user data distribution <bcp14>MUST</bc | ||||
| p14> work | ||||
| transparently across various transport deployments that include | ||||
| end-to-end IPsec, VPNs, and middleboxes like NATs and proxies.</t> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>Independent Access Path Selection for Uplink and Downlink</name> | ||||
| <t>A client <bcp14>SHOULD</bcp14> be able to transmit on the uplink and | ||||
| receive on the | ||||
| downlink, using one or more access networks. The selections of the acces | ||||
| s | ||||
| paths for the uplink and downlink <bcp14>SHOULD</bcp14> happen independen | ||||
| tly.</t> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>Core Selection Independent of Uplink and Downlink Access</name> | ||||
| <t>A client <bcp14>SHOULD</bcp14> flexibly select the core independently | ||||
| of the access paths | ||||
| used to reach the core, depending on the application's needs, local polic | ||||
| ies, | ||||
| and the result of MAMS control-plane negotiation.</t> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>Adaptive Access Network Path Selection</name> | ||||
| <t>The framework <bcp14>MUST</bcp14> have the ability to determine the | ||||
| quality of each of the network paths, e.g., access link delay and | ||||
| capacity. This information regarding network path quality needs to be | ||||
| considered in the logic for the selection of the combination of network | ||||
| paths to be used for transporting user data. The path selection algorith | ||||
| m | ||||
| can use the information regarding network path quality, in addition to | ||||
| other considerations like network policies, for optimizing network usage | ||||
| and enhancing the Quality of Experience (QoE) delivered to the user.</t> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>Multipath Support and Aggregation of Access Link Capacities</name> | ||||
| <t>The framework <bcp14>MUST</bcp14> support the distribution and aggreg | ||||
| ation of user data | ||||
| across multiple network paths at the IP layer. The client <bcp14>SHOULD< | ||||
| /bcp14> be able to | ||||
| leverage the combined capacity of the multiple network connections by | ||||
| enabling the simultaneous transport of user data over multiple network | ||||
| paths. If required, packet reordering needs to be done at the receiver. | ||||
| The | ||||
| framework <bcp14>MUST</bcp14> allow the flexibility to choose the flow-st | ||||
| eering and | ||||
| aggregation protocols based on capabilities supported by the client and t | ||||
| he | ||||
| network user-plane entities. The multiconnection aggregation solution | ||||
| <bcp14>MUST</bcp14> support existing transport and network-layer protocol | ||||
| s like TCP, | ||||
| UDP, and GRE. The framework <bcp14>MUST</bcp14> allow the use and config | ||||
| uration of existing | ||||
| aggregation protocols such as MPTCP and SCTP <xref target="RFC4960" forma | ||||
| t="default"/>.</t> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>Scalable Mechanism Based on User-Plane Interworking</name> | ||||
| <t>The framework <bcp14>MUST</bcp14> leverage commonly available transpo | ||||
| rt, routing, and | ||||
| tunneling capabilities to provide user-plane interworking | ||||
| functionality. The addition of functional elements in the user-plane | ||||
| path between the client and the network <bcp14>MUST NOT</bcp14> impact th | ||||
| e | ||||
| access-technology-specific procedures. | ||||
| This makes the solution easy to | ||||
| deploy and scale when different networks are added and removed.</t> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>Separate Control-Plane and User-Plane Functions</name> | ||||
| <t>The client <bcp14>MUST</bcp14> use the control-plane protocol to nego | ||||
| tiate the | ||||
| following with the network: (1) the choice of access and core | ||||
| network paths for both the uplink and downlink, and (2) the | ||||
| user-plane protocol treatment. The control plane | ||||
| <bcp14>MUST</bcp14> configure the actual user-plane data distribution fun | ||||
| ction per this | ||||
| negotiation. A common control protocol <bcp14>SHOULD</bcp14> allow the c | ||||
| reation of multiple | ||||
| user-plane function instances with potentially different user-plane | ||||
| (e.g., tunneling) protocol types. This enables maintaining a clear separ | ||||
| ation | ||||
| between the control-plane and user-plane functions, allowing the | ||||
| framework to be scalable and extensible, e.g., using architectures and | ||||
| implementations based on Software-Defined Networking (SDN).</t> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>Lossless Path (Connection) Switching</name> | ||||
| <t>When switching data traffic from one path (connection) to another, pa | ||||
| ckets | ||||
| may be lost or delivered out of order; this will have negative impact on | ||||
| the | ||||
| performance of higher-layer protocols, e.g., TCP. The framework <bcp14>S | ||||
| HOULD</bcp14> | ||||
| provide the necessary mechanisms to ensure in-order delivery at the | ||||
| receiver, e.g., during path switching. The framework <bcp14>MUST NOT</bc | ||||
| p14> cause any packet | ||||
| loss beyond losses that access network mobility functions may cause.</t> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>Concatenation and Fragmentation for Adaptation to MTU Differences< | ||||
| /name> | ||||
| <t>Different network paths may have different security and middlebox | ||||
| (e.g., NAT) configurations. These configurations will lead to the use of | ||||
| different tunneling protocols for the transport of data between the netwo | ||||
| rk | ||||
| user-plane function and the client. As a result, different effective | ||||
| payload sizes per network path are possible (e.g., due to variable encaps | ||||
| ulation | ||||
| header overheads). Hence, the MAMS framework <bcp14>SHOULD</bcp14> suppo | ||||
| rt the | ||||
| fragmentation of a single payload across MTU-sized IP packets | ||||
| to avoid IP packet fragmentation when aggregating packets from different | ||||
| paths. Further, the concatenation of multiple IP packets into a single I | ||||
| P | ||||
| packet to improve efficiency in packing the MTU size <bcp14>SHOULD</bcp14 | ||||
| > also be supported.</t> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>Configuring Network Middleboxes Based on Negotiated Protocols</nam | ||||
| e> | ||||
| <t>The framework <bcp14>SHOULD</bcp14> enable the identification | ||||
| of optimal settings, like radio link dormancy timers, binding exp | ||||
| iry times, | ||||
| and supported MTUs, based on parameters negotiated between the cl | ||||
| ient | ||||
| and the network, that may be used to configure middleboxes for ef | ||||
| ficient | ||||
| operation of user-plane protocols, e.g., configuring a NAT with a | ||||
| longer | ||||
| binding expiry time when UDP versus TCP is used.</t> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>Policy-Based Optimal Path Selection</name> | ||||
| <t>The framework <bcp14>MUST</bcp14> support both the implementation of | ||||
| policies at | ||||
| the client and guidance from the network for network path | ||||
| selection that will address different application requirements.</t> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>Access-Technology-Agnostic Control Signaling</name> | ||||
| <t>The control-plane signaling <bcp14>MUST NOT</bcp14> be dependent on t | ||||
| he underlying access | ||||
| technology procedures, i.e., it is carried transparently, like applicatio | ||||
| n | ||||
| data, on the user plane. The MAMS framework <bcp14>SHOULD</bcp14> suppor | ||||
| t the delivery | ||||
| of control-plane signaling over existing Internet protocols, e.g., TCP or | ||||
| UDP.</t> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>Service Discovery and Reachability</name> | ||||
| <t>There can be multiple instances of the control-plane and user-plane | ||||
| functional elements of the framework, either collocated or hosted on sepa | ||||
| rate | ||||
| network elements and reachable via any of the available user-plane | ||||
| paths. The client <bcp14>MUST</bcp14> have the flexibility to choose the | ||||
| appropriate | ||||
| control-plane instance in the network and use the control-plane | ||||
| signaling to choose the desired user-plane functional element instances. | ||||
| The client's choice can be based on considerations such as, but not limit | ||||
| ed to, | ||||
| the quality of the link through which the network function is reachable, | ||||
| client | ||||
| preferences, preconfiguration, etc.</t> | ||||
| </section> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>Solution Principles</name> | ||||
| <t>This document describes the Multi-Access Management Services (MAMS) | ||||
| framework for dynamic selection of a flexible combination of access | ||||
| and core network paths for the uplink and downlink, as | ||||
| well as the user-plane treatment for the traffic spread across the | ||||
| selected links. The user-plane paths, and access and core network connecti | ||||
| ons, can be selected independently for the uplink and downlink. | ||||
| For example, the network paths chosen for the uplink do not apply any const | ||||
| raints on the choice of paths for the downlink. The uplink and downlink network | ||||
| paths | ||||
| can be chosen based on the application needs and on the characteristics and | ||||
| available resources on different network connections. For example, | ||||
| a Wi-Fi connection can be chosen for the downlink for transporting high-ban | ||||
| dwidth data | ||||
| from the network to the client, whereas an LTE connection can be chosen to | ||||
| carry the | ||||
| low-bandwidth feedback to the application server.</t> | ||||
| <t>Also, depending on the characteristics of the access network link, diff | ||||
| erent | ||||
| processing would be needed on the user-plane packets on different network p | ||||
| aths. | ||||
| Encryption would be needed on a Wi-Fi link to secure user-plane packets, bu | ||||
| t | ||||
| not on an LTE link. Tunneling would be needed to ensure client and network | ||||
| end-point | ||||
| reachability over NATs. Such differentiated user-plane treatment can be | ||||
| accomplished by configuration of user plane-protocols (e.g., IPsec) specifi | ||||
| c to each link.</t> | ||||
| <t>The MAMS framework consists of clearly separated control- and | ||||
| user-plane functions in the network and the client. The | ||||
| control-plane protocol allows the configuration of the user-plane | ||||
| protocols and desired network paths for the transport of application | ||||
| traffic. The control-plane messages are carried as user-plane | ||||
| data over any of the available network paths between the peer | ||||
| control-plane functional elements in the client and the | ||||
| network. Multiple user-plane paths are dynamically distributed across | ||||
| multiple access networks and aggregated in the network (by the N-MADP). | ||||
| The access network's diversity is not exposed to the application servers, | ||||
| but is kept within the scope of the elements defined in this | ||||
| framework. This reduces the burden placed on application servers that | ||||
| would otherwise have to react to access link changes caused by mobility | ||||
| events or changing link characteristics.</t> | ||||
| <t>The selection of paths and user-plane treatment of the traffic is based | ||||
| on (1) the negotiation of client and network capabilities, and (2) link pro | ||||
| bing | ||||
| (i.e., checking the quality of links between the user-plane | ||||
| functional elements at the client and the network). | ||||
| This framework enables leveraging network | ||||
| intelligence to set up and dynamically configure the best | ||||
| access network path combination based on client and network | ||||
| capabilities, an application's needs, and knowledge of the network | ||||
| state.</t> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>MAMS Reference Architecture</name> | ||||
| <t><xref target="figure1" format="default"/> illustrates the MAMS architec | ||||
| ture for the scenario | ||||
| where a client is served by multiple (n) networks. It also introduces the | ||||
| following functional elements: | ||||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li>The NCM and the CCM in the control plane.</li> | ||||
| <li>The N-MADP and the C-MADP in the user plane.</li> | ||||
| </ul> | ||||
| <figure anchor="figure1"> | ||||
| <name>MAMS Reference Architecture</name> | ||||
| <artwork align="center" name="" type="" alt=""><![CDATA[ | ||||
| +--------------------------------------------------------+ | ||||
| | +----------------+ +----------------+ | | ||||
| | | | | | | | ||||
| | |Core (IP anchor)| ..... |Core (IP anchor)| | | ||||
| | |Network 1 | |Network "n" | | | ||||
| | | | | | | | ||||
| | +----------------+ +----------------+ | | ||||
| | \ / | | ||||
| | Anchor \ ...... Anchor | | ||||
| | Connection 1 Connection "n" | | ||||
| | \ / | | ||||
| | +---------------+\+---+/+------+ | | ||||
| | | +-----+ +----------+ | | | ||||
| | +--------------| NCM | | N-MADP | | | | ||||
| | | | +-----+ +----------+ | | | ||||
| | | +------------------------------+ | | ||||
| | | / \ | | ||||
| | |Control-Plane Delivery ...... Delivery | | ||||
| | |Path (over any Connection 1 Connection "n" | | ||||
| | |access user plane) / \ | | ||||
| | | / \ | | ||||
| | | +------------------+ +---------------+ | | ||||
| | | | Access | ...... | Access | | | ||||
| | | | Network 1 | | Network "n" | | | ||||
| | | +------------------+ +---------------+ | | ||||
| +-----------------------------\----------------/---------+ | ||||
| | \ / | ||||
| | +----------\------------/-+ | ||||
| | | +---+ \ +------+ / | | ||||
| +--------------------+CCM| \|C-MADP|/ | | ||||
| | +---+ +------+ | | ||||
| | Client | | ||||
| +-------------------------+ | ||||
| ]]></artwork> | ||||
| </figure> | ||||
| <t>The NCM is the functional element in the network that handles the MAMS | ||||
| control-plane procedures. It configures the network (N-MADP) and client | ||||
| (C-MADP) user-plane functions, such as negotiating with the client for the | ||||
| use of | ||||
| available access network paths, protocols, and rules for processing the | ||||
| user-plane traffic, as well as link-monitoring procedures. | ||||
| The | ||||
| control-plane messages between the NCM and the CCM are transported as an | ||||
| overlay on the user plane, without any impact on the underlying access netw | ||||
| orks.</t> | ||||
| <t>The CCM is the peer functional element in the client for handling MAMS | ||||
| control-plane procedures. It manages multiple network connections at the | ||||
| client. The CCM exchanges MAMS signaling messages with the NCM to support | ||||
| such functions as the configuration of the UL and DL user network | ||||
| path for transporting user data packets and the adaptive selection | ||||
| of network path by the NCM by reporting on the results of link probing. | ||||
| In the downlink, for user data received by | ||||
| the client, it configures the C-MADP such that application data | ||||
| packets can be received over any access link so that the packets | ||||
| will reach the appropriate application on the client. | ||||
| In the uplink, for the data transmitted by the client, it | ||||
| configures the C-MADP to determine the best access links to be used for upl | ||||
| ink | ||||
| data based on a combination of local and network policies delivered by | ||||
| the NCM.</t> | ||||
| <t>The N-MADP is the functional element in the network that handles the | ||||
| forwarding of user data traffic across multiple network paths, as well as | ||||
| other user-plane functionalities (e.g., encapsulation, fragmentation, | ||||
| concatenation, reordering, retransmission). The N-MADP is the distribution | ||||
| node | ||||
| that routes (1) the uplink user-plane traffic to the appropriate | ||||
| anchor connection toward the core network, and (2) the downlink user | ||||
| traffic to the client over the appropriate delivery connections. In the | ||||
| downlink, the NCM configures the use of delivery connections and | ||||
| user-plane protocols at the N-MADP for transporting user data | ||||
| traffic. The N-MADP <bcp14>SHOULD</bcp14> implement ECMP support for the d | ||||
| ownlink | ||||
| traffic. Alternatively, it <bcp14>MAY</bcp14> be connected to a router wit | ||||
| h ECMP | ||||
| functionality. The load-balancing algorithm at the N-MADP is | ||||
| configured by the NCM, based on static and/or dynamic network policies like | ||||
| assigning access and core paths for a specific user data traffic type, | ||||
| user-volume-based percentage distribution, and link availability and | ||||
| feedback information from the exchange of MAMS signaling messages with the | ||||
| CCM at the | ||||
| client. The N-MADP can be configured with appropriate user-plane | ||||
| protocols to support both per-flow and per-packet traffic | ||||
| distribution across the delivery connections. In the uplink, the N-MADP | ||||
| selects the appropriate anchor connection over which to forward the user da | ||||
| ta | ||||
| traffic received from the client (via the delivery connections). The | ||||
| forwarding rules in the uplink at the N-MADP are configured by the NCM | ||||
| based on application requirements, e.g., enterprise-hosted application flow | ||||
| s | ||||
| via a Wi-Fi anchor or mobile-operator-hosted applications via the | ||||
| cellular core.</t> | ||||
| <t>The C-MADP is the functional element in the client that handles the MAM | ||||
| S | ||||
| user-plane data procedures. The C-MADP is configured by the CCM, based on | ||||
| the signaling exchange with the NCM and local policies at the client. | ||||
| The CCM configures the selection of delivery connections and the | ||||
| user-plane protocols to be used for uplink user data traffic based on the | ||||
| signaling messages exchanged with the NCM. The C-MADP entity handles the f | ||||
| orwarding of | ||||
| user-plane data across multiple delivery connections and associated | ||||
| user-plane functions (e.g., encapsulation, fragmentation, concatenation, | ||||
| reordering, retransmissions).</t> | ||||
| <t>The NCM and N-MADP can be either collocated or instantiated on differen | ||||
| t | ||||
| network nodes. The NCM can set up multiple N-MADP instances in the network | ||||
| . | ||||
| The NCM controls the selection of the N-MADP instance by the client and | ||||
| the rules for the distribution of user traffic across the N-MADP | ||||
| instances. This is beneficial in multiple deployment scenarios, like the | ||||
| following examples: | ||||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li>Different N-MADP instances to handle different sets of clients for l | ||||
| oad | ||||
| balancing across clients.</li> | ||||
| <li>Network topologies where the N-MADP is hosted at the | ||||
| user-plane node at the access edge or in the core network, while the | ||||
| NCM is hosted at the access edge node.</li> | ||||
| <li>Access network technology architecture with an N-MADP instance at | ||||
| the core network node to manage traffic distribution | ||||
| across LTE and DSL networks, and an N-MADP instance at an access | ||||
| network node to manage traffic distribution across LTE and Wi-Fi | ||||
| networks.</li> | ||||
| <li>A single client can be configured to use multiple N-MADP instances. | ||||
| This | ||||
| is beneficial in addressing different application requirements. For | ||||
| example, separate N-MADP instances to handle traffic that is based on | ||||
| TCP | ||||
| and UDP transport.</li> | ||||
| </ul> | ||||
| <t> | ||||
| Thus, the MAMS architecture flexibly addresses multiple network deployments | ||||
| .</t> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>MAMS Protocol Architecture</name> | ||||
| <t>This section describes the protocol structure for the MAMS user-plane a | ||||
| nd | ||||
| control-plane functional elements.</t> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>MAMS Control-Plane Protocol</name> | ||||
| <t><xref target="figure2" format="default"/> shows the default MAMS cont | ||||
| rol-plane protocol | ||||
| stack. WebSocket <xref target="RFC6455" format="default"/> is used for | ||||
| transporting management | ||||
| and control messages between the NCM and the CCM.</t> | ||||
| <figure anchor="figure2"> | ||||
| <name>TCP-Based MAMS Control-Plane Protocol Stack</name> | ||||
| <artwork align="center" name="" type="" alt=""><![CDATA[ | ||||
| +------------------------------------------+ | ||||
| | | | ||||
| | Multi-Access (MX) Control Message | | ||||
| | | | ||||
| +------------------------------------------+ | ||||
| | | | ||||
| | WebSocket | | ||||
| | | | ||||
| +------------------------------------------+ | ||||
| | | | ||||
| | TCP/TLS | | ||||
| | | | ||||
| +------------------------------------------+ | ||||
| ]]></artwork> | ||||
| </figure> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>MAMS User-Plane Protocol</name> | ||||
| <t><xref target="figure3" format="default"/> shows the MAMS user-plane p | ||||
| rotocol stack for transporting the user | ||||
| payload, e.g., an IP Protocol Data Unit (PDU).</t> | ||||
| <figure anchor="figure3"> | ||||
| <name>MAMS User-Plane Protocol Stack</name> | ||||
| <artwork align="center" name="" type="" alt=""><![CDATA[ | ||||
| +-----------------------------------------------------+ | ||||
| | User Payload, e.g., IP Protocol Data Unit (PDU) | | ||||
| +-----------------------------------------------------+ | ||||
| +-----------------------------------------------------------+ | ||||
| | +-----------------------------------------------------+ | | ||||
| | | Multi-Access (MX) Convergence Layer | | | ||||
| | +-----------------------------------------------------+ | | ||||
| | +-----------------------------------------------------+ | | ||||
| | | MX Adaptation | MX Adaptation | MX Adaptation | | | ||||
| | | Layer | Layer | Layer | | | ||||
| | | (optional) | (optional) | (optional) | | | ||||
| | +-----------------+-----------------+-----------------+ | | ||||
| | | Access #1 IP | Access #2 IP | Access #3 IP | | | ||||
| | +-----------------------------------------------------+ | | ||||
| | MAMS User-Plane Protocol Stack | | ||||
| +-----------------------------------------------------------+ | ||||
| ]]></artwork> | ||||
| </figure> | ||||
| <t>The MAMS user-plane protocol consists of the following two layers: | ||||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li>Multi-Access (MX) Convergence Layer: The MAMS framework configures | ||||
| the Convergence Layer to perform multi-access-specific tasks in the | ||||
| user plane. This layer performs such functions as access (path) | ||||
| selection, multi-link (path) aggregation, splitting/reordering, | ||||
| lossless switching, fragmentation, or concatenation. | ||||
| The MX Convergence Layer can be implemented by using existing | ||||
| user-plane protocols like MPTCP <xref target="RFC6824" format="defaul | ||||
| t"/> or | ||||
| Multipath QUIC (MPQUIC) <xref target="I-D.deconinck-quic-multipath" f | ||||
| ormat="default"/>, or by adapting | ||||
| encapsulating header/trailer schemes such as GRE <xref target="RFC278 | ||||
| 4" format="default"/> | ||||
| <xref target="RFC2890" format="default"/> or Generic Multi-Access (G | ||||
| MA) <xref target="I-D.zhu-intarea-gma" format="default"/>.</li> | ||||
| <li>Multi-Access (MX) Adaptation Layer: The MAMS framework configures | ||||
| the | ||||
| Adaptation Layer to address transport-network-related aspects such as | ||||
| reachability and security in the user plane. This layer performs fun | ||||
| ctions | ||||
| to handle tunneling, network-layer security, and NAT. The MX Adaptat | ||||
| ion Layer can be | ||||
| implemented using IPsec, DTLS <xref target="RFC6347" format="default" | ||||
| />, or a Client NAT (Source NAT at the client with | ||||
| inverse mapping at the N-MADP <xref target="I-D.zhu-intarea-mams-user | ||||
| -protocol" format="default"/>). The MX | ||||
| Adaptation Layer is <bcp14>OPTIONAL</bcp14> and can be independently | ||||
| configured for each of | ||||
| the access links. For example, in a deployment with LTE (assumed sec | ||||
| ure) and | ||||
| Wi-Fi (assumed to not be secure), the MX Adaptation Layer can be omit | ||||
| ted for the | ||||
| LTE link, but is configured with IPsec to secure the Wi-Fi link. Fur | ||||
| ther | ||||
| details on the MAMS user plane are provided in <xref target="I-D.zhu- | ||||
| intarea-mams-user-protocol" format="default"/>.</li> | ||||
| </ul> | ||||
| </section> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>MAMS Control-Plane Procedures</name> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>Overview</name> | ||||
| <t>The CCM and NCM exchange signaling messages to configure the user-pla | ||||
| ne | ||||
| functions via the C-MADP and the N-MADP at the client and the network, | ||||
| respectively. The means for the CCM to obtain the NCM credentials (Fully | ||||
| Qualified Domain Name (FQDN) or IP address) for sending the initial disco | ||||
| very | ||||
| messages are out of scope for this document. As an example, the client c | ||||
| an | ||||
| obtain the NCM credentials by using such methods as provisioning or DNS | ||||
| queries. Once the discovery process is successful, the (initial) NCM can | ||||
| update and assign additional NCM addresses, e.g., based on Mobile Country | ||||
| Code | ||||
| (MCC) / Mobile Network Code (MNC) tuple information received in the MX Di | ||||
| scover | ||||
| message, for sending subsequent control-plane messages.</t> | ||||
| <t>The CCM discovers and exchanges capabilities with the NCM. The | ||||
| NCM provides the credentials of the N-MADP endpoint and negotiates the | ||||
| parameters for the user plane with the CCM. The CCM configures the C-MAD | ||||
| P | ||||
| to set up the user-plane path (e.g., MPTCP/UDP Proxy connection) | ||||
| with the N-MADP, based on the credentials (e.g., (MPTCP&wj;/UDP) Proxy IP | ||||
| address and port, associated core network path), and the parameters excha | ||||
| nged | ||||
| with the NCM. Further, the NCM and CCM exchange link status information | ||||
| to adapt traffic steering and user-plane treatment to dynamic network | ||||
| conditions. The key procedures are described in detail in the following | ||||
| subsections.</t> | ||||
| <figure anchor="figure4"> | ||||
| <name>MAMS Control-Plane Procedures</name> | ||||
| <artwork align="center" name="" type="" alt=""><![CDATA[ | ||||
| +-----+ +-----+ | ||||
| | CCM | | NCM | | ||||
| +--+--+ +--+--+ | ||||
| | Discovery and | | ||||
| | Capability | | ||||
| | Exchange | | ||||
| |<--------------------->| | ||||
| | | | ||||
| | Setup of | | ||||
| | User-Plane | | ||||
| | Protocols | | ||||
| |<--------------------->| | ||||
| | | | ||||
| | Path Quality | | ||||
| | Estimation | | ||||
| |<--------------------->| | ||||
| | | | ||||
| | Network Capabilities | | ||||
| | e.g., RNIS [ETSIRNIS] | | ||||
| |<----------------------| | ||||
| | | | ||||
| | Network Policies | | ||||
| |<----------------------| | ||||
| + + | ||||
| "RNIS" stands for "Radio Network Information Service" | ||||
| ]]></artwork> | ||||
| </figure> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>Common Fields in MAMS Control Messages</name> | ||||
| <t>Each MAMS control message consists of the following common fields: | ||||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li>Version: Indicates the version of the MAMS control protocol.</li> | ||||
| <li>Message Type: Indicates the type of the message, e.g., MX Discover | ||||
| , | ||||
| MX Capability Request (REQ) / Response (RSP).</li> | ||||
| <li>Sequence Number: Auto-incremented integer to uniquely identify a | ||||
| particular message exchange, e.g., MX Capability Request/Response.</l | ||||
| i> | ||||
| </ul> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>Common Procedures for MAMS Control Messages</name> | ||||
| <t>This section describes the common procedures for MAMS control message | ||||
| s.</t> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>Message Timeout</name> | ||||
| <t>After sending a MAMS control message, the MAMS control-plane peer | ||||
| (NCM or CCM) waits for a duration of MAMS_TIMEOUT ms before | ||||
| timing out in cases where a response was expected. The sender of the | ||||
| message will retransmit the message for MAMS_RETRY times before decla | ||||
| ring | ||||
| failure if no response is received. A failure implies that the MAMS | ||||
| peer | ||||
| is dead or unreachable, and the sender reverts to native | ||||
| non-multi-access / single-path mode. The CCM may initiate the | ||||
| MAMS discovery procedure for re-establishing the MAMS session.</t> | ||||
| </section> | ||||
| <section anchor="keep-alive-procedure" numbered="true" toc="default"> | ||||
| <name>Keep-Alive Procedure</name> | ||||
| <t>MAMS control-plane peers execute the keep-alive procedures to ensur | ||||
| e that | ||||
| the other peers are reachable and to recover from dead-peer scenarios | ||||
| . Each | ||||
| MAMS control-plane endpoint maintains a Keep-Alive timer that is set | ||||
| for a duration of MAMS_KEEP_ALIVE_TIMEOUT. The Keep-Alive timer is r | ||||
| eset | ||||
| whenever the peer receives a MAMS control message. When the Keep-Ali | ||||
| ve | ||||
| timer expires, an MX Keep-Alive Request is sent.</t> | ||||
| <t>The values for MAMS_RETRY and MAMS_KEEP_ALIVE_TIMEOUT parameters | ||||
| used in keep-alive procedures are deployment dependent, and the means | ||||
| for obtaining them are | ||||
| out of scope for this document. As an example, the client and networ | ||||
| k can obtain the values | ||||
| using provisioning. | ||||
| On receipt of an MX Keep-Alive Request, the receiver responds with an | ||||
| MX | ||||
| Keep-Alive Response. If the sender does not receive a MAMS control m | ||||
| essage in response to | ||||
| MAMS_RETRY retries of the MX Keep-Alive Request, the MAMS | ||||
| peer declares that the peer is dead or unreachable. The CCM <bcp14>M | ||||
| AY</bcp14> initiate the MAMS discovery | ||||
| procedure for re-establishing the MAMS session.</t> | ||||
| <t>Additionally, the CCM <bcp14>SHALL</bcp14> immediately send an MX K | ||||
| eep-Alive Request | ||||
| to the NCM whenever it detects a handover from one | ||||
| base station / access point to another. During this time, the | ||||
| client <bcp14>SHALL</bcp14> stop using MAMS user-plane functionality | ||||
| in the | ||||
| uplink direction until it receives an MX Keep-Alive Response from the | ||||
| NCM.</t> | ||||
| <t>The MX Keep-Alive Request includes the following information: | ||||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li>Reason: Can be timeout or handover. Handover shall be used | ||||
| by the CCM only on detection of a handover.</li> | ||||
| <li>Unique Session ID: See <xref target="disc_cap_exch" format="defa | ||||
| ult"/>.</li> | ||||
| <li>Connection ID: If the reason is handover, the inclusion of this | ||||
| field is mandatory.</li> | ||||
| <li>Delivery Node ID: Identity of the node to which the client | ||||
| is attached. In the case of LTE, this is an E-UTRAN Cell | ||||
| Global | ||||
| Identifier (ECGI). In the case of Wi-Fi, this is an AP I | ||||
| D or a | ||||
| Media Access Control (MAC) address. If the reason is "Ha | ||||
| ndover", | ||||
| the inclusion of this field is mandatory.</li> | ||||
| </ul> | ||||
| </section> | ||||
| </section> | ||||
| <section anchor="disc_cap_exch" numbered="true" toc="default"> | ||||
| <name>Discovery and Capability Exchange</name> | ||||
| <t><xref target="figure5" format="default"/> shows the MAMS discovery an | ||||
| d capability exchange | ||||
| procedure.</t> | ||||
| <figure anchor="figure5"> | ||||
| <name>MAMS Control Procedure for Discovery and Capability Exchange</na | ||||
| me> | ||||
| <artwork align="center" name="" type="" alt=""><![CDATA[ | ||||
| CCM NCM | ||||
| | | | ||||
| |------- MX Discover Message ----------------------->| | ||||
| | +-----------------+ | ||||
| | | Learn CCM | | ||||
| | | IP address | | ||||
| | | and port | | ||||
| | +-----------------+ | ||||
| | | | ||||
| |<----------------------------- MX System Info ------| | ||||
| | | | ||||
| |------------------------------ MX Capability REQ -->| | ||||
| |<----- MX Capability RSP ---------------------------| | ||||
| |------------------------------ MX Capability ACK -->| | ||||
| | | | ||||
| + + | ||||
| ]]></artwork> | ||||
| </figure> | ||||
| <t>This procedure consists of the following key steps:</t> | ||||
| <t>Step 1 (discovery): The CCM periodically sends an MX Discover message | ||||
| to a predefined (NCM) IP address/port until an MX System Info message is | ||||
| received in acknowledgment. | ||||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li> | ||||
| <t>The MX Discover message includes the following information: | ||||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li>MAMS Version.</li> | ||||
| <li>Mobile Country Code (MCC) / Mobile Network Code (MNC) Tuple: O | ||||
| ptional parameter to identify the operator network to which | ||||
| the client is subscribed, in conformance with the format spec | ||||
| ified in <xref target="ITU-E212" format="default"/>.</li> | ||||
| </ul> | ||||
| </li> | ||||
| <li> | ||||
| <t>The MX System Info message includes the following information: | ||||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li> | ||||
| <t>Number of Anchor Connections. | ||||
| </t> | ||||
| <t>For each anchor connection, the following parameters are incl | ||||
| uded: | ||||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li>Connection ID: Unique identifier for the anchor connection | ||||
| .</li> | ||||
| <li>Connection Type (e.g., Wi-Fi, 5G NR, MulteFire, LTE).</li> | ||||
| <li> | ||||
| <t>NCM Endpoint Address (for control-plane messages over thi | ||||
| s connection): | ||||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li>IP Address or FQDN</li> | ||||
| <li>Port Number</li> | ||||
| </ul> | ||||
| </li> | ||||
| </ul> | ||||
| </li> | ||||
| </ul> | ||||
| </li> | ||||
| </ul> | ||||
| <t>Step 2 (capability exchange): The CCM learns the IP address and port | ||||
| from the MX System Info message. It then sends the MX Capability | ||||
| REQ message, which includes the following parameters: | ||||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li>MX Feature Activation List: Indicates whether the corresponding fe | ||||
| ature is | ||||
| supported or not, e.g., lossless switching, fragmentation, concatena | ||||
| tion, | ||||
| uplink aggregation, downlink aggregation, measurement, probing.</li> | ||||
| <li> | ||||
| <t>Number of Anchor Connections (core networks). | ||||
| </t> | ||||
| <t>For each anchor connection, the following parameters are included | ||||
| : | ||||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li>Connection ID</li> | ||||
| <li>Connection Type (e.g., Wi-Fi, 5G NR, MulteFire, LTE)</li> | ||||
| </ul> | ||||
| </li> | ||||
| <li> | ||||
| <t>Number of Delivery Connections (access links). | ||||
| </t> | ||||
| <t>For each delivery connection, the following parameters are includ | ||||
| ed: | ||||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li>Connection ID</li> | ||||
| <li>Connection Type (e.g., Wi-Fi, 5G NR, MulteFire, LTE)</li> | ||||
| </ul> | ||||
| </li> | ||||
| <li> | ||||
| <t>MX Convergence Method Support List: | ||||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li>GMA</li> | ||||
| <li>MPTCP Proxy</li> | ||||
| <li>GRE Aggregation Proxy</li> | ||||
| <li>MPQUIC</li> | ||||
| </ul> | ||||
| </li> | ||||
| <li> | ||||
| <t>MX Adaptation Method Support List: | ||||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li>UDP without DTLS</li> | ||||
| <li>UDP with DTLS</li> | ||||
| <li>IPsec <xref target="RFC3948" format="default"/></li> | ||||
| <li>Client NAT</li> | ||||
| </ul> | ||||
| </li> | ||||
| </ul> | ||||
| <t>In response, the NCM creates a unique identity for the CCM session an | ||||
| d sends | ||||
| the MX Capability Response, including the following information: | ||||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li>MX Feature Activation List: Indicates whether the corresponding fe | ||||
| ature is | ||||
| enabled or not, e.g., lossless switching, fragmentation, concatenati | ||||
| on, | ||||
| uplink aggregation, downlink aggregation, measurement, probing.</li> | ||||
| <li> | ||||
| <t>Number of Anchor Connections (core networks): | ||||
| </t> | ||||
| <t>For each anchor connection, the following parameters are included | ||||
| : | ||||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li>Connection ID</li> | ||||
| <li>Connection Type (e.g., Wi-Fi, 5G NR, MulteFire, LTE)</li> | ||||
| </ul> | ||||
| </li> | ||||
| <li> | ||||
| <t>Number of Delivery Connections (access links): | ||||
| </t> | ||||
| <t>For each delivery connection, the following parameters are includ | ||||
| ed: | ||||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li>Connection ID</li> | ||||
| <li>Connection Type (e.g., Wi-Fi, 5G NR, MulteFire, LTE)</li> | ||||
| </ul> | ||||
| </li> | ||||
| <li> | ||||
| <t>MX Convergence Method Support List: | ||||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li>GMA</li> | ||||
| <li>MPTCP Proxy</li> | ||||
| <li>GRE Aggregation Proxy</li> | ||||
| <li>MPQUIC</li> | ||||
| </ul> | ||||
| </li> | ||||
| <li> | ||||
| <t>MX Adaptation Method Support List: | ||||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li>UDP without DTLS</li> | ||||
| <li>UDP with DTLS</li> | ||||
| <li>IPsec <xref target="RFC3948" format="default"/></li> | ||||
| <li>Client NAT</li> | ||||
| </ul> | ||||
| </li> | ||||
| <li> | ||||
| <t>Unique Session ID: Unique session identifier for the CCM that | ||||
| set up the connection. If the session already exists, then the | ||||
| existing unique session identifier is returned. | ||||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li>NCM ID: Unique identity of the NCM in the operator network.</l | ||||
| i> | ||||
| <li>Session ID: Unique identity assigned to the CCM instance by th | ||||
| is NCM instance.</li> | ||||
| </ul> | ||||
| </li> | ||||
| </ul> | ||||
| <t>In response to the MX Capability Response, the CCM sends a confirmati | ||||
| on (or | ||||
| rejection) in the MX Capability Acknowledge. The MX Capability Acknowled | ||||
| ge includes the | ||||
| following parameters: | ||||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li>Unique Session ID: Same identifier as the identifier | ||||
| provided in the MX Capability Response.</li> | ||||
| <li> | ||||
| <t>Acknowledgment: An indication of whether the client has accepted | ||||
| or | ||||
| rejected the capability exchange phase. | ||||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li>MX ACCEPT: The CCM accepts the capability set proposed by | ||||
| the NCM.</li> | ||||
| <li>MX REJECT: The CCM rejects the capability set proposed by | ||||
| the NCM.</li> | ||||
| </ul> | ||||
| </li> | ||||
| </ul> | ||||
| <t>If the NCM receives an MX_REJECT, the current MAMS session will be | ||||
| terminated.</t> | ||||
| <t>If the CCM can no longer continue with the current capabilities, it < | ||||
| bcp14>SHOULD</bcp14> | ||||
| send an MX Session Termination Request to terminate the MAMS session. In | ||||
| response, the NCM <bcp14>SHOULD</bcp14> send an MX Session Termination Re | ||||
| sponse to confirm the | ||||
| termination.</t> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>User-Plane Configuration</name> | ||||
| <t><xref target="figure6" format="default"/> shows the user-plane (UP) c | ||||
| onfiguration procedure.</t> | ||||
| <figure anchor="figure6"> | ||||
| <name>MAMS Control Procedure for User-Plane Configuration</name> | ||||
| <artwork align="center" name="" type="" alt=""><![CDATA[ | ||||
| CCM NCM | ||||
| | | | ||||
| |---- MX Reconfiguration REQ (setup) ----------->| | ||||
| |<-------------------- MX Reconfiguration RSP ---| | ||||
| | +-------------------------+ | ||||
| | | NCM prepares N-MADP for | | ||||
| | | User-Plane Setup | | ||||
| | +-------------------------+ | ||||
| |<-------------------- MX UP Setup Config -------| | ||||
| |---- MX UP Setup Confirmation ----------------->| | ||||
| +-------------------+ | | ||||
| |Link "X" is up/down| | | ||||
| +-------------------+ | | ||||
| |---- MX Reconfiguration REQ (update/release) -->| | ||||
| |<-------------------- MX Reconfiguration RSP ---| | ||||
| ]]></artwork> | ||||
| </figure> | ||||
| <t>This procedure consists of the following two key steps: | ||||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li>Reconfiguration: The CCM informs the NCM about the changes to the | ||||
| client's connections - setup | ||||
| of a new connection, teardown of an existing connection, or update o | ||||
| f parameters related | ||||
| to an existing connection. It consists of the client triggering the | ||||
| procedure | ||||
| by requesting an update to the connection configuration, and a respo | ||||
| nse from the NCM.</li> | ||||
| <li>UP Setup: The NCM configures the user-plane protocols at the clien | ||||
| t and the network. The NCM initiates | ||||
| the UP setup by sending the MX UP Setup Configuration Request to the | ||||
| client, which confirms the | ||||
| set of mutually acceptable parameters by using the User Plane Setup | ||||
| Confirmation (CNF) message.</li> | ||||
| </ul> | ||||
| <t> | ||||
| These steps are elaborated as follows.</t> | ||||
| <t>Reconfiguration: When the client detects that the link is up/down or | ||||
| the IP address changes (e.g., via APIs provided by the client OS), | ||||
| the CCM sends an MX Reconfiguration Request to | ||||
| set up, update, or release the connection. The message <bcp14>SHOULD</bc | ||||
| p14> | ||||
| include the following information: | ||||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li>Unique Session ID: Identity of the CCM at the NCM, | ||||
| created by the NCM during the capability exchange phase.</li> | ||||
| <li>Reconfiguration Action: Indicates the reconfiguration action | ||||
| (release, setup, or update).</li> | ||||
| <li>Connection ID: Identifies the connection for reconfiguration.</li> | ||||
| </ul> | ||||
| <t>If the Reconfiguration Action is set to "setup" or "update", then | ||||
| the message includes the following parameters: | ||||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li>IP address of the connection.</li> | ||||
| <li>SSID (Service Set Identifier of the Wi-Fi connection).</li> | ||||
| <li>MTU of the connection: The MTU of the delivery path that is | ||||
| calculated at the client for use by the NCM to configure fragmentati | ||||
| on and | ||||
| concatenation procedures <xref target="I-D.zhu-intarea-mams-user-pro | ||||
| tocol" format="default"/> at the | ||||
| N-MADP.</li> | ||||
| <li>Delivery Node ID: Identity of the node to which the client is | ||||
| attached. In the case of LTE, this is an ECGI. In the case of Wi-Fi, | ||||
| this is an AP ID or a MAC address. </li> | ||||
| </ul> | ||||
| <t>At the beginning of a connection setup, the CCM informs the NCM of th | ||||
| e | ||||
| connection status using the MX Reconfiguration Request with the | ||||
| Reconfiguration Action set to "setup". The NCM acknowledges the | ||||
| connection setup status and exchanges parameters with the CCM for | ||||
| user-plane setup, as described below.</t> | ||||
| <t>Setup of User-Plane Protocols: Based on the negotiated capabilities, | ||||
| the NCM sets up the user-plane (Adaptation Layer and Convergence Layer) | ||||
| protocols at the N-MADP and informs the CCM of the user-plane | ||||
| protocols to be set up at the client (C-MADP) and the parameters | ||||
| for the C-MADP to connect to the N-MADP.</t> | ||||
| <t>The MX UP Setup Configuration Request is used to create one or more M | ||||
| ADP instances, with | ||||
| each anchor connection having one or more configurations, namely MX | ||||
| Configurations. The MX UP Setup Configuration Request consists of the fo | ||||
| llowing parameters: | ||||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li> | ||||
| <t>Number of Anchor Connections (core networks). | ||||
| </t> | ||||
| <t>For each anchor connection, the following parameters are included | ||||
| : | ||||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li>Anchor Connection ID</li> | ||||
| <li>Connection Type (e.g., Wi-Fi, 5G NR, MulteFire, LTE)</li> | ||||
| <li> | ||||
| <t>Number of Active MX Configurations (included only if more tha | ||||
| n one | ||||
| MX configuration is active for the anchor connection). | ||||
| </t> | ||||
| <t>For each active MX configuration, the following parameters ar | ||||
| e included: | ||||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li>MX Configuration ID (included if more than one MX configur | ||||
| ation is | ||||
| present)</li> | ||||
| <li> | ||||
| <t>MX Convergence Method. One of the following: | ||||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li>GMA</li> | ||||
| <li>MPTCP Proxy</li> | ||||
| <li>GRE Aggregation Proxy</li> | ||||
| <li>MPQUIC</li> | ||||
| </ul> | ||||
| </li> | ||||
| <li> | ||||
| <t>MX Convergence Method Parameters: | ||||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li>Convergence Proxy IP Address</li> | ||||
| <li>Convergence Proxy Port</li> | ||||
| <li>Client Key</li> | ||||
| </ul> | ||||
| </li> | ||||
| <li> | ||||
| <t>MX Convergence Control Parameters (included if any MX Con | ||||
| trol PDU types | ||||
| (e.g., Probe-REQ/ACK) are supported): | ||||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li>UDP port number for sending and receiving MX Control P | ||||
| DUs | ||||
| (e.g., Probe-REQ/ACK, Keep-Alive)</li> | ||||
| <li>Convergence Proxy Port</li> | ||||
| </ul> | ||||
| </li> | ||||
| <li> | ||||
| <t>Number of Delivery Connections. | ||||
| </t> | ||||
| <t>For each delivery connection, include the following: | ||||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li>Delivery Connection ID</li> | ||||
| <li>Connection Type (e.g., Wi-Fi, 5G NR, MulteFire, LTE)</ | ||||
| li> | ||||
| <li> | ||||
| <t>MX Adaptation Method. One of the following: | ||||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li>UDP without DTLS</li> | ||||
| <li>UDP with DTLS</li> | ||||
| <li>IPsec</li> | ||||
| <li>Client NAT</li> | ||||
| </ul> | ||||
| </li> | ||||
| <li> | ||||
| <t>MX Adaptation Method Parameters: | ||||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li>Tunnel Endpoint IP Address</li> | ||||
| <li>Tunnel Endpoint Port</li> | ||||
| <li>Shared Secret</li> | ||||
| <li>Header Optimization (included only if the MX Conve | ||||
| rgence Method | ||||
| is GMA)</li> | ||||
| </ul> | ||||
| </li> | ||||
| </ul> | ||||
| </li> | ||||
| </ul> | ||||
| </li> | ||||
| </ul> | ||||
| </li> | ||||
| </ul> | ||||
| <t>For example, when LTE and Wi-Fi are the two user-plane accesses, the | ||||
| NCM conveys to the CCM that IPsec needs to be set up as the MX Adaptation | ||||
| Layer over the Wi-Fi access, using the following parameters: IPsec endpoi | ||||
| nt | ||||
| IP address, and Pre-Shared Key. No Adaptation Layer is needed if it is | ||||
| considered secure with no NAT, or a Client NAT may be used over the LTE a | ||||
| ccess.</t> | ||||
| <t>Similarly, as an example of the MX Convergence Method, the configurat | ||||
| ion | ||||
| indicates the convergence method as the MPTCP proxy, along with parameter | ||||
| s | ||||
| for a connection to the MPTCP proxy: namely the IP address and port of th | ||||
| e | ||||
| MPTCP proxy for TCP applications.</t> | ||||
| <t>Once the user-plane protocols are configured, the CCM informs the NCM | ||||
| of the status via the MX UP Setup Confirmation. The MX UP Setup Confirma | ||||
| tion consists of | ||||
| the following parameters: | ||||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li>Unique Session ID: Session identifier provided to the client in | ||||
| an MX Capability Response.</li> | ||||
| <li> | ||||
| <t>MX Convergence Control Parameters (included if any MX Control PDU | ||||
| types (e.g., Probe-REQ/ACK, Keep-Alive) are supported): | ||||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li>UDP port number for sending and receiving MX Control PDUs | ||||
| (e.g., Probe-REQ/ACK, Keep-Alive)</li> | ||||
| <li>MX Configuration ID (if an MX Configuration ID is specified in | ||||
| an MX UP Setup Configuration Request) to indicate the MX Config | ||||
| uration that will be | ||||
| used for probing)</li> | ||||
| </ul> | ||||
| </li> | ||||
| <li> | ||||
| <t>Client Adaptation-Layer Parameters: | ||||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li> | ||||
| <t>Number of Delivery Connections. | ||||
| </t> | ||||
| <t> | ||||
| For each delivery connection, include the following: | ||||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li>Delivery Connection ID</li> | ||||
| <li>UDP port number: If UDP-based adaptation is in use, the UD | ||||
| P port | ||||
| on the C-MADP side</li> | ||||
| </ul> | ||||
| </li> | ||||
| </ul> | ||||
| </li> | ||||
| </ul> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>MAMS Path Quality Estimation</name> | ||||
| <t>Path quality estimations can be done either passively or actively. | ||||
| Traffic measurements in the network can be performed passively by | ||||
| comparing the real-time data throughput of the client with the capacity | ||||
| available in the network. In special deployments where the NCM has | ||||
| interfaces with access nodes, direct interfaces can be used to gather | ||||
| information regarding path quality. For example, the utilization of | ||||
| the LTE access node (also known as Evolved Node B), to which the client i | ||||
| s attached, could be used as | ||||
| data for the estimation of path quality without creating any extra | ||||
| traffic overhead. Active measurements by the client provide an alternati | ||||
| ve | ||||
| way to estimate path quality.</t> | ||||
| <figure anchor="figure7"> | ||||
| <name>MAMS Control-Plane Procedure for Path Quality Estimation</name> | ||||
| <artwork align="center" name="" type="" alt=""><![CDATA[ | ||||
| CCM NCM | ||||
| | | | ||||
| |<-------------- MX Path Estimation Request ---------| | ||||
| |------ MX Path Estimation Results ----------------->| | ||||
| | | | ||||
| ]]></artwork> | ||||
| </figure> | ||||
| <t>The NCM sends the following configuration parameters in the MX Path E | ||||
| stimation Request to the CCM: | ||||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li>Connection ID (of the delivery connection whose path quality | ||||
| needs to be estimated)</li> | ||||
| <li>Init Probe Test Duration (ms)</li> | ||||
| <li>Init Probe Test Rate (Mbps)</li> | ||||
| <li>Init Probe Size (bytes)</li> | ||||
| <li>Init Probe-ACK Required (0 -> No / 1 -> Yes)</li> | ||||
| <li>Active Probe Frequency (ms)</li> | ||||
| <li>Active Probe Size (bytes)</li> | ||||
| <li>Active Probe Test Duration (ms)</li> | ||||
| <li>Active Probe-ACK Required (0 -> No / 1 -> Yes)</li> | ||||
| </ul> | ||||
| <t>The CCM configures the C-MADP for probe receipt based on these | ||||
| parameters and for collection of the statistics according to the followin | ||||
| g | ||||
| configuration. | ||||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li>Unique Session ID: Session identifier provided to the client in an | ||||
| MX Capability Response.</li> | ||||
| <li> | ||||
| <t>Init Probe Results Configuration: | ||||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li>Lost Probes (percent)</li> | ||||
| <li>Probe Receiving Rate (packets per second)</li> | ||||
| </ul> | ||||
| </li> | ||||
| <li> | ||||
| <t>Active Probe Results Configuration: | ||||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li>Average Throughput in the last Probe Duration</li> | ||||
| </ul> | ||||
| </li> | ||||
| </ul> | ||||
| <t>The user-plane probing is divided into two phases: the | ||||
| Initialization phase and the Active phase. | ||||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li>Initialization Phase: A network path that is not included by the | ||||
| N-MADP for transmission of user data is deemed to be in the | ||||
| Initialization phase. The user data may be transmitted over other | ||||
| available network paths.</li> | ||||
| <li>Active Phase: A network path that is included by the N-MADP for | ||||
| transmission of user data is deemed to be in the Active phase.</li> | ||||
| </ul> | ||||
| <t>During the Initialization phase, the NCM configures the N-MADP to sen | ||||
| d an | ||||
| Init Probe-REQ message. The CCM collects the Init Probe statistics | ||||
| from the C-MADP and sends the MX Path Estimation Results message to the | ||||
| NCM per the Initialization Probe Results configuration.</t> | ||||
| <t>During the Active phase, the NCM configures the N-MADP to send an Act | ||||
| ive | ||||
| Probe-REQ message. The C-MADP calculates the metrics as specified by the | ||||
| Active Probe Results configuration. The CCM collects the Active Probe | ||||
| statistics from the C-MADP and sends the MX Path Estimation Results | ||||
| message to the NCM per the Active Probe Results configuration.</t> | ||||
| <t>The following subsections define the control PDU encoding for Keep-Al | ||||
| ive and | ||||
| Probe-REQ/ACK messages to support path quality estimation.</t> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>MX Control PDU Definition</name> | ||||
| <t>Control PDUs are sent as UDP messages between the C-MADP and the N- | ||||
| MADP | ||||
| to exchange control messages for keep-alive or path quality estimation. | ||||
| MX probe parameters are negotiated during the user-plane setup phase (M | ||||
| X UP | ||||
| Setup Configuration Request and MX UP Setup Confirmation). <xref targe | ||||
| t="figure_controlPdufmt" format="default"/> shows | ||||
| the MX Control PDU format with the following fields: | ||||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li> | ||||
| <t>Type (1 byte): The type of the MX Control message. | ||||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li>0: Keep-Alive</li> | ||||
| <li>1: Probe-REQ/ACK</li> | ||||
| <li>Others: Reserved</li> | ||||
| </ul> | ||||
| </li> | ||||
| <li>CID (1 byte): The connection ID of the delivery connection for | ||||
| sending the MX Control message.</li> | ||||
| <li>MX Control Message (variable): The payload of the MX Control | ||||
| message.</li> | ||||
| </ul> | ||||
| <t>The MX Control PDU is sent as a normal user-plane packet | ||||
| over the desired delivery connection whose quality and reachability | ||||
| need to be determined.</t> | ||||
| <figure anchor="figure_controlPdufmt"> | ||||
| <name>MX Control PDU Format</name> | ||||
| <artwork align="center" name="" type="" alt=""><![CDATA[ | ||||
| | | | ||||
| |<--------- MX Control PDU Payload ------->| | ||||
| | | | ||||
| +-----------+-------------------+-----+-----------------------------+ | ||||
| | IP Header | UDP Header | Type | CID | MX Control Message | | ||||
| +-----------+-------------------+-----+-----------------------------+ | ||||
| ]]></artwork> | ||||
| </figure> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>Keep-Alive Message</name> | ||||
| <t>The "Type" field is set to "0" for Keep-Alive messages. The C-MADP | ||||
| may | ||||
| periodically send a Keep-Alive message over one or multiple delivery | ||||
| connections, especially if UDP tunneling is used as the adaptation | ||||
| method for the delivery connection with a NAT function on the path.</t> | ||||
| <t>A Keep-Alive message is 2 bytes long and consists of the following | ||||
| field: | ||||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li>Keep-Alive Sequence Number (2 bytes): The sequence number of the | ||||
| Keep-Alive message.</li> | ||||
| </ul> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>Probe-REQ/ACK Message</name> | ||||
| <t>The "Type" field is set to "1" for Probe-REQ/ACK messages. The N-MA | ||||
| DP | ||||
| may send the Probe-REQ message for path quality estimation. | ||||
| In response, the C-MADP may return the Probe-ACK message.</t> | ||||
| <t>A Probe-REQ message consists of the following fields: | ||||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li>Probing Sequence Number (2 bytes): The sequence number of the Pr | ||||
| obe | ||||
| REQ message.</li> | ||||
| <li> | ||||
| <t>Probing Flag (1 byte): | ||||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li>Bit 0: A Probe-ACK flag to indicate whether the Probe-ACK me | ||||
| ssage | ||||
| is expected (1) or not (0).</li> | ||||
| <li>Bit 1: A Probe Type flag to indicate whether the Probe-REQ/A | ||||
| CK | ||||
| message was sent during the Initialization phase (0) when the | ||||
| network path is not included for transmission of user data, o | ||||
| r | ||||
| during the Active phase (1) when the network path is included | ||||
| for | ||||
| transmission of user data.</li> | ||||
| <li>Bit 2: A bit flag to indicate the presence of the Reverse | ||||
| Connection ID (R-CID) field.</li> | ||||
| <li>Bits 3-7: Reserved.</li> | ||||
| </ul> | ||||
| </li> | ||||
| <li>Reverse Connection ID (R-CID) (1 byte): The connection ID of the | ||||
| delivery connection for sending the Probe-ACK message on the | ||||
| reverse path.</li> | ||||
| <li>Padding (variable).</li> | ||||
| </ul> | ||||
| <t>The "R-CID" field is only present if both Bit 0 and Bit 2 of the | ||||
| "Probing Flag" field are set to "1". Moreover, Bit 2 of the "Probing | ||||
| Flag" field <bcp14>SHOULD</bcp14> be set to "0" if Bit 0 is "0", indica | ||||
| ting that the | ||||
| Probe-ACK message is not expected.</t> | ||||
| <t>If the "R-CID" field is not present, but Bit 0 of the "Probing | ||||
| Flag" field is set to "1", the Probe-ACK message <bcp14>SHOULD</bcp14> | ||||
| be sent over | ||||
| the same delivery connection as the Probe-REQ message.</t> | ||||
| <t>The "Padding" field is used to control the length of the Probe-REQ | ||||
| message.</t> | ||||
| <t>The C-MADP <bcp14>SHOULD</bcp14> send the Probe-ACK message in resp | ||||
| onse to a Probe-REQ | ||||
| message with the Probe-ACK flag set to "1".</t> | ||||
| <t>A Probe-ACK message is 3 bytes long and consists of the following f | ||||
| ield: | ||||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li>Probing Acknowledgment Number (2 bytes): The sequence number of | ||||
| the | ||||
| corresponding Probe-REQ message.</li> | ||||
| </ul> | ||||
| </section> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>MAMS Traffic Steering</name> | ||||
| <figure anchor="figure_traffic_steering"> | ||||
| <name>MAMS Traffic-Steering Procedure</name> | ||||
| <artwork align="center" name="" type="" alt=""><![CDATA[ | ||||
| CCM NCM | ||||
| | | | ||||
| | +------------------------------+ | ||||
| | |Steer user traffic to Path "X"| | ||||
| | +------------------------------+ | ||||
| |<----------------- MX Traffic Steering REQ ------| | ||||
| |----- MX Traffic Steering RSP ------------------>| | ||||
| ]]></artwork> | ||||
| </figure> | ||||
| <t>The NCM sends an MX Traffic Steering Request to steer data | ||||
| traffic. It is also possible to send data traffic over multiple connecti | ||||
| ons | ||||
| simultaneously, i.e., aggregation. The message includes the following | ||||
| information: | ||||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li>Anchor Connection ID: Connection ID of the anchor connection.</li> | ||||
| <li>MX Configuration ID (if an MX Configuration ID is specified in an | ||||
| MX UP Setup Configuration Request).</li> | ||||
| <li>DL Connection ID List: List of DL delivery connections, provided a | ||||
| s Connection IDs.</li> | ||||
| <li>UL Connection ID: Connection ID of the default UL delivery connect | ||||
| ion.</li> | ||||
| <li> | ||||
| <t>For the number of specific UL traffic templates, the message incl | ||||
| udes the | ||||
| following: | ||||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li>Traffic Flow Template for identifying the UL traffic.</li> | ||||
| <li>UL Connection ID List: List of UL delivery connections, provid | ||||
| ed as Connection IDs, to be used for sending the UL traffic.</li> | ||||
| </ul> | ||||
| </li> | ||||
| <li>MX Feature Activation List. Each parameter indicates whether | ||||
| the corresponding feature is enabled or not: lossless switching, | ||||
| fragmentation, concatenation, uplink aggregation, | ||||
| downlink aggregation, measurement, probing.</li> | ||||
| </ul> | ||||
| <t>In response, the CCM sends an MX Traffic Steering Response, | ||||
| including the following information: | ||||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li>Unique Session ID: Session identifier provided to the | ||||
| client in an MX Capability Response.</li> | ||||
| <li>MX Feature Activation List. Each parameter indicates whether | ||||
| the corresponding feature is enabled or not: lossless switching, | ||||
| fragmentation, concatenation, uplink aggregation, | ||||
| downlink aggregation, measurement, probing.</li> | ||||
| </ul> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>MAMS Application MADP Association</name> | ||||
| <figure anchor="figure_AMAproc"> | ||||
| <name>MAMS Application MADP Association Procedure</name> | ||||
| <artwork align="center" name="" type="" alt=""><![CDATA[ | ||||
| CCM NCM | ||||
| | | | ||||
| | +-------------------------+ | ||||
| | | Associate MADP instance | | ||||
| | | with application flow | | ||||
| | +-------------------------+ | ||||
| |---------- MX App MADP ------------------->| | ||||
| | Association REQ | | ||||
| | | | ||||
| |<----------------- MX App MADP ------------| | ||||
| | Association RSP | | ||||
| ]]></artwork> | ||||
| </figure> | ||||
| <t>The CCM sends an MX Application MADP Association Request to request | ||||
| the association of a specific application flow with a specific MADP | ||||
| instance ID for the anchor connection with multiple active MX | ||||
| configurations. The MADP Instance ID is a tuple (Anchor Connection ID, M | ||||
| X | ||||
| Configuration ID). This provides the capability for the client to indica | ||||
| te | ||||
| the user-plane processing that needs to be associated with different | ||||
| application flows depending on the needs of those flows. | ||||
| The application flow is identified by its associated Traffic Flow Templat | ||||
| e.</t> | ||||
| <t>The MX Application MADP Association Request includes the following in | ||||
| formation: | ||||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li> | ||||
| <t>Number of Application Flows. | ||||
| </t> | ||||
| <t> | ||||
| For each application flow, identified by the Traffic Flow Templates: | ||||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li>Anchor Connection ID</li> | ||||
| <li>MX Configuration ID (if more than one MX configuration is | ||||
| associated with an anchor connection)</li> | ||||
| <li>Traffic Flow Template for identifying the UL traffic</li> | ||||
| <li>Traffic Flow Template for identifying the DL traffic</li> | ||||
| </ul> | ||||
| </li> | ||||
| </ul> | ||||
| <t>In response, the NCM sends an MX Application MADP Association Respons | ||||
| e, | ||||
| including the following information: | ||||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li> | ||||
| <t>Number of Application Flows. | ||||
| </t> | ||||
| <t>For each application flow, identified by the Traffic Flow Templat | ||||
| es: | ||||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li>Status (Success or Failure)</li> | ||||
| </ul> | ||||
| </li> | ||||
| </ul> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>MAMS Network ID Indication</name> | ||||
| <figure anchor="figure9"> | ||||
| <name>MAMS Network ID Indication Procedure</name> | ||||
| <artwork align="center" name="" type="" alt=""><![CDATA[ | ||||
| CCM NCM | ||||
| | | | ||||
| | +---------------------------------+ | ||||
| | |NCM determines preferred networks| | ||||
| | +---------------------------------+ | ||||
| | | | ||||
| |<----------------- MX SSID Indication -----------| | ||||
| | | | ||||
| ]]></artwork> | ||||
| </figure> | ||||
| <t>The NCM indicates the preferred network list to the CCM to guide the | ||||
| client regarding networks that it should connect to. To indicate preferr | ||||
| ed | ||||
| Wi-Fi networks, the NCM sends the list of WLANs, each represented by an | ||||
| SSID (Service Set Identifier)/BSSID (Basic Service Set Identifier)/HESSID | ||||
| (Homogeneous Extended Service Set Identifier) as defined in <xref target= | ||||
| "IEEE-80211" format="default"/>), | ||||
| available in the MX SSID Indication.</t> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>MAMS Client Measurement Configuration and Reporting</name> | ||||
| <figure anchor="figure10"> | ||||
| <name>MAMS Client Measurement Configuration and Reporting Procedure</n | ||||
| ame> | ||||
| <artwork align="center" name="" type="" alt=""><![CDATA[ | ||||
| CCM NCM | ||||
| | | | ||||
| |<--------------- MX Measurement Config ----------| | ||||
| | | | ||||
| +---------------------------------+ | | ||||
| |Client ready to send measurements| | | ||||
| +---------------------------------+ | | ||||
| | | | ||||
| |----- MX Measurement Report -------------------->| | ||||
| | | | ||||
| ]]></artwork> | ||||
| </figure> | ||||
| <t>The NCM configures the CCM with the different parameters (e.g., radio | ||||
| link | ||||
| information), with the associated thresholds to be reported by the client | ||||
| . The | ||||
| MX Measurement Configuration message contains the following parameters fo | ||||
| r each delivery connection: | ||||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li>Delivery Connection ID.</li> | ||||
| <li>Connection Type (e.g., Wi-Fi, 5G NR, MulteFire, LTE).</li> | ||||
| <li> | ||||
| <t>If the connection type is Wi-Fi: | ||||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li>High and low thresholds for the sending of average | ||||
| Received Signal Strength Indicator (RSSI) of the Wi-Fi link.</ | ||||
| li> | ||||
| <li>Periodicity, in ms, for sending the average RSSI of the Wi-Fi | ||||
| link.</li> | ||||
| <li>High and low thresholds for sending the loading of the WLAN sy | ||||
| stem.</li> | ||||
| <li>Periodicity, in ms, for sending the loading of the WLAN system | ||||
| .</li> | ||||
| <li>High and low thresholds for sending the reverse link throughpu | ||||
| t on the Wi-Fi link.</li> | ||||
| <li>Periodicity, in ms, for sending the reverse link throughput on | ||||
| the Wi-Fi link.</li> | ||||
| <li>High and low thresholds for sending the forward link throughpu | ||||
| t on the Wi-Fi link.</li> | ||||
| <li>Periodicity, in ms, for sending the forward link throughput on | ||||
| the Wi-Fi link.</li> | ||||
| <li>High and low thresholds for sending the reverse link throughpu | ||||
| t (EstimatedThroughputOutbound as defined in <xref target="IEEE-80211" format="d | ||||
| efault"/>) on the Wi-Fi link.</li> | ||||
| <li>Periodicity, in ms, for sending the reverse link throughput (E | ||||
| stimatedThroughputOutbound as defined in <xref target="IEEE-80211" format="defau | ||||
| lt"/>) on the Wi-Fi link.</li> | ||||
| <li>High and low thresholds for sending the forward link throughpu | ||||
| t (EstimatedThroughputInbound, as defined in <xref target="IEEE-80211" format="d | ||||
| efault"/>) on the Wi-Fi link.</li> | ||||
| <li>Periodicity, in ms, for sending the forward link throughput (E | ||||
| stimatedThroughputInbound, as defined in <xref target="IEEE-80211" format="defau | ||||
| lt"/>) on the Wi-Fi link.</li> | ||||
| </ul> | ||||
| </li> | ||||
| <li> | ||||
| <t>If the connection type is LTE: | ||||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li>High and low thresholds for sending the Reference Signal Recei | ||||
| ved Power (RSRP) of the serving LTE link.</li> | ||||
| <li>Periodicity, in ms, for sending the RSRP of the serving LTE li | ||||
| nk.</li> | ||||
| <li>High and low thresholds for sending the RSRQ (Reference Signal | ||||
| Received Quality) of the serving LTE link.</li> | ||||
| <li>Periodicity, in ms, for sending the RSRP of the serving LTE li | ||||
| nk.</li> | ||||
| <li>High and low thresholds for sending the reverse link throughpu | ||||
| t on the serving LTE link.</li> | ||||
| <li>Periodicity, in ms, for sending the reverse link throughput on | ||||
| the serving LTE link.</li> | ||||
| <li>High and low thresholds, for sending the forward link throughp | ||||
| ut on the serving LTE link.</li> | ||||
| <li>Periodicity, in ms, for sending the forward link throughput on | ||||
| the serving LTE link.</li> | ||||
| </ul> | ||||
| </li> | ||||
| <li> | ||||
| <t>If the connection type is 5G NR: | ||||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li>High and low thresholds for sending the RSRP of the serving NR | ||||
| link.</li> | ||||
| <li>Periodicity, in ms, for sending the RSRP of the serving NR lin | ||||
| k.</li> | ||||
| <li>High and low thresholds for sending the RSRQ of the serving NR | ||||
| link.</li> | ||||
| <li>Periodicity, in ms, for sending the RSRP of the serving NR lin | ||||
| k.</li> | ||||
| <li>High and low thresholds for sending the reverse link throughpu | ||||
| t on the serving NR link.</li> | ||||
| <li>Periodicity, in ms, for sending the reverse link throughput on | ||||
| the serving NR link.</li> | ||||
| <li>High and low thresholds for sending the forward link throughpu | ||||
| t on the serving NR link.</li> | ||||
| <li>Periodicity, in ms, for sending the forward link throughput on | ||||
| the serving NR link.</li> | ||||
| </ul> | ||||
| </li> | ||||
| </ul> | ||||
| <t>The MX Measurement Report contains the following parameters: | ||||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li>Unique Session ID: Session identifier provided to the client in an | ||||
| MX Capability Response.</li> | ||||
| <li> | ||||
| <t>For each delivery connection, include the following: | ||||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li>Delivery Connection ID</li> | ||||
| <li>Connection Type (e.g., Wi-Fi, 5G NR, MulteFire, LTE)</li> | ||||
| <li>Delivery Node ID (ECGI in the case of LTE. | ||||
| In the case of Wi-Fi, this is an AP ID or a MAC address.) </l | ||||
| i> | ||||
| <li> | ||||
| <t>If the connection type is Wi-Fi: | ||||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li>Average RSSI of the Wi-Fi link.</li> | ||||
| <li>Loading of the WLAN system.</li> | ||||
| <li>Reverse link throughput on the Wi-Fi link.</li> | ||||
| <li>Forward link throughput on the Wi-Fi link.</li> | ||||
| <li>Estimated reverse link throughput on the Wi-Fi link (Estim | ||||
| atedThroughputOutbound as defined in <xref target="IEEE-80211" format="default" | ||||
| />).</li> | ||||
| <li>Estimated forward link throughput on the Wi-Fi link (Estim | ||||
| atedThroughputInbound, as defined in <xref target="IEEE-80211" format="default" | ||||
| />).</li> | ||||
| </ul> | ||||
| </li> | ||||
| <li> | ||||
| <t>If the connection type is LTE: | ||||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li>RSRP of the serving LTE link.</li> | ||||
| <li>RSRQ of the serving LTE link.</li> | ||||
| <li>Reverse link throughput on the serving LTE link.</li> | ||||
| <li>Forward link throughput on the serving LTE link.</li> | ||||
| </ul> | ||||
| </li> | ||||
| <li> | ||||
| <t>If the connection type is 5G NR: | ||||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li>RSRP of the serving NR link.</li> | ||||
| <li>RSRQ of the serving NR link.</li> | ||||
| <li>Reverse link throughput on the serving NR link.</li> | ||||
| <li>Forward link throughput on the serving NR link.</li> | ||||
| </ul> | ||||
| </li> | ||||
| </ul> | ||||
| </li> | ||||
| </ul> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>MAMS Session Termination Procedure</name> | ||||
| <figure anchor="figure11"> | ||||
| <name>MAMS Session Termination Procedure - Initiated by Client</name> | ||||
| <artwork align="center" name="" type="" alt=""><![CDATA[ | ||||
| CCM NCM | ||||
| | | | ||||
| |---- MX Session Termination REQ --->| | ||||
| | | | ||||
| | | | ||||
| |<--- MX Session Termination RSP ----| | ||||
| | | | ||||
| | +------------------+ | ||||
| | | Remove Resources | | ||||
| | +------------------+ | ||||
| | | | ||||
| ]]></artwork> | ||||
| </figure> | ||||
| <figure anchor="figure12"> | ||||
| <name>MAMS Session Termination Procedure - Initiated by Network</name> | ||||
| <artwork align="center" name="" type="" alt=""><![CDATA[ | ||||
| CCM NCM | ||||
| | | | ||||
| |<--- MX Session Termination REQ ----| | ||||
| | | | ||||
| | | | ||||
| |---- MX Session Termination RSP --->| | ||||
| | | | ||||
| +------------------+ | | ||||
| | Remove Resources | | | ||||
| +------------------+ | | ||||
| | | | ||||
| ]]></artwork> | ||||
| </figure> | ||||
| <t>At any point in MAMS processing, if the CCM or NCM is no longer able | ||||
| to | ||||
| support the MAMS functions, then either of them can initiate a terminatio | ||||
| n | ||||
| procedure by sending an MX Session Termination Request to the peer. The | ||||
| peer <bcp14>SHALL</bcp14> | ||||
| acknowledge the termination by sending an MX Session Termination Response | ||||
| message. After the session is disconnected, the CCM <bcp14>SHALL</bcp14> | ||||
| start a new | ||||
| procedure with an MX Discover message. An MX Session Termination Request | ||||
| shall | ||||
| contain a Unique Session ID and the reason for the termination. | ||||
| Possible reasons for termination are: | ||||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li>Normal Release</li> | ||||
| <li>No Response from Peer</li> | ||||
| <li>Internal Error</li> | ||||
| </ul> | ||||
| </section> | ||||
| <section anchor="network_analytics_section" numbered="true" toc="default"> | ||||
| <name>MAMS Network Analytics Request Procedure</name> | ||||
| <figure anchor="figure_NetAnalyticsReq"> | ||||
| <name>MAMS Network Analytics Request Procedure</name> | ||||
| <artwork align="center" name="" type="" alt=""><![CDATA[ | ||||
| CCM NCM | ||||
| | | | ||||
| |----- MX Network Analytics REQ --->| | ||||
| | | | ||||
| | | | ||||
| |<--- MX Network Analytics RSP -----| | ||||
| | | | ||||
| ]]></artwork> | ||||
| </figure> | ||||
| <t>The CCM sends the MX Network Analytics Request to the NCM to request | ||||
| information related to such network parameters as bandwidth, latency, jit | ||||
| ter, | ||||
| and signal quality, based on the application of analytics at the network | ||||
| (utilizing the received path measurements and client measurement reportin | ||||
| g).</t> | ||||
| <t>The MX Network Analytics Request consists of the following parameters | ||||
| : | ||||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li> | ||||
| <t>Link Quality Indicators. One or more of the following: | ||||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li>Bandwidth</li> | ||||
| <li>Jitter</li> | ||||
| <li>Latency</li> | ||||
| <li>Signal Quality</li> | ||||
| </ul> | ||||
| </li> | ||||
| </ul> | ||||
| <t>The NCM sends the MX Network Analytics Response to convey | ||||
| analytics information that might be of interest to the CCM. This | ||||
| message will include network parameters with their predicted likelihoods. | ||||
| </t> | ||||
| <t>The MX Network Analytics Response consists of the following parameter | ||||
| s: | ||||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li> | ||||
| <t>Number of Delivery Connections. | ||||
| </t> | ||||
| <t>For each delivery connection, include the following: | ||||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li> | ||||
| <t>Access Link Identifier: | ||||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li>Connection Type</li> | ||||
| <li>Connection ID</li> | ||||
| </ul> | ||||
| </li> | ||||
| <li> | ||||
| <t>Link Quality Indicator: | ||||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li> | ||||
| <t>Bandwidth: | ||||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li>Predicted Value (Mbps)</li> | ||||
| <li>Likelihood (percent)</li> | ||||
| <li>Prediction Validity (Validity Time, in seconds)</li> | ||||
| </ul> | ||||
| </li> | ||||
| <li> | ||||
| <t>Jitter: | ||||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li>Predicted Value (in seconds)</li> | ||||
| <li>Likelihood (percent)</li> | ||||
| <li>Prediction Validity (Validity Time, in seconds)</li> | ||||
| </ul> | ||||
| </li> | ||||
| <li> | ||||
| <t>Latency: | ||||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li>Predicted Value (in seconds)</li> | ||||
| <li>Likelihood (percent)</li> | ||||
| <li>Prediction Validity (Validity Time, in seconds)</li> | ||||
| </ul> | ||||
| </li> | ||||
| <li> | ||||
| <t>Signal Quality: | ||||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li>If delivery connection type is LTE, LTE_RSRP Predicted | ||||
| Value in decibel-milliwatts (dBm)</li> | ||||
| <li>If delivery connection type is LTE, LTE_RSRQ Predicted | ||||
| Value (dBm)</li> | ||||
| <li>If delivery connection type is 5G NR, NR_RSRP Predicte | ||||
| d Value (dBm)</li> | ||||
| <li>If delivery connection type is 5G NR, NR_RSRQ Predicte | ||||
| d Value (dBm)</li> | ||||
| <li>If delivery connection type is Wi-Fi, WLAN_RSSI Predic | ||||
| ted Value (dBm)</li> | ||||
| <li>Likelihood (percent)</li> | ||||
| <li>Prediction Validity (Validity Time, in seconds)</li> | ||||
| </ul> | ||||
| </li> | ||||
| </ul> | ||||
| </li> | ||||
| </ul> | ||||
| </li> | ||||
| </ul> | ||||
| </section> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>Generic MAMS Signaling Flow</name> | ||||
| <t><xref target="figure13" format="default"/> illustrates the MAMS signali | ||||
| ng mechanism | ||||
| for negotiation of network paths and flow protocols between the client | ||||
| and the network. In this example scenario, the client is connected to | ||||
| two networks (LTE and Wi-Fi).</t> | ||||
| <figure anchor="figure13"> | ||||
| <name>MAMS Call Flow</name> | ||||
| <artwork align="center" name="" type="" alt=""><![CDATA[ | ||||
| +--------------------------------------------+ | ||||
| | MAMS-enabled Network of Networks | | ||||
| | +-------+ +-------+ +-----+ +------+ | | ||||
| +------------------+ | | | | | | | | | | | ||||
| | Client | | |Network| |Network| | | | | | | ||||
| | +------+ +-----+ | | | 1 | | 2 | | NCM | |N-MADP| | | ||||
| | |C-MADP| | CCM | | | | (LTE) | |(Wi-Fi)| | | | | | | ||||
| | +------+ +-----+ | | +-------+ +-------+ +-----+ +------+ | | ||||
| | | | | | | | | | | | ||||
| | | | | | | | | ||||
| | | | | | | | | ||||
| | | 1. Setup Connection | | | | | ||||
| |<-----------+------------->| | | | | ||||
| | | | | | | | | ||||
| | | | 2. MAMS Capabilities Exchange | | | ||||
| | | |<-------------+-----------+--------->| | | ||||
| | | | | | | | | ||||
| | | 3. Setup Connection | | | | | ||||
| |<--+---------------------------------->| | | | ||||
| | | | | | | | | ||||
| | 4c. Config | 4a. Negotiate network paths, |4b. Config| | ||||
| | | C-MADP | Flow protocol, and parameters | N-MADP| | ||||
| | |<------>|<-------------+-----------+--------->|<-------->| | ||||
| | | | | | | | | ||||
| | | | 5. Establish user-plane path according | | ||||
| | | | to selected flow protocol | | | ||||
| | |<----------------------+-----------+-------------------->| | ||||
| | | | | | | | | ||||
| + + + + + + + | ||||
| ]]></artwork> | ||||
| </figure> | ||||
| <ol spacing="normal" type="1"> | ||||
| <li>The client connects to Network 1 and gets an IP address assigned by | ||||
| Network 1.</li> | ||||
| <li>The CCM communicates with the NCM functional element via the Network | ||||
| 1 | ||||
| connection and exchanges capabilities and parameters for MAMS operation. | ||||
| Note: | ||||
| The NCM credentials (e.g., the NCM's IP address) can be made known to th | ||||
| e client | ||||
| by provisioning.</li> | ||||
| <li>The client sets up the connection with Network 2 and gets an IP addr | ||||
| ess | ||||
| assigned by Network 2.</li> | ||||
| <li> | ||||
| <t>The CCM and NCM negotiate capabilities and parameters for establish | ||||
| ing | ||||
| network paths. The negotiated capabilities and parameters are then used | ||||
| to configure user-plane functions, i.e., the N-MADP at the network | ||||
| and the C-MADP at the client. | ||||
| </t> | ||||
| <ol spacing="normal" type="4%c."> | ||||
| <li>The CCM and NCM negotiate network paths, flow routing and aggreg | ||||
| ation | ||||
| protocols, and related parameters.</li> | ||||
| <li>The NCM communicates with the N-MADP to exchange and configure | ||||
| flow aggregation protocols, policies, and parameters in alignment w | ||||
| ith | ||||
| those negotiated with the CCM.</li> | ||||
| <li>The CCM communicates with the C-MADP to exchange and configure | ||||
| flow aggregation protocols, policies, and parameters in alignment w | ||||
| ith | ||||
| those negotiated with the NCM.</li> | ||||
| </ol> | ||||
| </li> | ||||
| <li>The C-MADP and N-MADP establish the user-plane paths, e.g., | ||||
| using Internet Key Exchange Protocol (IKE) <xref target="RFC7296" format | ||||
| ="default"/> | ||||
| signaling, based on the negotiated flow aggregation protocols and parame | ||||
| ters | ||||
| specified by the NCM.</li> | ||||
| </ol> | ||||
| <t>The CCM and NCM can further exchange messages containing access link | ||||
| measurements for link maintenance by the NCM. The NCM evaluates the link | ||||
| conditions in the UL and DL across LTE and Wi-Fi, based on link | ||||
| measurements reported by the CCM and/or link-probing techniques, and | ||||
| determines the policy for UL and DL user data distribution. The NCM and CC | ||||
| M | ||||
| also negotiate application-level policies for categorizing applications, | ||||
| e.g., based on the Differentiated Services Code Point (DSCP), destination I | ||||
| P | ||||
| address, and determination of which available network path needs to be used | ||||
| for transporting data of that category of applications. The NCM configures | ||||
| the N-MADP, and the CCM configures the C-MADP, based on the negotiated | ||||
| application policies. The CCM may apply local application policies, in | ||||
| addition to the application policy conveyed by the NCM.</t> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>Relationship to IETF Technologies</name> | ||||
| <t>The MAMS framework leverages technologies developed in the IETF (such a | ||||
| s MPTCP and GRE) and | ||||
| enables a control-plane framework to negotiate the use of these protocols b | ||||
| etween the client | ||||
| and the network. It also addresses the limitations in scope of other multi | ||||
| homing protocols. | ||||
| For example, the IKEv2 Mobility and Multihoming Protocol (MOBIKE <xref targ | ||||
| et="RFC4555" format="default"/>) scope | ||||
| indicates that it is limited to multihoming between IPsec | ||||
| clients (tunnel mode IPsec Security Associations) and does not support load | ||||
| balancing. | ||||
| To address this limitation regarding how the multihoming scenario is handle | ||||
| d, | ||||
| the MAMS framework supports load balancing with the simultaneous use of mul | ||||
| tiple access | ||||
| paths by negotiating the use of protocols like MPTCP. Unlike MOBIKE, which | ||||
| only applies to endpoints connected with an IPsec tunnel mode Security Asso | ||||
| ciation, the MAMS | ||||
| framework allows the flexibility to use a wide range of tunneling protocols | ||||
| in the Adaptation Layer.</t> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>Applying MAMS Control Procedures with MPTCP Proxy as User Plane</nam | ||||
| e> | ||||
| <t>If the NCM determines that the N-MADP is to be instantiated with MPTCP | ||||
| as | ||||
| the MX Convergence Protocol, it exchanges the MPTCP capability support in t | ||||
| he | ||||
| discovery and capability exchange procedures. | ||||
| An MPTCP proxy (e.g., see <xref target="I-D.ietf-tcpm-converters" format="d | ||||
| efault"/>) is configured to | ||||
| be the N-MADP instance. The NCM then provides the credentials of the MPTCP | ||||
| Proxy instance, along with related parameters, to the CCM. | ||||
| The CCM configures the C-MADP with these parameters to connect to this | ||||
| MPTCP proxy instance.</t> | ||||
| <t><xref target="figure_mptcp_mams_uplane" format="default"/> illustrates | ||||
| the user-plane protocol layering when | ||||
| MPTCP is configured to be the "MX Convergence Layer" protocol. MPTCP manag | ||||
| es traffic distribution and | ||||
| aggregation over multiple delivery connections. | ||||
| </t> | ||||
| <figure anchor="figure_mptcp_mams_uplane"> | ||||
| <name>MAMS User-Plane Protocol Stack with MPTCP as MX Convergence Layer< | ||||
| /name> | ||||
| <artwork align="center" name="" type="" alt=""><![CDATA[ | ||||
| +-----------------------------------------------------+ | ||||
| | MPTCP | | ||||
| +-----------------+-----------------+-----------------+ | ||||
| | TCP | TCP | TCP | | ||||
| +-----------------------------------------------------+ | ||||
| | MX Adaptation | MX Adaptation | MX Adaptation | | ||||
| | Layer | Layer | Layer | | ||||
| | (optional) | (optional) | (optional) | | ||||
| +-----------------------------------------------------+ | ||||
| | Access #1 IP | Access #2 IP | Access #3 IP | | ||||
| +-----------------+-----------------+-----------------+ | ||||
| ]]></artwork> | ||||
| </figure> | ||||
| <t> | ||||
| The client (C-MADP) sets up an MPTCP connection with the N-MADP to begin wi | ||||
| th. The MAMS control procedures are | ||||
| then applied to do the following: | ||||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li>Connect to the appropriate MPTCP network endpoint, e.g., the MPTCP p | ||||
| roxy (illustrated in <xref target="figure_mams_mptcp_flow_init" format="default" | ||||
| />).</li> | ||||
| <li>Control the addition of a second TCP subflow after the Wi-Fi | ||||
| connection is established and is deemed good (illustrated in <xref t | ||||
| arget="figure_mams_mptcp_flow_add_wifi" format="default"/>).</li> | ||||
| <li>Control the behavior of the MPTCP scheduler, e.g., by using only the | ||||
| LTE | ||||
| subflow in the UL and both the LTE and Wi-Fi subflows in the DL | ||||
| (illustrated in <xref target="figure_mams_mptcp_flow_wifi_degrades" | ||||
| format="default"/>).</li> | ||||
| <li>Provide faster response to Wi-Fi link degradation by proactively del | ||||
| eting a | ||||
| TCP subflow over Wi-Fi when poor link conditions are reported, maint | ||||
| aining | ||||
| optimum performance (illustrated in <xref target="figure_mams_mptcp_ | ||||
| flow_wifi_delete" format="default"/>).</li> | ||||
| </ul> | ||||
| <t><xref target="figure_mams_mptcp_flow_init" format="default"/> shows the | ||||
| call flow describing MAMS control | ||||
| procedures applied to configure the user plane and dynamic optimal path sel | ||||
| ection | ||||
| in a scenario with the MPTCP proxy as the convergence protocol in the user | ||||
| plane. | ||||
| </t> | ||||
| <figure anchor="figure_mams_mptcp_flow_init"> | ||||
| <name>MAMS-Assisted MPTCP Proxy as User Plane - Initial Setup with LTE L | ||||
| eg</name> | ||||
| <artwork align="center" name="" type="" alt=""><![CDATA[ | ||||
| +------+ +--------+ +--------+ +-------+ +-------+ +------+ | ||||
| | | | | | | | | | | | | | ||||
| | CCM | | C-MADP | | Wi-Fi | | LTE | | NCM | |N-MADP| | ||||
| | | | | | N/W | | N/W | | | | | | ||||
| +------+ +--------+ +--------+ +-------+ +-------+ +------+ | ||||
| +------------------------------------------------------------------+ | ||||
| | 1. LTE Session Setup and IP Address Allocation | | ||||
| +-----------------------------------------+-----------+------------+ | ||||
| | | | | | ||||
| |2. MX Discover (MAMS Version, MCC/MNC) | | | | ||||
| +----------------------------------------+---------->| | | ||||
| |3. MX System Info (Serving NCM IP/Port Address) | | | ||||
| |<------------+-------------+-------------+----------+ | | ||||
| | | | | | | | ||||
| |4. MX Capability REQ (Supported Anchor/Delivery | | | ||||
| | | Links (Wi-Fi, LTE)) | | | ||||
| +--------------------------------------------------->| | | ||||
| |5. MX Capability RSP (Convergence/Adaptation Parameters) | | ||||
| |<----------------------------------------+----------+ | | ||||
| |6. MX Capability ACK (ACCEPT) | | | | ||||
| +-------------+-------------+----------------------->| | | ||||
| | | | | | | | ||||
| |7. MX Meas Config (Wi-Fi/LTE Measurement Thresholds/Period) | | ||||
| |<---------------------------------------------------+ | | ||||
| |8. MX Meas Report (LTE RSRP, UL/DL TPUT) | | | | ||||
| +-----------------------------------------+--------->| | | ||||
| |9. MX SSID Indication (List of SSIDs) | | | | ||||
| |<------------+-------------+------------------------+ | | ||||
| | | | | | | | ||||
| |10. MX Reconfiguration REQ (LTE IP) | | | | ||||
| +--------------------------------------------------->| | | ||||
| |11. MX Reconfiguration RSP | | | | ||||
| |<----------------------------------------+----------+ | | ||||
| |12. MX UP Setup REQ (MPTCP proxy IP/Port, Aggregation) | | ||||
| |<--------------------------+-------------+----------+ | | ||||
| |13. MX UP Setup RSP | | | | | ||||
| +-------------+-------------+-------------+--------->| | | ||||
| | | 14. MPTCP connection with designated | | | ||||
| | | MPTCP proxy over LTE | | | ||||
| | +-------------+-------------+----------+------->| | ||||
| | | | | | | | ||||
| + + + + + + | ||||
| ]]></artwork> | ||||
| </figure> | ||||
| <t>The salient steps described in the call flow are as follows. | ||||
| The client connects to the LTE network and obtains an IP address (assume th | ||||
| at | ||||
| LTE is the first connection). It then initiates the NCM discovery procedur | ||||
| es | ||||
| and exchanges capabilities, including the support for MPTCP as the converge | ||||
| nce | ||||
| protocol at both the network and the client.</t> | ||||
| <t>The CCM provides the LTE connection parameters to the NCM. The NCM pro | ||||
| vides | ||||
| the parameters like MPTCP proxy IP address/port, and MPTCP Client Key for | ||||
| configuring the Convergence Layer. This is useful if the N-MADP is | ||||
| reachable, via a different IP address or/and port, from different access | ||||
| networks. The current MPTCP signaling can't identify or differentiate the | ||||
| MPTCP proxy IP address and port from multiple access networks. | ||||
| The client uses the MPTCP Client Key during the subflow creation, and this | ||||
| enables the N-MADP to uniquely identify the client, even if a NAT is | ||||
| present. The N-MADP can then inform the NCM of the subflow creation and | ||||
| parameters related to creating additional subflows. | ||||
| Since LTE is the only connection, the user-plane traffic flows over the | ||||
| single TCP subflow over the LTE connection. | ||||
| Optionally, the NCM provides assistance information to the client on the | ||||
| neighboring/preferred Wi-Fi networks that it can associate with.</t> | ||||
| <t><xref target="figure_mams_mptcp_flow_add_wifi" format="default"/> descr | ||||
| ibes the steps where the client establishes | ||||
| a Wi-Fi connection. The CCM informs the NCM of the Wi-Fi connection, along | ||||
| with | ||||
| such parameters as the Wi-Fi IP address or the SSID. The NCM determines th | ||||
| at | ||||
| the Wi-Fi connection needs to be secured, configures the Adaptation Layer | ||||
| to use IPsec, and provides the required parameters to the CCM. In addition | ||||
| , the | ||||
| NCM provides the information for configuring the Convergence Layer (e.g., | ||||
| MPTCP proxy IP address) and provides the MX Traffic Steering Request to ind | ||||
| icate | ||||
| that the client <bcp14>SHOULD</bcp14> use only the LTE access. The NCM may | ||||
| do this, for | ||||
| example, on determining from the measurements that the Wi-Fi link is not | ||||
| consistently good enough. As the Wi-Fi link conditions improve, the NCM se | ||||
| nds | ||||
| an MX Traffic Steering Request to use Wi-Fi access as well. This triggers | ||||
| the client | ||||
| to establish the TCP subflow over the Wi-Fi link with the MPTCP proxy.</t> | ||||
| <figure anchor="figure_mams_mptcp_flow_add_wifi"> | ||||
| <name>MAMS-Assisted MPTCP Proxy as User Plane - Add Wi-Fi Leg</name> | ||||
| <artwork align="center" name="" type="" alt=""><![CDATA[ | ||||
| +------+ +--------+ +--------+ +-------+ +-------+ +------+ | ||||
| | | | | | | | | | | | | | ||||
| | CCM | | C-MADP | | Wi-Fi | | LTE | | NCM | |N-MADP| | ||||
| | | | | | N/W | | N/W | | | | | | ||||
| +------+ +--------+ +--------+ +-------+ +-------+ +------+ | ||||
| +-------------------------------------------------------------------+ | ||||
| | Traffic over LTE in UL and DL over MPTCP Connection | | ||||
| +-------------------------------------------------------------------+ | ||||
| +-------------------------------------------------------------------+ | ||||
| | Wi-Fi Connection Establishment and IP Address Allocation | | ||||
| +----------------------------------------------------------------+--+ | ||||
| | | | | | | | ||||
| |15. MX Reconfiguration REQ (Wi-Fi IP) | | | | ||||
| +--------------------------------------------------->| | | ||||
| |16. MX Reconfiguration RSP | | | | ||||
| |<----------------------------------------+----------+ | | ||||
| |17. MX UP Setup REQ (MPTCP proxy IP/Port, Aggregation) | | ||||
| |<--------------------------+-------------+----------+ | | ||||
| |18. MX UP Setup RSP | | | | | ||||
| +-------------+-------------+-------------+--------->| | | ||||
| | |19. IPsec Tunnel Establishment over Wi-Fi Path | | ||||
| | |<-------------------------------------+-------->| | ||||
| | | | | | | | ||||
| |20. MX Meas Report (Wi-Fi RSSI, | | | | ||||
| | LTE RSRP, UL/DL TPUT) | |+------------+ | ||||
| +-------------+-------------+-------------+--------->||Wait for | | ||||
| | | | | ||good reports| | ||||
| | | | | |+------------+ | ||||
| |21. MX Traffic Steering REQ (UL/DL access, | | | ||||
| | Traffic Flow Templates (TFTs)) | +----------+ | ||||
| |<----------------------------------------+----------+ |Allow use | | ||||
| | | | | of | | ||||
| |22. MX Traffic Steering RSP (...) | | |Wi-Fi link| | ||||
| +-------------+-------------+----------------------->| +----------+ | ||||
| | | | | | | | ||||
| | | 23. Add TCP subflow to the MPTCP connection | | ||||
| | | over Wi-Fi link (IPsec Tunnel) | | ||||
| | |<---------------------------------------------->| | ||||
| | | | | | | | ||||
| +----------------------------------------------------------------+ | ||||
| || Aggregated Wi-Fi and LTE capacity for UL and DL || | ||||
| +----------------------------------------------------------------+ | ||||
| | | | ||||
| | | | ||||
| ]]></artwork> | ||||
| </figure> | ||||
| <t><xref target="figure_mams_mptcp_flow_wifi_degrades" format="default"/> | ||||
| describes the steps where the client reports | ||||
| that Wi-Fi link conditions degrade in UL. The MAMS control plane is used t | ||||
| o continuously monitor the | ||||
| access link conditions on Wi-Fi and LTE connections. The NCM may at some p | ||||
| oint determine an increase in | ||||
| UL traffic on the Wi-Fi network, and trigger the client to use only LTE in | ||||
| the UL via a MX Traffic Steering Request to | ||||
| improve UL performance.</t> | ||||
| <figure anchor="figure_mams_mptcp_flow_wifi_degrades"> | ||||
| <name>MAMS-Assisted MPTCP Proxy as User Plane - Wi-Fi UL Degrades</name> | ||||
| <artwork align="center" name="" type="" alt=""><![CDATA[ | ||||
| +------+ +--------+ +--------+ +-------+ +-------+ +------+ | ||||
| | | | | | | | | | | | | | ||||
| | CCM | | C-MADP | | Wi-Fi | | LTE | | NCM | |N-MADP| | ||||
| | | | | | N/W | | N/W | | | | | | ||||
| +------+ +--------+ +--------+ +-------+ +-------+ +------+ | ||||
| +-------------------------------------------------------------------+ | ||||
| | Traffic over LTE and Wi-Fi in UL And DL over MPTCP | | ||||
| | | | | | | | ||||
| |24. MX Meas Report (Wi-Fi RSSI, LTE RSRP, UL/DL TPUT)| +------+---+ | ||||
| +------------+-------------+-------------+----------->| |Reports of| | ||||
| | | | | | |bad Wi-Fi | | ||||
| | | | | | |UL tput | | ||||
| | | | | | +----------+ | ||||
| |25. MX Traffic Steering REQ (UL/DL Access, TFTs) | +----------+ | ||||
| |<---------------------------------------+------------+ |Disallow | | ||||
| | | | | | |use of | | ||||
| |26. MX Traffic Steering RSP (...) | | |Wi-Fi UL | | ||||
| |------------+-------------+------------------------->| +------+---+ | ||||
| | | | | | | | ||||
| | UL data to use TCP subflow over LTE link only, | | ||||
| | aggregated Wi-Fi+LTE capacity for DL | | ||||
| | | | | | | | ||||
| + + + + + + | ||||
| ]]></artwork> | ||||
| </figure> | ||||
| <t><xref target="figure_mams_mptcp_flow_wifi_delete" format="default"/> de | ||||
| scribes the steps where the client reports that | ||||
| Wi-Fi link conditions have degraded in both the UL and DL. As the Wi-Fi | ||||
| link conditions deteriorate further, the NCM may decide to send a MX Traffi | ||||
| c | ||||
| Steering Request that instructs the client to stop using Wi-Fi and to use o | ||||
| nly | ||||
| the LTE access in both the UL and DL. This condition may be maintained | ||||
| until the NCM determines, based on reported measurements, that the Wi-Fi | ||||
| link has again become usable.</t> | ||||
| <figure anchor="figure_mams_mptcp_flow_wifi_delete"> | ||||
| <name>MAMS-Assisted MPTCP Proxy as User Plane - Part 4</name> | ||||
| <artwork align="center" name="" type="" alt=""><![CDATA[ | ||||
| +------+ +--------+ +--------+ +-------+ +-------+ +------+ | ||||
| | | | | | | | | | | | | | ||||
| | CCM | | C-MADP | | Wi-Fi | | LTE | | NCM | |N-MADP| | ||||
| | | | | | N/W | | N/W | | | | | | ||||
| +------+ +--------+ +--------+ +-------+ +-------+ +------+ | ||||
| +------------------------------------------------------------------+ | ||||
| | UL data to use TCP subflow over LTE link only, | | ||||
| | aggregated Wi-Fi+LTE capacity for DL | | ||||
| | | | | | | | ||||
| | | | | | | | ||||
| |27. MX Meas Report (Wi-Fi RSSI, | | | | ||||
| | LTE RSRP, UL/DL TPUT) | | +-------+----+ | ||||
| +------------+-------------+-------------+--------->| | Reports of | | ||||
| | | | | | | bad Wi-Fi | | ||||
| | | | | | | UL/DL tput | | ||||
| | | | | | +------------+ | ||||
| |28. MX Traffic Steering REQ (UL/DL Access, TFTs) | +------------+ | ||||
| |<---------------------------------------+----------+ | Disallow | | ||||
| | | | | | | use of | | ||||
| |29. MX Traffic Steering RSP (...) | | | Wi-Fi | | ||||
| +----------------------------------------+--------->| +------------+ | ||||
| | |30. Delete TCP subflow from MPTCP | | | ||||
| | | connection over Wi-Fi link | | | ||||
| | |<---------------------------------------------->| | ||||
| | | | | | | | ||||
| +--------------------------------------------------------------+ | ||||
| || Traffic over LTE link only for DL and UL | | ||||
| || (until client reports better Wi-Fi link conditions) | | ||||
| +--------------------------------------------------------------+ | ||||
| | | | | | | | ||||
| + + + + + + | ||||
| ]]></artwork> | ||||
| </figure> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>Applying MAMS Control Procedures for Network-Assisted Traffic Steeri | ||||
| ng When There Is No Convergence Layer</name> | ||||
| <t><xref target="figure_no_convergence" format="default"/> shows the call | ||||
| flow describing MAMS control | ||||
| procedures applied for dynamic optimal path selection in a scenario where | ||||
| Convergence and Adaptation Layer protocols are omitted. | ||||
| This scenario indicates the | ||||
| applicability of a solution for only the MAMS control plane.</t> | ||||
| <t>In the capability exchange messages, the NCM and CCM negotiate that | ||||
| Convergence-Layer and Adaptation-Layer protocols are not needed (or | ||||
| supported). The CCM informs the NCM of the availability of the LTE | ||||
| and Wi-Fi links. The NCM dynamically determines the access links | ||||
| (Wi-Fi or LTE) to be used based on the reported measurements of link | ||||
| quality.</t> | ||||
| <figure anchor="figure_no_convergence"> | ||||
| <name>MAMS with No Convergence Layer</name> | ||||
| <artwork align="center" name="" type="" alt=""><![CDATA[ | ||||
| +------+ +--------+ +--------+ +-------+ +-------+ +------+ | ||||
| | | | | | | | | | | | | | ||||
| | CCM | | C-MADP | | Wi-Fi | | LTE | | NCM | |N-MADP| | ||||
| | | | | | N/W | | N/W | | | | | | ||||
| +------+ +--------+ +--------+ +-------+ +-------+ +------+ | ||||
| +------------------------------------------------------------------+ | ||||
| | 1. LTE Session Setup and IP Address Allocation | | ||||
| +---------------------------------------+-------------+----------+-+ | ||||
| |2. MX Discover (MAMS Version, MCC/MNC ) | | | ||||
| +--------------------------------------+------------>| | | ||||
| |3. MX System Info (Serving NCM IP/Port address) | | | ||||
| |<------------+-------------+----------+-------------| | | ||||
| | | | | | | | ||||
| |4. MX Capability REQ (Supported | | | | ||||
| | Anchor/Delivery Links (Wi-Fi, LTE))| | | | ||||
| +--------------------------------------------------->| | | ||||
| |5. MX Capability RSP (No Convergence/Adaptation parameters) | | ||||
| |<-------------------------------------+-------------+ | | ||||
| |6. MX Capability ACK (ACCEPT) | | | | ||||
| +-------------+-------------+----------------------->| | | ||||
| | | | | | | | ||||
| |7. MX Meas Config (Wi-Fi/LTE Measurement Thresholds/Period) | | ||||
| |<---------------------------------------------------| | | ||||
| |8. MX Meas Report (LTE RSRP, UL/DL TPUT) | | | ||||
| |--------------------------------------+------------>| | | ||||
| |9. MX SSID Ind (List of SSIDs) | | | | ||||
| |<---------------------------------------------------| | | ||||
| +-----------------------------------------------------------------++ | ||||
| | 10. Wi-Fi Connection Setup and IP Address Allocation | | ||||
| +-+-------------+-------------+----------+-------------+----------++ | ||||
| | | | | | | | ||||
| |11. MX Reconfiguration REQ (LTE IP, Wi-Fi IP) | | | ||||
| |--------------------------------------+------------>| | | ||||
| |12. MX Reconfiguration RSP | | | | ||||
| |<---------------------------------------------------| | | ||||
| +-----------------------------------------------------------------++ | ||||
| | Initial Condition, Data over LTE link only, Wi-Fi link is poor | | ||||
| +------------------------------------------------------+----------++ | ||||
| | | | | | | | ||||
| |13. MX Meas Report (Wi-Fi RSSI, | | | | ||||
| | LTE RSRP, UL/DL TPUT)| | |+----------+ | ||||
| |--------------------------------------------------->||Wi-Fi link| | ||||
| | | | | ||conditions| | ||||
| | | | | ||reported | | ||||
| | | | | ||good | | ||||
| | | | | |+----------+ | ||||
| | | | | | | | ||||
| |14. MX Traffic Steering REQ (UL/DL Access, TFTs) |+----------+ | ||||
| |<------------+-------------+----------+-------------||Steer | | ||||
| | | | | ||traffic to| | ||||
| |15. MX Traffic Steering RSP (...) | ||use Wi-Fi | | ||||
| |<------------+-------------+----------+-------------||link | | ||||
| | | | | |+----------+ | ||||
| | | | | | | | ||||
| +-----------------------------------------------------------------++ | ||||
| | Use Wi-Fi link for Data | | ||||
| +------------------------------------------------------+----------++ | ||||
| | | | | | | | ||||
| + + + + + + | ||||
| ]]></artwork> | ||||
| </figure> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>Coexistence of MX Adaptation and MX Convergence Layers</name> | ||||
| <t>The MAMS user plane supports multiple instances and combinations of | ||||
| protocols to be used at the MX Adaptation and the Convergence Layer.</t> | ||||
| <t>For example, one instance of the MX Convergence Layer can be MPTCP | ||||
| Proxy and another instance can be GMA. The MX Adaptation for each can | ||||
| be either a UDP tunnel or IPsec. IPsec may be set up when the network path | ||||
| needs to be secured, e.g., to protect the TCP subflow traversing the | ||||
| network path between the client and the MPTCP proxy.</t> | ||||
| <t>Each instance of the MAMS user plane, i.e., the combination of | ||||
| MX Convergence-Layer and MX Adaptation-Layer protocols, can coexist | ||||
| simultaneously and independently handle different traffic types.</t> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>Security Considerations</name> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>MAMS Control-Plane Security</name> | ||||
| <t>The NCM functional element is hosted on a network node that is assume | ||||
| d to be | ||||
| within a secure network, e.g., within the operator's network, and is assu | ||||
| med to | ||||
| be protected against hijack attacks.</t> | ||||
| <t>For deployment scenarios where the client is configured (e.g., by the | ||||
| network operator) to use a specific network path for exchanging control-p | ||||
| lane | ||||
| messages, and if the network path is assumed to be secure, MAMS control | ||||
| messages will rely on security provided by the underlying network.</t> | ||||
| <t>For deployment scenarios where the security of the network path canno | ||||
| t be | ||||
| assumed, NCM and CCM implementations <bcp14>MUST</bcp14> support the "wss | ||||
| " URI scheme | ||||
| <xref target="RFC6455" format="default"/> and Transport Layer Security (T | ||||
| LS) | ||||
| <xref target="RFC8446" format="default"/> to secure the exchange of contr | ||||
| ol-plane | ||||
| messages between the NCM and the CCM.</t> | ||||
| <t>For deployment scenarios where client authentication is desired, the | ||||
| WebSocket | ||||
| server can use any client authentication mechanisms available to a generi | ||||
| c | ||||
| HTTP server, such as cookies, HTTP authentication, or TLS authentication. | ||||
| </t> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>MAMS User-Plane Security</name> | ||||
| <t>User data in the MAMS framework relies on the security of the underly | ||||
| ing | ||||
| network transport paths. When this security cannot be assumed, the NCM | ||||
| configures the use of protocols (e.g., IPsec <xref target="RFC4301" forma | ||||
| t="default"/> <xref target="RFC3948" format="default"/>) in the MX Adaptation La | ||||
| yer, for security.</t> | ||||
| </section> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>Implementation Considerations</name> | ||||
| <t>The MAMS architecture builds on commonly available functions in clients | ||||
| that can be used to deliver software updates over | ||||
| popular client operating systems, thereby enabling rapid | ||||
| deployment and addressing the large base of deployed clients.</t> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>Applicability to Multi-Access Edge Computing</name> | ||||
| <t>Multi-access Edge Computing (MEC), previously known as Mobile Edge | ||||
| Computing, is an access-edge cloud platform being considered at | ||||
| the European Telecommunications Standards Institute (ETSI) | ||||
| <xref target="ETSIMEC" format="default"/>, whose initial focus was to impro | ||||
| ve the QoE | ||||
| by leveraging intelligence at the cellular (e.g., | ||||
| 3GPP technologies like LTE) access edge, and the scope is now being | ||||
| extended to support access technologies beyond 3GPP. The applicability of | ||||
| the framework described in this document to the MEC platform has been | ||||
| evaluated and tested in different network configurations by the authors.</t | ||||
| > | ||||
| <t>The NCM can be hosted on a MEC cloud server that is located in the | ||||
| user-plane path at the edge of the multi-technology access network. | ||||
| The NCM and CCM can negotiate the network path combinations based on | ||||
| an application's needs and the necessary user-plane protocols to be used | ||||
| across the multiple paths. The network conditions reported by the | ||||
| CCM to the NCM can be complemented by a Radio Analytics application | ||||
| <xref target="ETSIRNIS" format="default"/> residing at the MEC cloud server | ||||
| to configure the uplink and downlink | ||||
| access paths according to changing radio and congestion conditions.</t> | ||||
| <t>The user-plane functional element, N-MADP, can either be collocated | ||||
| with the NCM at the MEC cloud server (e.g., MEC-hosted applications) | ||||
| or placed at a separate network element like a common user-plane | ||||
| gateway across the multiple networks.</t> | ||||
| <t>Also, even in scenarios where an N-MADP is not deployed, the NCM can be | ||||
| used to augment the traffic-steering decisions at the client.</t> | ||||
| <t>The aim of these enhancements is to improve the end user's QoE by | ||||
| leveraging the best network path based on an application's needs and networ | ||||
| k | ||||
| conditions, and building on the advantages of significantly reduced latency | ||||
| and the dynamic and real-time exposure of radio network information availab | ||||
| le | ||||
| at the MEC.</t> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>Related Work in Other Industry and Standards Forums</name> | ||||
| <t>The MAMS framework described in this document has been incorporated | ||||
| or is proposed for incorporation as a solution to address multi-access | ||||
| integration in multiple industry forums and standards. This section descri | ||||
| bes | ||||
| the related work in other industry forums and the standards organizations.< | ||||
| /t> | ||||
| <t>Wireless Broadband Alliance industry partners have published a | ||||
| white paper that describes the applicability of different technologies | ||||
| for multi-access integration to different deployments as part of their | ||||
| "Unlicensed Integration with 5G Networks" project <xref target="WBAUnl5G" f | ||||
| ormat="default"/>. | ||||
| The white paper includes the MAMS framework described in this document as | ||||
| a technology for integrating unlicensed (Wi-Fi) networks with 5G networks | ||||
| above the 5G core network.</t> | ||||
| <t>The 3GPP is developing a technical report as part of its work item Stud | ||||
| y | ||||
| on Access Traffic Steering, Switching, and Splitting (ATSSS). That | ||||
| report, TR 23.793 <xref target="ATSSS" format="default"/>, contains a | ||||
| number of potential solutions; Solution 1 in | ||||
| <xref target="ATSSS" format="default"/> utilizes a separate control plane | ||||
| for the flexible negotiation of user-plane protocols and path | ||||
| measurements in a way that is similar to the MAMS architecture described | ||||
| in this document.</t> | ||||
| <t>The Small Cell Forum (SCF) <xref target="SCFTECH5G" format="default"/> | ||||
| plans to develop a | ||||
| white paper as part of its work item on LTE/5G and Wi-Fi. There is a | ||||
| proposal to include MAMS in this white paper.</t> | ||||
| <t>The ETSI Multi-access Edge Computing Phase 2 technical work is examinin | ||||
| g | ||||
| many aspects of this work, including use cases for optimizing QoE and | ||||
| resource utilization. The MAMS architecture and procedures outlined in thi | ||||
| s | ||||
| document are included in the ETSI's use cases and requirements document | ||||
| <xref target="ETSIMAMS" format="default"/>.</t> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>IANA Considerations</name> | ||||
| <t>This document has no IANA actions.</t> | ||||
| </section> | ||||
| </middle> | ||||
| <back> | ||||
| <displayreference target="I-D.zhu-intarea-mams-user-protocol" to="INTAREA-MA | ||||
| MS"/> | ||||
| <displayreference target="I-D.zhu-intarea-gma" to="INTAREA-GMA"/> | ||||
| <displayreference target="I-D.ietf-tcpm-converters" to="TCPM-CONVERTERS"/> | ||||
| <displayreference target="I-D.deconinck-quic-multipath" to="QUIC-MULTIPATH"/ | ||||
| > | ||||
| <references> | ||||
| <name>References</name> | ||||
| <references> | ||||
| <name>Normative References</name> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.2119.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.4301.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.8174.xml"/> | ||||
| </references> | ||||
| <references> | ||||
| <name>Informative References</name> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.2784.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.2890.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.3948.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.4555.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.4960.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.6347.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.6455.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.6824.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.7231.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refere | ||||
| nce.RFC.7296.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.8446.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.8259.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/refe | ||||
| rence.I-D.zhu-intarea-mams-user-protocol.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/refe | ||||
| rence.I-D.zhu-intarea-gma.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/refe | ||||
| rence.I-D.ietf-tcpm-converters.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/refe | ||||
| rence.I-D.deconinck-quic-multipath.xml"/> | ||||
| <reference anchor="ETSIRNIS" target="https://www.etsi.org/deliver/etsi_g | ||||
| s/MEC/001_099/012/01.01.01_60/gs_MEC012v010101p.pdf"> | ||||
| <front> | ||||
| <title>Mobile Edge Computing (MEC) Radio Network Information API</ti | ||||
| tle> | ||||
| <author> | ||||
| <organization>European Telecommunications Standards Institute</org | ||||
| anization> | ||||
| </author> | ||||
| <date month="July" year="2017"/> | ||||
| </front> | ||||
| <refcontent>ETSI GS MEC 012 v1.1.1</refcontent> | ||||
| </reference> | ||||
| <reference anchor="ANDSF" target="https://www.3gpp.org/ftp//Specs/archiv | ||||
| e/24_series/24.312/24312-f00.zip"> | ||||
| <front> | ||||
| <title>Access Network Discovery and Selection Function (ANDSF) Manag | ||||
| ement | ||||
| Object (MO)</title> | ||||
| <author> | ||||
| <organization>3rd Generation Partnership Project</organization> | ||||
| </author> | ||||
| <date month="June" year="2018"/> | ||||
| </front> | ||||
| <refcontent>3GPP TS 24.312 version 15.0.0</refcontent> | ||||
| <refcontent>Technical Specification Group Core Network and Terminals</ | ||||
| refcontent> | ||||
| </reference> | ||||
| <reference anchor="ServDesc3GPP" target="https://www.3gpp.org/ftp/Specs/ | ||||
| archive/23_series/23.060/23060-g00.zip"> | ||||
| <front> | ||||
| <title>General Packet Radio Service (GPRS); Service description; Sta | ||||
| ge 2</title> | ||||
| <author> | ||||
| <organization>3rd Generation Partnership Project</organization> | ||||
| </author> | ||||
| <date month="March" year="2019"/> | ||||
| </front> | ||||
| <refcontent>3GPP TS 23.060 version 16.0.0</refcontent> | ||||
| <refcontent>Technical Specification Group Services and System Aspects< | ||||
| /refcontent> | ||||
| </reference> | ||||
| <reference anchor="IEEE-80211" target="https://ieeexplore.ieee.org/docum | ||||
| ent/7786995"> | ||||
| <front> | ||||
| <title>IEEE Standard for Information technology-Telecommunications a | ||||
| nd | ||||
| information exchange between systems - Local and metropolitan area | ||||
| networks-Specific requirements - Part 11: Wireless LAN Medium Access Control (M | ||||
| AC) and Physical Layer (PHY) Specifications</title> | ||||
| <seriesInfo name="IEEE" value="802.11-2016"/> | ||||
| <author> | ||||
| <organization>IEEE</organization> | ||||
| </author> | ||||
| </front> | ||||
| </reference> | ||||
| <reference anchor="WBAUnl5G" target="https://wballiance.com/resource/unl | ||||
| icensed-integration-with-5g-networks/"> | ||||
| <front> | ||||
| <title>Unlicensed Integration with 5G Networks</title> | ||||
| <author> | ||||
| <organization>Wireless Broadband Alliance</organization> | ||||
| </author> | ||||
| </front> | ||||
| </reference> | ||||
| <reference anchor="ATSSS" target="https://www.3gpp.org/ftp/Specs/archive | ||||
| /23_series/23.793/"> | ||||
| <front> | ||||
| <title>Study on access traffic steering, switch and splitting suppor | ||||
| t in the 5G System (5GS) architecture</title> | ||||
| <author> | ||||
| <organization>3rd Generation Partnership Project</organization> | ||||
| </author> | ||||
| <date month="December" year="2018"/> | ||||
| </front> | ||||
| <refcontent>Work in Progress, 3GPP TR 23.793 v16.0.0</refcontent> | ||||
| </reference> | ||||
| <reference anchor="ITU-E212" target="https://www.itu.int/rec/T-REC-E.212 | ||||
| -201609-I/en"> | ||||
| <front> | ||||
| <title>The international identification plan for public networks and | ||||
| subscriptions</title> | ||||
| <seriesInfo name="ITU-T Recommendation" value="E.212"/> | ||||
| <author> | ||||
| <organization>International Telecommunication Union</organization> | ||||
| </author> | ||||
| <date month="September" year="2016"/> | ||||
| </front> | ||||
| </reference> | ||||
| <reference anchor="SCFTECH5G" target="https://scf.io/"> | ||||
| <front> | ||||
| <title>Small Cell Forum</title> | ||||
| <author> | ||||
| <organization>Small Cell Forum</organization> | ||||
| </author> | ||||
| </front> | ||||
| </reference> | ||||
| <reference anchor="ETSIMEC" target="https://www.etsi.org/technologies/mu | ||||
| lti-access-edge-computing"> | ||||
| <front> | ||||
| <title>Multi-access Edge Computing (MEC)</title> | ||||
| <author> | ||||
| <organization>European Telecommunications Standards Institute</org | ||||
| anization> | ||||
| </author> | ||||
| </front> | ||||
| </reference> | ||||
| <reference anchor="ETSIMAMS" target="https://www.etsi.org/deliver/etsi_g | ||||
| s/MEC/001_099/002/02.01.01_60/gs_MEC002v020101p.pdf"> | ||||
| <front> | ||||
| <title>Multi-access Edge Computing (MEC); Phase 2: Use Cases and Req | ||||
| uirements</title> | ||||
| <author> | ||||
| <organization>European Telecommunications Standards Institute</org | ||||
| anization> | ||||
| </author> | ||||
| <date month="October" year="2018"/> | ||||
| </front> | ||||
| <refcontent>ETSI GS MEC 002 v2.1.1</refcontent> | ||||
| </reference> | ||||
| </references> | ||||
| </references> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>MAMS Control-Plane Optimization over Secure Connections</name> | ||||
| <t>This appendix is informative, and provides indicative information | ||||
| about how MAMS operates.</t> | ||||
| <t>If the connection between the CCM and the NCM over which the MAMS | ||||
| control-plane messages are transported is assumed to be secure, UDP is | ||||
| used as the transport for management and control messages between the | ||||
| NCM and the CCM (see <xref target="figure19" format="default"/>).</t> | ||||
| <figure anchor="figure19"> | ||||
| <name>UDP-Based MAMS Control-Plane Protocol Stack</name> | ||||
| <artwork align="center" name="" type="" alt=""><![CDATA[ | ||||
| +-------------------------------------------------+ | ||||
| | Multi-Access (MX) Control Message | | ||||
| |-------------------------------------------------| | ||||
| | UDP | | ||||
| |-------------------------------------------------| | ||||
| ]]></artwork> | ||||
| </figure> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>MAMS Application Interface</name> | ||||
| <t>This appendix describes the MAMS Application Interface. It does not | ||||
| provide normative text for the definition of the MAMS framework or protocol | ||||
| s, | ||||
| but offers additional information that may be used to construct a system | ||||
| based on the MAMS framework.</t> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>Overall Design</name> | ||||
| <t>The CCM hosts an HTTPS server for applications to communicate and req | ||||
| uest | ||||
| services. This document assumes, from a security point of view, that | ||||
| all CCMs and the communicating application instances are hosted in a | ||||
| single administrative domain.</t> | ||||
| <t>The content of messages is described in JavaScript Object Notation (J | ||||
| SON) | ||||
| format. They offer RESTful APIs for communication.</t> | ||||
| <t>The exact mechanism regarding how the application knows about the end | ||||
| point of | ||||
| the CCM is out of scope for this document. This mechanism may instead be | ||||
| provided as part of the application settings.</t> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>Notation</name> | ||||
| <t>The documentation of APIs is provided in the OpenAPI format, using | ||||
| Swagger v2.0. See <xref target="CCM_APP_APIs" format="default"/>.</t> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>Error Indication</name> | ||||
| <t>For every API, there could be an error response if the objective of t | ||||
| he API | ||||
| could not be met; see <xref target="RFC7231" format="default"/>.</t> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>CCM APIs</name> | ||||
| <t>The following subsections describe the APIs exposed by the CCM to the | ||||
| applications.</t> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>GET Capabilities</name> | ||||
| <t>The CCM provides an HTTPS GET interface as "/ccm/v1.0/capabilities" | ||||
| for the | ||||
| application to query the capabilities supported by the CCM instance. | ||||
| </t> | ||||
| <figure anchor="figure_ccm_api_get"> | ||||
| <name>CCM API - GET Procedures</name> | ||||
| <artwork align="center" name="" type="" alt=""><![CDATA[ | ||||
| +---------+ +-----------+ | ||||
| | | | | | ||||
| | App |--------- HTTPS GET / Capabilities -------->| CCM | | ||||
| | | | | | ||||
| +---------+ +-----------+ | ||||
| ]]></artwork> | ||||
| </figure> | ||||
| <t>The CCM shall provide information regarding its capabilities as fol | ||||
| lows: | ||||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li>Supported Features: One or more of the "Feature Name" values, as | ||||
| defined | ||||
| in the MX Feature Activation List parameter of the MX Capabilit | ||||
| y Request | ||||
| (<xref target="feat_act_stat" format="default"/>).</li> | ||||
| <li>Supported Connections: Supported connection types and connection | ||||
| IDs.</li> | ||||
| <li>Supported MX Adaptation Layers: List of MX Adaptation Layer prot | ||||
| ocols | ||||
| supported by the N-MADP instance, along with the connection typ | ||||
| es where these | ||||
| are supported and their respective parameters.</li> | ||||
| <li>Supported MX Convergence Layers: List of supported MX Convergenc | ||||
| e Layer | ||||
| protocols, along with the parameters associated with the respec | ||||
| tive convergence | ||||
| technique.</li> | ||||
| </ul> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>Posting Application Requirements</name> | ||||
| <t>The CCM provides an HTTPS POST interface as "/ccm/v1.0/app_requirem | ||||
| ents" for | ||||
| the application to post the needs of the application data streams to | ||||
| the CCM | ||||
| instance.</t> | ||||
| <figure anchor="figure_ccm_api_post"> | ||||
| <name>CCM API - POST Procedures</name> | ||||
| <artwork align="center" name="" type="" alt=""><![CDATA[ | ||||
| +---------+ +-----------+ | ||||
| | | | | | ||||
| | App |-------- HTTPS POST / App Requirements ---->| CCM | | ||||
| | | | | | ||||
| +---------+ +-----------+ | ||||
| ]]></artwork> | ||||
| </figure> | ||||
| <t>The CCM shall provide for the application to post the following req | ||||
| uirements | ||||
| for its different data streams: | ||||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li>Number of Data Stream Types.</li> | ||||
| <li> | ||||
| <t>For each data stream type, specify the following parameters for | ||||
| the link, | ||||
| which are preferred by the application: | ||||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li>Protocol Type: Transport-layer protocol associated with the | ||||
| application data | ||||
| stream packets.</li> | ||||
| <li>Port Range: Supported connection types and connection IDs.</ | ||||
| li> | ||||
| <li> | ||||
| <t>Traffic QoS: Quality of service parameters, as follows: | ||||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li>Bandwidth</li> | ||||
| <li>Latency</li> | ||||
| <li>Jitter</li> | ||||
| </ul> | ||||
| </li> | ||||
| </ul> | ||||
| </li> | ||||
| </ul> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>Getting Predictive Link Parameters</name> | ||||
| <t>The CCM provides an HTTPS GET interface as "/ccm/v1.0/predictive_li | ||||
| nk_params" for | ||||
| the application to get the predicted link parameters from the CCM in | ||||
| stance.</t> | ||||
| <figure anchor="figure_ccm_api_get_prediction"> | ||||
| <name>CCM API - Getting Predictive Link Parameters</name> | ||||
| <artwork align="center" name="" type="" alt=""><![CDATA[ | ||||
| +---------+ +-----------+ | ||||
| | | | | | ||||
| | App |----- HTTPS GET / Predictive Link Params --->| CCM | | ||||
| | | | | | ||||
| +---------+ +-----------+ | ||||
| ]]></artwork> | ||||
| </figure> | ||||
| <t>The CCM asks the NCM for link parameters via the MAMS Network Analy | ||||
| tics | ||||
| Request Procedure (<xref target="network_analytics_section" format=" | ||||
| default"/>) and includes | ||||
| the information in response to the API invocation. | ||||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li> | ||||
| <t>Number of Delivery Connections. | ||||
| </t> | ||||
| <t> | ||||
| For each delivery connection, include the following: | ||||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li> | ||||
| <t>Access Link Identifier: | ||||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li>Connection Type</li> | ||||
| <li>Connection ID</li> | ||||
| </ul> | ||||
| </li> | ||||
| <li> | ||||
| <t>Link Quality Indicator | ||||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li> | ||||
| <t>Bandwidth: | ||||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li>Predicted Value (Mbps)</li> | ||||
| <li>Likelihood (percent)</li> | ||||
| <li>Prediction Validity (Validity Time, in seconds)</li> | ||||
| </ul> | ||||
| </li> | ||||
| <li> | ||||
| <t>Jitter: | ||||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li>Predicted Value (in seconds)</li> | ||||
| <li>Likelihood (percent)</li> | ||||
| <li>Prediction Validity (Validity Time, in seconds)</li> | ||||
| </ul> | ||||
| </li> | ||||
| <li> | ||||
| <t>Latency: | ||||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li>Predicted Value (in seconds)</li> | ||||
| <li>Likelihood (percent)</li> | ||||
| <li>Prediction Validity (Validity Time, in seconds)</li> | ||||
| </ul> | ||||
| </li> | ||||
| <li> | ||||
| <t>Signal Quality | ||||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li>If delivery connection type is LTE, LTE_RSRP Predict | ||||
| ed Value (dBm)</li> | ||||
| <li>If delivery connection type is LTE, LTE_RSRQ Predict | ||||
| ed Value (dBm)</li> | ||||
| <li>If delivery connection type is 5G NR, NR_RSRP Predic | ||||
| ted Value (dBm)</li> | ||||
| <li>If delivery connection type is 5G NR, NR_RSRQ Predic | ||||
| ted Value (dBm)</li> | ||||
| <li>If delivery connection type is Wi-Fi, WLAN_RSSI Pred | ||||
| icted Value (dBm)</li> | ||||
| <li>Likelihood (percent)</li> | ||||
| <li>Prediction Validity (Validity Time, in seconds)</li> | ||||
| </ul> | ||||
| </li> | ||||
| </ul> | ||||
| </li> | ||||
| </ul> | ||||
| </li> | ||||
| </ul> | ||||
| </section> | ||||
| </section> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>MAMS Control-Plane Messages Described Using JSON</name> | ||||
| <t>MAMS control-plane messages are exchanged between the CCM and the | ||||
| NCM. This non-normative appendix describes the format and content of | ||||
| messages using JSON <xref target="RFC8259" format="default"/>.</t> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>Protocol Specification: General Processing</name> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>Notation</name> | ||||
| <t>This document uses JSONString, JSONNumber, and JSONBool to | ||||
| indicate the JSON string, number, and boolean types, | ||||
| respectively.</t> | ||||
| <t>This document uses an adaptation of the C-style struct | ||||
| notation to describe JSON objects. A JSON object consists of | ||||
| name/value pairs. This document refers to each pair as a | ||||
| field. In some contexts, this document also refers to a field as | ||||
| an attribute. The name of a field/attribute may be referred to | ||||
| as the key. An optional field is enclosed by "[ ]". In the | ||||
| definitions, the JSON names of the fields are case | ||||
| sensitive. An array is indicated by two numbers in angle | ||||
| brackets, <m..n>, where m indicates the minimal number of | ||||
| values and n is the maximum. When this document uses * for n, | ||||
| it means no upper bound.</t> | ||||
| <t>For example, the text below describes a new type Type4, with | ||||
| three fields: "name1", "name2", and "name3", respectively. The | ||||
| "name3" field is optional, and the "name2" field is an array | ||||
| of at least one value.</t> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| object { Type1 name1; Type2 name2 <1..*>; [Type3 name3;] } Type4; | ||||
| ]]></sourcecode> | ||||
| <t>This document uses subtyping to denote that one type is derived fro | ||||
| m | ||||
| another type. The example below denotes that TypeDerived is derived | ||||
| from TypeBase. TypeDerived includes all fields defined in TypeBase. | ||||
| If TypeBase does not have a "name1" field, TypeDerived will have a | ||||
| new field called "name1". If TypeBase already has a field called | ||||
| "name1" but with a different type, TypeDerived will have a | ||||
| field called "name1" with the type defined in TypeDerived | ||||
| (i.e., Type1 in the example).</t> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| object { Type1 name1; } TypeDerived : TypeBase; | ||||
| ]]></sourcecode> | ||||
| <t>Note that, despite the notation, no standard, machine-readable | ||||
| interface definition or schema is provided in this document. Extension | ||||
| documents may describe these as necessary.</t> | ||||
| <t>For compatibility with publishing requirements, line breaks have be | ||||
| en | ||||
| inserted inside long JSON strings, with the following continuation | ||||
| lines indented. To form the valid JSON example, any line breaks | ||||
| inside a string must be replaced with a space and any other white | ||||
| space after the line break removed.</t> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>Discovery Procedure</name> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>MX Discover Message</name> | ||||
| <t>This message is the first message sent by the CCM to discover the | ||||
| presence of NCM in the network. It contains only the base informati | ||||
| on | ||||
| as described in <xref target="mx_base" format="default"/> with messa | ||||
| ge_type set as | ||||
| mx_discover.</t> | ||||
| <t>The representation of the message is as follows:</t> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| object { | ||||
| [JSONString MCC_MNC_Tuple;] | ||||
| } MXDiscover : MXBase; | ||||
| ]]></sourcecode> | ||||
| </section> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>System Information Procedure</name> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>MX System Info Message</name> | ||||
| <t>This message is sent by the NCM to the CCM to inform the | ||||
| endpoints that the NCM supports MAMS functionality. In addition to | ||||
| the base information (<xref target="mx_base" format="default"/>), it | ||||
| contains the | ||||
| following information: | ||||
| </t> | ||||
| <ol spacing="normal" type="(%c)"> | ||||
| <li>NCM Connections (<xref target="ncm_connx" format="default"/>). | ||||
| </li> | ||||
| </ol> | ||||
| <t>The representation of the message is as follows:</t> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| object { | ||||
| NCMConnections ncm_connections; | ||||
| } MXSystemInfo : MXBase; | ||||
| ]]></sourcecode> | ||||
| </section> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>Capability Exchange Procedure</name> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>MX Capability Request</name> | ||||
| <t>This message is sent by the CCM to the NCM to indicate the capabi | ||||
| lities | ||||
| of the CCM instance available to the NCM indicated in the System Inf | ||||
| o | ||||
| message earlier. In addition to the base information (<xref target= | ||||
| "mx_base" format="default"/>), | ||||
| it contains the following information: | ||||
| </t> | ||||
| <ol spacing="normal" type="(%c)"> | ||||
| <li>Features and their activation status: See <xref target="feat_a | ||||
| ct_stat" format="default"/>.</li> | ||||
| <li>Number of Anchor Connections: The number of anchor connections | ||||
| (toward the | ||||
| core) supported by the NCM.</li> | ||||
| <li>Anchor connections: See <xref target="anchor_conn" format="def | ||||
| ault"/>.</li> | ||||
| <li>Number of Delivery Connections: The number of delivery connect | ||||
| ions | ||||
| (toward the access) supported by the NCM.</li> | ||||
| <li>Delivery connections: See <xref target="delivery_conn" format= | ||||
| "default"/>.</li> | ||||
| <li>Convergence methods: See <xref target="conv_methods" format="d | ||||
| efault"/>.</li> | ||||
| <li>Adaptation methods: See <xref target="adapt_methods" format="d | ||||
| efault"/>.</li> | ||||
| </ol> | ||||
| <t>The representation of the message is as follows:</t> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| object { | ||||
| FeaturesActive feature_active; | ||||
| JSONNumber num_anchor_connections; | ||||
| AnchorConnections anchor_connections; | ||||
| JSONNumber num_delivery_connections; | ||||
| DeliveryConnections delivery_connections; | ||||
| ConvergenceMethods convergence_methods; | ||||
| AdaptationMethods adaptation_methods | ||||
| } MXCapabilityReq : MXBase; | ||||
| ]]></sourcecode> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>MX Capability Response</name> | ||||
| <t>This message is sent by the NCM to the CCM to indicate the | ||||
| capabilities of the NCM instance and unique session identifier | ||||
| for the CCM. In addition to the base information (<xref target="mx_ | ||||
| base" format="default"/>), | ||||
| it contains the following information: | ||||
| </t> | ||||
| <ol spacing="normal" type="(%c)"> | ||||
| <li>Features and their activation status: See <xref target="feat_a | ||||
| ct_stat" format="default"/>.</li> | ||||
| <li>Number of Anchor Connections: The number of anchor connections | ||||
| (toward the core) supported by the NCM.</li> | ||||
| <li>Anchor connections: See <xref target="anchor_conn" format="def | ||||
| ault"/>.</li> | ||||
| <li>Number of Delivery Connections: The number of delivery connect | ||||
| ions | ||||
| (toward the access) supported by the NCM.</li> | ||||
| <li>Delivery connections: See <xref target="delivery_conn" format= | ||||
| "default"/>.</li> | ||||
| <li>Convergence methods: See <xref target="conv_methods" format="d | ||||
| efault"/>.</li> | ||||
| <li>Adaptation methods: See <xref target="adapt_methods" format="d | ||||
| efault"/>.</li> | ||||
| <li>Unique Session ID: This uniquely identifies the session betwee | ||||
| n the | ||||
| CCM and the NCM in a network. See <xref target="uniq_sess_id" f | ||||
| ormat="default"/>.</li> | ||||
| </ol> | ||||
| <t>The representation of the message is as follows:</t> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| object { | ||||
| FeaturesActive feature_active; | ||||
| JSONNumber num_anchor_connections; | ||||
| AnchorConnections anchor_connections; | ||||
| JSONNumber num_delivery_connections; | ||||
| DeliveryConnections delivery_connections; | ||||
| ConvergenceMethods convergence_methods; | ||||
| AdaptationMethods adaptation_methods | ||||
| UniqueSessionId unique_session_id; | ||||
| } MXCapabilityRsp : MXBase; | ||||
| ]]></sourcecode> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>MX Capability Acknowledge</name> | ||||
| <t>This message is sent by the CCM to the NCM to indicate acceptance | ||||
| of | ||||
| capabilities advertised by the NCM in an earlier MX Capability Respo | ||||
| nse | ||||
| message. In addition to the base information (<xref target="mx_base" | ||||
| format="default"/>), | ||||
| it contains the following information: | ||||
| </t> | ||||
| <ol spacing="normal" type="(%c)"> | ||||
| <li>Unique Session ID: Same identifier as the identifier provided | ||||
| in | ||||
| the MX Capability Response. See <xref target="uniq_sess_id" for | ||||
| mat="default"/>.</li> | ||||
| <li>Capability Acknowledgment: Indicates either acceptance or reje | ||||
| ction | ||||
| of the capabilities sent by the CCM. Can use either "MX_ACCEPT" | ||||
| or | ||||
| "MX_REJECT" as acceptable values.</li> | ||||
| </ol> | ||||
| <t>The representation of the message is as follows:</t> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| object { | ||||
| UniqueSessionId unique_session_id; | ||||
| JSONString capability_ack; | ||||
| } MXCapabilityAck : MXBase; | ||||
| ]]></sourcecode> | ||||
| </section> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>User-Plane Configuration Procedure</name> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>MX User-Plane Configuration Request</name> | ||||
| <t>This message is sent by the NCM to the CCM to configure the user | ||||
| plane for MAMS. In addition to the base information (<xref target=" | ||||
| mx_base" format="default"/>), it contains the following information: | ||||
| </t> | ||||
| <ol spacing="normal" type="(%c)"> | ||||
| <li>Number of Anchor Connections: The number of anchor connections | ||||
| supported by the NCM.</li> | ||||
| <li>Setup of anchor connections: See <xref target="setup_anchor_co | ||||
| nn" format="default"/>.</li> | ||||
| </ol> | ||||
| <t>The representation of the message is as follows:</t> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| object { | ||||
| JSONNumber num_anchor_connections; | ||||
| SetupAnchorConns anchor_connections; | ||||
| } MXUPSetupConfigReq : MXBase; | ||||
| ]]></sourcecode> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>MX User-Plane Configuration Confirmation</name> | ||||
| <t>This message is the confirmation of the user-plane setup | ||||
| message sent from the CCM after successfully configuring the | ||||
| user plane on the client. This message contains the | ||||
| following information: | ||||
| </t> | ||||
| <ol spacing="normal" type="(%c)"> | ||||
| <li>Unique Session ID: Same identifier as the identifier provided | ||||
| in the MX Capability Response. See <xref target="uniq_sess_id" format="default"/ | ||||
| >.</li> | ||||
| <li> | ||||
| <t>MX probe parameters (included if probing is supported). | ||||
| </t> | ||||
| <ol spacing="normal" type="(%d)"> | ||||
| <li>Probe Port: UDP port for accepting probe message.</li> | ||||
| <li>Anchor connection ID: Identifier of the anchor connection | ||||
| to be | ||||
| used for probe function. Provided in the MX UP Setup Confi | ||||
| guration Request.</li> | ||||
| <li>MX Configuration ID: This parameter is included only if th | ||||
| e MX | ||||
| Configuration ID parameter is available from the user-plan | ||||
| e | ||||
| setup configuration. It indicates the MX configuration ID | ||||
| of the anchor | ||||
| connection to be used for probe function.</li> | ||||
| </ol> | ||||
| </li> | ||||
| <li> | ||||
| <t>The following information is required for each delivery conne | ||||
| ction: | ||||
| </t> | ||||
| <ol spacing="normal" type="(%d)"> | ||||
| <li>Connection ID: Delivery connection ID supported by the cli | ||||
| ent.</li> | ||||
| <li>Client Adaptation-Layer Parameters: If the UDP Adaptation | ||||
| Layer | ||||
| is in use, then the UDP port to be used on the C-MADP side | ||||
| .</li> | ||||
| </ol> | ||||
| </li> | ||||
| </ol> | ||||
| <t>The representation of the message is as follows:</t> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| object { | ||||
| UniqueSessionId unique_session_id; | ||||
| [ProbeParam probe_param;] | ||||
| JSONNumber num_delivery_conn; | ||||
| ClientParam client_params <1...*>; | ||||
| } MXUPSetupConfigCnf : MXBase; | ||||
| ]]></sourcecode> | ||||
| <t>Where ProbeParam is defined as follows:</t> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| object { | ||||
| JSONNumber probe_port; | ||||
| JSONNumber anchor_conn_id; | ||||
| [JSONNumber mx_configuration_id;] | ||||
| } ProbeParam; | ||||
| ]]></sourcecode> | ||||
| <t>Where ClientParam is defined as follows:</t> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| object { | ||||
| JSONNumber connection_id; | ||||
| [AdaptationParam adapt_param;] | ||||
| } ClientParam; | ||||
| ]]></sourcecode> | ||||
| <t>Where AdaptationParam is defined as follows:</t> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| object { | ||||
| JSONNumber udp_adapt_port; | ||||
| } AdaptationParam; | ||||
| ]]></sourcecode> | ||||
| </section> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>Reconfiguration Procedure</name> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>MX Reconfiguration Request</name> | ||||
| <t>This message is sent by the CCM to the NCM in the case of | ||||
| reconfiguration of any of the connections from the client's | ||||
| side. In addition to the base information (<xref target="mx_base" f | ||||
| ormat="default"/>), it | ||||
| contains the following information: | ||||
| </t> | ||||
| <ol spacing="normal" type="(%c)"> | ||||
| <li>Unique Session ID: Identifier for the CCM-NCM association <xre | ||||
| f target="uniq_sess_id" format="default"/>.</li> | ||||
| <li>Reconfiguration Action: The reconfiguration action type can be | ||||
| one | ||||
| of "setup", "release", or "update".</li> | ||||
| <li>Connection ID: Connection ID for which the reconfiguration is | ||||
| taking place.</li> | ||||
| <li>IP address: Included if Reconfiguration Action is either "setu | ||||
| p" or "update".</li> | ||||
| <li>SSID: If the connection type is Wi-Fi, then this parameter | ||||
| contains the SSID to which the client has attached.</li> | ||||
| <li>MTU of the connection: The MTU of the delivery path that is | ||||
| calculated at the client for use by the NCM to configure fragme | ||||
| ntation and | ||||
| concatenation procedures at the N-MADP.</li> | ||||
| <li>Connection Status: This parameter indicates whether the connec | ||||
| tion is currently "disabled", "enabled", | ||||
| or "connected". Default: "connected".</li> | ||||
| <li>Delivery Node ID: Identity of the node to which the client is | ||||
| attached. In the case of LTE, this is an ECGI. In the case | ||||
| of Wi-Fi, this is an AP ID or a MAC address.</li> | ||||
| </ol> | ||||
| <t>The representation of the message is as follows:</t> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| object { | ||||
| UniqueSessionId unique_session_id; | ||||
| JSONString reconf_action; | ||||
| JSONNumber connection_id; | ||||
| JSONString ip_address; | ||||
| JSONString ssid; | ||||
| JSONNumber mtu_size; | ||||
| JSONString connection_status; | ||||
| [JSONString delivery_node_id;] | ||||
| } MXReconfReq : MXBase; | ||||
| ]]></sourcecode> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>MX Reconfiguration Response</name> | ||||
| <t>This message is sent by the NCM to the CCM as a confirmation of t | ||||
| he | ||||
| received MX Reconfiguration Request and contains only the base | ||||
| information (as defined in <xref target="mx_base" format="default"/> | ||||
| ).</t> | ||||
| <t>The representation of the message is as follows:</t> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| object { | ||||
| } MXReconfRsp : MXBase; | ||||
| ]]></sourcecode> | ||||
| </section> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>Path Estimation Procedure</name> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>MX Path Estimation Request</name> | ||||
| <t>This message is sent by the NCM toward the CCM to configure the C | ||||
| CM to | ||||
| send MX Path Estimation Results. In addition to the base informatio | ||||
| n (<xref target="mx_base" format="default"/>), it contains the following informa | ||||
| tion: | ||||
| </t> | ||||
| <ol spacing="normal" type="(%c)"> | ||||
| <li>Connection ID: ID of the connection for which the path estimat | ||||
| ion report is required.</li> | ||||
| <li>Init Probe Test Duration: Duration of initial probe test, in m | ||||
| illiseconds.</li> | ||||
| <li>Init Probe Test Rate: Initial testing rate, in megabits per se | ||||
| cond.</li> | ||||
| <li>Init Probe Size: Size of each packet for initial probe, in byt | ||||
| es.</li> | ||||
| <li>Init Probe-ACK: If an acknowledgment for probe is required. (P | ||||
| ossible values: "yes", "no")</li> | ||||
| <li>Active Probe Frequency: Frequency, in milliseconds, at which | ||||
| the active probes shall be sent.</li> | ||||
| <li>Active Probe Size: Size of the active probe, in bytes.</li> | ||||
| <li>Active Probe Duration: Duration, in seconds, for which the act | ||||
| ive probe shall be performed.</li> | ||||
| <li>Active Probe-ACK: If an acknowledgment for probe is required. | ||||
| (Possible values: "yes", "no")</li> | ||||
| </ol> | ||||
| <t>The representation of the message is as follows:</t> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| object { | ||||
| JSONNumber connection_id; | ||||
| JSONNumber init_probe_test_duration_ms; | ||||
| JSONNumber init_probe_test_rate_Mbps; | ||||
| JSONNumber init_probe_size_bytes; | ||||
| JSONString init_probe_ack_req; | ||||
| JSONNumber active_probe_freq_ms; | ||||
| JSONNumber active_probe_size_bytes; | ||||
| JSONNumber active_probe_duration_sec; | ||||
| JSONString active_probe_ack_req; | ||||
| } MXPathEstReq : MXBase; | ||||
| ]]></sourcecode> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>MX Path Estimation Results</name> | ||||
| <t>This message is sent by the CCM to the NCM to report on the probe | ||||
| estimation configured | ||||
| by the NCM. In addition to the base information (<xref target="mx_b | ||||
| ase" format="default"/>), it contains | ||||
| the following information: | ||||
| </t> | ||||
| <ol spacing="normal" type="(%c)"> | ||||
| <li>Unique Session ID: Same identifier as the identifier provided | ||||
| in the MX Capability | ||||
| Response. See <xref target="uniq_sess_id" format="default"/>.< | ||||
| /li> | ||||
| <li>Connection ID: ID of the connection for which the MX Path Esti | ||||
| mation Results message is required.</li> | ||||
| <li>Init Probe Results: See <xref target="init_probe_res" format=" | ||||
| default"/>.</li> | ||||
| <li>Active Probe Results: See <xref target="act_probe_res" format= | ||||
| "default"/>.</li> | ||||
| </ol> | ||||
| <t>The representation of the message is as follows:</t> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| object { | ||||
| JSONNumber connection_id; | ||||
| UniqueSessionId unique_session_id; | ||||
| [InitProbeResults init_probe_results;] | ||||
| [ActiveProbeResults active_probe_results;] | ||||
| } MXPathEstResults : MXBase; | ||||
| ]]></sourcecode> | ||||
| </section> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>Traffic-Steering Procedure</name> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>MX Traffic Steering Request</name> | ||||
| <t>This message is sent by the NCM to the CCM to enable traffic | ||||
| steering on the delivery side in uplink and downlink | ||||
| configurations. In addition to the base information (<xref target="m | ||||
| x_base" format="default"/>), it contains the following information: | ||||
| </t> | ||||
| <ol spacing="normal" type="(%c)"> | ||||
| <li>Connection ID: Anchor connection number for which the traffic | ||||
| steering is being defined.</li> | ||||
| <li>MX Configuration ID: MX configuration for which the traffic st | ||||
| eering is being defined.</li> | ||||
| <li>Downlink Delivery: See <xref target="dl_delivery" format="defa | ||||
| ult"/>.</li> | ||||
| <li>Default UL Delivery: The default delivery connection | ||||
| for the uplink. All traffic should be delivered on this | ||||
| connection in the uplink direction, and the Traffic Flow | ||||
| Template (TFT) filter should be applied only for the traffic | ||||
| mentioned in Uplink Delivery.</li> | ||||
| <li>Uplink Delivery: See <xref target="ul_delivery" format="defaul | ||||
| t"/>.</li> | ||||
| <li>Features and their activation status: See <xref target="feat_a | ||||
| ct_stat" format="default"/>.</li> | ||||
| </ol> | ||||
| <t>The representation of the message is as follows:</t> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| object { | ||||
| JSONNumber connection_id; | ||||
| [JSONNumber mx_configuration_id;] | ||||
| DLDelivery downlink_delivery; | ||||
| JSONNumber default_uplink_delivery; | ||||
| ULDelivery uplink_delivery; | ||||
| FeaturesActive feature_active; | ||||
| } MXTrafficSteeringReq : MXBase; | ||||
| ]]></sourcecode> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>MX Traffic Steering Response</name> | ||||
| <t>This message is a response to an MX Traffic Steering Request from | ||||
| the CCM to the NCM. In addition to the base information (<xref targe | ||||
| t="mx_base" format="default"/>), | ||||
| it contains the following information: | ||||
| </t> | ||||
| <ol spacing="normal" type="(%c)"> | ||||
| <li>Unique Session ID: Same identifier as the identifier provided | ||||
| in the MX Capability Response. See <xref target="uniq_sess_id" format="default"/ | ||||
| >.</li> | ||||
| <li>Features and their activation status: See <xref target="feat_a | ||||
| ct_stat" format="default"/>.</li> | ||||
| </ol> | ||||
| <t>The representation of the message is as follows:</t> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| object { | ||||
| UniqueSessionId unique_session_id; | ||||
| FeaturesActive feature_active; | ||||
| } MXTrafficSteeringResp : MXBase; | ||||
| ]]></sourcecode> | ||||
| </section> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>MAMS Application MADP Association</name> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>MX Application MADP Association Request</name> | ||||
| <t>This message is sent by the CCM to the NCM to select MADP instanc | ||||
| es | ||||
| provided earlier in the MX UP Setup Configuration Request, based on | ||||
| requirements for the | ||||
| applications.</t> | ||||
| <t>In addition to the base information (<xref target="mx_base" forma | ||||
| t="default"/>), it contains the following: | ||||
| </t> | ||||
| <ol spacing="normal" type="(%c)"> | ||||
| <li>Unique Session ID: This uniquely identifies the session betwee | ||||
| n the CCM and | ||||
| the NCM in a network. See <xref target="uniq_sess_id" format=" | ||||
| default"/>. </li> | ||||
| <li> | ||||
| <t>A list of MX Application MADP Associations, with each entry a | ||||
| s follows: | ||||
| </t> | ||||
| <ol spacing="normal" type="(%d)"> | ||||
| <li>Connection ID: Represents the anchor connection number of | ||||
| the MADP instance.</li> | ||||
| <li>MX Configuration ID: Identifies the MX configuration of th | ||||
| e MADP instance.</li> | ||||
| <li>Traffic Flow Template Uplink: Traffic Flow Template, as de | ||||
| fined in <xref target="tft" format="default"/>, to be used in | ||||
| the uplink direction.</li> | ||||
| <li>Traffic Flow Template Downlink: Traffic Flow Template, as | ||||
| defined in <xref target="tft" format="default"/>, to be used | ||||
| in the downlink direction.</li> | ||||
| </ol> | ||||
| </li> | ||||
| </ol> | ||||
| <t>The representation of the message is as follows:</t> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| object { | ||||
| UniqueSessionId unique_session_id; | ||||
| MXAppMADPAssoc app_madp_assoc_list <1..*>; | ||||
| } MXAppMADPAssocReq : MXBase; | ||||
| ]]></sourcecode> | ||||
| <t>Where each measurement MXAppMADPAssoc is represented by the follo | ||||
| wing:</t> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| object { | ||||
| JSONNumber connection_id; | ||||
| JSONNumber mx_configuration_id | ||||
| TrafficFlowTemplate tft_ul_list <1..*>; | ||||
| TrafficFlowTemplate tft_dl_list <1..*>; | ||||
| } MXAppMADPAssoc; | ||||
| ]]></sourcecode> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>MX Application MADP Association Response</name> | ||||
| <t>This message is sent by the NCM to the CCM to confirm the selecte | ||||
| d MADP instances provided in the | ||||
| MX Application MADP Association Request by the CCM.</t> | ||||
| <t>In addition to the base information (<xref target="mx_base" forma | ||||
| t="default"/>), it contains information if the request has been successful.</t> | ||||
| <t>The representation of the message is as follows:</t> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| object { | ||||
| JSONBool is_success; | ||||
| } MXAppMADPAssocResp : MXBase; | ||||
| ]]></sourcecode> | ||||
| </section> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>MX SSID Indication</name> | ||||
| <t>This message is sent by the NCM to the CCM to indicate | ||||
| the list of allowed SSIDs that are supported by the MAMS entity on the | ||||
| network side. It contains the list of SSIDs.</t> | ||||
| <t>Each SSID consists of the type of SSID (which can be one of the fol | ||||
| lowing: | ||||
| SSID, BSSID, or HESSID) and the SSID itself.</t> | ||||
| <t>The representation of the message is as follows:</t> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| object { | ||||
| SSID ssid_list <1..*>; | ||||
| } MXSSIDIndication : MXBase; | ||||
| ]]></sourcecode> | ||||
| <t>Where each SSID is defined as follows:</t> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| object { | ||||
| JSONString ssid_type; | ||||
| JSONString ssid; | ||||
| } SSID; | ||||
| ]]></sourcecode> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>Measurements</name> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>MX Measurement Configuration</name> | ||||
| <t>This message is sent from the NCM to the CCM to configure the | ||||
| period measurement reporting at the CCM. The message contains a lis | ||||
| t | ||||
| of measurement configurations, with each element containing the | ||||
| following information: | ||||
| </t> | ||||
| <ol spacing="normal" type="(%c)"> | ||||
| <li>Connection ID: Connection ID of the delivery connection for wh | ||||
| ich the reporting is being configured.</li> | ||||
| <li>Connection Type: Connection type for which the reporting is be | ||||
| ing configured. Can be "LTE", "Wi-Fi", "5G_NR".</li> | ||||
| <li>Measurement Report Configuration: Actual report configuration | ||||
| based on the Connection Type, as defined in <xref target="meas_ref_conf" format= | ||||
| "default"/>.</li> | ||||
| </ol> | ||||
| <t>The representation of the message is as follows:</t> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| object { | ||||
| MeasReportConf measurement_configuration <1..*>; | ||||
| } MXMeasReportConf : MXBase; | ||||
| ]]></sourcecode> | ||||
| <t>Where each measurement MeasReportConf is represented by the follo | ||||
| wing:</t> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| object { | ||||
| JSONNumber connection_id; | ||||
| JSONString connection_type; | ||||
| MeasReportConfs meas_rep_conf <1..*>; | ||||
| } MeasReportConf; | ||||
| ]]></sourcecode> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>MX Measurement Report</name> | ||||
| <t>This message is periodically sent by the CCM to the NCM after mea | ||||
| surement configuration. In | ||||
| addition to the base information, it contains the following informat | ||||
| ion: | ||||
| </t> | ||||
| <ol spacing="normal" type="(%c)"> | ||||
| <li>Unique Session ID: Same identifier as the identifier provided | ||||
| in the MX Capability Response. Described in <xref target="uniq_sess_id" format=" | ||||
| default"/>.</li> | ||||
| <li>Measurement report for each delivery connection is measured by | ||||
| the client as defined in <xref target="meas_rep" format="default"/>.</li> | ||||
| </ol> | ||||
| <t>The representation of the message is as follows:</t> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| object { | ||||
| UniqueSessionId unique_session_id; | ||||
| MXMeasRep measurement_reports <1..*>; | ||||
| } MXMeasurementReport : MXBase; | ||||
| ]]></sourcecode> | ||||
| </section> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>Keep-Alive</name> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>MX Keep-Alive Request</name> | ||||
| <t>An MX Keep-Alive Request can be sent from either the NCM or | ||||
| the CCM on expiry of the Keep-Alive timer or a handover event. | ||||
| The peer shall respond to this request with an MX Keep-Alive Respons | ||||
| e. | ||||
| In the case of no response from the peer, the MAMS connection shall | ||||
| be | ||||
| assumed to be broken, and the CCM shall establish a new connection b | ||||
| y | ||||
| sending MX Discover messages.</t> | ||||
| <t>In addition to the base information, it contains the following | ||||
| information: | ||||
| </t> | ||||
| <ol spacing="normal" type="(%c)"> | ||||
| <li>Keep-Alive Reason: Reason for sending this message, can be "Ti | ||||
| meout" or "Handover".</li> | ||||
| <li>Unique Session ID: Identifier for the CCM-NCM association <xre | ||||
| f target="uniq_sess_id" format="default"/>.</li> | ||||
| <li>Connection ID: Connection ID for which handover is detected, i | ||||
| f the reason is "Handover".</li> | ||||
| <li>Delivery Node ID: The target delivery node ID (ECGI or Wi-Fi A | ||||
| P ID/MAC address) to which the handover is executed.</li> | ||||
| </ol> | ||||
| <t>The representation of the message is as follows:</t> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| object { | ||||
| JSONString keep_alive_reason; | ||||
| UniqueSessionId unique_session_id; | ||||
| JSONNumber connection_id; | ||||
| JSONString delivery_node_id; | ||||
| } MXKeepAliveReq : MXBase; | ||||
| ]]></sourcecode> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>MX Keep-Alive Response</name> | ||||
| <t>On receiving an MX Keep-Alive Request from a peer, the NCM/CCM sh | ||||
| all | ||||
| immediately respond with an MX Keep-Alive Response on the same | ||||
| delivery path from where the request arrived. In addition to the ba | ||||
| se | ||||
| information, it contains the unique session identifier for the CCM-N | ||||
| CM | ||||
| association (defined in <xref target="uniq_sess_id" format="default" | ||||
| />)</t> | ||||
| <t>The representation of the message is as follows:</t> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| object { | ||||
| UniqueSessionId unique_session_id; | ||||
| } MXKeepAliveResp : MXBase; | ||||
| ]]></sourcecode> | ||||
| </section> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>Session Termination Procedure</name> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>MX Session Termination Request</name> | ||||
| <t>In the event where the NCM or CCM can no longer handle MAMS for a | ||||
| ny | ||||
| reason, it can send an MX Session Termination Request to the peer. | ||||
| In | ||||
| addition to the base information, it contains a Unique Session ID an | ||||
| d | ||||
| the reason for the termination; this can be "MX_NORMAL_RELEASE", | ||||
| "MX_NO_RESPONSE", or "INTERNAL_ERROR".</t> | ||||
| <t>The representation of the message is as follows:</t> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| object { | ||||
| UniqueSessionId unique_session_id; | ||||
| JSONString reason; | ||||
| } MXSessionTerminationReq : MXBase; | ||||
| ]]></sourcecode> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>MX Session Termination Response</name> | ||||
| <t>On receipt of an MX Session Termination Request from a peer, the | ||||
| NCM/CCM shall respond with MX Session Termination Response on the sa | ||||
| me | ||||
| delivery path where the request arrived and clean up the | ||||
| MAMS-related resources and settings. The CCM shall reinitiate a | ||||
| new session with MX Discover messages.</t> | ||||
| <t>The representation of the message is as follows:</t> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| object { | ||||
| UniqueSessionId unique_session_id; | ||||
| } MXSessionTerminationResp : MXBase; | ||||
| ]]></sourcecode> | ||||
| </section> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>Network Analytics</name> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>MX Network Analytics Request</name> | ||||
| <t>This message is sent by the CCM to the NCM to request parameters | ||||
| like | ||||
| bandwidth, jitter, latency, and signal quality predicted by the netw | ||||
| ork analytics function. | ||||
| In addition to the base information, it contains the following param | ||||
| eter: | ||||
| </t> | ||||
| <ol spacing="normal" type="(%c)"> | ||||
| <li>Unique Session ID: Same identifier as the identifier provided | ||||
| in the MX Capability Response. Described in <xref target="uniq_sess_id" format= | ||||
| "default"/>.</li> | ||||
| <li>Parameter List: List of parameters in which the CCM is interes | ||||
| ted: | ||||
| one or more of "bandwidth", "jitter", "latency", and "signal_q | ||||
| uality".</li> | ||||
| </ol> | ||||
| <t>The representation of the message is as follows:</t> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| object { | ||||
| UniqueSessionId unique_session_id; | ||||
| JSONString params <1..*>; | ||||
| } MXNetAnalyticsReq : MXBase; | ||||
| ]]></sourcecode> | ||||
| <t>Where the params object can take one or more of the following val | ||||
| ues:</t> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| "bandwidth" | ||||
| "jitter" | ||||
| "latency" | ||||
| "signal_quality" | ||||
| ]]></sourcecode> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>MX Network Analytics Response</name> | ||||
| <t>This message is sent by the NCM to the CCM in response to the MX | ||||
| Network Analytics | ||||
| Request. For each delivery connection that the client has, the NCM | ||||
| reports the | ||||
| requested parameter predictions and their respective likelihoods | ||||
| (between 1 and 100 percent).</t> | ||||
| <t>In addition to the base information, it contains the following pa | ||||
| rameters: | ||||
| </t> | ||||
| <ol spacing="normal" type="(%c)"> | ||||
| <li>Number of Delivery Connections: The number of delivery connect | ||||
| ions | ||||
| that are currently configured for the client.</li> | ||||
| <li> | ||||
| <t>The following information is provided for each delivery conne | ||||
| ction: | ||||
| </t> | ||||
| <ol spacing="normal" type="(%d)"> | ||||
| <li>Connection ID: Connection ID of the delivery connection fo | ||||
| r which the parameters are being predicted.</li> | ||||
| <li>Connection Type: Type of connection. Can be "Wi-Fi", "5G_N | ||||
| R", "MulteFire", or "LTE".</li> | ||||
| <li> | ||||
| <t>List of Parameters for which Prediction is requested, whe | ||||
| re each of the | ||||
| predicted parameters consists of the following: | ||||
| </t> | ||||
| <ol spacing="normal" type="(%c)"> | ||||
| <li>Parameter Name: Name of the parameter being predicted. | ||||
| Can be one | ||||
| of "bandwidth", "jitter", "latency", or "signal_quali | ||||
| ty".</li> | ||||
| <li>Additional Parameter: If Parameter name is "signal_qua | ||||
| lity", | ||||
| then this qualifies the quality parameter like "lte_r | ||||
| srp", | ||||
| "lte_rsrq", "nr_rsrp", "nr_rsrq", or "wifi_rssi".</li | ||||
| > | ||||
| <li>Predicted Value: Provides the predicted value of the p | ||||
| arameter | ||||
| and, if applicable, the additional parameter.</li> | ||||
| <li>Likelihood: Provides a stochastic likelihood of the pr | ||||
| edicted value.</li> | ||||
| <li>Validity Time: The time duration for which the predict | ||||
| ions are valid.</li> | ||||
| </ol> | ||||
| </li> | ||||
| </ol> | ||||
| </li> | ||||
| </ol> | ||||
| <t>The representation of the message is as follows:</t> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| object { | ||||
| MXAnalyticsList param_list <1..*>; | ||||
| } MXNetAnalyticsResp : MXBase; | ||||
| ]]></sourcecode> | ||||
| <t>Where MXAnalyticsList is defined as follows:</t> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| object { | ||||
| JSONNumber connection_id; | ||||
| JSONString connection_type; | ||||
| ParamPredictions predictions <1..*>; | ||||
| } MXAnalyticsList; | ||||
| ]]></sourcecode> | ||||
| <t>Where each ParamPredictions item is defined as:</t> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| object { | ||||
| JSONString param_name; | ||||
| [JSONString additional_param;] | ||||
| JSONNumber prediction; | ||||
| JSONNumber likelihood; | ||||
| JSONNumber validity_time; | ||||
| } ParamPredictions; | ||||
| ]]></sourcecode> | ||||
| </section> | ||||
| </section> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>Protocol Specification: Data Types</name> | ||||
| <section anchor="mx_base" numbered="true" toc="default"> | ||||
| <name>MXBase</name> | ||||
| <t>This is the base information that every message between the | ||||
| CCM and NCM exchanges shall have as mandatory information. It | ||||
| contains the following information: | ||||
| </t> | ||||
| <ol spacing="normal" type="(%c)"> | ||||
| <li>Version: Version of MAMS used.</li> | ||||
| <li><t>Message Type: Message type being sent, where the following | ||||
| are considered valid values:</t> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| "mx_discover" | ||||
| "mx_system_info" | ||||
| "mx_capability_req" | ||||
| "mx_capability_rsp" | ||||
| "mx_capability_ack" | ||||
| "mx_up_setup_conf_req" | ||||
| "mx_up_setup_cnf" | ||||
| "mx_reconf_req" | ||||
| "mx_reconf_rsp" | ||||
| "mx_path_est_req" | ||||
| "mx_path_est_results" | ||||
| "mx_traffic_steering_req" | ||||
| "mx_traffic_steering_rsp" | ||||
| "mx_ssid_indication" | ||||
| "mx_keep_alive_req" | ||||
| "mx_keep_alive_rsp" | ||||
| "mx_measurement_conf" | ||||
| "mx_measurement_report" | ||||
| "mx_session_termination_req" | ||||
| "mx_session_termination_rsp" | ||||
| "mx_app_madp_assoc_req" | ||||
| "mx_app_madp_assoc_rsp" | ||||
| "mx_network_analytics_req" | ||||
| "mx_network_analytics_rsp" | ||||
| ]]></sourcecode> | ||||
| </li> | ||||
| <li>Sequence Number: Sequence number to uniquely identify a | ||||
| particular message exchange, e.g., MX Capability Request/Response/ | ||||
| Acknowledge.</li> | ||||
| </ol> | ||||
| <t>The representation of this data type is as follows:</t> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| object { | ||||
| JSONString version; | ||||
| JSONString message_type; | ||||
| JSONNumber sequence_num; | ||||
| } MXBase; | ||||
| ]]></sourcecode> | ||||
| </section> | ||||
| <section anchor="uniq_sess_id" numbered="true" toc="default"> | ||||
| <name>Unique Session ID</name> | ||||
| <t>This data type represents the unique session ID between a CCM | ||||
| and NCM entity. It contains an NCM ID that is unique in the | ||||
| network and a session ID that is allocated by the NCM for that | ||||
| session. On receipt of the MX Discover message, if the session | ||||
| exists, then the old session ID is returned in the MX System Info | ||||
| message; otherwise, the NCM allocates a new session ID for the CCM | ||||
| and sends the new ID in the MX System Info message.</t> | ||||
| <t>The representation of this data type is as follows:</t> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| object { | ||||
| JSONNumber ncm_id; | ||||
| JSONNumber session_id; | ||||
| } UniqueSessionId; | ||||
| ]]></sourcecode> | ||||
| </section> | ||||
| <section anchor="ncm_connx" numbered="true" toc="default"> | ||||
| <name>NCM Connections</name> | ||||
| <t>This data type represents the connection available at the NCM for M | ||||
| AMS | ||||
| connectivity toward the client. It contains a list of NCM | ||||
| connections available, where each connection has the following | ||||
| information: | ||||
| </t> | ||||
| <ol spacing="normal" type="(%c)"> | ||||
| <li>Connection Information: See <xref target="conn_info" format="def | ||||
| ault"/>.</li> | ||||
| <li>NCM Endpoint Information: Contains the IP address and port expos | ||||
| ed by the NCM endpoint for the CCM.</li> | ||||
| </ol> | ||||
| <t>The representation of this data type is as follows:</t> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| object { | ||||
| NCMConnection items <1..*>; | ||||
| } NCMConnections; | ||||
| ]]></sourcecode> | ||||
| <t>where NCMConnection is defined as:</t> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| object { | ||||
| NCMEndPoint ncm_end_point; | ||||
| } NCMConnection : ConnectionInfo; | ||||
| ]]></sourcecode> | ||||
| <t>where NCMEndPoint is defined as:</t> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| object { | ||||
| JSONString ip_address; | ||||
| JSONNumber port; | ||||
| } NCMEndPoint; | ||||
| ]]></sourcecode> | ||||
| </section> | ||||
| <section anchor="conn_info" numbered="true" toc="default"> | ||||
| <name>Connection Information</name> | ||||
| <t>This data type provides the mapping of connection ID and connection | ||||
| type. It contains the following information: | ||||
| </t> | ||||
| <ol spacing="normal" type="(%c)"> | ||||
| <li>Connection ID: Unique number identifying the connection.</li> | ||||
| <li>Connection Type: Type of connection can be "Wi-Fi", "5G_NR", "Mu | ||||
| lteFire", or "LTE".</li> | ||||
| </ol> | ||||
| <t>The representation of this data type is as follows:</t> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| object { | ||||
| JSONNumber connection_id; | ||||
| JSONString connection_type; | ||||
| } ConnectionInfo; | ||||
| ]]></sourcecode> | ||||
| </section> | ||||
| <section anchor="feat_act_stat" numbered="true" toc="default"> | ||||
| <name>Features and Their Activation Status</name> | ||||
| <t>This data type provides the list of all features with their | ||||
| activation status. Each feature status contains the following: | ||||
| </t> | ||||
| <ol group="count1" spacing="normal" type="(%c)"> | ||||
| <li>Feature Name: The name of the feature can be one of the followin | ||||
| g:</li> | ||||
| </ol> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| "lossless_switching" | ||||
| "fragmentation" | ||||
| "concatenation" | ||||
| "uplink_aggregation" | ||||
| "downlink_aggregation" | ||||
| "measurement" | ||||
| ]]></sourcecode> | ||||
| <ol group="count1" spacing="normal" type="(%c)"> | ||||
| <li>Active status: Activation status of the feature: "true" means t | ||||
| hat the feature is active, and | ||||
| "false" means that the feature is inactive.</li> | ||||
| </ol> | ||||
| <t>The representation of this data type is as follows:</t> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| object { | ||||
| FeatureInfo items <1..*>; | ||||
| } FeaturesActive; | ||||
| ]]></sourcecode> | ||||
| <t>where FeatureInfo is defined as:</t> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| object { | ||||
| JSONString feature_name; | ||||
| JSONBool active; | ||||
| } FeatureInfo; | ||||
| ]]></sourcecode> | ||||
| </section> | ||||
| <section anchor="anchor_conn" numbered="true" toc="default"> | ||||
| <name>Anchor Connections</name> | ||||
| <t>This data type contains the list of Connection Information items | ||||
| (<xref target="conn_info" format="default"/>) that are supported on the | ||||
| anchor (core) side.</t> | ||||
| <t>The representation of this data type is as follows:</t> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| object { | ||||
| ConnectionInfo items <1..*>; | ||||
| } AnchorConnections; | ||||
| ]]></sourcecode> | ||||
| </section> | ||||
| <section anchor="delivery_conn" numbered="true" toc="default"> | ||||
| <name>Delivery Connections</name> | ||||
| <t>This data type contains the list of Connection Information (<xref t | ||||
| arget="conn_info" format="default"/>) that are supported on the delivery (access | ||||
| ) side.</t> | ||||
| <t>The representation of this data type is as follows:</t> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| object { | ||||
| ConnectionInfo items <1..*>; | ||||
| } DeliveryConnections; | ||||
| ]]></sourcecode> | ||||
| </section> | ||||
| <section anchor="method_support" numbered="true" toc="default"> | ||||
| <name>Method Support</name> | ||||
| <t>This data type provides the support for a particular convergence or | ||||
| adaptation method. It consists of the following: | ||||
| </t> | ||||
| <ol spacing="normal" type="(%c)"> | ||||
| <li>Method: Name of the method.</li> | ||||
| <li>Supported: Whether the method listed above is supported or not. | ||||
| Possible values are "true" and "false".</li> | ||||
| </ol> | ||||
| <t>The representation of this data type is as follows:</t> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| object { | ||||
| JSONString method; | ||||
| JSONBool supported; | ||||
| } MethodSupport; | ||||
| ]]></sourcecode> | ||||
| </section> | ||||
| <section anchor="conv_methods" numbered="true" toc="default"> | ||||
| <name>Convergence Methods</name> | ||||
| <t>This data type contains the list of all convergence methods and | ||||
| their support status. The possible convergence methods are:</t> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| "GMA" | ||||
| "MPTCP_Proxy" | ||||
| "GRE_Aggregation_Proxy" | ||||
| "MPQUIC" | ||||
| ]]></sourcecode> | ||||
| <t>The representation of this data type is as follows:</t> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| object { | ||||
| MethodSupport items <1..*>; | ||||
| } ConvergenceMethods; | ||||
| ]]></sourcecode> | ||||
| </section> | ||||
| <section anchor="adapt_methods" numbered="true" toc="default"> | ||||
| <name>Adaptation Methods</name> | ||||
| <t>This data type contains the list of all adaptation methods | ||||
| and their support status. The possible adaptation methods are:</t> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| "UDP_without_DTLS" | ||||
| "UDP_with_DTLS" | ||||
| "IPsec" | ||||
| "Client_NAT" | ||||
| ]]></sourcecode> | ||||
| <t>The representation of this data type is as follows:</t> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| object { | ||||
| MethodSupport items <1..*>; | ||||
| } AdaptationMethods; | ||||
| ]]></sourcecode> | ||||
| </section> | ||||
| <section anchor="setup_anchor_conn" numbered="true" toc="default"> | ||||
| <name>Setup of Anchor Connections</name> | ||||
| <t>This data type represents the setup configuration for each anchor | ||||
| connection that is required on the client's side. It | ||||
| contains the following information, in addition to the connection ID | ||||
| and type of the anchor connection: | ||||
| </t> | ||||
| <ol spacing="normal" type="(%c)"> | ||||
| <li>Number of Active MX Configurations: If more than one active | ||||
| configuration is present for this anchor, then this identifies the | ||||
| number of such connections.</li> | ||||
| <li> | ||||
| <t>The following convergence parameters are provided for each acti | ||||
| ve | ||||
| configuration: | ||||
| </t> | ||||
| <ol spacing="normal" type="(%d)"> | ||||
| <li>MX Configuration ID: Present if there are multiple active | ||||
| configurations. Identifies the configuration for this MADP | ||||
| instance ID.</li> | ||||
| <li>Convergence Method: Convergence method selected. Has to be o | ||||
| ne of | ||||
| the supported convergence methods listed in | ||||
| <xref target="conv_methods" format="default"/>.</li> | ||||
| <li>Convergence Method Parameters: Described in <xref target="co | ||||
| nv_method_params" format="default"/></li> | ||||
| <li>Number of Delivery Connections: The number of delivery conne | ||||
| ctions | ||||
| (access side) that are supported for this anchor connection.< | ||||
| /li> | ||||
| <li>Setup of delivery connections: Described in <xref target="se | ||||
| tup_del_conn" format="default"/>.</li> | ||||
| </ol> | ||||
| </li> | ||||
| </ol> | ||||
| <t>The representation of this data type is as follows:</t> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| object { | ||||
| SetupAnchorConn items <1..*>; | ||||
| } SetupAnchorConns; | ||||
| ]]></sourcecode> | ||||
| <t>Where each anchor connection configuration is defined as follows:</ | ||||
| t> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| object { | ||||
| [JSONNumber num_active_mx_conf;] | ||||
| ConvergenceConfig convergence_config | ||||
| } SetupAnchorConn : ConnectionInfo; | ||||
| ]]></sourcecode> | ||||
| <t>where each Convergence configuration is defined as follows:</t> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| object { | ||||
| [JSONNumber mx_configuration_id;] | ||||
| JSONString convergence_method; | ||||
| ConvergenceMethodParam convergence_method_params; | ||||
| JSONNumber num_delivery_connections; | ||||
| SetupDeliveryConns delivery_connections; | ||||
| } ConvergenceConfig; | ||||
| ]]></sourcecode> | ||||
| <section anchor="conv_method_params" numbered="true" toc="default"> | ||||
| <name>Convergence Method Parameters</name> | ||||
| <t>This data type represents the parameters used for the | ||||
| convergence method and contains the following: | ||||
| </t> | ||||
| <ol spacing="normal" type="(%c)"> | ||||
| <li>Proxy IP: IP address of the proxy that is provided by the | ||||
| selected convergence method.</li> | ||||
| <li>Proxy Port: Port of the proxy that is provided by the selected | ||||
| convergence method.</li> | ||||
| </ol> | ||||
| <t>The representation of this data type is as follows:</t> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| object { | ||||
| JSONString proxy_ip; | ||||
| JSONString proxy_port; | ||||
| JSONString client_key; | ||||
| } ConvergenceMethodParam; | ||||
| ]]></sourcecode> | ||||
| </section> | ||||
| <section anchor="setup_del_conn" numbered="true" toc="default"> | ||||
| <name>Setup Delivery Connections</name> | ||||
| <t>This is the list of delivery connections and their parameters | ||||
| to be configured on the client. Each delivery connection | ||||
| defined by its connection information (<xref target="conn_info" forma | ||||
| t="default"/>) optionally contains the following: | ||||
| </t> | ||||
| <ol spacing="normal" type="(%c)"> | ||||
| <li>Adaptation Method: Selected adaptation method name. This shall | ||||
| be one of the methods listed in <xref target="adapt_methods" for | ||||
| mat="default"/>.</li> | ||||
| <li> | ||||
| <t>Adaptation Method Parameters: Depending on the adaptation | ||||
| method, one or more of the following parameters shall be provide | ||||
| d. | ||||
| </t> | ||||
| <ol spacing="normal" type="(%d)"> | ||||
| <li>Tunnel IP address</li> | ||||
| <li>Tunnel Port number</li> | ||||
| <li>Shared Secret</li> | ||||
| <li>MX header optimization: If the adaptation method is UDP_wi | ||||
| thout_DTLS or UDP_with_DTLS, and | ||||
| convergence is GMA, then this flag represents whether or no | ||||
| t | ||||
| the checksum field and the length field in the IP header of | ||||
| an | ||||
| MX PDU should be recalculated by the MX Convergence Layer. | ||||
| The | ||||
| possible values are "true" and "false". If it is "true", bo | ||||
| th | ||||
| fields remain unchanged; otherwise, both fields should be | ||||
| recalculated. If this field is not present, then the defaul | ||||
| t of | ||||
| "false" should be considered.</li> | ||||
| </ol> | ||||
| </li> | ||||
| </ol> | ||||
| <t>The representation of this data type is as follows:</t> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| object { | ||||
| SetupDeliveryConn items <1..*>; | ||||
| } SetupDeliveryConns; | ||||
| ]]></sourcecode> | ||||
| <t>where each "SetupDeliveryConn" consists of the following:</t> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| object { | ||||
| [JSONString adaptation_method;] | ||||
| [AdaptationMethodParam adaptation_method_param;] | ||||
| } SetupDeliveryConn : ConnectionInfo; | ||||
| ]]></sourcecode> | ||||
| <t>where AdaptationMethodParam is defined as:</t> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| object { | ||||
| JSONString tunnel_ip_addr; | ||||
| JSONString tunnel_end_port; | ||||
| JSONString shared_secret; | ||||
| [JSONBool mx_header_optimization;] | ||||
| } AdaptationMethodParam; | ||||
| ]]></sourcecode> | ||||
| </section> | ||||
| </section> | ||||
| <section anchor="init_probe_res" numbered="true" toc="default"> | ||||
| <name>Init Probe Results</name> | ||||
| <t>This data type provides the results of the init probe request made | ||||
| by | ||||
| the NCM. It consists of the following information: | ||||
| </t> | ||||
| <ol spacing="normal" type="(%c)"> | ||||
| <li>Lost Probes: Percentage of probes lost.</li> | ||||
| <li>Probe Delay: Average delay of probe message, in microseconds.</l | ||||
| i> | ||||
| <li>Probe Rate: Probe rate achieved, in megabits per second.</li> | ||||
| </ol> | ||||
| <t>The representation of this data type is as follows:</t> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| object { | ||||
| JSONNumber lost_probes_percentage; | ||||
| JSONNumber probe_rate_Mbps; | ||||
| } InitProbeResults; | ||||
| ]]></sourcecode> | ||||
| </section> | ||||
| <section anchor="act_probe_res" numbered="true" toc="default"> | ||||
| <name>Active Probe Results</name> | ||||
| <t>This data type provides the results of the active probe request mad | ||||
| e by | ||||
| the NCM. It consists of the following information: | ||||
| </t> | ||||
| <ol spacing="normal" type="(%c)"> | ||||
| <li>Average Probe Throughput: Average active probe throughput | ||||
| achieved, in megabits per second.</li> | ||||
| </ol> | ||||
| <t>The representation of this data type is as follows:</t> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| object { | ||||
| JSONNumber avg_tput_last_probe_duration_Mbps; | ||||
| } ActiveProbeResults; | ||||
| ]]></sourcecode> | ||||
| </section> | ||||
| <section anchor="dl_delivery" numbered="true" toc="default"> | ||||
| <name>Downlink Delivery</name> | ||||
| <t>This data type represents the list of connections that are enabled | ||||
| on the delivery side to be used in the downlink direction.</t> | ||||
| <t>The representation of this data type is as follows:</t> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| object { | ||||
| JSONNumber connection_id <1..*>; | ||||
| } DLDelivery; | ||||
| ]]></sourcecode> | ||||
| </section> | ||||
| <section anchor="ul_delivery" numbered="true" toc="default"> | ||||
| <name>Uplink Delivery</name> | ||||
| <t>This data type represents the list of connections and parameters | ||||
| enabled for the delivery side to be used in the uplink direction.</t> | ||||
| <t>The uplink delivery consists of multiple uplink delivery entities, | ||||
| where each entity consists of a Traffic Flow Template (TFT) | ||||
| (<xref target="tft" format="default"/>) and a list of connection IDs in | ||||
| the uplink, | ||||
| where traffic qualifying for such a Traffic Flow Template can be | ||||
| redirected.</t> | ||||
| <t>The representation of this data type is as follows:</t> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| object { | ||||
| ULDeliveryEntity ul_del <1..*>; | ||||
| } ULDelivery; | ||||
| ]]></sourcecode> | ||||
| <t>Where each uplink delivery entity consists of the following data ty | ||||
| pe:</t> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| object { | ||||
| TrafficFlowTemplate ul_tft <1..*>; | ||||
| JSONNumber connection_id <1..*>; | ||||
| } ULDeliveryEntity; | ||||
| ]]></sourcecode> | ||||
| </section> | ||||
| <section anchor="tft" numbered="true" toc="default"> | ||||
| <name>Traffic Flow Template</name> | ||||
| <t>The Traffic Flow Template generally follows the guidelines specifie | ||||
| d | ||||
| in <xref target="ServDesc3GPP" format="default"/>.</t> | ||||
| <t>The Traffic Flow Template in MAMS consists of one or more of the | ||||
| following: | ||||
| </t> | ||||
| <ol spacing="normal" type="(%c)"> | ||||
| <li>Remote Address and Mask: IP address and subnet for remote | ||||
| addresses represented in Classless Inter-Domain Routing (CIDR) | ||||
| notation. Default: "0.0.0.0/0".</li> | ||||
| <li>Local Address and Mask: IP address and subnet for local addresse | ||||
| s represented in CIDR notation. Default: "0.0.0.0/0"</li> | ||||
| <li>Protocol Type: IP protocol number of the payload being carried b | ||||
| y an IP packet (e.g., UDP, TCP). Default: 255.</li> | ||||
| <li>Local Port Range: Range of ports for local ports for which the T | ||||
| raffic Flow Template is applicable. Default: Start=0, End=65535.</li> | ||||
| <li>Remote Port Range: Range of ports for remote ports for which the | ||||
| Traffic Flow Template is applicable. Default: Start=0, End=65535.</li> | ||||
| <li>Traffic Class: Represented by Type of Service in IPv4 and Traffi | ||||
| c Class in IPv6. Default: 255</li> | ||||
| <li>Flow Label: Flow label for IPv6, applicable only for IPv6 protoc | ||||
| ol type. Default: 0.</li> | ||||
| </ol> | ||||
| <t>The representation of this data type is as follows:</t> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| object { | ||||
| JSONString remote_addr_mask; | ||||
| JSONString local_addr_mask; | ||||
| JSONNumber protocol_type; | ||||
| PortRange local_port_range; | ||||
| PortRange remote_port_range; | ||||
| JSONNumber traffic_class; | ||||
| JSONNumber flow_label; | ||||
| } TrafficFlowTemplate; | ||||
| ]]></sourcecode> | ||||
| <t>Where the port range is defined as follows:</t> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| object { | ||||
| JSONNumber start; | ||||
| JSONNumber end; | ||||
| } PortRange; | ||||
| ]]></sourcecode> | ||||
| </section> | ||||
| <section anchor="meas_ref_conf" numbered="true" toc="default"> | ||||
| <name>Measurement Report Configuration</name> | ||||
| <t>This data type represents the configuration done by the NCM toward | ||||
| the CCM for reporting measurement events. | ||||
| </t> | ||||
| <ol spacing="normal" type="(%c)"> | ||||
| <li> | ||||
| <t>Measurement Report Parameter: Parameter that shall be measured | ||||
| and reported. This is dependent on the connection type: | ||||
| </t> | ||||
| <ol spacing="normal" type="(%d)"> | ||||
| <li>For the connection type of "Wi-Fi", the allowed measurement | ||||
| type parameters | ||||
| are "WLAN_RSSI", "WLAN_LOAD", "UL_TPUT", "DL_TPUT", "EST_UL_T | ||||
| PUT", | ||||
| and "EST_DL_TPUT".</li> | ||||
| <li>For the connection type of "LTE", the allowed measurement ty | ||||
| pe parameters are | ||||
| "LTE_RSRP", "LTE_RSRQ", "UL_TPUT", and "DL_TPUT".</li> | ||||
| <li>For the connection type of "5G_NR", the allowed measurement | ||||
| type parameters | ||||
| are "NR_RSRP", "NR_RSRQ", "UL_TPUT", and "DL_TPUT".</li> | ||||
| </ol> | ||||
| </li> | ||||
| <li>Threshold: High and low threshold for reporting.</li> | ||||
| <li>Period: Period for reporting, in milliseconds.</li> | ||||
| </ol> | ||||
| <t>The representation of this data type is as follows:</t> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| object { | ||||
| JSONString meas_rep_param; | ||||
| Threshold meas_threshold; | ||||
| JSONNumber meas_period; | ||||
| } MeasReportConfs; | ||||
| ]]></sourcecode> | ||||
| <t>Where "Threshold" is defined as follows:</t> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| object { | ||||
| JSONNumber high; | ||||
| JSONNumber low; | ||||
| } Threshold; | ||||
| ]]></sourcecode> | ||||
| </section> | ||||
| <section anchor="meas_rep" numbered="true" toc="default"> | ||||
| <name>Measurement Report</name> | ||||
| <t>This data type represents the measurements reported by the CCM for | ||||
| each | ||||
| access network measured. This type contains the connection information | ||||
| , | ||||
| the Delivery Node ID that identifies either the cell (ECGI) or the Wi-F | ||||
| i | ||||
| Access Point ID or MAC address (or equivalent identifier in other | ||||
| technologies), and the actual measurement performed by the CCM in the | ||||
| last measurement period.</t> | ||||
| <t>The representation of this data type is as follows:</t> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| object { | ||||
| JSONNumber connection_id; | ||||
| JSONString connection_type; | ||||
| JSONString delivery_node_id; | ||||
| Measurement measurements <1..*>; | ||||
| } MXMeasRep; | ||||
| ]]></sourcecode> | ||||
| <t>Where Measurement is defined as the key-value pair of the | ||||
| measurement type and value. The exact measurement type parameter repor | ||||
| ted | ||||
| for a given connection depends on its Connection Type. | ||||
| The measurement type parameters, for each Connection Type, are specifie | ||||
| d in <xref target="meas_ref_conf" format="default"/>.</t> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| object { | ||||
| JSONString measurement_type; | ||||
| JSONNumber measurement_value; | ||||
| } Measurement; | ||||
| ]]></sourcecode> | ||||
| </section> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>Schemas in JSON</name> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>MX Base Schema</name> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| { | ||||
| "$schema": "https://json-schema.org/draft-04/schema#", | ||||
| "definitions": { | ||||
| "message_type_def": { | ||||
| "enum": [ | ||||
| "mx_discover", | ||||
| "mx_system_info", | ||||
| "mx_capability_req", | ||||
| "mx_capability_rsp", | ||||
| "mx_capability_ack", | ||||
| "mx_up_setup_conf_req", | ||||
| "mx_up_setup_cnf", | ||||
| "mx_reconf_req", | ||||
| "mx_reconf_rsp", | ||||
| "mx_path_est_req", | ||||
| "mx_path_est_results", | ||||
| "mx_traffic_steering_req", | ||||
| "mx_traffic_steering_rsp", | ||||
| "mx_ssid_indication", | ||||
| "mx_keep_alive_req", | ||||
| "mx_keep_alive_rsp", | ||||
| "mx_measurement_conf", | ||||
| "mx_measurement_report", | ||||
| "mx_session_termination_req", | ||||
| "mx_session_termination_rsp", | ||||
| "mx_app_madp_assoc_req", | ||||
| "mx_app_madp_assoc_rsp", | ||||
| "mx_network_analytics_req", | ||||
| "mx_network_analytics_rsp" | ||||
| ], | ||||
| "type": "string" | ||||
| }, | ||||
| "sequence_num_def": { | ||||
| "minimum": 1, | ||||
| "type": "integer" | ||||
| }, | ||||
| "version_def": { | ||||
| "type": "string" | ||||
| } | ||||
| }, | ||||
| "id": "https://example.com/mams/mx_base_def.json" | ||||
| } | ||||
| ]]></sourcecode> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>MX Definitions</name> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| { | ||||
| "$schema": "https://json-schema.org/draft-04/schema#", | ||||
| "definitions": { | ||||
| "adapt_method": { | ||||
| "enum": [ | ||||
| "UDP_without_DTLS", | ||||
| "UDP_with_DTLS", | ||||
| "IPsec", | ||||
| "Client_NAT" | ||||
| ], | ||||
| "type": "string" | ||||
| }, | ||||
| "conv_method": { | ||||
| "enum": [ | ||||
| "GMA", | ||||
| "MPTCP_Proxy", | ||||
| "GRE_Aggregation_Proxy", | ||||
| "MPQUIC" | ||||
| ], | ||||
| "type": "string" | ||||
| }, | ||||
| "supported": { | ||||
| "type": "boolean" | ||||
| }, | ||||
| "active": { | ||||
| "type": "boolean" | ||||
| }, | ||||
| "connection_id": { | ||||
| "type": "integer" | ||||
| }, | ||||
| "feature_name": { | ||||
| "enum": [ | ||||
| "lossless_switching", | ||||
| "fragmentation", | ||||
| "concatenation", | ||||
| "uplink_aggregation", | ||||
| "downlink_aggregation", | ||||
| "measurement" | ||||
| "probing" | ||||
| ], | ||||
| "type": "string" | ||||
| }, | ||||
| "connection_type": { | ||||
| "enum": [ | ||||
| "Wi-Fi", | ||||
| "5G_NR", | ||||
| "MulteFire", | ||||
| "LTE" | ||||
| ], | ||||
| "type": "string" | ||||
| }, | ||||
| "ip_address": { | ||||
| "type": "string" | ||||
| }, | ||||
| "port": { | ||||
| "maximum": 65535, | ||||
| "minimum": 1, | ||||
| "type": "integer" | ||||
| }, | ||||
| "adaptation_method": { | ||||
| "allOf" : [ | ||||
| { "$ref": "#/definitions/adapt_method" }, | ||||
| { "$ref": "#/definitions/supported" } | ||||
| ] | ||||
| }, | ||||
| "connection": { | ||||
| "allOf" : [ | ||||
| { "$ref": "#/definitions/connection_id" }, | ||||
| { "$ref": "#/definitions/connection_type" } | ||||
| ] | ||||
| }, | ||||
| "convergence_method": { | ||||
| "allOf": [ | ||||
| { "$ref": "#/definitions/conv_method" }, | ||||
| { "$ref": "#/definitions/supported" } | ||||
| ] | ||||
| }, | ||||
| "feature_status": { | ||||
| "allOf": [ | ||||
| { "$ref": "#/definitions/feature_name" }, | ||||
| { "$ref": "#/definitions/active" } | ||||
| ] | ||||
| }, | ||||
| "ncm_end_point": { | ||||
| "allOf" : [ | ||||
| { "$ref" : "#/definitions/ip_address" }, | ||||
| { "$ref" : "#/definitions/port" } | ||||
| ] | ||||
| }, | ||||
| "capability_acknowledgment" : { | ||||
| "enum" : [ | ||||
| "MX_ACCEPT", | ||||
| "MX_REJECT" | ||||
| ], | ||||
| "type" : "string" | ||||
| }, | ||||
| "threshold" : { | ||||
| "high" : { | ||||
| "type" : "integer" | ||||
| }, | ||||
| "low" : { | ||||
| "type" : "integer" | ||||
| }, | ||||
| "type" : "object" | ||||
| }, | ||||
| "meas_report_param" : { | ||||
| "enum" : [ | ||||
| "WLAN_RSSI", | ||||
| "WLAN_LOAD", | ||||
| "LTE_RSRP", | ||||
| "LTE_RSRQ", | ||||
| "UL_TPUT", | ||||
| "DL_TPUT", | ||||
| "EST_UL_TPUT", | ||||
| "EST_DL_TPUT", | ||||
| "NR_RSRP", | ||||
| "NR_RSRQ" | ||||
| ], | ||||
| "type" : "string" | ||||
| }, | ||||
| "meas_report_conf" : { | ||||
| "meas_rep_param" : { | ||||
| "$ref" : "#definitions/meas_report_param" | ||||
| }, | ||||
| "meas_threshold" : { | ||||
| "$ref" : "#definitions/threshold" | ||||
| }, | ||||
| "meas_period_ms" : { | ||||
| "type" : "integer" | ||||
| }, | ||||
| "type" : "object" | ||||
| }, | ||||
| "ssid_types" : { | ||||
| "enum" : [ | ||||
| "ssid", | ||||
| "bssid", | ||||
| "hessid" | ||||
| ], | ||||
| "type" : "string" | ||||
| }, | ||||
| "ip_addr_mask" : { | ||||
| "type" : "string", | ||||
| "default" : "0.0.0.0/0" | ||||
| }, | ||||
| "port_range" : { | ||||
| "start" : { | ||||
| "type" : "integer", | ||||
| "default" : 0 | ||||
| }, | ||||
| "end" : { | ||||
| "type" : "integer", | ||||
| "default" : 65535 | ||||
| } | ||||
| }, | ||||
| "traffic_flow_template" : { | ||||
| "remote_addr_mask" : { | ||||
| "$ref" : "#definitions/ip_addr_mask" }, | ||||
| "local_addr_mask" : { | ||||
| "$ref" : "#definitions/ip_addr_mask" }, | ||||
| "protocol_type" : { | ||||
| "type" : "integer", | ||||
| "minimum" : 0, | ||||
| "maximum" : 255 | ||||
| }, | ||||
| "local_port_range" : { | ||||
| "$ref" : "#definitions/port_range" }, | ||||
| "remote_port_range" : { | ||||
| "$ref" : "#definitions/port_range" }, | ||||
| "traffic_class" : { | ||||
| "type" : "integer", | ||||
| "default" : 255 | ||||
| }, | ||||
| "flow_label" : { | ||||
| "type" : "integer", | ||||
| "default" : 0 | ||||
| } | ||||
| }, | ||||
| "delivery_node_id" : { | ||||
| "type" : "string" | ||||
| }, | ||||
| "unique_session_id" : { | ||||
| "type" : "object", | ||||
| "ncm_id" : { | ||||
| "type" : "integer" | ||||
| }, | ||||
| "session_id" : { | ||||
| "type" : "integer" | ||||
| } | ||||
| }, | ||||
| "keep_alive_reason" : { | ||||
| "enum" : [ | ||||
| "Timeout", | ||||
| "Handover" | ||||
| ], | ||||
| "type" : "string" | ||||
| }, | ||||
| "connection_status" : { | ||||
| "enum" : [ | ||||
| "disabled", | ||||
| "enabled", | ||||
| "connected" | ||||
| ], | ||||
| "type" : "string", | ||||
| "default" : "connected" | ||||
| }, | ||||
| "adaptation_param" : { | ||||
| "udp_adapt_port" : { | ||||
| "type" : "integer" | ||||
| } | ||||
| }, | ||||
| "probe_param" : { | ||||
| "probe_port" : { | ||||
| "type" : "integer" | ||||
| }, | ||||
| "anchor_conn_id" : { | ||||
| "type" : "integer" | ||||
| }, | ||||
| "mx_configuration_id" : { | ||||
| "type" : "integer" | ||||
| } | ||||
| }, | ||||
| "client_param" : { | ||||
| "connection_id" : { | ||||
| "type" : "integer" | ||||
| }, | ||||
| "adapt_param" : { | ||||
| "type" : {"$ref" : "#definitions/adaptation_param" } | ||||
| } | ||||
| } | ||||
| }, | ||||
| "adapt_param": { | ||||
| "tunnel_ip_addr": { | ||||
| "type": "string" | ||||
| }, | ||||
| "tunnel_end_port": { | ||||
| "type": "integer" | ||||
| }, | ||||
| "shared_secret": { | ||||
| "type": "string" | ||||
| }, | ||||
| "mx_header_optimization": { | ||||
| "type": "boolean", | ||||
| "default": false | ||||
| } | ||||
| }, | ||||
| "delivery_connection": { | ||||
| "connection_id": { | ||||
| "$ref": "#definitions/connection_id" | ||||
| }, | ||||
| "connection_type": { | ||||
| "$ref": "#definitions/connection_type" | ||||
| }, | ||||
| "adaptation_method": { | ||||
| "$ref": "#definitions/adapt_method" | ||||
| }, | ||||
| "adaptation_method_param": { | ||||
| "$ref": "#definitions/adapt_param" | ||||
| } | ||||
| }, | ||||
| "app_madp_assoc": { | ||||
| "anchor_conn_id" : { | ||||
| "type" : "integer" | ||||
| }, | ||||
| "mx_configuration_id" : { | ||||
| "type" : "integer" | ||||
| } | ||||
| "ul_tft_list": { | ||||
| "items": { | ||||
| "$ref": "#definitions/traffic_flow_template" | ||||
| }, | ||||
| "type": "array" | ||||
| }, | ||||
| "dl_tft_list": { | ||||
| "items": { | ||||
| "$ref": "#definitions/traffic_flow_template" | ||||
| }, | ||||
| "type": "array" | ||||
| } | ||||
| }, | ||||
| "predict_param_name": { | ||||
| "enum": [ | ||||
| "validity_time", | ||||
| "bandwidth", | ||||
| "jitter", | ||||
| "latency", | ||||
| "signal_quality" | ||||
| ], | ||||
| "type": "string" | ||||
| }, | ||||
| "predict_add_param_name": { | ||||
| "enum": [ | ||||
| "WLAN_RSSI", | ||||
| "WLAN_LOAD", | ||||
| "LTE_RSRP", | ||||
| "LTE_RSRQ", | ||||
| "NR_RSRP", | ||||
| "NR_RSRQ" | ||||
| ], | ||||
| "type": "string" | ||||
| }, | ||||
| "id": "https://example.com/mams/definitions.json" | ||||
| } | ||||
| ]]></sourcecode> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>MX Discover</name> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| { | ||||
| "$schema": "https://json-schema.org/draft-04/schema#", | ||||
| "additionalProperties": false, | ||||
| "id": "https://example.com/mams/mx_discover.json", | ||||
| "properties": { | ||||
| "message_type": {"$ref": "mx_base_def.json#/message_type_def"}, | ||||
| "sequence_num": {"$ref": "mx_base_def.json#/sequence_num_def"}, | ||||
| "version": {"$ref": "mx_base_def.json#/version_def"} | ||||
| }, | ||||
| "type": "object" | ||||
| } | ||||
| ]]></sourcecode> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>MX System Info</name> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| { | ||||
| "$schema": "https://json-schema.org/draft-04/schema#", | ||||
| "additionalProperties": false, | ||||
| "id": "https://example.com/mams/mx_system_info.json", | ||||
| "properties": { | ||||
| "message_type": {"$ref": "mx_base_def.json#/message_type_def"}, | ||||
| "sequence_num": {"$ref": "mx_base_def.json#/sequence_num_def"}, | ||||
| "version": {"$ref": "mx_base_def.json#/version_def"}, | ||||
| "ncm_connections": { | ||||
| "type": "array", | ||||
| "items": [ | ||||
| {"$ref": "definitions.json#/connection"}, | ||||
| {"$ref": "definitions.json#/ncm_end_point"} | ||||
| ] | ||||
| } | ||||
| }, | ||||
| "type": "object" | ||||
| } | ||||
| ]]></sourcecode> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>MX Capability Request</name> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| { | ||||
| "$schema": "https://json-schema.org/draft-04/schema#", | ||||
| "additionalProperties": false, | ||||
| "id": "https://example.com/mams/mx_capability_req.json", | ||||
| "properties": { | ||||
| "message_type": {"$ref": "mx_base_def.json#/message_type_def"}, | ||||
| "sequence_num": {"$ref": "mx_base_def.json#/sequence_num_def"}, | ||||
| "version": {"$ref": "mx_base_def.json#/version_def"}, | ||||
| "adaptation_methods": { | ||||
| "items": {"$ref": "definitions.json#/adaptation_method"}, | ||||
| "type": "array" | ||||
| }, | ||||
| "anchor_connections": { | ||||
| "items": {"$ref": "definitions.json#/connection"}, | ||||
| "type": "array" | ||||
| }, | ||||
| "convergence_methods": { | ||||
| "items": {"$ref": "definitions.json#/convergence_method"}, | ||||
| "type": "array" | ||||
| }, | ||||
| "delivery_connections": { | ||||
| "items": {"$ref": "definitions.json#/connection"}, | ||||
| "type": "array" | ||||
| }, | ||||
| "feature_active": { | ||||
| "items": {"$ref": "definitions.json#/feature_status"}, | ||||
| "type": "array" | ||||
| }, | ||||
| "num_anchor_connections": { | ||||
| "type": "integer" | ||||
| }, | ||||
| "num_delivery_connections": { | ||||
| "type": "integer" | ||||
| } | ||||
| }, | ||||
| "type": "object" | ||||
| } | ||||
| ]]></sourcecode> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>MX Capability Response</name> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| { | ||||
| "$schema": "https://json-schema.org/draft-04/schema#", | ||||
| "additionalProperties": false, | ||||
| "id": "https://example.com/mams/mx_capability_rsp.json", | ||||
| "properties": { | ||||
| "message_type": {"$ref": "mx_base_def.json#/message_type_def"}, | ||||
| "sequence_num": {"$ref": "mx_base_def.json#/sequence_num_def"}, | ||||
| "version": {"$ref": "mx_base_def.json#/version_def"}, | ||||
| "adaptation_methods": { | ||||
| "items": {"$ref": "definitions.json#/adaptation_method"}, | ||||
| "type": "array" | ||||
| }, | ||||
| "anchor_connections": { | ||||
| "items": {"$ref": "definitions.json#/connection"}, | ||||
| "type": "array" | ||||
| }, | ||||
| "convergence_methods": { | ||||
| "items": {"$ref": "definitions.json#/convergence_method"}, | ||||
| "type": "array" | ||||
| }, | ||||
| "delivery_connections": { | ||||
| "items": {"$ref": "definitions.json#/connection"}, | ||||
| "type": "array" | ||||
| }, | ||||
| "feature_active": { | ||||
| "items": {"$ref": "definitions.json#/feature_status"}, | ||||
| "type": "array" | ||||
| }, | ||||
| "num_anchor_connections": { | ||||
| "type": "integer" | ||||
| }, | ||||
| "num_delivery_connections": { | ||||
| "type": "integer" | ||||
| }, | ||||
| "unique_session_id": { | ||||
| "$ref": "definitions.json#/unique_session_id" | ||||
| } | ||||
| }, | ||||
| "type": "object" | ||||
| } | ||||
| ]]></sourcecode> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>MX Capability Acknowledge</name> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| { | ||||
| "$schema": "https://json-schema.org/draft-04/schema#", | ||||
| "definitions": {}, | ||||
| "id": "https://example.com/mams/mx_capability_ack.json", | ||||
| "properties": { | ||||
| "message_type": {"$ref": "mx_base_def.json#/message_type_def"}, | ||||
| "sequence_num": {"$ref": "mx_base_def.json#/sequence_num_def"}, | ||||
| "version": {"$ref": "mx_base_def.json#/version_def"}, | ||||
| "unique_session_id": { | ||||
| "$ref": "definitions.json#/unique_session_id"}, | ||||
| "capability_ack": { | ||||
| "$ref": "definitions.json#/capability_acknowledgment"} | ||||
| }, | ||||
| "type": "object" | ||||
| } | ||||
| ]]></sourcecode> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>MX Reconfiguration Request</name> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| { | ||||
| "$schema": "https://json-schema.org/draft-04/schema#", | ||||
| "definitions": {}, | ||||
| "id": "https://example.com/mams/mx_reconf_req.json", | ||||
| "properties": { | ||||
| "message_type": {"$ref": "mx_base_def.json#/message_type_def"}, | ||||
| "sequence_num": {"$ref": "mx_base_def.json#/sequence_num_def"}, | ||||
| "version": {"$ref": "mx_base_def.json#/version_def"}, | ||||
| "unique_session_id": { | ||||
| "$ref": "definitions.json#/unique_session_id" | ||||
| }, | ||||
| "connection_id": {"$ref": "definitions.json#/connection_id"}, | ||||
| "ip_address": {"$ref": "definitions.json#/ip_address"}, | ||||
| "mtu_size": { | ||||
| "maximum": 65535, | ||||
| "minimum": 1, | ||||
| "type": "integer" | ||||
| }, | ||||
| "ssid": { | ||||
| "type": "string" | ||||
| }, | ||||
| "reconf_action": { | ||||
| "enum": [ | ||||
| "release", | ||||
| "setup", | ||||
| "update" | ||||
| ], | ||||
| "id": "/properties/reconf_action", | ||||
| "type": "string" | ||||
| }, | ||||
| "connection_status": { | ||||
| "$ref": "definitions.json#/connection_status"}, | ||||
| "delivery_node_id": { | ||||
| "$ref": "definitions.json#/delivery_node_id"} | ||||
| }, | ||||
| "type": "object" | ||||
| } | ||||
| ]]></sourcecode> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>MX Reconfiguration Response</name> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| { | ||||
| "$schema": "https://json-schema.org/draft-04/schema#", | ||||
| "definitions": {}, | ||||
| "id": "https://example.com/mams/mx_reconf_rsp.json", | ||||
| "properties": { | ||||
| "message_type": {"$ref": "mx_base_def.json#/message_type_def"}, | ||||
| "sequence_num": {"$ref": "mx_base_def.json#/sequence_num_def"}, | ||||
| "version": {"$ref": "mx_base_def.json#/version_def"} | ||||
| }, | ||||
| "type": "object" | ||||
| } | ||||
| ]]></sourcecode> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>MX UP Setup Configuration Request</name> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| { | ||||
| "$schema": "https://json-schema.org/draft-04/schema#", | ||||
| "additionalProperties": false, | ||||
| "definitions": { | ||||
| "convergence_configuration": { | ||||
| "mx_configuration_id": {"type": "integer"}, | ||||
| "convergence_method": { | ||||
| "$ref": "definitions.json#/conv_method"}, | ||||
| "convergence_method_params": { | ||||
| "properties": { | ||||
| "proxy_ip": {"$ref": "definitions.json#/ip_address"}, | ||||
| "proxy_port": {"$ref": "definitions.json#/port"}, | ||||
| "client_key": {"$ref": "definitions.json#/client_key"} | ||||
| }, | ||||
| "type": "object" | ||||
| }, | ||||
| "num_delivery_connections": { | ||||
| "type": "integer" | ||||
| }, | ||||
| "delivery_connections": { | ||||
| "items": {"$ref": "definitions.json#/delivery_connection"}, | ||||
| "type": "array" | ||||
| } | ||||
| } | ||||
| }, | ||||
| "id": "https://example.com/mams/mx_up_setup_conf_req.json", | ||||
| "properties": { | ||||
| "message_type": {"$ref": "mx_base_def.json#/message_type_def"}, | ||||
| "sequence_num": {"$ref": "mx_base_def.json#/sequence_num_def"}, | ||||
| "version": {"$ref": "mx_base_def.json#/version_def"}, | ||||
| "num_anchor_connections": { | ||||
| "type": "integer" | ||||
| }, | ||||
| "anchor_connections": { | ||||
| "items": { | ||||
| "properties": { | ||||
| "connection_id": { | ||||
| "$ref": "definitions.json#/connection_id"}, | ||||
| "connection_type": { | ||||
| "$ref": "definitions.json#/connection_type"}, | ||||
| "num_active_mx_conf": {"type": "integer"}, | ||||
| "convergence_config": { | ||||
| "items": { | ||||
| "$ref": "definitions/convergence_configuration"}, | ||||
| "type": "array" | ||||
| } | ||||
| }, | ||||
| "type": "object" | ||||
| }, | ||||
| "type": "array" | ||||
| } | ||||
| }, | ||||
| "type": "object" | ||||
| } | ||||
| ]]></sourcecode> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>MX UP Setup Confirmation</name> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| { | ||||
| "$schema": "https://json-schema.org/draft-04/schema#", | ||||
| "definitions": {}, | ||||
| "id": "https://example.com/mams/mx_up_setup_cnf.json", | ||||
| "properties": { | ||||
| "message_type": {"$ref": "mx_base_def.json#/message_type_def"}, | ||||
| "sequence_num": {"$ref": "mx_base_def.json#/sequence_num_def"}, | ||||
| "version": {"$ref": "mx_base_def.json#/version_def"}, | ||||
| "unique_session_id": { | ||||
| "$ref": "definitions.json#/unique_session_id"}, | ||||
| "probe_param": {"$ref": "definitions.json#/probe_param"}, | ||||
| "num_delivery_conn": { | ||||
| "type": "integer" | ||||
| }, | ||||
| "client_params": { | ||||
| "type": "array", | ||||
| "items": [ | ||||
| {"$ref": "definitions.json#/client_param"} | ||||
| ] | ||||
| } | ||||
| }, | ||||
| "type": "object" | ||||
| } | ||||
| ]]></sourcecode> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>MX Traffic Steering Request</name> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| { | ||||
| "$schema": "https://json-schema.org/draft-04/schema#", | ||||
| "definitions": { | ||||
| "conn_list": { | ||||
| "items": {"$ref": "definitions.json#/connection_id"}, | ||||
| "type": "array" | ||||
| }, | ||||
| "ul_delivery": { | ||||
| "ul_tft": { | ||||
| "$ref": "definitions.json#/traffic_flow_template"}, | ||||
| "connection_list": {"$ref": "#definitions/conn_list"} | ||||
| } | ||||
| }, | ||||
| "id": "https://example.com/mams/mx_traffic_steering_req.json", | ||||
| "properties": { | ||||
| "message_type": {"$ref": "mx_base_def.json#/message_type_def"}, | ||||
| "sequence_num": {"$ref": "mx_base_def.json#/sequence_num_def"}, | ||||
| "version": {"$ref": "mx_base_def.json#/version_def"}, | ||||
| "connection_id": {"$ref": "definitions.json#/connection_id"}, | ||||
| "mx_configuration_id": {"type": "integer"}, | ||||
| "downlink_delivery": { | ||||
| "items": {"$ref": "definitions.json#/connection_id"}, | ||||
| "type": "array" | ||||
| }, | ||||
| "feature_active": { | ||||
| "items": {"$ref": "definitions.json#/feature_status"}, | ||||
| "type": "array" | ||||
| }, | ||||
| "default_uplink_delivery": { | ||||
| "type": "integer" | ||||
| }, | ||||
| "uplink_delivery": { | ||||
| "items": {"$ref": "#definitions/ul_delivery"}, | ||||
| "type": "array" | ||||
| } | ||||
| }, | ||||
| "type": "object" | ||||
| } | ||||
| ]]></sourcecode> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>MX Traffic Steering Response</name> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| { | ||||
| "$schema": "https://json-schema.org/draft-04/schema#", | ||||
| "definitions": {}, | ||||
| "id": "https://example.com/example.json", | ||||
| "properties": { | ||||
| "message_type": {"$ref": "mx_base_def.json#/message_type_def"}, | ||||
| "sequence_num": {"$ref": "mx_base_def.json#/sequence_num_def"}, | ||||
| "version": {"$ref": "mx_base_def.json#/version_def"}, | ||||
| "unique_session_id": { | ||||
| "$ref": "definitions.json#/unique_session_id"}, | ||||
| "feature_active": { | ||||
| "items": {"$ref": "definitions.json#/feature_status"}, | ||||
| "type": "array" | ||||
| } | ||||
| }, | ||||
| "type": "object" | ||||
| } | ||||
| ]]></sourcecode> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>MX Application MADP Association Request</name> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| { | ||||
| "$schema": "https://json-schema.org/draft-04/schema#", | ||||
| "definitions": {}, | ||||
| "id": "https://example.com/example.json", | ||||
| "properties": { | ||||
| "message_type": {"$ref": "mx_base_def.json#/message_type_def"}, | ||||
| "sequence_num": {"$ref": "mx_base_def.json#/sequence_num_def"}, | ||||
| "version": {"$ref": "mx_base_def.json#/version_def"}, | ||||
| "unique_session_id": { | ||||
| "$ref": "definitions.json#/unique_session_id"}, | ||||
| "app_madp_assoc_list": { | ||||
| "items": { | ||||
| "$ref": "definitions.json#/app_madp_assoc" | ||||
| }, | ||||
| "type": "array" | ||||
| } | ||||
| }, | ||||
| "type": "object" | ||||
| } | ||||
| ]]></sourcecode> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>MX Application MADP Association Response</name> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| { | ||||
| "$schema": "https://json-schema.org/draft-04/schema#", | ||||
| "definitions": {}, | ||||
| "id": "https://example.com/example.json", | ||||
| "properties": { | ||||
| "message_type": {"$ref": "mx_base_def.json#/message_type_def"}, | ||||
| "sequence_num": {"$ref": "mx_base_def.json#/sequence_num_def"}, | ||||
| "version": {"$ref": "mx_base_def.json#/version_def"}, | ||||
| "unique_session_id": { | ||||
| "$ref": "definitions.json#/unique_session_id"}, | ||||
| "is_success": { | ||||
| "type": "boolean" | ||||
| } | ||||
| }, | ||||
| "type": "object" | ||||
| } | ||||
| ]]></sourcecode> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>MX Path Estimation Request</name> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| { | ||||
| "$schema": "https://json-schema.org/draft-04/schema#", | ||||
| "definitions": {}, | ||||
| "id": "https://example.com/mams/mx_path_est_req.json", | ||||
| "properties": { | ||||
| "message_type": {"$ref": "mx_base_def.json#/message_type_def"}, | ||||
| "sequence_num": {"$ref": "mx_base_def.json#/sequence_num_def"}, | ||||
| "version": {"$ref": "mx_base_def.json#/version_def"}, | ||||
| "active_probe_ack_req": { | ||||
| "enum": [ | ||||
| "no", | ||||
| "yes" | ||||
| ], | ||||
| "type": "string" | ||||
| }, | ||||
| "active_probe_freq_ms": { | ||||
| "maximum": 10000, | ||||
| "minimum": 100, | ||||
| "type": "integer" | ||||
| }, | ||||
| "active_probe_size_bytes": { | ||||
| "maximum": 1500, | ||||
| "minimum": 100, | ||||
| "type": "integer" | ||||
| }, | ||||
| "active_probe_duration_sec": { | ||||
| "maximum": 100, | ||||
| "minimum": 10, | ||||
| "type": "integer" | ||||
| }, | ||||
| "connection_id": {"$ref": "definitions#/connection_id"}, | ||||
| "init_probe_ack_req": { | ||||
| "enum": [ | ||||
| "no", | ||||
| "yes" | ||||
| ], | ||||
| "type": "string" | ||||
| }, | ||||
| "init_probe_size_bytes": { | ||||
| "maximum": 1500, | ||||
| "minimum": 100, | ||||
| "type": "integer" | ||||
| }, | ||||
| "init_probe_test_duration_ms": { | ||||
| "maximum": 10000, | ||||
| "minimum": 100, | ||||
| "type": "integer" | ||||
| }, | ||||
| "init_probe_test_rate_Mbps": { | ||||
| "maximum": 100, | ||||
| "minimum": 1, | ||||
| "type": "integer" | ||||
| } | ||||
| }, | ||||
| "type": "object" | ||||
| } | ||||
| ]]></sourcecode> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>MX Path Estimation Results</name> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| { | ||||
| "$schema": "https://json-schema.org/draft-04/schema#", | ||||
| "definitions": {}, | ||||
| "id": "https://example.com/mams/mx_path_est_results.json", | ||||
| "properties": { | ||||
| "message_type": {"$ref": "mx_base_def.json#/message_type_def"}, | ||||
| "sequence_num": {"$ref": "mx_base_def.json#/sequence_num_def"}, | ||||
| "version": {"$ref": "mx_base_def.json#/version_def"}, | ||||
| "unique_session_id": { | ||||
| "$ref": "definitions.json#/unique_session_id"}, | ||||
| "active_probe_results": { | ||||
| "properties": { | ||||
| "avg_tput_last_probe_duration_Mbps": { | ||||
| "maximum":100, | ||||
| "minimum": 1, | ||||
| "type": "number" | ||||
| } | ||||
| }, | ||||
| "type": "object" | ||||
| }, | ||||
| "connection_id": {"$ref": "definitions.json#/connection_id"}, | ||||
| "init_probe_results": { | ||||
| "properties": { | ||||
| "lost_probes_percentage": { | ||||
| "maximum": 100, | ||||
| "minimum": 1, | ||||
| "type": "integer" | ||||
| }, | ||||
| "probe_rate_Mbps": { | ||||
| "maximum": 100, | ||||
| "minimum": 1, | ||||
| "type": "number" | ||||
| } | ||||
| }, | ||||
| "type": "object" | ||||
| } | ||||
| }, | ||||
| "type": "object" | ||||
| } | ||||
| ]]></sourcecode> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>MX SSID Indication</name> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| { | ||||
| "$schema": "https://json-schema.org/draft-04/schema#", | ||||
| "definitions": {}, | ||||
| "id": "https://example.com/mams/mx_ssid_indication.json", | ||||
| "properties": { | ||||
| "message_type": {"$ref": "mx_base_def.json#/message_type_def"}, | ||||
| "sequence_num": {"$ref": "mx_base_def.json#/sequence_num_def"}, | ||||
| "version": {"$ref": "mx_base_def.json#/version_def"}, | ||||
| "ssid_list": { | ||||
| "items": { | ||||
| "properties": { | ||||
| "ssid_type": { | ||||
| "$ref": "definitions.json#/ssid_types"}, | ||||
| "ssid_id": { | ||||
| "type": "integer" | ||||
| } | ||||
| } | ||||
| }, | ||||
| "type": "array" | ||||
| } | ||||
| }, | ||||
| "type": "object" | ||||
| } | ||||
| ]]></sourcecode> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>MX Measurement Configuration</name> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| { | ||||
| "$schema": "https://json-schema.org/draft-04/schema#", | ||||
| "additionalProperties": false, | ||||
| "definitions": { | ||||
| "meas_conf": { | ||||
| "connection_id" : { | ||||
| "$ref": "definitions.json#/connection_id"}, | ||||
| "connection_type": { | ||||
| "$ref": "definitions.json#/connection_type"}, | ||||
| "meas_rep_conf": { | ||||
| "items": { | ||||
| "$ref": "definitions.json#/meas_report_conf"}, | ||||
| "type": "array" | ||||
| } | ||||
| } | ||||
| }, | ||||
| "id": "https://example.com/mams/mx_measurement_conf.json", | ||||
| "properties": { | ||||
| "message_type": {"$ref": "mx_base_def.json#/message_type_def"}, | ||||
| "sequence_num": {"$ref": "mx_base_def.json#/sequence_num_def"}, | ||||
| "version": {"$ref": "mx_base_def.json#/version_def"}, | ||||
| "measurement_configuration": { | ||||
| "items": {"$ref": "#definitions/meas_conf"}, | ||||
| "type": "array" | ||||
| } | ||||
| }, | ||||
| "type": "object" | ||||
| } | ||||
| ]]></sourcecode> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>MX Measurement Report</name> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| { | ||||
| "$schema": "https://json-schema.org/draft-04/schema#", | ||||
| "definitions": {}, | ||||
| "id": "https://example.com/mams/mx_measurement_report.json", | ||||
| "properties": { | ||||
| "message_type": {"$ref": "mx_base_def.json#/message_type_def"}, | ||||
| "sequence_num": {"$ref": "mx_base_def.json#/sequence_num_def"}, | ||||
| "version": {"$ref": "mx_base_def.json#/version_def"}, | ||||
| "unique_session_id": { | ||||
| "$ref": "definitions.json#/unique_session_id"}, | ||||
| "measurement_reports": { | ||||
| "items": { | ||||
| "properties": { | ||||
| "connection_id": { | ||||
| "$ref": "definitions.json#/connection_id"}, | ||||
| "connection_type": { | ||||
| "$ref": "definitions.json#/connection_type"}, | ||||
| "delivery_node_id": { | ||||
| "$ref": "definitions.json#/delivery_node_id"}, | ||||
| "measurements": { | ||||
| "items": { | ||||
| "properties": { | ||||
| "measurement_type": { | ||||
| "$ref": "definitions.json#/meas_report_param"}, | ||||
| "measurement_value": { | ||||
| "type": "integer" | ||||
| } | ||||
| }, | ||||
| "type": "object" | ||||
| }, | ||||
| "type": "array" | ||||
| } | ||||
| }, | ||||
| "type": "object" | ||||
| }, | ||||
| "type": "array" | ||||
| } | ||||
| }, | ||||
| "type": "object" | ||||
| } | ||||
| ]]></sourcecode> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>MX Keep-Alive Request</name> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| { | ||||
| "$schema": "https://json-schema.org/draft-04/schema#", | ||||
| "additionalProperties": false, | ||||
| "id": "https://example.com/mams/mx_keep_alive_req.json", | ||||
| "properties": { | ||||
| "message_type": {"$ref": "mx_base_def.json#/message_type_def"}, | ||||
| "sequence_num": {"$ref": "mx_base_def.json#/sequence_num_def"}, | ||||
| "version": {"$ref": "mx_base_def.json#/version_def"}, | ||||
| "keep_alive_reason": { | ||||
| "$ref": "definitions.json#/keep_alive_reason"}, | ||||
| "unique_session_id": { | ||||
| "$ref": "definitions.json#/unique_session_id"}, | ||||
| "connection_id": { | ||||
| "$ref": "definitions.json#/connection_id"}, | ||||
| "delivery_node_id": { | ||||
| "$ref": "definitions.json#/connection_id"} | ||||
| }, | ||||
| "type": "object" | ||||
| } | ||||
| ]]></sourcecode> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>MX Keep-Alive Response</name> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| { | ||||
| "$schema": "https://json-schema.org/draft-04/schema#", | ||||
| "additionalProperties": false, | ||||
| "id": "https://example.com/mams/mx_keep_alive_rsp.json", | ||||
| "properties": { | ||||
| "message_type": {"$ref": "mx_base_def.json#/message_type_def"}, | ||||
| "sequence_num": {"$ref": "mx_base_def.json#/sequence_num_def"}, | ||||
| "version": {"$ref": "mx_base_def.json#/version_def"}, | ||||
| "unique_session_id": { | ||||
| "$ref": "definitions.json#/unique_session_id"} | ||||
| }, | ||||
| "type": "object" | ||||
| } | ||||
| ]]></sourcecode> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>MX Session Termination Request</name> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| { | ||||
| "$schema": "https://json-schema.org/draft-04/schema#", | ||||
| "additionalProperties": false, | ||||
| "id": "https://example.com/mams/mx_keep_alive_req.json", | ||||
| "properties": { | ||||
| "message_type": {"$ref": "mx_base_def.json#/message_type_def"}, | ||||
| "sequence_num": {"$ref": "mx_base_def.json#/sequence_num_def"}, | ||||
| "version": {"$ref": "mx_base_def.json#/version_def"}, | ||||
| "unique_session_id": { | ||||
| "$ref": "definitions.json#/unique_session_id"}, | ||||
| "reason": { | ||||
| "enum": [ | ||||
| "MX_NORMAL_RELEASE", | ||||
| "MX_NO_RESPONSE", | ||||
| "INTERNAL_ERROR" | ||||
| ], | ||||
| "type": "string" | ||||
| } | ||||
| }, | ||||
| "type": "object" | ||||
| } | ||||
| ]]></sourcecode> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>MX Session Termination Response</name> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| { | ||||
| "$schema": "https://json-schema.org/draft-04/schema#", | ||||
| "additionalProperties": false, | ||||
| "id": "https://example.com/mams/mx_session_termination_rsp.json", | ||||
| "properties": { | ||||
| "message_type": {"$ref": "mx_base_def.json#/message_type_def"}, | ||||
| "sequence_num": {"$ref": "mx_base_def.json#/sequence_num_def"}, | ||||
| "version": {"$ref": "mx_base_def.json#/version_def"}, | ||||
| "unique_session_id": { | ||||
| "$ref": "definitions.json#/unique_session_id"} | ||||
| }, | ||||
| "type": "object" | ||||
| } | ||||
| ]]></sourcecode> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>MX Network Analytics Request</name> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| { | ||||
| "$schema": "https://json-schema.org/draft-04/schema#", | ||||
| "additionalProperties": false, | ||||
| "id": "https://example.com/mams/mx_network_analytics_req.json", | ||||
| "properties": { | ||||
| "message_type": {"$ref": "mx_base_def.json#/message_type_def"}, | ||||
| "sequence_num": {"$ref": "mx_base_def.json#/sequence_num_def"}, | ||||
| "version": {"$ref": "mx_base_def.json#/version_def"}, | ||||
| "unique_session_id": { | ||||
| "$ref": "definitions.json#/unique_session_id"}, | ||||
| "params": { | ||||
| "items": { | ||||
| "$ref": "definitions.json#/predict_param_name"}, | ||||
| "type": "array" | ||||
| } | ||||
| }, | ||||
| "type": "object" | ||||
| } | ||||
| ]]></sourcecode> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>MX Network Analytics Response</name> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| { | ||||
| "$schema": "https://json-schema.org/draft-04/schema#", | ||||
| "additionalProperties": false, | ||||
| "definitions": { | ||||
| "ParamPredictions": { | ||||
| "param_name": { | ||||
| "$ref": "definitions.json#/predict_param_name"}, | ||||
| "additional_param": { | ||||
| "$ref": "definitions.json#/predict_add_param_name"}, | ||||
| "prediction": {"type": "integer"}, | ||||
| "likelihood": {"type": "integer"}, | ||||
| "validity_time": {"type": "integer"} | ||||
| }, | ||||
| "MXAnalyticsList": { | ||||
| "connection_id": { | ||||
| "$ref": "definitions.json#/connection_id"}, | ||||
| "connection_type": { | ||||
| "$ref": "definitions.json#/connection_type"}, | ||||
| "predictions": { | ||||
| "items": { | ||||
| "$ref": "#definitions/ParamPredictions"}, | ||||
| "type": "array" | ||||
| } | ||||
| } | ||||
| }, | ||||
| "id": "https://example.com/mams/mx_network_analytics_rsp.json", | ||||
| "properties": { | ||||
| "message_type": {"$ref": "mx_base_def.json#/message_type_def"}, | ||||
| "sequence_num": {"$ref": "mx_base_def.json#/sequence_num_def"}, | ||||
| "version": {"$ref": "mx_base_def.json#/version_def"}, | ||||
| "param_list": { | ||||
| "items": { | ||||
| "$ref": "#definitions/MXAnalyticsList"}, | ||||
| "type": "array"} | ||||
| }, | ||||
| "type": "object" | ||||
| } | ||||
| ]]></sourcecode> | ||||
| </section> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>Examples in JSON</name> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>MX Discover</name> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| { | ||||
| "version" : "1.0", | ||||
| "message_type" : "mx_discover", | ||||
| "sequence_num" : 1 | ||||
| } | ||||
| ]]></sourcecode> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>MX System Info</name> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| { | ||||
| "version" : "1.0", | ||||
| "message_type" : "mx_system_info", | ||||
| "sequence_num" : 2, | ||||
| "ncm_connections" : [ | ||||
| { | ||||
| "connection_id" : 0, | ||||
| "connection_type" : "LTE", | ||||
| "ncm_end_point" : { | ||||
| "ip_address" : "192.168.1.10", | ||||
| "port" : 1234 | ||||
| } | ||||
| }, | ||||
| { | ||||
| "connection_id" : 1, | ||||
| "connection_type" : "Wi-Fi", | ||||
| "ncm_end_point" : { | ||||
| "ip_address" : "192.168.1.10", | ||||
| "port" : 1234 | ||||
| } | ||||
| } | ||||
| ] | ||||
| } | ||||
| ]]></sourcecode> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>MX Capability Request</name> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| { | ||||
| "version" : "1.0", | ||||
| "message_type" : "mx_capability_req", | ||||
| "sequence_num" : 3, | ||||
| "feature_active" : [ | ||||
| { | ||||
| "feature_name" : "lossless_switching", | ||||
| "active" : true | ||||
| }, | ||||
| { | ||||
| "feature_name" : "fragmentation", | ||||
| "active" : false | ||||
| } | ||||
| ], | ||||
| "num_anchor_connections" : 2, | ||||
| "anchor_connections" : [ | ||||
| { | ||||
| "connection_id" : 0, | ||||
| "connection_type" : "LTE" | ||||
| }, | ||||
| { | ||||
| "connection_id" : 1, | ||||
| "connection_type" : "Wi-Fi" | ||||
| } | ||||
| ], | ||||
| "num_delivery_connections" : 2, | ||||
| "delivery_connections" : [ | ||||
| { | ||||
| "connection_id" : 0, | ||||
| "connection_type" : "LTE" | ||||
| }, | ||||
| { | ||||
| "connection_id" : 1, | ||||
| "connection_type" : "Wi-Fi" | ||||
| } | ||||
| ], | ||||
| "convergence_methods" : [ | ||||
| { | ||||
| "method" : "GMA", | ||||
| "supported" : true | ||||
| }, | ||||
| { | ||||
| "method" : "MPTCP_Proxy", | ||||
| "supported" : false | ||||
| } | ||||
| ], | ||||
| "adaptation_methods" : [ | ||||
| { | ||||
| "method" : "UDP_without_DTLS", | ||||
| "supported" : false | ||||
| }, | ||||
| { | ||||
| "method" : "UDP_with_DTLS", | ||||
| "supported" : false | ||||
| }, | ||||
| { | ||||
| "method" : "IPsec", | ||||
| "supported" : true | ||||
| }, | ||||
| { | ||||
| "method" : "Client_NAT", | ||||
| "supported" : false | ||||
| } | ||||
| ] | ||||
| } | ||||
| ]]></sourcecode> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>MX Capability Response</name> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| { | ||||
| "version" : "1.0", | ||||
| "message_type" : "mx_capability_rsp", | ||||
| "sequence_num" : 3, | ||||
| "feature_active" : [ | ||||
| { | ||||
| "feature_name" : "lossless_switching", | ||||
| "active" : true | ||||
| }, | ||||
| { | ||||
| "feature_name" : "fragmentation", | ||||
| "active" : false | ||||
| } | ||||
| ], | ||||
| "num_anchor_connections" : 2, | ||||
| "anchor_connections" : [ | ||||
| { | ||||
| "connection_id" : 0, | ||||
| "connection_type" : "LTE" | ||||
| }, | ||||
| { | ||||
| "connection_id" : 1, | ||||
| "connection_type" : "Wi-Fi" | ||||
| } | ||||
| ], | ||||
| "num_delivery_connections" : 2, | ||||
| "delivery_connections" : [ | ||||
| { | ||||
| "connection_id" : 0, | ||||
| "connection_type" : "LTE" | ||||
| }, | ||||
| { | ||||
| "connection_id" : 1, | ||||
| "connection_type" : "Wi-Fi" | ||||
| } | ||||
| ], | ||||
| "convergence_methods" : [ | ||||
| { | ||||
| "method" : "GMA", | ||||
| "supported" : true | ||||
| }, | ||||
| { | ||||
| "method" : "MPTCP_Proxy", | ||||
| "supported" : false | ||||
| } | ||||
| ], | ||||
| "adaptation_methods" : [ | ||||
| { | ||||
| "method" : "UDP_without_DTLS", | ||||
| "supported" : false | ||||
| }, | ||||
| { | ||||
| "method" : "UDP_with_DTLS", | ||||
| "supported" : false | ||||
| }, | ||||
| { | ||||
| "method" : "IPsec", | ||||
| "supported" : true | ||||
| }, | ||||
| { | ||||
| "method" : "Client_NAT", | ||||
| "supported" : false | ||||
| } | ||||
| ], | ||||
| "unique_session_id" : { | ||||
| "ncm_id" : 110, | ||||
| "session_id" : 1111 | ||||
| } | ||||
| } | ||||
| ]]></sourcecode> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>MX Capability Acknowledge</name> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| { | ||||
| "version" : "1.0", | ||||
| "message_type" : "mx_capability_ack", | ||||
| "sequence_num" : 3, | ||||
| "unique_session_id" : { | ||||
| "ncm_id" : 110, | ||||
| "session_id" : 1111 | ||||
| }, | ||||
| "capability_ack" : "MX_ACCEPT" | ||||
| } | ||||
| ]]></sourcecode> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>MX Reconfiguration Request</name> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| { | ||||
| "version" : "1.0", | ||||
| "message_type" : "mx_reconf_req", | ||||
| "sequence_num" : 4, | ||||
| "unique_session_id" : { | ||||
| "ncm_id" : 110, | ||||
| "session_id" : 1111 | ||||
| }, | ||||
| "reconf_action" : "setup", | ||||
| "connection_id" : 0, | ||||
| "ip_address" : "192.168.110.1", | ||||
| "ssid" : "SSID_1", | ||||
| "mtu_size" : 1300, | ||||
| "connection_status" : "connected", | ||||
| "delivery_node_id" : "2A12C" | ||||
| } | ||||
| ]]></sourcecode> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>MX Reconfiguration Response</name> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| { | ||||
| "version" : "1.0", | ||||
| "message_type" : "mx_reconf_rsp", | ||||
| "sequence_num" : 4 | ||||
| } | ||||
| ]]></sourcecode> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>MX UP Setup Configuration Request</name> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| { | ||||
| "version": "1.0", | ||||
| "message_type": "mx_up_setup_conf_req", | ||||
| "sequence_num": 5, | ||||
| "num_anchor_connections": 2, | ||||
| "anchor_connections": [{ | ||||
| "connection_id": 1, | ||||
| "connection_type": "Wi-Fi", | ||||
| "num_active_mx_conf" : 2, | ||||
| "convergence_config" : [ | ||||
| { | ||||
| "mx_configuration_id" : 1, | ||||
| "convergence_method": "GMA", | ||||
| "convergence_method_params": {}, | ||||
| "num_delivery_connections": 2, | ||||
| "delivery_connections": [{ | ||||
| "connection_id": 0, | ||||
| "connection_type": "LTE", | ||||
| "adaptation_method": "UDP_without_DTLS", | ||||
| "adaptation_method_param": { | ||||
| "tunnel_ip_addr": "6.6.6.6", | ||||
| "tunnel_end_port": 9999, | ||||
| "mx_header_optimization": true | ||||
| } | ||||
| }, | ||||
| { | ||||
| "connection_id": 1, | ||||
| "connection_type": "Wi-Fi" | ||||
| } | ||||
| ] | ||||
| }, | ||||
| { | ||||
| "mx_configuration_id" : 2, | ||||
| "convergence_method": "GMA", | ||||
| "convergence_method_params": {}, | ||||
| "num_delivery_connections": 1, | ||||
| "delivery_connections": [{ | ||||
| "connection_id": 0, | ||||
| "connection_type": "LTE", | ||||
| "adaptation_method": "UDP_without_DTLS", | ||||
| "adaptation_method_param": { | ||||
| "tunnel_ip_addr": "6.6.6.6", | ||||
| "tunnel_end_port": 8877 | ||||
| } | ||||
| } | ||||
| ] | ||||
| } | ||||
| ] | ||||
| }, | ||||
| { | ||||
| "connection_id": 0, | ||||
| "connection_type": "LTE", | ||||
| "udp_port": 8888, | ||||
| "num_delivery_connections": 2, | ||||
| "delivery_connections": [{ | ||||
| "connection_id": 0, | ||||
| "connection_type": "LTE" | ||||
| }, | ||||
| { | ||||
| "connection_id": 1, | ||||
| "connection_type": "Wi-Fi", | ||||
| "adaptation_method": "UDP_without_DTLS", | ||||
| "adaptation_method_param": { | ||||
| "tunnel_ip_addr": "192.168.3.3", | ||||
| "tunnel_end_port": "6000" | ||||
| } | ||||
| } | ||||
| ] | ||||
| } | ||||
| ] | ||||
| } | ||||
| ]]></sourcecode> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>MX UP Setup Confirmation</name> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| { | ||||
| "version" : "1.0", | ||||
| "message_type" : "mx_up_setup_cnf", | ||||
| "sequence_num" : 5, | ||||
| "unique_session_id" : { | ||||
| "ncm_id" : 110, | ||||
| "session_id" : 1111 | ||||
| }, | ||||
| "probe_param" : { | ||||
| "probe_port" : 48700, | ||||
| "anchor_conn_id" : 0, | ||||
| "mx_configuration_id" : 1 | ||||
| }, | ||||
| "num_delivery_conn" : 2, | ||||
| "client_params" : [ | ||||
| { | ||||
| "connection_id" : 0, | ||||
| "adapt_param" : { | ||||
| "udp_adapt_port" : 51000 | ||||
| } | ||||
| }, | ||||
| { | ||||
| "connection_id" : 1, | ||||
| "adapt_param" : { | ||||
| "udp_adapt_port" : 52000 | ||||
| } | ||||
| } | ||||
| ] | ||||
| } | ||||
| ]]></sourcecode> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>MX Traffic Steering Request</name> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| { | ||||
| "version" : "1.0", | ||||
| "message_type" : "mx_traffic_steering_req", | ||||
| "sequence_num" : 6, | ||||
| "connection_id" : 0, | ||||
| "mx_configuration_id" : 1, | ||||
| "downlink_delivery" : [ | ||||
| { | ||||
| "connection_id" : 0 | ||||
| }, | ||||
| { | ||||
| "connection_id" : 1 | ||||
| } | ||||
| ], | ||||
| "default_uplink_delivery" : 0, | ||||
| "uplink_delivery" : [ | ||||
| { | ||||
| "ul_tft" : { | ||||
| "remote_addr_mask" : "10.10.0.0/24", | ||||
| "local_addr_mask" : "192.168.0.0/24", | ||||
| "protocol_type" : 6, | ||||
| "local_port_range" : { | ||||
| "start" : 100, | ||||
| "end" : 1000 | ||||
| }, | ||||
| "remote_port_range" : { | ||||
| "start" : 100, | ||||
| "end" : 1000 | ||||
| }, | ||||
| "traffic_class" : 20, | ||||
| "flow_label" : 100 | ||||
| }, | ||||
| "conn_list" : [ | ||||
| { | ||||
| "connection_id" : 1 | ||||
| } | ||||
| ] | ||||
| }, | ||||
| { | ||||
| "ul_tft" : { | ||||
| "remote_addr_mask" : "10.10.0.0/24", | ||||
| "local_addr_mask" : "192.168.0.0/24", | ||||
| "protocol_type" : 6, | ||||
| "local_port_range" : { | ||||
| "start" : 2000, | ||||
| "end" : 2000 | ||||
| }, | ||||
| "remote_port_range" : { | ||||
| "start" : 100, | ||||
| "end" : 1000 | ||||
| }, | ||||
| "traffic_class" : 20, | ||||
| "flow_label" : 50 | ||||
| }, | ||||
| "conn_list" : [ | ||||
| { | ||||
| "connection_id" : 1 | ||||
| } | ||||
| ] | ||||
| } | ||||
| ], | ||||
| "feature_active" : [ | ||||
| { | ||||
| "feature_name" : "dl_aggregation", | ||||
| "active" : true | ||||
| }, | ||||
| { | ||||
| "feature_name" : "ul_aggregation", | ||||
| "active" : false | ||||
| } | ||||
| ] | ||||
| } | ||||
| ]]></sourcecode> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>MX Traffic Steering Response</name> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| { | ||||
| "version": "1.0", | ||||
| "message_type": "mx_traffic_steering_rsp", | ||||
| "sequence_num": 6, | ||||
| "unique_session_id": { | ||||
| "ncm_id": 110, | ||||
| "session_id": 1111 | ||||
| }, | ||||
| "feature_active": [{ | ||||
| "feature_name": "lossless_switching", | ||||
| "active": true | ||||
| }, | ||||
| { | ||||
| "feature_name": "fragmentation", | ||||
| "active": false | ||||
| } | ||||
| ] | ||||
| } | ||||
| ]]></sourcecode> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>MX Application MADP Association Request</name> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| { | ||||
| "version": "1.0", | ||||
| "message_type": "mx_app_madp_assoc_req", | ||||
| "sequence_num": 6, | ||||
| "unique_session_id": { | ||||
| "ncm_id": 110, | ||||
| "session_id": 1111 | ||||
| }, | ||||
| "app_madp_assoc_list": [{ | ||||
| "connection_id" : 0, | ||||
| "mx_configuration_id" : 1, | ||||
| "ul_tft_list": [{ | ||||
| "protocol_type": 17, | ||||
| "local_port_range": { | ||||
| "start": 8888, | ||||
| "end": 8888 | ||||
| } | ||||
| }], | ||||
| "dl_tft_list": [{ | ||||
| "protocol_type": 17, | ||||
| "remote_port_range": { | ||||
| "start": 8888, | ||||
| "end": 8888 | ||||
| } | ||||
| }] | ||||
| } | ||||
| ] | ||||
| } | ||||
| ]]></sourcecode> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>MX Application MADP Association Response</name> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| { | ||||
| "version": "1.0", | ||||
| "message_type": "mx_app_madp_assoc_rsp", | ||||
| "sequence_num": 6, | ||||
| "is_success": true | ||||
| } | ||||
| ]]></sourcecode> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>MX Path Estimation Request</name> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| { | ||||
| "version" : "1.0", | ||||
| "message_type" : "mx_path_est_req", | ||||
| "sequence_num" : 7, | ||||
| "connection_id" : 0, | ||||
| "init_probe_test_duration_ms" : 100, | ||||
| "init_probe_test_rate_Mbps" : 10, | ||||
| "init_probe_size_bytes" : 1000, | ||||
| "init_probe_ack_req" : "yes", | ||||
| "active_probe_freq_ms" : 10000, | ||||
| "active_probe_size_bytes" : 1000, | ||||
| "active_probe_duration_sec" : 10, | ||||
| "active_probe_ack_req" : "no" | ||||
| } | ||||
| ]]></sourcecode> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>MX Path Estimation Results</name> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| { | ||||
| "version" : "1.0", | ||||
| "message_type" : "mx_path_est_results", | ||||
| "sequence_num" : 8, | ||||
| "unique_session_id" : { | ||||
| "ncm_id" : 110, | ||||
| "session_id" : 1111 | ||||
| }, | ||||
| "connection_id" : 0, | ||||
| "init_probe_results" : { | ||||
| "lost_probes_percentage" : 1, | ||||
| "probe_rate_Mbps" : 9.9 | ||||
| }, | ||||
| "active_probe_results" : { | ||||
| "avg_tput_last_probe_duration_Mbps" : 9.8 | ||||
| } | ||||
| } | ||||
| ]]></sourcecode> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>MX SSID Indication</name> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| { | ||||
| "version" : "1.0", | ||||
| "message_type" : "mx_ssid_indication", | ||||
| "sequence_num" : 9, | ||||
| "ssid_list" : [ | ||||
| { | ||||
| "ssid_type" : "ssid", | ||||
| "ssid_id" : "SSID_1" | ||||
| }, | ||||
| { | ||||
| "ssid_type" : "bssid", | ||||
| "ssid_id" : "xxx-yyy" | ||||
| } | ||||
| ] | ||||
| } | ||||
| ]]></sourcecode> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>MX Measurement Configuration</name> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| { | ||||
| "version" : "1.0", | ||||
| "message_type" : "mx_measurement_conf", | ||||
| "sequence_num" : 10, | ||||
| "measurement_configuration" : [ | ||||
| { | ||||
| "connection_id" : 0, | ||||
| "connection_type" : "Wi-Fi", | ||||
| "meas_rep_conf" : [ | ||||
| { | ||||
| "meas_rep_param" : "WLAN_RSSI", | ||||
| "meas_threshold" : { | ||||
| "high" : -10, | ||||
| "low" : -15 | ||||
| }, | ||||
| "meas_period_ms" : 500 | ||||
| }, | ||||
| { | ||||
| "meas_rep_param" : "WLAN_LOAD", | ||||
| "meas_threshold" : { | ||||
| "high" : -10, | ||||
| "low" : -15 | ||||
| }, | ||||
| "meas_period_ms" : 500 | ||||
| }, | ||||
| { | ||||
| "meas_rep_param" : "EST_UL_TPUT", | ||||
| "meas_threshold" : { | ||||
| "high" : 100, | ||||
| "low" : 30 | ||||
| }, | ||||
| "meas_period_ms" : 500 | ||||
| } | ||||
| ] | ||||
| }, | ||||
| { | ||||
| "connection_id" : 1, | ||||
| "connection_type" : "LTE", | ||||
| "meas_rep_conf" : [ | ||||
| { | ||||
| "meas_rep_param" : "LTE_RSRP", | ||||
| "meas_threshold" : { | ||||
| "high" : -10, | ||||
| "low" : -15 | ||||
| }, | ||||
| "meas_period_ms" : 500 | ||||
| }, | ||||
| { | ||||
| "meas_rep_param" : "LTE_RSRQ", | ||||
| "meas_threshold" : { | ||||
| "high" : -10, | ||||
| "low" : -15 | ||||
| }, | ||||
| "meas_period_ms" : 500 | ||||
| } | ||||
| ] | ||||
| } | ||||
| ] | ||||
| } | ||||
| ]]></sourcecode> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>MX Measurement Report</name> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| { | ||||
| "version" : "1.0", | ||||
| "message_type" : "mx_measurement_report", | ||||
| "sequence_num" : 11, | ||||
| "unique_session_id" : { | ||||
| "ncm_id" : 110, | ||||
| "session_id" : 1111 | ||||
| }, | ||||
| "measurement_reports" : [ | ||||
| { | ||||
| "connection_id" : 0, | ||||
| "connection_type" : "Wi-Fi", | ||||
| "delivery_node_id" : "2021A", | ||||
| "measurements" : [ | ||||
| { | ||||
| "measurement_type" : "WLAN_RSSI", | ||||
| "measurement_value" : -12 | ||||
| }, | ||||
| { | ||||
| "measurement_type" : "UL_TPUT", | ||||
| "measurement_value" : 10 | ||||
| }, | ||||
| { | ||||
| "measurement_type" : "EST_UL_TPUT", | ||||
| "measurement_value" : 20 | ||||
| } | ||||
| ] | ||||
| }, | ||||
| { | ||||
| "connection_id" : 1, | ||||
| "connection_type" : "LTE", | ||||
| "delivery_node_id" : "12323", | ||||
| "measurements" : [ | ||||
| { | ||||
| "measurement_type" : "LTE_RSRP", | ||||
| "measurement_value" : -12 | ||||
| }, | ||||
| { | ||||
| "measurement_type" : "LTE_RSRQ", | ||||
| "measurement_value" : -12 | ||||
| } | ||||
| ] | ||||
| } | ||||
| ] | ||||
| } | ||||
| ]]></sourcecode> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>MX Keep-Alive Request</name> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| { | ||||
| "version" : "1.0", | ||||
| "message_type" : "mx_keep_alive_req", | ||||
| "sequence_num" : 12, | ||||
| "keep_alive_reason" : "Handover", | ||||
| "unique_session_id" : { | ||||
| "ncm_id" : 110, | ||||
| "session_id" : 1111 | ||||
| }, | ||||
| "connection_id" : 0, | ||||
| "delivery_node_id" : "2021A" | ||||
| } | ||||
| ]]></sourcecode> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>MX Keep-Alive Response</name> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| { | ||||
| "version" : "1.0", | ||||
| "message_type" : "mx_keep_alive_rsp", | ||||
| "sequence_num" : 12, | ||||
| "unique_session_id" : { | ||||
| "ncm_id" : 110, | ||||
| "session_id" : 1111 | ||||
| } | ||||
| } | ||||
| ]]></sourcecode> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>MX Session Termination Request</name> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| { | ||||
| "version" : "1.0", | ||||
| "message_type" : "mx_session_termination_req", | ||||
| "sequence_num" : 13, | ||||
| "unique_session_id" : { | ||||
| "ncm_id" : 110, | ||||
| "session_id" : 1111 | ||||
| }, | ||||
| "reason" : "MX_NORMAL_RELEASE" | ||||
| } | ||||
| ]]></sourcecode> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>MX Session Termination Response</name> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| { | ||||
| "version" : "1.0", | ||||
| "message_type" : "mx_session_termination_rsp", | ||||
| "sequence_num" : 13, | ||||
| "unique_session_id" : { | ||||
| "ncm_id" : 110, | ||||
| "session_id" : 1111 | ||||
| } | ||||
| } | ||||
| ]]></sourcecode> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>MX Network Analytics Request</name> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| { | ||||
| "version" : "1.0", | ||||
| "message_type" : "mx_network_analytics_req", | ||||
| "sequence_num" : 20, | ||||
| "unique_session_id" : { | ||||
| "ncm_id" : 110, | ||||
| "session_id" : 1111 | ||||
| }, | ||||
| "params" : [ | ||||
| "jitter", | ||||
| "latency" | ||||
| ] | ||||
| } | ||||
| ]]></sourcecode> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>MX Network Analytics Response</name> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| { | ||||
| "version": "1.0", | ||||
| "message_type": "mx_network_analytics_rsp", | ||||
| "sequence_num": 20, | ||||
| "param_list": [{ | ||||
| "connection_id": 1, | ||||
| "connection_type": "Wi-Fi", | ||||
| "predictions": [{ | ||||
| "param_name": "jitter", | ||||
| "prediction": 100, | ||||
| "likelihood": 50, | ||||
| "validity_time": 10 | ||||
| }, | ||||
| { | ||||
| "param_name": "latency", | ||||
| "prediction": 19, | ||||
| "likelihood": 40, | ||||
| "validity_time": 10 | ||||
| } | ||||
| ] | ||||
| }, | ||||
| { | ||||
| "connection_id": 2, | ||||
| "connection_type": "LTE", | ||||
| "predictions": [{ | ||||
| "param_name": "jitter", | ||||
| "prediction": 10, | ||||
| "likelihood": 80, | ||||
| "validity_time": 10 | ||||
| }, | ||||
| { | ||||
| "param_name": "latency", | ||||
| "prediction": 4, | ||||
| "likelihood": 60, | ||||
| "validity_time": 10 | ||||
| } | ||||
| ] | ||||
| } | ||||
| ] | ||||
| } | ||||
| ]]></sourcecode> | ||||
| </section> | ||||
| </section> | ||||
| </section> | ||||
| <section anchor="CCM_APP_APIs" numbered="true" toc="default"> | ||||
| <name>Definition of APIs Provided by the CCM to the Applications at the Cl | ||||
| ient</name> | ||||
| <t>This section provides an example implementation of the APIs exposed by | ||||
| the CCM to | ||||
| the applications on the client, documented with OpenAPI using Swagger 2.0.< | ||||
| /t> | ||||
| <sourcecode name="" type="json" markers="false"><![CDATA[ | ||||
| { | ||||
| "swagger": "2.0", | ||||
| "info": { | ||||
| "version": "1.0.0", | ||||
| "title": "Client Connection Manager (CCM)", | ||||
| "description": "API provided by the CCM towards the application | ||||
| on a MAMS client." | ||||
| }, | ||||
| "host": "MAMS.ietf.org", | ||||
| "basePath": "/ccm/v1.0", | ||||
| "schemes": [ | ||||
| "https" | ||||
| ], | ||||
| "consumes": [ | ||||
| "application/json" | ||||
| ], | ||||
| "produces": [ | ||||
| "application/json" | ||||
| ], | ||||
| "paths": { | ||||
| "/capabilities": { | ||||
| "get": { | ||||
| "description": "This API can be used by an application to | ||||
| request the capabilities of the CCM.", | ||||
| "produces": [ | ||||
| "application/json", | ||||
| "text/html" | ||||
| ], | ||||
| "responses": { | ||||
| "200": { | ||||
| "description": "OK", | ||||
| "schema": { | ||||
| "$ref": "#/definitions/capability" | ||||
| } | ||||
| }, | ||||
| "default": { | ||||
| "description": "unexpected error", | ||||
| "schema": { | ||||
| "$ref": "#/definitions/errorModel" | ||||
| } | ||||
| } | ||||
| } | ||||
| } | ||||
| }, | ||||
| "/app_requirements": { | ||||
| "post": { | ||||
| "description": "This API is used by the N-MADP to report | ||||
| any types of MAMS user-specific errors to | ||||
| the NCM.", | ||||
| "produces": [ | ||||
| "application/json", | ||||
| "text/html" | ||||
| ], | ||||
| "parameters": [ | ||||
| { | ||||
| "name": "app-requirements", | ||||
| "in": "body", | ||||
| "required": true, | ||||
| "schema": { | ||||
| "$ref": "#/definitions/app-requirements" | ||||
| } | ||||
| } | ||||
| ], | ||||
| "responses": { | ||||
| "200": { | ||||
| "description": "OK" | ||||
| }, | ||||
| "default": { | ||||
| "description": "unexpected error", | ||||
| "schema": { | ||||
| "$ref": "#/definitions/errorModel" | ||||
| } | ||||
| } | ||||
| } | ||||
| } | ||||
| }, | ||||
| "/predictive_link_params": { | ||||
| "get": { | ||||
| "description": "This API is used by applications to get the | ||||
| information about predicted parameters for | ||||
| each delivery connection.", | ||||
| "produces": [ | ||||
| "application/json", | ||||
| "text/html" | ||||
| ], | ||||
| "responses": { | ||||
| "200": { | ||||
| "description": "OK", | ||||
| "schema": { | ||||
| "$ref": "#/definitions/link-params" | ||||
| } | ||||
| }, | ||||
| "default": { | ||||
| "description": "unexpected error", | ||||
| "schema": { | ||||
| "$ref": "#/definitions/errorModel" | ||||
| } | ||||
| } | ||||
| } | ||||
| } | ||||
| } | ||||
| }, | ||||
| "definitions": { | ||||
| "connection-id": { | ||||
| "type": "integer", | ||||
| "format": "uint8" | ||||
| }, | ||||
| "connection-type": { | ||||
| "enum": [ | ||||
| "Wi-Fi", | ||||
| "5G_NR", | ||||
| "MulteFire", | ||||
| "LTE" | ||||
| ], | ||||
| "type": "string" | ||||
| }, | ||||
| "features": { | ||||
| "enum": [ | ||||
| "lossless_switching", | ||||
| "fragmentation", | ||||
| "concatenation", | ||||
| "uplink_aggregation", | ||||
| "downlink_aggregation", | ||||
| "measurement" | ||||
| "probing" | ||||
| ], | ||||
| "type": "string" | ||||
| }, | ||||
| "adaptation-methods": { | ||||
| "enum": [ | ||||
| "UDP_without_DTLS", | ||||
| "UDP_with_DTLS", | ||||
| "IPsec", | ||||
| "Client_NAT" | ||||
| ], | ||||
| "type": "string" | ||||
| }, | ||||
| "convergence-methods": { | ||||
| "enum": [ | ||||
| "GMA", | ||||
| "MPTCP_Proxy", | ||||
| "GRE_Aggregation_Proxy", | ||||
| "MPQUIC" | ||||
| ], | ||||
| "type": "string" | ||||
| }, | ||||
| "connection": { | ||||
| "type": "object", | ||||
| "properties": { | ||||
| "conn-id": { | ||||
| "$ref": "#/definitions/connection-id" | ||||
| }, | ||||
| "conn-type": { | ||||
| "$ref": "#/definitions/connection-type" | ||||
| } | ||||
| } | ||||
| }, | ||||
| "convergence-parameters": { | ||||
| "type": "object", | ||||
| "properties": { | ||||
| "conv-param-name": { | ||||
| "type": "string" | ||||
| }, | ||||
| "conv-param-value": { | ||||
| "type": "string" | ||||
| } | ||||
| } | ||||
| }, | ||||
| "convergence-details": { | ||||
| "type": "object", | ||||
| "properties": { | ||||
| "conv-method": { | ||||
| "$ref": "#/definitions/convergence-methods" | ||||
| }, | ||||
| "conv-params": { | ||||
| "type": "array", | ||||
| "items": { | ||||
| "$ref": "#/definitions/convergence-parameters" | ||||
| } | ||||
| } | ||||
| } | ||||
| }, | ||||
| "capability": { | ||||
| "type": "object", | ||||
| "properties": { | ||||
| "connections": { | ||||
| "type": "array", | ||||
| "items": { | ||||
| "$ref": "#/definitions/connection" | ||||
| } | ||||
| }, | ||||
| "features": { | ||||
| "type": "array", | ||||
| "items": { | ||||
| "$ref": "#/definitions/features" | ||||
| } | ||||
| }, | ||||
| "adapt-methods": { | ||||
| "type": "array", | ||||
| "items": { | ||||
| "$ref": "#/definitions/adaptation-methods" | ||||
| } | ||||
| }, | ||||
| "conv-methods": { | ||||
| "type": "array", | ||||
| "items": { | ||||
| "$ref": "#/definitions/convergence-details" | ||||
| } | ||||
| } | ||||
| } | ||||
| }, | ||||
| "qos-param-name": { | ||||
| "enum": [ | ||||
| "jitter", | ||||
| "latency", | ||||
| "bandwidth" | ||||
| ], | ||||
| "type": "string" | ||||
| }, | ||||
| "qos-param": { | ||||
| "type": "object", | ||||
| "properties": { | ||||
| "qos-param-name": { | ||||
| "$ref": "#/definitions/qos-param-name" | ||||
| }, | ||||
| "qos-param-value": { | ||||
| "type": "integer" | ||||
| } | ||||
| } | ||||
| }, | ||||
| "port-range": { | ||||
| "type": "object", | ||||
| "properties": { | ||||
| "start": { | ||||
| "type": "integer" | ||||
| }, | ||||
| "end": { | ||||
| "type": "integer" | ||||
| } | ||||
| } | ||||
| }, | ||||
| "protocol-type": { | ||||
| "type": "integer" | ||||
| }, | ||||
| "stream-features": { | ||||
| "type": "object", | ||||
| "properties": { | ||||
| "proto": { | ||||
| "$ref": "#/definitions/protocol-type" | ||||
| }, | ||||
| "port-range": { | ||||
| "$ref": "#/definitions/port-range" | ||||
| }, | ||||
| "traffic-qos": { | ||||
| "$ref": "#/definitions/qos-param" | ||||
| } | ||||
| } | ||||
| }, | ||||
| "app-requirements": { | ||||
| "type": "object", | ||||
| "properties": { | ||||
| "num-streams": { | ||||
| "type": "integer" | ||||
| }, | ||||
| "stream-feature": { | ||||
| "type": "array", | ||||
| "items": { | ||||
| "$ref": "#/definitions/stream-features" | ||||
| } | ||||
| } | ||||
| } | ||||
| }, | ||||
| "param-name": { | ||||
| "enum": [ | ||||
| "bandwidth", | ||||
| "jitter", | ||||
| "latency", | ||||
| "signal_quality" | ||||
| ], | ||||
| "type": "string" | ||||
| }, | ||||
| "additional-param-name": { | ||||
| "enum": [ | ||||
| "lte-rsrp", | ||||
| "lte-rsrq", | ||||
| "nr-rsrp", | ||||
| "nr-rsrq", | ||||
| "wifi-rssi" | ||||
| ], | ||||
| "type": "string" | ||||
| }, | ||||
| "link-parameter": { | ||||
| "type": "object", | ||||
| "properties": { | ||||
| "connection": { | ||||
| "$ref": "#/definitions/connection" | ||||
| }, | ||||
| "param": { | ||||
| "$ref": "#/definitions/param-name" | ||||
| }, | ||||
| "additional-param": { | ||||
| "$ref": "#/definitions/additional-param-name" | ||||
| }, | ||||
| "prediction": { | ||||
| "type": "integer" | ||||
| }, | ||||
| "likelihood": { | ||||
| "type": "integer" | ||||
| }, | ||||
| "validity_time": { | ||||
| "type": "integer" | ||||
| } | ||||
| } | ||||
| }, | ||||
| "link-params": { | ||||
| "type": "array", | ||||
| "items": { | ||||
| "$ref": "#/definitions/link-parameter" | ||||
| } | ||||
| }, | ||||
| "errorModel": { | ||||
| "type": "object", | ||||
| "description": "Error indication containing the error code and | ||||
| message.", | ||||
| "required": [ | ||||
| "code", | ||||
| "message" | ||||
| ], | ||||
| "properties": { | ||||
| "code": { | ||||
| "type": "integer", | ||||
| "format": "int32" | ||||
| }, | ||||
| "message": { | ||||
| "type": "string" | ||||
| } | ||||
| } | ||||
| } | ||||
| } | ||||
| } | ||||
| ]]></sourcecode> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>Implementation Example Using Python for MAMS Client and Server</name | ||||
| > | ||||
| <section numbered="true" toc="default"> | ||||
| <name>Client-Side Implementation</name> | ||||
| <t>A simple client-side implementation using Python can be as follows:</ | ||||
| t> | ||||
| <sourcecode name="" type="python" markers="false"><![CDATA[ | ||||
| #!/usr/bin/env python | ||||
| import asyncio | ||||
| import websockets | ||||
| import json | ||||
| import ssl | ||||
| import time | ||||
| import sys | ||||
| context = ssl.SSLContext(ssl.PROTOCOL_TLS) | ||||
| context.verify_mode = ssl.CERT_REQUIRED | ||||
| context.set_ciphers("RSA") | ||||
| context.check_hostname = False | ||||
| context.load_verify_locations("/home/mecadmin/certs/rootca.pem") | ||||
| discoverMsg = {'version':'1.0', | ||||
| 'message_type':'mx_discover'} | ||||
| MXCapabilityRes = {'version':'1.0', | ||||
| 'message_type':'mx_capability_res', | ||||
| 'FeatureActive':[{'feature_name':'fragmentation', 'active':'yes'}, | ||||
| {'feature_name':'lossless_switching', 'active':'yes'}], | ||||
| 'num_anchor_connections':1, | ||||
| 'anchor_connections':[{'connection_id':0, 'connection_type':'LTE'}], | ||||
| 'num_delivery_connections':1, | ||||
| 'delivery_connections':[{'connection_id':1, | ||||
| 'connection_type':"Wi-Fi"}], | ||||
| 'convergence_methods':[{'method':'GMA', 'supported':'true'}], | ||||
| 'adaptation_methods':[{'method':'client_nat', 'supported':'false'}] | ||||
| } | ||||
| async def hello(): | ||||
| async with websockets.connect('wss://localhost:8765', | ||||
| ssl=context) as websocket: | ||||
| try: | ||||
| loopFlag=False | ||||
| while True: | ||||
| await websocket.send(json.dumps(discoverMsg)) | ||||
| json_message = await websocket.recv() | ||||
| message = json.loads(json_message) | ||||
| if "message_type" in message.keys(): | ||||
| print("Received message:{}".format( | ||||
| message["message_type"]), | ||||
| "version:{}".format(message["version"])) | ||||
| if message["message_type"] == "mx_capability_req" : | ||||
| await websocket.send(json.dumps(MXCapabilityRes)) | ||||
| loopFlag=True | ||||
| while(loopFlag==True): | ||||
| pass | ||||
| except: | ||||
| print("Client stopped") | ||||
| asyncio.get_event_loop().run_until_complete(hello()) | ||||
| ]]></sourcecode> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>Server-Side Implementation</name> | ||||
| <t>A server-side implementation using Python can be as follows:</t> | ||||
| <sourcecode name="" type="python" markers="false"><![CDATA[ | ||||
| #!/usr/bin/env python | ||||
| import asyncio | ||||
| import websockets | ||||
| import json | ||||
| import ssl | ||||
| ctx = ssl.SSLContext(ssl.PROTOCOL_TLS) | ||||
| #ctx.set_ciphers("RSA-AES256-SHA") | ||||
| ctx.load_verify_locations("/home/mecadmin/certs/rootca.pem") | ||||
| certfile = "/home/mecadmin/certs/server.pem" | ||||
| keyfile = "/home/mecadmin/certs/serverkey.pem" | ||||
| ctx.load_cert_chain(certfile, keyfile, password=None) | ||||
| MXCapabilityReq = {'version':'1.0', | ||||
| 'message_type':'mx_capability_req', | ||||
| 'FeatureActive':[{'feature_name':'fragmentation', 'active':'yes'}, | ||||
| {'feature_name':'lossless_switching', 'active':'yes'}], | ||||
| 'num_anchor_connections':1, | ||||
| 'anchor_connections':[{'connection_id':0, 'connection_type':'LTE'}], | ||||
| 'num_delivery_connections':1, | ||||
| 'delivery_connections':[{'connection_id':1, | ||||
| 'connection_type':"Wi-Fi"}], | ||||
| 'convergence_methods':[{'method':'GMA', 'supported':'true'}], | ||||
| 'adaptation_methods':[{'method':'client_nat', 'supported':'false'}] | ||||
| } | ||||
| async def hello(websocket, path): | ||||
| try: | ||||
| while True: | ||||
| name = await websocket.recv() | ||||
| msg = json.loads(name) | ||||
| if "message_type" in msg.keys(): | ||||
| print("Received message:{}".format(msg["message_type"]), | ||||
| "version:{}".format(msg["version"])) | ||||
| if msg['message_type'] == 'mx_discover': | ||||
| await websocket.send(json.dumps(MXCapabilityReq)) | ||||
| except: | ||||
| print("Client disconnected") | ||||
| try: | ||||
| start_server = websockets.serve(hello, 'localhost', 8765,ssl=ctx) | ||||
| asyncio.get_event_loop().run_until_complete(start_server) | ||||
| asyncio.get_event_loop().run_forever() | ||||
| except: | ||||
| print("Server stopped") | ||||
| ]]></sourcecode> | ||||
| </section> | ||||
| </section> | ||||
| <section numbered="false" toc="default"> | ||||
| <name>Acknowledgments</name> | ||||
| <t>This protocol is the outcome of work by many engineers, not just the au | ||||
| thors | ||||
| of this document. The people who contributed to this project, | ||||
| listed in alphabetical order by first name, are <contact fullname="Barbara | ||||
| Orlandi"/>, <contact fullname="Bongho Kim"/>, | ||||
| <contact fullname="David Lopez-Perez"/>, <contact fullname="Doru Calin"/>, | ||||
| <contact fullname="Jonathan Ling"/>, | ||||
| <contact fullname="Lohith Nayak"/>, and <contact fullname="Michael Scharf"/>.</t | ||||
| > | ||||
| </section> | ||||
| <section numbered="false" toc="default"> | ||||
| <name>Contributors</name> | ||||
| <t>The authors gratefully acknowledge the following additional contributor | ||||
| s, | ||||
| in alphabetical order by first name: <contact fullname="A Krishna Pramod"/> | ||||
| /Nokia Bell Labs, | ||||
| <contact fullname="Hannu Flinck"/>/Nokia Bell Labs, <contact fullname="Hema Pent | ||||
| akota"/>/Nokia, | ||||
| <contact fullname="Julius Mueller"/>/AT&T, <contact fullname="Nurit Sprecher | ||||
| "/>/Nokia, <contact fullname="Salil Agarwal"/>/Nokia, <contact fullname="Shuping | ||||
| Peng"/>/Huawei, | ||||
| and <contact fullname="Subramanian Vasudevan"/>/Nokia Bell Labs. <contact fulln | ||||
| ame="Subramanian Vasudevan"/> has been instrumental in | ||||
| conceptualization and development of solution principles for the MAMS | ||||
| framework. <contact fullname="Shuping Peng"/> has been a key contributor i | ||||
| n refining the | ||||
| framework and control-plane protocol aspects.</t> | ||||
| </section> | ||||
| </back> | ||||
| </rfc> | ||||
| End of changes. 1 change blocks. | ||||
| lines changed or deleted | lines changed or added | |||
This html diff was produced by rfcdiff 1.45. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||