aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/libtle_l4p/syncookie.h7
-rw-r--r--lib/libtle_l4p/tcp_rxtx.c2
-rw-r--r--lib/libtle_l4p/tle_tcp.h4
3 files changed, 10 insertions, 3 deletions
diff --git a/lib/libtle_l4p/syncookie.h b/lib/libtle_l4p/syncookie.h
index d0434e9..2588171 100644
--- a/lib/libtle_l4p/syncookie.h
+++ b/lib/libtle_l4p/syncookie.h
@@ -184,8 +184,7 @@ fill_tcb_rcv(struct tcb *tcb, uint32_t seq, uint32_t wscale,
tcb->rcv.nxt = seq;
tcb->rcv.irs = seq - 1;
tcb->rcv.ts = to->val;
- tcb->rcv.wscale = (wscale == TCP_WSCALE_NONE) ?
- TCP_WSCALE_NONE : TCP_WSCALE_DEFAULT;
+ tcb->rcv.wscale = wscale;
}
static inline void
@@ -219,6 +218,10 @@ sync_fill_tcb(struct tcb *tcb, const union seg_info *si,
wscale = to->ecr & SYNC_TMS_WSCALE_MASK;
fill_tcb_snd(tcb, seq, ack, mss, si->wnd, wscale, to);
+
+ wscale = ((to->ecr & SYNC_TMS_WSCALE_MASK) == TCP_WSCALE_NONE) ?
+ TCP_WSCALE_NONE : TCP_WSCALE_DEFAULT;
+
fill_tcb_rcv(tcb, seq, wscale, to);
tcb->so.mss = mss;
diff --git a/lib/libtle_l4p/tcp_rxtx.c b/lib/libtle_l4p/tcp_rxtx.c
index 8056619..9c80f66 100644
--- a/lib/libtle_l4p/tcp_rxtx.c
+++ b/lib/libtle_l4p/tcp_rxtx.c
@@ -2273,7 +2273,7 @@ tcb_establish(struct tle_tcp_stream *s, const struct tle_tcp_conn_info *ci)
s->tcb.so = ci->so;
fill_tcb_snd(&s->tcb, ci->ack, ci->seq, mss,
ci->wnd, ci->so.wscale, &ci->so.ts);
- fill_tcb_rcv(&s->tcb, ci->ack, ci->so.wscale, &ci->so.ts);
+ fill_tcb_rcv(&s->tcb, ci->ack, ci->so.l_wscale, &ci->so.ts);
s->tcb.rcv.wnd = calc_rx_wnd(s, s->tcb.rcv.wscale);
diff --git a/lib/libtle_l4p/tle_tcp.h b/lib/libtle_l4p/tle_tcp.h
index be0c7a9..860da92 100644
--- a/lib/libtle_l4p/tle_tcp.h
+++ b/lib/libtle_l4p/tle_tcp.h
@@ -122,8 +122,12 @@ union tle_tcp_tsopt {
* SYN time option values.
*/
struct tle_tcp_syn_opts {
+ /* mss to use when communicating with the peer */
uint16_t mss;
+ /* peer window scaling factor */
uint8_t wscale;
+ /* local window scaling factor, only used via tcp_establish */
+ uint8_t l_wscale;
union tle_tcp_tsopt ts;
};