diff options
-rw-r--r-- | lib/libtle_l4p/syncookie.h | 7 | ||||
-rw-r--r-- | lib/libtle_l4p/tcp_rxtx.c | 2 | ||||
-rw-r--r-- | lib/libtle_l4p/tle_tcp.h | 4 |
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; }; |