mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-14 05:22:19 -04:00
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: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
@@ -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:
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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].
|
||||
|
||||
@@ -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)))
|
||||
return -EMSGSIZE;
|
||||
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;
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
#include <errno.h>
|
||||
#include <error.h>
|
||||
#include <stdbool.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
@@ -113,6 +114,8 @@ static int capture_events(int fd, int event_group)
|
||||
error(1, errno, "could not join the " MPTCP_PM_EV_GRP_NAME " mcast group");
|
||||
|
||||
do {
|
||||
bool server_side = false;
|
||||
|
||||
FD_ZERO(&rfds);
|
||||
FD_SET(fd, &rfds);
|
||||
res_len = NLMSG_ALIGN(sizeof(struct nlmsghdr)) +
|
||||
@@ -187,18 +190,22 @@ static int capture_events(int fd, int event_group)
|
||||
else if (attrs->rta_type == MPTCP_ATTR_ERROR)
|
||||
fprintf(stderr, ",error:%u", *(__u8 *)RTA_DATA(attrs));
|
||||
else if (attrs->rta_type == MPTCP_ATTR_SERVER_SIDE)
|
||||
fprintf(stderr, ",server_side:%u", *(__u8 *)RTA_DATA(attrs));
|
||||
server_side = !!*(__u8 *)RTA_DATA(attrs);
|
||||
else if (attrs->rta_type == MPTCP_ATTR_FLAGS) {
|
||||
__u16 flags = *(__u16 *)RTA_DATA(attrs);
|
||||
|
||||
/* only print when present, easier */
|
||||
if (flags & MPTCP_PM_EV_FLAG_DENY_JOIN_ID0)
|
||||
fprintf(stderr, ",deny_join_id0:1");
|
||||
if (flags & MPTCP_PM_EV_FLAG_SERVER_SIDE)
|
||||
server_side = true;
|
||||
}
|
||||
|
||||
attrs = RTA_NEXT(attrs, msg_len);
|
||||
}
|
||||
}
|
||||
if (server_side)
|
||||
fprintf(stderr, ",server_side:1");
|
||||
fprintf(stderr, "\n");
|
||||
} while (1);
|
||||
|
||||
|
||||
@@ -241,7 +241,7 @@ make_connection()
|
||||
|
||||
print_test "Established IP${is_v6} MPTCP Connection ns2 => ns1"
|
||||
if [ "${client_token}" != "" ] && [ "${server_token}" != "" ] &&
|
||||
[ "${client_serverside}" = 0 ] && [ "${server_serverside}" = 1 ] &&
|
||||
[ "${client_serverside:-0}" = 0 ] && [ "${server_serverside:-0}" = 1 ] &&
|
||||
[ "${client_nojoin:-0}" = 0 ] && [ "${server_nojoin:-0}" = 1 ]
|
||||
then
|
||||
test_pass
|
||||
|
||||
Reference in New Issue
Block a user