unset join_rst_nr
 unset join_infi_nr
 unset join_corrupted_pkts
+unset join_syn_tx
+unset join_create_err
+unset join_bind_err
+unset join_connect_err
 
 # generated using "nfbpf_compile '(ip && (ip[54] & 0xf0) == 0x30) ||
 #                                (ip6 && (ip6[74] & 0xf0) == 0x30)'"
        fi
 }
 
+chk_join_tx_nr()
+{
+       local syn_tx=${join_syn_tx:-0}
+       local create=${join_create_err:-0}
+       local bind=${join_bind_err:-0}
+       local connect=${join_connect_err:-0}
+       local rc=${KSFT_PASS}
+       local count
+
+       count=$(mptcp_lib_get_counter ${ns2} "MPTcpExtMPJoinSynTx")
+       if [ -z "$count" ]; then
+               rc=${KSFT_SKIP}
+       elif [ "$count" != "$syn_tx" ]; then
+               rc=${KSFT_FAIL}
+               print_check "syn tx"
+               fail_test "got $count JOIN[s] syn tx expected $syn_tx"
+       fi
+
+       count=$(mptcp_lib_get_counter ${ns2} "MPTcpExtMPJoinSynTxCreatSkErr")
+       if [ -z "$count" ]; then
+               rc=${KSFT_SKIP}
+       elif [ "$count" != "$create" ]; then
+               rc=${KSFT_FAIL}
+               print_check "syn tx create socket error"
+               fail_test "got $count JOIN[s] syn tx create socket error expected $create"
+       fi
+
+       count=$(mptcp_lib_get_counter ${ns2} "MPTcpExtMPJoinSynTxBindErr")
+       if [ -z "$count" ]; then
+               rc=${KSFT_SKIP}
+       elif [ "$count" != "$bind" ]; then
+               rc=${KSFT_FAIL}
+               print_check "syn tx bind error"
+               fail_test "got $count JOIN[s] syn tx bind error expected $bind"
+       fi
+
+       count=$(mptcp_lib_get_counter ${ns2} "MPTcpExtMPJoinSynTxConnectErr")
+       if [ -z "$count" ]; then
+               rc=${KSFT_SKIP}
+       elif [ "$count" != "$connect" ]; then
+               rc=${KSFT_FAIL}
+               print_check "syn tx connect error"
+               fail_test "got $count JOIN[s] syn tx connect error expected $connect"
+       fi
+
+       print_results "join Tx" ${rc}
+}
+
 chk_join_nr()
 {
        local syn_nr=$1
 
        print_results "join Rx" ${rc}
 
+       join_syn_tx="${join_syn_tx:-${syn_nr}}" \
+               chk_join_tx_nr
+
        if $validate_checksum; then
                chk_csum_nr $csum_ns1 $csum_ns2
                chk_fail_nr $fail_nr $fail_nr
                pm_nl_set_limits $ns1 0 1
                pm_nl_set_limits $ns2 0 1
                pm_nl_add_endpoint $ns2 10.0.1.2 flags subflow
+               pm_nl_add_endpoint $ns2 10.0.12.2 flags subflow
                speed=slow \
                        run_tests $ns1 $ns2 10.0.1.1
-               chk_join_nr 0 0 0
+               join_bind_err=1 \
+                       chk_join_nr 0 0 0
        fi
 
        # multiple subflows, with subflow creation error
                pm_nl_add_endpoint $ns2 10.0.2.2 flags subflow
                speed=slow \
                        run_tests $ns1 $ns2 10.0.1.1
-               chk_join_nr 1 1 1
+               join_syn_tx=2 \
+                       chk_join_nr 1 1 1
        fi
 
        # multiple subflows, with subflow timeout on MPJ
                pm_nl_add_endpoint $ns2 10.0.2.2 flags subflow
                speed=slow \
                        run_tests $ns1 $ns2 10.0.1.1
-               chk_join_nr 1 1 1
+               join_syn_tx=2 \
+                       chk_join_nr 1 1 1
        fi
 
        # multiple subflows, check that the endpoint corresponding to
 
                # additional subflow could be created only if the PM select
                # the later endpoint, skipping the already used one
-               chk_join_nr 1 1 1
+               join_syn_tx=2 \
+                       chk_join_nr 1 1 1
        fi
 }
 
                pm_nl_add_endpoint $ns1 10.0.14.1 flags signal
                pm_nl_set_limits $ns2 3 3
                run_tests $ns1 $ns2 10.0.1.1
-               chk_join_nr 1 1 1
+               join_syn_tx=3 \
+                       chk_join_nr 1 1 1
                chk_add_nr 3 3
        fi
 
                pm_nl_set_limits $ns2 2 2
                speed=10 \
                        run_tests $ns1 $ns2 10.0.1.1
-               chk_join_nr 1 1 1
+               join_syn_tx=2 \
+                       chk_join_nr 1 1 1
                chk_add_nr 8 0
        fi
 }
                pm_nl_set_limits $ns2 2 2
                addr_nr_ns1=-3 speed=10 \
                        run_tests $ns1 $ns2 10.0.1.1
-               chk_join_nr 1 1 1
+               join_syn_tx=2 join_connect_err=1 \
+                       chk_join_nr 1 1 1
                chk_add_nr 3 3
                chk_rm_nr 3 1 invert
                chk_rst_nr 0 0
                pm_nl_set_limits $ns2 3 3
                addr_nr_ns1=-8 speed=slow \
                        run_tests $ns1 $ns2 10.0.1.1
-               chk_join_nr 1 1 1
+               join_syn_tx=3 \
+                       chk_join_nr 1 1 1
                chk_add_nr 3 3
                chk_rm_nr 3 1 invert
                chk_rst_nr 0 0
                chk_evt_nr ns2 MPTCP_LIB_EVENT_SUB_ESTABLISHED 6
                chk_evt_nr ns2 MPTCP_LIB_EVENT_SUB_CLOSED 5 # one has been closed before estab
 
-               chk_join_nr 6 6 6
+               join_syn_tx=7 \
+                       chk_join_nr 6 6 6
                chk_rm_nr 4 4
        fi
 
                chk_evt_nr ns2 MPTCP_LIB_EVENT_SUB_ESTABLISHED 5
                chk_evt_nr ns2 MPTCP_LIB_EVENT_SUB_CLOSED 3
 
-               chk_join_nr 5 5 5
+               join_connect_err=1 \
+                       chk_join_nr 5 5 5
                chk_add_nr 6 6
                chk_rm_nr 4 3 invert
        fi
                wait_mpj $ns2
                mptcp_lib_kill_wait $tests_pid
 
-               chk_join_nr 2 2 2
+               join_syn_tx=3 join_connect_err=1 \
+                       chk_join_nr 2 2 2
                chk_add_nr 2 2
                chk_rm_nr 1 0 invert
        fi