2024-06-15 21:02:09 +02:00
|
|
|
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
|
|
|
|
|
|
|
enum linux_mptcp_mib_field {
|
|
|
|
MPTCP_MIB_NUM = 0,
|
|
|
|
MPTCP_MIB_MPCAPABLEPASSIVE, /* Received SYN with MP_CAPABLE */
|
|
|
|
MPTCP_MIB_MPCAPABLEPASSIVEACK, /* Received third ACK with MP_CAPABLE */
|
|
|
|
MPTCP_MIB_MPCAPABLEPASSIVEFALLBACK,/* Server-side fallback during 3-way handshake */
|
|
|
|
MPTCP_MIB_MPCAPABLEACTIVEFALLBACK, /* Client-side fallback during 3-way handshake */
|
|
|
|
MPTCP_MIB_RETRANSSEGS, /* Segments retransmitted at the MPTCP-level */
|
|
|
|
MPTCP_MIB_JOINNOTOKEN, /* Received MP_JOIN but the token was not found */
|
|
|
|
MPTCP_MIB_JOINSYNRX, /* Received a SYN + MP_JOIN */
|
mptcp: mib: count MPJ with backup flag
commit 4dde0d72ccec500c60c798e036b852e013d6e124 upstream.
Without such counters, it is difficult to easily debug issues with MPJ
not having the backup flags on production servers.
This is not strictly a fix, but it eases to validate the following
patches without requiring to take packet traces, to query ongoing
connections with Netlink with admin permissions, or to guess by looking
at the behaviour of the packet scheduler. Also, the modification is self
contained, isolated, well controlled, and the increments are done just
after others, there from the beginning. It looks then safe, and helpful
to backport this.
Fixes: 4596a2c1b7f5 ("mptcp: allow creating non-backup subflows")
Cc: stable@vger.kernel.org
Reviewed-by: Mat Martineau <martineau@kernel.org>
Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
[ Conflicts in subflow.c because the context has changed in
commit b3ea6b272d79 ("mptcp: consolidate initial ack seq generation")
and commit 5bc56388c74f ("mptcp: add port number check for MP_JOIN")
which are not in this version. These commits are unrelated to this
modification. ]
Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2024-08-09 12:55:15 +02:00
|
|
|
MPTCP_MIB_JOINSYNBACKUPRX, /* Received a SYN + MP_JOIN + backup flag */
|
2024-06-15 21:02:09 +02:00
|
|
|
MPTCP_MIB_JOINSYNACKRX, /* Received a SYN/ACK + MP_JOIN */
|
mptcp: mib: count MPJ with backup flag
commit 4dde0d72ccec500c60c798e036b852e013d6e124 upstream.
Without such counters, it is difficult to easily debug issues with MPJ
not having the backup flags on production servers.
This is not strictly a fix, but it eases to validate the following
patches without requiring to take packet traces, to query ongoing
connections with Netlink with admin permissions, or to guess by looking
at the behaviour of the packet scheduler. Also, the modification is self
contained, isolated, well controlled, and the increments are done just
after others, there from the beginning. It looks then safe, and helpful
to backport this.
Fixes: 4596a2c1b7f5 ("mptcp: allow creating non-backup subflows")
Cc: stable@vger.kernel.org
Reviewed-by: Mat Martineau <martineau@kernel.org>
Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
[ Conflicts in subflow.c because the context has changed in
commit b3ea6b272d79 ("mptcp: consolidate initial ack seq generation")
and commit 5bc56388c74f ("mptcp: add port number check for MP_JOIN")
which are not in this version. These commits are unrelated to this
modification. ]
Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2024-08-09 12:55:15 +02:00
|
|
|
MPTCP_MIB_JOINSYNACKBACKUPRX, /* Received a SYN/ACK + MP_JOIN + backup flag */
|
2024-06-15 21:02:09 +02:00
|
|
|
MPTCP_MIB_JOINSYNACKMAC, /* HMAC was wrong on SYN/ACK + MP_JOIN */
|
|
|
|
MPTCP_MIB_JOINACKRX, /* Received an ACK + MP_JOIN */
|
|
|
|
MPTCP_MIB_JOINACKMAC, /* HMAC was wrong on ACK + MP_JOIN */
|
|
|
|
MPTCP_MIB_DSSNOMATCH, /* Received a new mapping that did not match the previous one */
|
|
|
|
MPTCP_MIB_INFINITEMAPRX, /* Received an infinite mapping */
|
|
|
|
MPTCP_MIB_OFOQUEUETAIL, /* Segments inserted into OoO queue tail */
|
|
|
|
MPTCP_MIB_OFOQUEUE, /* Segments inserted into OoO queue */
|
|
|
|
MPTCP_MIB_OFOMERGE, /* Segments merged in OoO queue */
|
|
|
|
MPTCP_MIB_NODSSWINDOW, /* Segments not in MPTCP windows */
|
|
|
|
MPTCP_MIB_DUPDATA, /* Segments discarded due to duplicate DSS */
|
|
|
|
MPTCP_MIB_ADDADDR, /* Received ADD_ADDR with echo-flag=0 */
|
|
|
|
MPTCP_MIB_ECHOADD, /* Received ADD_ADDR with echo-flag=1 */
|
|
|
|
MPTCP_MIB_RMADDR, /* Received RM_ADDR */
|
|
|
|
MPTCP_MIB_RMSUBFLOW, /* Remove a subflow */
|
|
|
|
__MPTCP_MIB_MAX
|
|
|
|
};
|
|
|
|
|
|
|
|
#define LINUX_MIB_MPTCP_MAX __MPTCP_MIB_MAX
|
|
|
|
struct mptcp_mib {
|
|
|
|
unsigned long mibs[LINUX_MIB_MPTCP_MAX];
|
|
|
|
};
|
|
|
|
|
|
|
|
static inline void MPTCP_INC_STATS(struct net *net,
|
|
|
|
enum linux_mptcp_mib_field field)
|
|
|
|
{
|
|
|
|
if (likely(net->mib.mptcp_statistics))
|
|
|
|
SNMP_INC_STATS(net->mib.mptcp_statistics, field);
|
|
|
|
}
|
|
|
|
|
|
|
|
static inline void __MPTCP_INC_STATS(struct net *net,
|
|
|
|
enum linux_mptcp_mib_field field)
|
|
|
|
{
|
|
|
|
if (likely(net->mib.mptcp_statistics))
|
|
|
|
__SNMP_INC_STATS(net->mib.mptcp_statistics, field);
|
|
|
|
}
|
|
|
|
|
|
|
|
bool mptcp_mib_alloc(struct net *net);
|