Florian Westphal | fc51895 | 2020-03-27 14:48:50 -0700 | [diff] [blame] | 1 | /* SPDX-License-Identifier: GPL-2.0-or-later */ |
| 2 | |
| 3 | enum linux_mptcp_mib_field { |
| 4 | MPTCP_MIB_NUM = 0, |
| 5 | MPTCP_MIB_MPCAPABLEPASSIVE, /* Received SYN with MP_CAPABLE */ |
Paolo Abeni | 5695eb8 | 2021-04-01 16:19:42 -0700 | [diff] [blame] | 6 | MPTCP_MIB_MPCAPABLEACTIVE, /* Sent SYN with MP_CAPABLE */ |
| 7 | MPTCP_MIB_MPCAPABLEACTIVEACK, /* Received SYN/ACK with MP_CAPABLE */ |
Florian Westphal | fc51895 | 2020-03-27 14:48:50 -0700 | [diff] [blame] | 8 | MPTCP_MIB_MPCAPABLEPASSIVEACK, /* Received third ACK with MP_CAPABLE */ |
| 9 | MPTCP_MIB_MPCAPABLEPASSIVEFALLBACK,/* Server-side fallback during 3-way handshake */ |
| 10 | MPTCP_MIB_MPCAPABLEACTIVEFALLBACK, /* Client-side fallback during 3-way handshake */ |
Paolo Abeni | a16195e | 2021-04-01 16:19:41 -0700 | [diff] [blame] | 11 | MPTCP_MIB_TOKENFALLBACKINIT, /* Could not init/allocate token */ |
Florian Westphal | fc51895 | 2020-03-27 14:48:50 -0700 | [diff] [blame] | 12 | MPTCP_MIB_RETRANSSEGS, /* Segments retransmitted at the MPTCP-level */ |
| 13 | MPTCP_MIB_JOINNOTOKEN, /* Received MP_JOIN but the token was not found */ |
| 14 | MPTCP_MIB_JOINSYNRX, /* Received a SYN + MP_JOIN */ |
| 15 | MPTCP_MIB_JOINSYNACKRX, /* Received a SYN/ACK + MP_JOIN */ |
| 16 | MPTCP_MIB_JOINSYNACKMAC, /* HMAC was wrong on SYN/ACK + MP_JOIN */ |
| 17 | MPTCP_MIB_JOINACKRX, /* Received an ACK + MP_JOIN */ |
| 18 | MPTCP_MIB_JOINACKMAC, /* HMAC was wrong on ACK + MP_JOIN */ |
| 19 | MPTCP_MIB_DSSNOMATCH, /* Received a new mapping that did not match the previous one */ |
| 20 | MPTCP_MIB_INFINITEMAPRX, /* Received an infinite mapping */ |
Paolo Abeni | 06242e4 | 2020-09-14 10:01:14 +0200 | [diff] [blame] | 21 | MPTCP_MIB_OFOQUEUETAIL, /* Segments inserted into OoO queue tail */ |
| 22 | MPTCP_MIB_OFOQUEUE, /* Segments inserted into OoO queue */ |
| 23 | MPTCP_MIB_OFOMERGE, /* Segments merged in OoO queue */ |
| 24 | MPTCP_MIB_NODSSWINDOW, /* Segments not in MPTCP windows */ |
| 25 | MPTCP_MIB_DUPDATA, /* Segments discarded due to duplicate DSS */ |
Geliang Tang | a877de06 | 2020-09-24 08:29:51 +0800 | [diff] [blame] | 26 | MPTCP_MIB_ADDADDR, /* Received ADD_ADDR with echo-flag=0 */ |
| 27 | MPTCP_MIB_ECHOADD, /* Received ADD_ADDR with echo-flag=1 */ |
Geliang Tang | 2fbdd9e | 2021-02-01 15:09:19 -0800 | [diff] [blame] | 28 | MPTCP_MIB_PORTADD, /* Received ADD_ADDR with a port-number */ |
| 29 | MPTCP_MIB_JOINPORTSYNRX, /* Received a SYN MP_JOIN with a different port-number */ |
| 30 | MPTCP_MIB_JOINPORTSYNACKRX, /* Received a SYNACK MP_JOIN with a different port-number */ |
| 31 | MPTCP_MIB_JOINPORTACKRX, /* Received an ACK MP_JOIN with a different port-number */ |
| 32 | MPTCP_MIB_MISMATCHPORTSYNRX, /* Received a SYN MP_JOIN with a mismatched port-number */ |
| 33 | MPTCP_MIB_MISMATCHPORTACKRX, /* Received an ACK MP_JOIN with a mismatched port-number */ |
Geliang Tang | 7a7e52e | 2020-09-24 08:29:56 +0800 | [diff] [blame] | 34 | MPTCP_MIB_RMADDR, /* Received RM_ADDR */ |
| 35 | MPTCP_MIB_RMSUBFLOW, /* Remove a subflow */ |
Geliang Tang | 0be2ac2 | 2021-01-08 16:48:01 -0800 | [diff] [blame] | 36 | MPTCP_MIB_MPPRIOTX, /* Transmit a MP_PRIO */ |
| 37 | MPTCP_MIB_MPPRIORX, /* Received a MP_PRIO */ |
Florian Westphal | fc51895 | 2020-03-27 14:48:50 -0700 | [diff] [blame] | 38 | __MPTCP_MIB_MAX |
| 39 | }; |
| 40 | |
| 41 | #define LINUX_MIB_MPTCP_MAX __MPTCP_MIB_MAX |
| 42 | struct mptcp_mib { |
| 43 | unsigned long mibs[LINUX_MIB_MPTCP_MAX]; |
| 44 | }; |
| 45 | |
| 46 | static inline void MPTCP_INC_STATS(struct net *net, |
| 47 | enum linux_mptcp_mib_field field) |
| 48 | { |
| 49 | if (likely(net->mib.mptcp_statistics)) |
| 50 | SNMP_INC_STATS(net->mib.mptcp_statistics, field); |
| 51 | } |
| 52 | |
| 53 | static inline void __MPTCP_INC_STATS(struct net *net, |
| 54 | enum linux_mptcp_mib_field field) |
| 55 | { |
| 56 | if (likely(net->mib.mptcp_statistics)) |
| 57 | __SNMP_INC_STATS(net->mib.mptcp_statistics, field); |
| 58 | } |
| 59 | |
| 60 | bool mptcp_mib_alloc(struct net *net); |