struct mptcb *mp_tp = NULL;
struct mptcp_mpfail_opt fail_opt;
uint64_t dsn;
- int len = sizeof(struct mptcp_mpfail_opt);
+ uint8_t len = sizeof(struct mptcp_mpfail_opt);
mp_tp = tptomptp(tp);
if (mp_tp == NULL) {
static int
mptcp_send_infinite_mapping(struct tcpcb *tp, u_char *opt, unsigned int optlen)
{
+ struct socket *so = tp->t_inpcb->inp_socket;
+ uint8_t len = sizeof(struct mptcp_dsn_opt);
struct mptcp_dsn_opt infin_opt;
struct mptcb *mp_tp = NULL;
- size_t len = sizeof(struct mptcp_dsn_opt);
- struct socket *so = tp->t_inpcb->inp_socket;
- int csum_len = 0;
+ uint8_t csum_len = 0;
if (!so) {
return optlen;
unsigned int
mptcp_setup_opts(struct tcpcb *tp, int32_t off, u_char *opt,
unsigned int optlen, int flags, int len,
- boolean_t *p_mptcp_acknow)
+ boolean_t *p_mptcp_acknow, boolean_t *do_not_compress)
{
struct inpcb *inp = (struct inpcb *)tp->t_inpcb;
struct socket *so = inp->inp_socket;
} else if (!(tp->t_mpflags & TMPF_INFIN_SENT)) {
optlen = mptcp_send_infinite_mapping(tp, opt, optlen);
}
+
+ *do_not_compress = TRUE;
+
goto ret_optlen;
}
} else {
/* its a retransmission of the MP_CAPABLE ACK */
}
+
+ *do_not_compress = TRUE;
+
goto ret_optlen;
}
if (tp->t_mpflags & TMPF_SND_JACK) {
- /* Do the ACK part */
+ *do_not_compress = TRUE;
optlen = mptcp_setup_join_ack_opts(tp, opt, optlen);
if (!tp->t_mpuna) {
tp->t_mpuna = tp->snd_una;
goto ret_optlen;
}
- if (!(tp->t_mpflags & TMPF_MPTCP_TRUE)) {
+ if (!(tp->t_mpflags & (TMPF_MPTCP_TRUE | TMPF_PREESTABLISHED))) {
goto ret_optlen;
}
/*
} else {
tp->t_mpflags &= ~TMPF_SND_REM_ADDR;
}
+
+ *do_not_compress = TRUE;
}
if (tp->t_mpflags & TMPF_SND_MPPRIO) {
optlen = mptcp_snd_mpprio(tp, opt, optlen);
+
+ *do_not_compress = TRUE;
}
if (mp_tp->mpt_flags & MPTCPF_SND_64BITDSN) {
* XXX If this delay causes issue, remove the 2-byte padding.
*/
struct mptcp_dss64_ack32_opt dsn_ack_opt;
- unsigned int dssoptlen = sizeof(dsn_ack_opt);
+ uint8_t dssoptlen = sizeof(dsn_ack_opt);
uint16_t dss_csum;
if (do_csum) {
}
optlen += dssoptlen;
- mptcplog((LOG_DEBUG, "%s: long DSS = %llx ACK = %llx \n", __func__,
- mptcp_ntoh64(dsn_ack_opt.mdss_dsn),
- mptcp_ntoh64(dsn_ack_opt.mdss_ack)),
- MPTCP_SOCKET_DBG, MPTCP_LOGLVL_LOG);
tp->t_mpflags &= ~TMPF_MPTCP_ACKNOW;
+
+ *do_not_compress = TRUE;
+
goto ret_optlen;
}
(!send_64bit_dsn) &&
!(tp->t_mpflags & TMPF_MPTCP_ACKNOW)) {
struct mptcp_dsn_opt dsn_opt;
- unsigned int dssoptlen = sizeof(struct mptcp_dsn_opt);
+ uint8_t dssoptlen = sizeof(struct mptcp_dsn_opt);
uint16_t dss_csum;
if (do_csum) {
optlen += dssoptlen;
tp->t_mpflags &= ~TMPF_MPTCP_ACKNOW;
+
+ *do_not_compress = TRUE;
+
goto ret_optlen;
}
!(tp->t_mpflags & TMPF_SEND_DSN) &&
!(tp->t_mpflags & TMPF_SEND_DFIN)) {
struct mptcp_data_ack_opt dack_opt;
- unsigned int dssoptlen = 0;
+ uint8_t dssoptlen = 0;
do_ack32_only:
dssoptlen = sizeof(dack_opt);
!(tp->t_mpflags & TMPF_SEND_DSN) &&
!(tp->t_mpflags & TMPF_SEND_DFIN)) {
struct mptcp_data_ack64_opt dack_opt;
- unsigned int dssoptlen = 0;
+ uint8_t dssoptlen = 0;
do_ack64_only:
dssoptlen = sizeof(dack_opt);
(!send_64bit_ack) &&
(tp->t_mpflags & TMPF_MPTCP_ACKNOW)) {
struct mptcp_dss_ack_opt dss_ack_opt;
- unsigned int dssoptlen = sizeof(dss_ack_opt);
+ uint8_t dssoptlen = sizeof(dss_ack_opt);
uint16_t dss_csum;
if (do_csum) {
(send_64bit_ack) &&
(tp->t_mpflags & TMPF_MPTCP_ACKNOW)) {
struct mptcp_dss32_ack64_opt dss_ack_opt;
- unsigned int dssoptlen = sizeof(dss_ack_opt);
+ uint8_t dssoptlen = sizeof(dss_ack_opt);
uint16_t dss_csum;
if (do_csum) {
panic("optlen too large");
}
tp->t_mpflags &= ~TMPF_MPTCP_ACKNOW;
+
+ *do_not_compress = TRUE;
+
goto ret_optlen;
}
if (tp->t_mpflags & TMPF_SEND_DFIN) {
- unsigned int dssoptlen = sizeof(struct mptcp_dss_ack_opt);
+ uint8_t dssoptlen = sizeof(struct mptcp_dss_ack_opt);
struct mptcp_dss_ack_opt dss_ack_opt;
uint16_t dss_csum;
}
optlen += dssoptlen;
+
+ *do_not_compress = TRUE;
}
ret_optlen:
if (TRUE == *p_mptcp_acknow) {
- VERIFY(old_mpt_flags != 0);
u_int32_t new_mpt_flags = tp->t_mpflags & TMPF_MPTCP_SIGNALS;
/*
{
uint64_t acked = full_dack - mp_tp->mpt_snduna;
+ VERIFY(acked <= INT_MAX);
+
if (acked) {
struct socket *mp_so = mptetoso(mp_tp->mpt_mpte);
sbdrop(&mp_so->so_snd, (int)mp_so->so_snd.sb_cc);
} else {
- sbdrop(&mp_so->so_snd, acked);
+ sbdrop(&mp_so->so_snd, (int)acked);
}
mp_tp->mpt_snduna += acked;