.pru_preconnect = mptcp_usr_preconnect,
};
-/*
- * Sysctl for testing and tuning mptcp connectx with data api.
- * Mirrors tcp_preconnect_sbspace for now.
- */
-#define MPTCP_PRECONNECT_SBSZ_MAX 1460
-#define MPTCP_PRECONNECT_SBSZ_MIN (TCP_MSS)
-#define MPTCP_PRECONNECT_SBSZ_DEF (TCP6_MSS)
-static int mptcp_preconnect_sbspace = MPTCP_PRECONNECT_SBSZ_DEF;
-SYSCTL_INT(_net_inet_mptcp, OID_AUTO, mp_preconn_sbsz, CTLFLAG_RW | CTLFLAG_LOCKED,
- &mptcp_preconnect_sbspace, 0, "Maximum preconnect space");
-
-
/*
* Attaches an MPTCP control block to a socket.
*/
}
if (mp_so->so_snd.sb_preconn_hiwat == 0) {
- soreserve_preconnect(mp_so, imin(MPTCP_PRECONNECT_SBSZ_MAX,
- imax(mptcp_preconnect_sbspace, MPTCP_PRECONNECT_SBSZ_MIN)));
+ soreserve_preconnect(mp_so, 2048);
}
/*
struct tcpcb *tp = NULL;
socket_lock(so, 0);
-
+
tp = intotcpcb(sotoinpcb(so));
tp->t_mpflags |= TMPF_SND_MPPRIO;
if (mpts->mpts_flags & MPTSF_PREFERRED)
} else {
bool disconnect_embryonic_subflows = false;
struct socket *so = NULL;
-
+
TAILQ_FOREACH(mpts, &mpte->mpte_subflows, mpts_entry) {
if (mpts->mpts_connid != cid)
continue;
error = mptcp_output(mpte);
if (error != 0)
goto out;
-
+
if (mp_so->so_state & SS_ISCONNECTING) {
if (mp_so->so_state & SS_NBIO)
error = EWOULDBLOCK;
else
error = sbwait(&mp_so->so_snd);
}
-
+
out:
if (error) {
if (m != NULL)
case SO_FLUSH: /* MP + subflow */
case SO_MPTCP_FASTJOIN: /* MP + subflow */
case SO_NOWAKEFROMSLEEP:
+ case SO_NOAPNFALLBK:
/*
* Tell the caller that these options are to be processed;
* these will also be recorded later by mptcp_setopt().
case SO_RESTRICTIONS:
case SO_NOWAKEFROMSLEEP:
case SO_MPTCP_FASTJOIN:
+ case SO_NOAPNFALLBK:
/* record it */
break;
case SO_FLUSH:
case SO_MPTCP_FASTJOIN:
o = "SO_MPTCP_FASTJOIN";
break;
+ case SO_NOAPNFALLBK:
+ o = "SO_NOAPNFALLBK";
+ break;
}
break;
case IPPROTO_TCP: