Skip to content

Commit fb0b1ef

Browse files
matttbegregkh
authored andcommitted
mptcp: pm: nl: announce deny-join-id0 flag
commit 2293c57 upstream. During the connection establishment, a peer can tell the other one that it cannot establish new subflows to the initial IP address and port by setting the 'C' flag [1]. Doing so makes sense when the sender is behind a strict NAT, operating behind a legacy Layer 4 load balancer, or using anycast IP address for example. When this 'C' flag is set, the path-managers must then not try to establish new subflows to the other peer's initial IP address and port. The in-kernel PM has access to this info, but the userspace PM didn't. The RFC8684 [1] is strict about that: (...) therefore the receiver MUST NOT try to open any additional subflows toward this address and port. So it is important to tell the userspace about that as it is responsible for the respect of this flag. When a new connection is created and established, the Netlink events now contain the existing but not currently used 'flags' attribute. When MPTCP_PM_EV_FLAG_DENY_JOIN_ID0 is set, it means no other subflows to the initial IP address and port -- info that are also part of the event -- can be established. Link: https://datatracker.ietf.org/doc/html/rfc8684#section-3.1-20.6 [1] Fixes: 702c2f6 ("mptcp: netlink: allow userspace-driven subflow establishment") Reported-by: Marek Majkowski <[email protected]> Closes: multipath-tcp/mptcp_net-next#532 Reviewed-by: Mat Martineau <[email protected]> Signed-off-by: Matthieu Baerts (NGI0) <[email protected]> Link: https://patch.msgid.link/20250912-net-mptcp-pm-uspace-deny_join_id0-v1-2-40171884ade8@kernel.org Signed-off-by: Jakub Kicinski <[email protected]> [ Conflicts in mptcp_pm.yaml, because the indentation has been modified in commit ec36219 ("netlink: specs: fix up indentation errors"), which is not in this version. Applying the same modifications, but at a different level. ] Signed-off-by: Matthieu Baerts (NGI0) <[email protected]> Signed-off-by: Greg Kroah-Hartman <[email protected]>
1 parent 46d6ff0 commit fb0b1ef

File tree

4 files changed

+13
-4
lines changed

4 files changed

+13
-4
lines changed

Documentation/netlink/specs/mptcp_pm.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,13 +28,13 @@ definitions:
2828
traffic-patterns it can take a long time until the
2929
MPTCP_EVENT_ESTABLISHED is sent.
3030
Attributes: token, family, saddr4 | saddr6, daddr4 | daddr6, sport,
31-
dport, server-side.
31+
dport, server-side, [flags].
3232
-
3333
name: established
3434
doc: >-
3535
A MPTCP connection is established (can start new subflows).
3636
Attributes: token, family, saddr4 | saddr6, daddr4 | daddr6, sport,
37-
dport, server-side.
37+
dport, server-side, [flags].
3838
-
3939
name: closed
4040
doc: >-

include/uapi/linux/mptcp.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@
3131
#define MPTCP_INFO_FLAG_FALLBACK _BITUL(0)
3232
#define MPTCP_INFO_FLAG_REMOTE_KEY_RECEIVED _BITUL(1)
3333

34+
#define MPTCP_PM_EV_FLAG_DENY_JOIN_ID0 _BITUL(0)
35+
3436
#define MPTCP_PM_ADDR_FLAG_SIGNAL (1 << 0)
3537
#define MPTCP_PM_ADDR_FLAG_SUBFLOW (1 << 1)
3638
#define MPTCP_PM_ADDR_FLAG_BACKUP (1 << 2)

include/uapi/linux/mptcp_pm.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,10 @@
1616
* good time to allocate memory and send ADD_ADDR if needed. Depending on the
1717
* traffic-patterns it can take a long time until the MPTCP_EVENT_ESTABLISHED
1818
* is sent. Attributes: token, family, saddr4 | saddr6, daddr4 | daddr6,
19-
* sport, dport, server-side.
19+
* sport, dport, server-side, [flags].
2020
* @MPTCP_EVENT_ESTABLISHED: A MPTCP connection is established (can start new
2121
* subflows). Attributes: token, family, saddr4 | saddr6, daddr4 | daddr6,
22-
* sport, dport, server-side.
22+
* sport, dport, server-side, [flags].
2323
* @MPTCP_EVENT_CLOSED: A MPTCP connection has stopped. Attribute: token.
2424
* @MPTCP_EVENT_ANNOUNCED: A new address has been announced by the peer.
2525
* Attributes: token, rem_id, family, daddr4 | daddr6 [, dport].

net/mptcp/pm_netlink.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -408,13 +408,20 @@ static int mptcp_event_created(struct sk_buff *skb,
408408
const struct sock *ssk)
409409
{
410410
int err = nla_put_u32(skb, MPTCP_ATTR_TOKEN, READ_ONCE(msk->token));
411+
u16 flags = 0;
411412

412413
if (err)
413414
return err;
414415

415416
if (nla_put_u8(skb, MPTCP_ATTR_SERVER_SIDE, READ_ONCE(msk->pm.server_side)))
416417
return -EMSGSIZE;
417418

419+
if (READ_ONCE(msk->pm.remote_deny_join_id0))
420+
flags |= MPTCP_PM_EV_FLAG_DENY_JOIN_ID0;
421+
422+
if (flags && nla_put_u16(skb, MPTCP_ATTR_FLAGS, flags))
423+
return -EMSGSIZE;
424+
418425
return mptcp_event_add_subflow(skb, ssk);
419426
}
420427

0 commit comments

Comments
 (0)