/*----------------------------------------------------------------------------*/ static inline int HandleActiveOpen(mtcp_manager_t mtcp, tcp_stream *cur_stream, uint32_t cur_ts, struct tcphdr *tcph, uint32_t seq, uint32_t ack_seq, uint16_t window) { cur_stream->rcvvar->irs = seq; cur_stream->snd_nxt = ack_seq; cur_stream->sndvar->peer_wnd = window; cur_stream->rcvvar->snd_wl1 = cur_stream->rcvvar->irs - 1; cur_stream->rcv_nxt = cur_stream->rcvvar->irs + 1; cur_stream->rcvvar->last_ack_seq = ack_seq; ParseTCPOptions(cur_stream, cur_ts, (uint8_t *)tcph + TCP_HEADER_LEN, (tcph->doff << 2) - TCP_HEADER_LEN); cur_stream->sndvar->cwnd = ((cur_stream->sndvar->cwnd == 1)? (cur_stream->sndvar->mss * 2): cur_stream->sndvar->mss); cur_stream->sndvar->ssthresh = cur_stream->sndvar->mss * 10; UpdateRetransmissionTimer(mtcp, cur_stream, cur_ts); return TRUE; }
/*----------------------------------------------------------------------------*/ static inline tcp_stream * HandlePassiveOpen(mtcp_manager_t mtcp, uint32_t cur_ts, const struct iphdr *iph, const struct tcphdr *tcph, uint32_t seq, uint16_t window) { tcp_stream *cur_stream = NULL; /* create new stream and add to flow hash table */ cur_stream = CreateTCPStream(mtcp, NULL, MTCP_SOCK_STREAM, iph->daddr, tcph->dest, iph->saddr, tcph->source); if (!cur_stream) { TRACE_ERROR("INFO: Could not allocate tcp_stream!\n"); return FALSE; } cur_stream->rcvvar->irs = seq; cur_stream->sndvar->peer_wnd = window; cur_stream->rcv_nxt = cur_stream->rcvvar->irs; cur_stream->sndvar->cwnd = 1; ParseTCPOptions(cur_stream, cur_ts, (uint8_t *)tcph + TCP_HEADER_LEN, (tcph->doff << 2) - TCP_HEADER_LEN); return cur_stream; }
/*----------------------------------------------------------------------------*/ static inline int HandleActiveOpen(mtcp_manager_t mtcp, tcp_stream *cur_stream, struct pkt_ctx *pctx) { const struct tcphdr* tcph = pctx->p.tcph; cur_stream->rcvvar->irs = pctx->p.seq; cur_stream->snd_nxt = pctx->p.ack_seq; cur_stream->sndvar->peer_wnd = pctx->p.window; cur_stream->rcvvar->snd_wl1 = cur_stream->rcvvar->irs - 1; cur_stream->rcv_nxt = cur_stream->rcvvar->irs + 1; cur_stream->rcvvar->last_ack_seq = pctx->p.ack_seq; ParseTCPOptions(cur_stream, pctx->p.cur_ts, (uint8_t *)tcph + TCP_HEADER_LEN, (tcph->doff << 2) - TCP_HEADER_LEN); cur_stream->sndvar->cwnd = ((cur_stream->sndvar->cwnd == 1)? (cur_stream->sndvar->mss * 2): cur_stream->sndvar->mss); cur_stream->sndvar->ssthresh = cur_stream->sndvar->mss * 10; if (HAS_STREAM_TYPE(cur_stream, MOS_SOCK_STREAM)) UpdateRetransmissionTimer(mtcp, cur_stream, pctx->p.cur_ts); return TRUE; }