Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

mptcp: add the mibs for ADD_ADDR with port

This patch adds the mibs for ADD_ADDR with port:

MPTCP_MIB_PORTADD for received ADD_ADDR suboption with a port number.

MPTCP_MIB_PORTSYNRX, MPTCP_MIB_PORTSYNACKRX, MPTCP_MIB_PORTACKRX, for
received MP_JOIN's SYN or SYN/ACK or ACK with a port number which is
different from the msk's port number.

MPTCP_MIB_MISMATCHPORTSYNRX and MPTCP_MIB_MISMATCHPORTACKRX, for
received SYN or ACK MP_JOIN with a mismatched port-number.

Signed-off-by: Geliang Tang <geliangtang@gmail.com>
Signed-off-by: Mat Martineau <mathew.j.martineau@linux.intel.com>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>

authored by

Geliang Tang and committed by
Jakub Kicinski
2fbdd9ea d4a7726a

+23 -1
+6
net/mptcp/mib.c
··· 29 29 SNMP_MIB_ITEM("DuplicateData", MPTCP_MIB_DUPDATA), 30 30 SNMP_MIB_ITEM("AddAddr", MPTCP_MIB_ADDADDR), 31 31 SNMP_MIB_ITEM("EchoAdd", MPTCP_MIB_ECHOADD), 32 + SNMP_MIB_ITEM("PortAdd", MPTCP_MIB_PORTADD), 33 + SNMP_MIB_ITEM("MPJoinPortSynRx", MPTCP_MIB_JOINPORTSYNRX), 34 + SNMP_MIB_ITEM("MPJoinPortSynAckRx", MPTCP_MIB_JOINPORTSYNACKRX), 35 + SNMP_MIB_ITEM("MPJoinPortAckRx", MPTCP_MIB_JOINPORTACKRX), 36 + SNMP_MIB_ITEM("MismatchPortSynRx", MPTCP_MIB_MISMATCHPORTSYNRX), 37 + SNMP_MIB_ITEM("MismatchPortAckRx", MPTCP_MIB_MISMATCHPORTACKRX), 32 38 SNMP_MIB_ITEM("RmAddr", MPTCP_MIB_RMADDR), 33 39 SNMP_MIB_ITEM("RmSubflow", MPTCP_MIB_RMSUBFLOW), 34 40 SNMP_MIB_ITEM("MPPrioTx", MPTCP_MIB_MPPRIOTX),
+6
net/mptcp/mib.h
··· 22 22 MPTCP_MIB_DUPDATA, /* Segments discarded due to duplicate DSS */ 23 23 MPTCP_MIB_ADDADDR, /* Received ADD_ADDR with echo-flag=0 */ 24 24 MPTCP_MIB_ECHOADD, /* Received ADD_ADDR with echo-flag=1 */ 25 + MPTCP_MIB_PORTADD, /* Received ADD_ADDR with a port-number */ 26 + MPTCP_MIB_JOINPORTSYNRX, /* Received a SYN MP_JOIN with a different port-number */ 27 + MPTCP_MIB_JOINPORTSYNACKRX, /* Received a SYNACK MP_JOIN with a different port-number */ 28 + MPTCP_MIB_JOINPORTACKRX, /* Received an ACK MP_JOIN with a different port-number */ 29 + MPTCP_MIB_MISMATCHPORTSYNRX, /* Received a SYN MP_JOIN with a mismatched port-number */ 30 + MPTCP_MIB_MISMATCHPORTACKRX, /* Received an ACK MP_JOIN with a mismatched port-number */ 25 31 MPTCP_MIB_RMADDR, /* Received RM_ADDR */ 26 32 MPTCP_MIB_RMSUBFLOW, /* Remove a subflow */ 27 33 MPTCP_MIB_MPPRIOTX, /* Transmit a MP_PRIO */
+4
net/mptcp/options.c
··· 1025 1025 mptcp_pm_del_add_timer(msk, &addr); 1026 1026 MPTCP_INC_STATS(sock_net(sk), MPTCP_MIB_ECHOADD); 1027 1027 } 1028 + 1029 + if (mp_opt.port) 1030 + MPTCP_INC_STATS(sock_net(sk), MPTCP_MIB_PORTADD); 1031 + 1028 1032 mp_opt.add_addr = 0; 1029 1033 } 1030 1034
+7 -1
net/mptcp/subflow.c
··· 207 207 tcp_request_sock_ops.destructor(req); 208 208 subflow_req->msk = NULL; 209 209 subflow_req->mp_join = 0; 210 + SUBFLOW_REQ_INC_STATS(req, MPTCP_MIB_MISMATCHPORTSYNRX); 210 211 return -EPERM; 211 212 } 213 + SUBFLOW_REQ_INC_STATS(req, MPTCP_MIB_JOINPORTSYNRX); 212 214 } 213 215 214 216 subflow_req_create_thmac(subflow_req); ··· 433 431 pr_debug("synack inet_dport=%d %d", 434 432 ntohs(inet_sk(sk)->inet_dport), 435 433 ntohs(inet_sk(parent)->inet_dport)); 434 + MPTCP_INC_STATS(sock_net(sk), MPTCP_MIB_JOINPORTSYNACKRX); 436 435 } 437 436 } else if (mptcp_check_fallback(sk)) { 438 437 fallback: ··· 705 702 pr_debug("ack inet_sport=%d %d", 706 703 ntohs(inet_sk(sk)->inet_sport), 707 704 ntohs(inet_sk((struct sock *)owner)->inet_sport)); 708 - if (!mptcp_pm_sport_in_anno_list(owner, sk)) 705 + if (!mptcp_pm_sport_in_anno_list(owner, sk)) { 706 + SUBFLOW_REQ_INC_STATS(req, MPTCP_MIB_MISMATCHPORTACKRX); 709 707 goto out; 708 + } 709 + SUBFLOW_REQ_INC_STATS(req, MPTCP_MIB_JOINPORTACKRX); 710 710 } 711 711 } 712 712 }