[PATCH mptcp-next v2 0/3] Add MPTCP support to Java Networking API

Geliang Tang posted 3 patches 2 weeks, 6 days ago
Failed in applying to current master (apply log)
.../share/classes/java/net/ServerSocket.java  | 52 +++++++++++++--
.../share/classes/java/net/Socket.java        | 65 +++++++++++++++++--
.../share/classes/java/net/SocketImpl.java    |  4 +-
.../share/classes/sun/nio/ch/Net.java         | 19 ++++--
.../classes/sun/nio/ch/NioSocketImpl.java     | 11 +++-
src/java.base/unix/native/libnio/ch/Net.c     | 14 +++-
src/java.base/windows/native/libnio/ch/Net.c  |  4 +-
.../java/net/ServerSocket/MPTCPServer.java    | 58 +++++++++++++++++
test/jdk/java/net/Socket/MPTCPClient.java     | 62 ++++++++++++++++++
9 files changed, 264 insertions(+), 25 deletions(-)
create mode 100644 test/jdk/java/net/ServerSocket/MPTCPServer.java
create mode 100644 test/jdk/java/net/Socket/MPTCPClient.java
[PATCH mptcp-next v2 0/3] Add MPTCP support to Java Networking API
Posted by Geliang Tang 2 weeks, 6 days ago
From: Geliang Tang <tanggeliang@kylinos.cn>

v2:
 - drop redundant helpers as Matt suggested.
 - squash into fewer patches.
 - use "JNI_TRUE" and "(void)mptcp" in Java_sun_nio_ch_Net_socket0 as
   Xiang Gao suggested.

The Multipath TCP (MPTCP) protocol (v1 / RFC 8684) has been added in
the upstream Linux kernel since v5.6. See https://mptcp.dev.

This patch series introduces comprehensive Multipath TCP (MPTCP)
support to the Java Networking API, enabling applications to leverage
MPTCP's capabilities for improved reliability and throughput.

Geliang Tang (3):
  Add native MPTCP socket creation support
  Add MPTCP support to Java Socket/ServerSocket APIs
  Add test cases for MPTCP socket functionality

 .../share/classes/java/net/ServerSocket.java  | 52 +++++++++++++--
 .../share/classes/java/net/Socket.java        | 65 +++++++++++++++++--
 .../share/classes/java/net/SocketImpl.java    |  4 +-
 .../share/classes/sun/nio/ch/Net.java         | 19 ++++--
 .../classes/sun/nio/ch/NioSocketImpl.java     | 11 +++-
 src/java.base/unix/native/libnio/ch/Net.c     | 14 +++-
 src/java.base/windows/native/libnio/ch/Net.c  |  4 +-
 .../java/net/ServerSocket/MPTCPServer.java    | 58 +++++++++++++++++
 test/jdk/java/net/Socket/MPTCPClient.java     | 62 ++++++++++++++++++
 9 files changed, 264 insertions(+), 25 deletions(-)
 create mode 100644 test/jdk/java/net/ServerSocket/MPTCPServer.java
 create mode 100644 test/jdk/java/net/Socket/MPTCPClient.java

-- 
2.48.1
Re: [PATCH mptcp-next v2 0/3] Add MPTCP support to Java Networking API
Posted by Matthieu Baerts 2 weeks, 6 days ago
Hi Geliang,

On 28/08/2025 10:47, Geliang Tang wrote:
> From: Geliang Tang <tanggeliang@kylinos.cn>
> 
> v2:
>  - drop redundant helpers as Matt suggested.
>  - squash into fewer patches.
>  - use "JNI_TRUE" and "(void)mptcp" in Java_sun_nio_ch_Net_socket0 as
>    Xiang Gao suggested.
> 
> The Multipath TCP (MPTCP) protocol (v1 / RFC 8684) has been added in
> the upstream Linux kernel since v5.6. See https://mptcp.dev.
> 
> This patch series introduces comprehensive Multipath TCP (MPTCP)
> support to the Java Networking API, enabling applications to leverage
> MPTCP's capabilities for improved reliability and throughput.

Thank you for the new version! Feel free to start the process to
upstream these patches [1]. Don't hesitate to share here the link to the
new ticket.

[1] https://openjdk.org/guide/#i-have-a-patch-what-do-i-do

Cheers,
Matt
-- 
Sponsored by the NGI0 Core fund.
Re: [PATCH mptcp-next v2 0/3] Add MPTCP support to Java Networking API
Posted by Geliang Tang 2 weeks ago
Hi Matt,

On Thu, 2025-08-28 at 11:57 +0200, Matthieu Baerts wrote:
> Hi Geliang,
> 
> On 28/08/2025 10:47, Geliang Tang wrote:
> > From: Geliang Tang <tanggeliang@kylinos.cn>
> > 
> > v2:
> >  - drop redundant helpers as Matt suggested.
> >  - squash into fewer patches.
> >  - use "JNI_TRUE" and "(void)mptcp" in Java_sun_nio_ch_Net_socket0
> > as
> >    Xiang Gao suggested.
> > 
> > The Multipath TCP (MPTCP) protocol (v1 / RFC 8684) has been added
> > in
> > the upstream Linux kernel since v5.6. See https://mptcp.dev.
> > 
> > This patch series introduces comprehensive Multipath TCP (MPTCP)
> > support to the Java Networking API, enabling applications to
> > leverage
> > MPTCP's capabilities for improved reliability and throughput.
> 
> Thank you for the new version! Feel free to start the process to
> upstream these patches [1]. Don't hesitate to share here the link to
> the
> new ticket.
> 
> [1] https://openjdk.org/guide/#i-have-a-patch-what-do-i-do
> 

I followed the instructions and "Signed the OCA" on August 1st, but it
is still in the "Under Review" status.

For the second step, "Socialize your change", I would like to send the
following letter to net-dev@openjdk.org:

'''
Hi OpenJDK maintainers,

I hope this message finds you well. The purpose of this letter is to
propose the integration of Multipath TCP (MPTCP) support into OpenJDK.
We have developed a set of patches to enable this functionality and are
eager to submit it for upstream inclusion. We would greatly appreciate
your feedback and opinions on this contribution.

1. Introduction

Multipath TCP (MPTCP), as standardized in RFC 8684, is a major
evolution of the TCP protocol. It enables a transport connection to use
multiple network paths simultaneously for redundancy, resilience, and
bandwidth aggregation. Since its introduction in Linux kernel v5.6, it
has become a key technology for modern networking, particularly on
mobile devices with multiple interfaces (e.g., Wi-Fi and cellular).

Key benefits include:

    Bandwidth Aggregation: Combine the bandwidth of multiple network
links.

    Seamless Handover: Maintain connections when switching networks
without dropping the session.

    Improved Resilience: Traffic is automatically rerouted if one path
fails.

For more details, see the project website: https://mptcp.dev.

2. Technical Background

On a supporting system like Linux, an MPTCP socket is created by
specifying the IPPROTO_MPTCP protocol in the socket() system call:

    int fd = socket(AF_INET, SOCK_STREAM, IPPROTO_MPTCP);

This creates a socket that looks like a standard TCP socket to the
application but uses the MPTCP protocol stack underneath.

3. Proposed Java API Changes

The goal is to allow Java applications to opt-in to using MPTCP when
creating sockets, without breaking existing code. The proposed changes
are additive and backward-compatible.

The core idea is to add a boolean mptcp parameter through the API
layers, from the public Socket class down to the native system call.

4. Implementation Plan

The implementation involves changes across four layers of the JDK:

JNI Layer (sun.nio.ch.Net):

Modify Java_sun_nio_ch_Net_socket0 to accept a new jboolean mptcp
parameter.

    The native implementation will be updated to use this parameter:

    int protocol = mptcp == JNI_TRUE ? IPPROTO_MPTCP : 0;
    fd = socket(domain, type, protocol);

NIO Layer (sun.nio.ch):

    Add the mptcp parameter to the Net.socket() and Net.serverSocket()
methods.

    Propagate the parameter down to the JNI call.

Socket Implementation Layer (java.net):

    Add the mptcp parameter to the constructor of NioSocketImpl.

    Within NioSocketImpl, pass the parameter to the Net.socket() or
Net.serverSocket() calls.

Public API Layer (java.net.Socket & java.net.ServerSocket):

    Add new constructors that accept the mptcp parameter.

    Example:

        // Proposed new constructor
        public Socket(String host, int port, boolean stream, boolean
mptcp) throws IOException {
            // ... implementation that passes 'mptcp' to NioSocketImpl
        }

5. Full Implementation

The complete working implementation for this proposal is available for
review:

https://github.com/openjdk/jdk/compare/master...geliangtang:jdk:master

We look forward to your valuable feedback and suggestions on this
proposal.

Best regards,
The MPTCP Upstream Developers
'''

Please review this letter for me.

Thanks,
-Geliang

> Cheers,
> Matt
Re: [PATCH mptcp-next v2 0/3] Add MPTCP support to Java Networking API
Posted by Matthieu Baerts 2 weeks ago
Hi Geliang,

On 03/09/2025 08:16, Geliang Tang wrote:
> Hi Matt,
> 
> On Thu, 2025-08-28 at 11:57 +0200, Matthieu Baerts wrote:
>> Hi Geliang,
>>
>> On 28/08/2025 10:47, Geliang Tang wrote:
>>> From: Geliang Tang <tanggeliang@kylinos.cn>
>>>
>>> v2:
>>>  - drop redundant helpers as Matt suggested.
>>>  - squash into fewer patches.
>>>  - use "JNI_TRUE" and "(void)mptcp" in Java_sun_nio_ch_Net_socket0
>>> as
>>>    Xiang Gao suggested.
>>>
>>> The Multipath TCP (MPTCP) protocol (v1 / RFC 8684) has been added
>>> in
>>> the upstream Linux kernel since v5.6. See https://mptcp.dev.
>>>
>>> This patch series introduces comprehensive Multipath TCP (MPTCP)
>>> support to the Java Networking API, enabling applications to
>>> leverage
>>> MPTCP's capabilities for improved reliability and throughput.
>>
>> Thank you for the new version! Feel free to start the process to
>> upstream these patches [1]. Don't hesitate to share here the link to
>> the
>> new ticket.
>>
>> [1] https://openjdk.org/guide/#i-have-a-patch-what-do-i-do
>>
> 
> I followed the instructions and "Signed the OCA" on August 1st, but it
> is still in the "Under Review" status.

Thank you for having started this! This is a shame it takes time, that's
not helping to get new contributors.
> For the second step, "Socialize your change", I would like to send the
> following letter to net-dev@openjdk.org:

Good idea, thank you for sharing this.

> '''
> Hi OpenJDK maintainers,
> 
> I hope this message finds you well. The purpose of this letter is to
> propose the integration of Multipath TCP (MPTCP) support into OpenJDK.
> We have developed a set of patches to enable this functionality and are
> eager to submit it for upstream inclusion. We would greatly appreciate
> your feedback and opinions on this contribution.
> 
> 1. Introduction
> 
> Multipath TCP (MPTCP), as standardized in RFC 8684, is a major
> evolution of the TCP protocol. It enables a transport connection to use
> multiple network paths simultaneously for redundancy, resilience, and
> bandwidth aggregation. Since its introduction in Linux kernel v5.6, it
> has become a key technology for modern networking, particularly on
> mobile devices with multiple interfaces (e.g., Wi-Fi and cellular).
> 
> Key benefits include:
> 
>     Bandwidth Aggregation: Combine the bandwidth of multiple network
> links.
> 
>     Seamless Handover: Maintain connections when switching networks
> without dropping the session.
> 
>     Improved Resilience: Traffic is automatically rerouted if one path
> fails.
> 
> For more details, see the project website: https://mptcp.dev.
> 
> 2. Technical Background
> 
> On a supporting system like Linux, an MPTCP socket is created by
> specifying the IPPROTO_MPTCP protocol in the socket() system call:

Maybe add something like: "instead of IPPROTO_TCP (or 0)"
> 
>     int fd = socket(AF_INET, SOCK_STREAM, IPPROTO_MPTCP);
> 
> This creates a socket that looks like a standard TCP socket to the
> application but uses the MPTCP protocol stack underneath.

It might be interesting to add something here to say that with the Java
API, it is possible to create "stream" sockets, but it is not possible
to change the last argument, which blocks apps to ask to use MPTCP.

> 3. Proposed Java API Changes
> 
> The goal is to allow Java applications to opt-in to using MPTCP when
> creating sockets, without breaking existing code. The proposed changes
> are additive and backward-compatible.
> 
> The core idea is to add a boolean mptcp parameter through the API
> layers, from the public Socket class down to the native system call.
> 
> 4. Implementation Plan
> 
> The implementation involves changes across four layers of the JDK:
> 
> JNI Layer (sun.nio.ch.Net):
> 
> Modify Java_sun_nio_ch_Net_socket0 to accept a new jboolean mptcp
> parameter.
> 
>     The native implementation will be updated to use this parameter:
> 
>     int protocol = mptcp == JNI_TRUE ? IPPROTO_MPTCP : 0;
>     fd = socket(domain, type, protocol);
> 
> NIO Layer (sun.nio.ch):
> 
>     Add the mptcp parameter to the Net.socket() and Net.serverSocket()
> methods.
> 
>     Propagate the parameter down to the JNI call.
> 
> Socket Implementation Layer (java.net):
> 
>     Add the mptcp parameter to the constructor of NioSocketImpl.
> 
>     Within NioSocketImpl, pass the parameter to the Net.socket() or
> Net.serverSocket() calls.
> 
> Public API Layer (java.net.Socket & java.net.ServerSocket):
> 
>     Add new constructors that accept the mptcp parameter.
> 
>     Example:
> 
>         // Proposed new constructor
>         public Socket(String host, int port, boolean stream, boolean
> mptcp) throws IOException {
>             // ... implementation that passes 'mptcp' to NioSocketImpl
>         }
> 
> 5. Full Implementation
> 
> The complete working implementation for this proposal is available for
> review:
> 
> https://github.com/openjdk/jdk/compare/master...geliangtang:jdk:master
> 
> We look forward to your valuable feedback and suggestions on this
> proposal.

Maybe good to add something like: we can create a new issue for this
feature, and submit a proper pull request after if that's OK for you. We
didn't do that yet because we noticed that it is recommended to send
more explanations to this list first.

Thanks, it looks good!

> Best regards,
> The MPTCP Upstream Developers
> '''
> 
> Please review this letter for me.
> 
> Thanks,
> -Geliang
> 
>> Cheers,
>> Matt

Cheers,
Matt
-- 
Sponsored by the NGI0 Core fund.