When TLDK is used in to proxy connections, it previously limited the
window scale values that could be used. This allows the full range to be
used by proxy sessions (tcp_establish) and should preserves the existing
behavior for endpoint sessions.
Signed-off-by: Ben Magistro <[email protected]>
Change-Id: I064dffccef1cc8e97c910a23d82feb7bd35bc988
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
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;
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);
* 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;
};