Commit 9b277fca authored by Jakub Kicinski's avatar Jakub Kicinski
Browse files

Merge branch 'mptcp-pm-netlink-announce-server-side-flag'

Matthieu Baerts says:

====================
mptcp: pm: netlink: announce server-side flag

Now that the 'flags' attribute is used, it seems interesting to add one
flag for 'server-side', a boolean value.

Here are a few patches related to the 'server-side' attribute:

- Patch 1: only announce this attribute on the server side.

- Patch 2: announce the 'server-side' flag when this is the case.

- Patch 3: deprecate the 'server-side' attribute.

- Patch 4: use the 'server-side' flag in the selftests.

- Patches 5, 6: small cleanups when working on code around.
====================

Link: https://patch.msgid.link/20250919-net-next-mptcp-server-side-flag-v1-0-a97a5d561a8b@kernel.org


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parents 35626012 1be5b82c
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -28,13 +28,13 @@ definitions:
          traffic-patterns it can take a long time until the
          MPTCP_EVENT_ESTABLISHED is sent.
          Attributes: token, family, saddr4 | saddr6, daddr4 | daddr6, sport,
          dport, server-side, [flags].
          dport, [server-side], [flags].
      -
        name: established
        doc: >-
          A MPTCP connection is established (can start new subflows).
          Attributes: token, family, saddr4 | saddr6, daddr4 | daddr6, sport,
          dport, server-side, [flags].
          dport, [server-side], [flags].
      -
        name: closed
        doc: >-
@@ -266,6 +266,7 @@ attribute-sets:
      -
        name: server-side
        type: u8
        doc: "Deprecated: use 'flags'"

operations:
  list:
+6 −5
Original line number Diff line number Diff line
@@ -32,12 +32,13 @@
#define MPTCP_INFO_FLAG_REMOTE_KEY_RECEIVED	_BITUL(1)

#define MPTCP_PM_EV_FLAG_DENY_JOIN_ID0		_BITUL(0)
#define MPTCP_PM_EV_FLAG_SERVER_SIDE		_BITUL(1)

#define MPTCP_PM_ADDR_FLAG_SIGNAL                      (1 << 0)
#define MPTCP_PM_ADDR_FLAG_SUBFLOW                     (1 << 1)
#define MPTCP_PM_ADDR_FLAG_BACKUP                      (1 << 2)
#define MPTCP_PM_ADDR_FLAG_FULLMESH                    (1 << 3)
#define MPTCP_PM_ADDR_FLAG_IMPLICIT                    (1 << 4)
#define MPTCP_PM_ADDR_FLAG_SIGNAL		_BITUL(0)
#define MPTCP_PM_ADDR_FLAG_SUBFLOW		_BITUL(1)
#define MPTCP_PM_ADDR_FLAG_BACKUP		_BITUL(2)
#define MPTCP_PM_ADDR_FLAG_FULLMESH		_BITUL(3)
#define MPTCP_PM_ADDR_FLAG_IMPLICIT		_BITUL(4)

struct mptcp_info {
	__u8	mptcpi_subflows;
+2 −2
Original line number Diff line number Diff line
@@ -16,10 +16,10 @@
 *   good time to allocate memory and send ADD_ADDR if needed. Depending on the
 *   traffic-patterns it can take a long time until the MPTCP_EVENT_ESTABLISHED
 *   is sent. Attributes: token, family, saddr4 | saddr6, daddr4 | daddr6,
 *   sport, dport, server-side, [flags].
 *   sport, dport, [server-side], [flags].
 * @MPTCP_EVENT_ESTABLISHED: A MPTCP connection is established (can start new
 *   subflows). Attributes: token, family, saddr4 | saddr6, daddr4 | daddr6,
 *   sport, dport, server-side, [flags].
 *   sport, dport, [server-side], [flags].
 * @MPTCP_EVENT_CLOSED: A MPTCP connection has stopped. Attribute: token.
 * @MPTCP_EVENT_ANNOUNCED: A new address has been announced by the peer.
 *   Attributes: token, rem_id, family, daddr4 | daddr6 [, dport].
+7 −2
Original line number Diff line number Diff line
@@ -413,8 +413,13 @@ static int mptcp_event_created(struct sk_buff *skb,
	if (err)
		return err;

	if (nla_put_u8(skb, MPTCP_ATTR_SERVER_SIDE, READ_ONCE(msk->pm.server_side)))
	if (READ_ONCE(msk->pm.server_side)) {
		flags |= MPTCP_PM_EV_FLAG_SERVER_SIDE;

		/* Deprecated, and only set when it is the server side */
		if (nla_put_u8(skb, MPTCP_ATTR_SERVER_SIDE, 1))
			return -EMSGSIZE;
	}

	if (READ_ONCE(msk->pm.remote_deny_join_id0))
		flags |= MPTCP_PM_EV_FLAG_DENY_JOIN_ID0;
+1 −4
Original line number Diff line number Diff line
@@ -545,11 +545,10 @@ static void mptcp_cleanup_rbuf(struct mptcp_sock *msk, int copied)
	}
}

static bool mptcp_check_data_fin(struct sock *sk)
static void mptcp_check_data_fin(struct sock *sk)
{
	struct mptcp_sock *msk = mptcp_sk(sk);
	u64 rcv_data_fin_seq;
	bool ret = false;

	/* Need to ack a DATA_FIN received from a peer while this side
	 * of the connection is in ESTABLISHED, FIN_WAIT1, or FIN_WAIT2.
@@ -588,12 +587,10 @@ static bool mptcp_check_data_fin(struct sock *sk)
			break;
		}

		ret = true;
		if (!__mptcp_check_fallback(msk))
			mptcp_send_ack(msk);
		mptcp_close_wake_up(sk);
	}
	return ret;
}

static void mptcp_dss_corruption(struct mptcp_sock *msk, struct sock *ssk)
Loading