forked from Minki/linux
mptcp: add mibs counter for ignored incoming options
The MPTCP in kernel path manager has some constraints on incoming
addresses announce processing, so that in edge scenarios it can
end-up dropping (ignoring) some of such announces.
The above is not very limiting in practice since such scenarios are
very uncommon and MPTCP will recover due to ADD_ADDR retransmissions.
This patch adds a few MIB counters to account for such drop events
to allow easier introspection of the critical scenarios.
Fixes: f7efc7771e
("mptcp: drop argument port from mptcp_pm_announce_addr")
Reviewed-by: Matthieu Baerts <matthieu.baerts@tessares.net>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: Mat Martineau <mathew.j.martineau@linux.intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
837cf45df1
commit
f73c119463
@ -35,12 +35,14 @@ static const struct snmp_mib mptcp_snmp_list[] = {
|
||||
SNMP_MIB_ITEM("AddAddr", MPTCP_MIB_ADDADDR),
|
||||
SNMP_MIB_ITEM("EchoAdd", MPTCP_MIB_ECHOADD),
|
||||
SNMP_MIB_ITEM("PortAdd", MPTCP_MIB_PORTADD),
|
||||
SNMP_MIB_ITEM("AddAddrDrop", MPTCP_MIB_ADDADDRDROP),
|
||||
SNMP_MIB_ITEM("MPJoinPortSynRx", MPTCP_MIB_JOINPORTSYNRX),
|
||||
SNMP_MIB_ITEM("MPJoinPortSynAckRx", MPTCP_MIB_JOINPORTSYNACKRX),
|
||||
SNMP_MIB_ITEM("MPJoinPortAckRx", MPTCP_MIB_JOINPORTACKRX),
|
||||
SNMP_MIB_ITEM("MismatchPortSynRx", MPTCP_MIB_MISMATCHPORTSYNRX),
|
||||
SNMP_MIB_ITEM("MismatchPortAckRx", MPTCP_MIB_MISMATCHPORTACKRX),
|
||||
SNMP_MIB_ITEM("RmAddr", MPTCP_MIB_RMADDR),
|
||||
SNMP_MIB_ITEM("RmAddrDrop", MPTCP_MIB_RMADDRDROP),
|
||||
SNMP_MIB_ITEM("RmSubflow", MPTCP_MIB_RMSUBFLOW),
|
||||
SNMP_MIB_ITEM("MPPrioTx", MPTCP_MIB_MPPRIOTX),
|
||||
SNMP_MIB_ITEM("MPPrioRx", MPTCP_MIB_MPPRIORX),
|
||||
|
@ -28,12 +28,14 @@ enum linux_mptcp_mib_field {
|
||||
MPTCP_MIB_ADDADDR, /* Received ADD_ADDR with echo-flag=0 */
|
||||
MPTCP_MIB_ECHOADD, /* Received ADD_ADDR with echo-flag=1 */
|
||||
MPTCP_MIB_PORTADD, /* Received ADD_ADDR with a port-number */
|
||||
MPTCP_MIB_ADDADDRDROP, /* Dropped incoming ADD_ADDR */
|
||||
MPTCP_MIB_JOINPORTSYNRX, /* Received a SYN MP_JOIN with a different port-number */
|
||||
MPTCP_MIB_JOINPORTSYNACKRX, /* Received a SYNACK MP_JOIN with a different port-number */
|
||||
MPTCP_MIB_JOINPORTACKRX, /* Received an ACK MP_JOIN with a different port-number */
|
||||
MPTCP_MIB_MISMATCHPORTSYNRX, /* Received a SYN MP_JOIN with a mismatched port-number */
|
||||
MPTCP_MIB_MISMATCHPORTACKRX, /* Received an ACK MP_JOIN with a mismatched port-number */
|
||||
MPTCP_MIB_RMADDR, /* Received RM_ADDR */
|
||||
MPTCP_MIB_RMADDRDROP, /* Dropped incoming RM_ADDR */
|
||||
MPTCP_MIB_RMSUBFLOW, /* Remove a subflow */
|
||||
MPTCP_MIB_MPPRIOTX, /* Transmit a MP_PRIO */
|
||||
MPTCP_MIB_MPPRIORX, /* Received a MP_PRIO */
|
||||
|
@ -213,6 +213,8 @@ void mptcp_pm_add_addr_received(struct mptcp_sock *msk,
|
||||
mptcp_pm_add_addr_send_ack(msk);
|
||||
} else if (mptcp_pm_schedule_work(msk, MPTCP_PM_ADD_ADDR_RECEIVED)) {
|
||||
pm->remote = *addr;
|
||||
} else {
|
||||
__MPTCP_INC_STATS(sock_net((struct sock *)msk), MPTCP_MIB_ADDADDRDROP);
|
||||
}
|
||||
|
||||
spin_unlock_bh(&pm->lock);
|
||||
@ -253,8 +255,10 @@ void mptcp_pm_rm_addr_received(struct mptcp_sock *msk,
|
||||
mptcp_event_addr_removed(msk, rm_list->ids[i]);
|
||||
|
||||
spin_lock_bh(&pm->lock);
|
||||
mptcp_pm_schedule_work(msk, MPTCP_PM_RM_ADDR_RECEIVED);
|
||||
pm->rm_list_rx = *rm_list;
|
||||
if (mptcp_pm_schedule_work(msk, MPTCP_PM_RM_ADDR_RECEIVED))
|
||||
pm->rm_list_rx = *rm_list;
|
||||
else
|
||||
__MPTCP_INC_STATS(sock_net((struct sock *)msk), MPTCP_MIB_RMADDRDROP);
|
||||
spin_unlock_bh(&pm->lock);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user