Lines Matching refs:cur_stream
32 AddtoRTOList(mtcp_manager_t mtcp, tcp_stream *cur_stream) in AddtoRTOList() argument
36 mtcp->rto_store->rto_now_ts = cur_stream->sndvar->ts_rto; in AddtoRTOList()
39 if (cur_stream->on_rto_idx < 0 ) { in AddtoRTOList()
40 if (cur_stream->on_timewait_list) { in AddtoRTOList()
42 "rto and timewait list.\n", cur_stream->id); in AddtoRTOList()
44 DumpStream(mtcp, cur_stream); in AddtoRTOList()
49 int diff = (int32_t)(cur_stream->sndvar->ts_rto - mtcp->rto_store->rto_now_ts); in AddtoRTOList()
54 cur_stream->on_rto_idx = offset; in AddtoRTOList()
56 cur_stream, sndvar->timer_link); in AddtoRTOList()
60 cur_stream->on_rto_idx = RTO_HASH; in AddtoRTOList()
62 cur_stream, sndvar->timer_link); in AddtoRTOList()
70 RemoveFromRTOList(mtcp_manager_t mtcp, tcp_stream *cur_stream) in RemoveFromRTOList() argument
72 if (cur_stream->on_rto_idx < 0) { in RemoveFromRTOList()
77 TAILQ_REMOVE(&mtcp->rto_store->rto_list[cur_stream->on_rto_idx], in RemoveFromRTOList()
78 cur_stream, sndvar->timer_link); in RemoveFromRTOList()
79 cur_stream->on_rto_idx = -1; in RemoveFromRTOList()
85 AddtoTimewaitList(mtcp_manager_t mtcp, tcp_stream *cur_stream, uint32_t cur_ts) in AddtoTimewaitList() argument
87 cur_stream->rcvvar->ts_tw_expire = cur_ts + g_config.mos->tcp_tw_interval; in AddtoTimewaitList()
89 if (cur_stream->on_timewait_list) { in AddtoTimewaitList()
91 TAILQ_REMOVE(&mtcp->timewait_list, cur_stream, sndvar->timer_link); in AddtoTimewaitList()
92 TAILQ_INSERT_TAIL(&mtcp->timewait_list, cur_stream, sndvar->timer_link); in AddtoTimewaitList()
94 if (cur_stream->on_rto_idx >= 0) { in AddtoTimewaitList()
96 "timewait and rto list.\n", cur_stream->id); in AddtoTimewaitList()
99 DumpStream(mtcp, cur_stream); in AddtoTimewaitList()
101 RemoveFromRTOList(mtcp, cur_stream); in AddtoTimewaitList()
104 cur_stream->on_timewait_list = TRUE; in AddtoTimewaitList()
105 TAILQ_INSERT_TAIL(&mtcp->timewait_list, cur_stream, sndvar->timer_link); in AddtoTimewaitList()
111 RemoveFromTimewaitList(mtcp_manager_t mtcp, tcp_stream *cur_stream) in RemoveFromTimewaitList() argument
113 if (!cur_stream->on_timewait_list) { in RemoveFromTimewaitList()
118 TAILQ_REMOVE(&mtcp->timewait_list, cur_stream, sndvar->timer_link); in RemoveFromTimewaitList()
119 cur_stream->on_timewait_list = FALSE; in RemoveFromTimewaitList()
124 AddtoTimeoutList(mtcp_manager_t mtcp, tcp_stream *cur_stream) in AddtoTimeoutList() argument
126 if (cur_stream->on_timeout_list) { in AddtoTimeoutList()
131 cur_stream->on_timeout_list = TRUE; in AddtoTimeoutList()
132 TAILQ_INSERT_TAIL(&mtcp->timeout_list, cur_stream, sndvar->timeout_link); in AddtoTimeoutList()
137 RemoveFromTimeoutList(mtcp_manager_t mtcp, tcp_stream *cur_stream) in RemoveFromTimeoutList() argument
139 if (cur_stream->on_timeout_list) { in RemoveFromTimeoutList()
140 cur_stream->on_timeout_list = FALSE; in RemoveFromTimeoutList()
141 TAILQ_REMOVE(&mtcp->timeout_list, cur_stream, sndvar->timeout_link); in RemoveFromTimeoutList()
147 UpdateTimeoutList(mtcp_manager_t mtcp, tcp_stream *cur_stream) in UpdateTimeoutList() argument
149 if (cur_stream->on_timeout_list) { in UpdateTimeoutList()
150 TAILQ_REMOVE(&mtcp->timeout_list, cur_stream, sndvar->timeout_link); in UpdateTimeoutList()
151 TAILQ_INSERT_TAIL(&mtcp->timeout_list, cur_stream, sndvar->timeout_link); in UpdateTimeoutList()
157 tcp_stream *cur_stream, uint32_t cur_ts) in UpdateRetransmissionTimer() argument
160 assert(cur_stream->sndvar->rto > 0); in UpdateRetransmissionTimer()
161 cur_stream->sndvar->nrtx = 0; in UpdateRetransmissionTimer()
164 if (cur_stream->on_rto_idx >= 0) { in UpdateRetransmissionTimer()
165 RemoveFromRTOList(mtcp, cur_stream); in UpdateRetransmissionTimer()
169 if (TCP_SEQ_GT(cur_stream->snd_nxt, cur_stream->sndvar->snd_una)) { in UpdateRetransmissionTimer()
172 cur_stream->sndvar->ts_rto = cur_ts + cur_stream->sndvar->rto; in UpdateRetransmissionTimer()
173 AddtoRTOList(mtcp, cur_stream); in UpdateRetransmissionTimer()
178 cur_stream->sndvar->snd_una, cur_stream->snd_nxt); in UpdateRetransmissionTimer()
183 HandleRTO(mtcp_manager_t mtcp, uint32_t cur_ts, tcp_stream *cur_stream) in HandleRTO() argument
188 cur_stream->id, cur_stream->sndvar->rto, TS_TO_MSEC(cur_stream->sndvar->rto), in HandleRTO()
189 cur_stream->sndvar->snd_una, cur_stream->snd_nxt); in HandleRTO()
190 assert(cur_stream->sndvar->rto > 0); in HandleRTO()
193 if (cur_stream->sndvar->nrtx < TCP_MAX_RTX) { in HandleRTO()
194 cur_stream->sndvar->nrtx++; in HandleRTO()
197 TRACE_RTO("Stream %d: Exceed MAX_RTX\n", cur_stream->id); in HandleRTO()
198 if (cur_stream->state < TCP_ST_ESTABLISHED) { in HandleRTO()
199 cur_stream->state = TCP_ST_CLOSED_RSVD; in HandleRTO()
200 cur_stream->close_reason = TCP_CONN_FAIL; in HandleRTO()
201 cur_stream->cb_events |= MOS_ON_TCP_STATE_CHANGE; in HandleRTO()
202 DestroyTCPStream(mtcp, cur_stream); in HandleRTO()
204 cur_stream->state = TCP_ST_CLOSED_RSVD; in HandleRTO()
205 cur_stream->close_reason = TCP_CONN_LOST; in HandleRTO()
206 cur_stream->cb_events |= MOS_ON_TCP_STATE_CHANGE; in HandleRTO()
207 if (cur_stream->socket) { in HandleRTO()
208 RaiseErrorEvent(mtcp, cur_stream); in HandleRTO()
210 DestroyTCPStream(mtcp, cur_stream); in HandleRTO()
215 if (cur_stream->sndvar->nrtx > cur_stream->sndvar->max_nrtx) { in HandleRTO()
216 cur_stream->sndvar->max_nrtx = cur_stream->sndvar->nrtx; in HandleRTO()
220 if (cur_stream->state >= TCP_ST_ESTABLISHED) { in HandleRTO()
222 backoff = MIN(cur_stream->sndvar->nrtx, TCP_MAX_BACKOFF); in HandleRTO()
224 rto_prev = cur_stream->sndvar->rto; in HandleRTO()
225 cur_stream->sndvar->rto = in HandleRTO()
226 ((cur_stream->rcvvar->srtt >> 3) + cur_stream->rcvvar->rttvar) << backoff; in HandleRTO()
227 if (cur_stream->sndvar->rto <= 0) { in HandleRTO()
229 cur_stream->id, cur_stream->sndvar->rto, rto_prev, in HandleRTO()
230 TCPStateToString(cur_stream)); in HandleRTO()
231 cur_stream->sndvar->rto = rto_prev; in HandleRTO()
233 } else if (cur_stream->state >= TCP_ST_SYN_SENT) { in HandleRTO()
235 if (cur_stream->sndvar->nrtx < TCP_MAX_BACKOFF) { in HandleRTO()
236 cur_stream->sndvar->rto <<= 1; in HandleRTO()
242 cur_stream->sndvar->ssthresh = MIN(cur_stream->sndvar->cwnd, cur_stream->sndvar->peer_wnd) / 2; in HandleRTO()
243 if (cur_stream->sndvar->ssthresh < (2 * cur_stream->sndvar->mss)) { in HandleRTO()
244 cur_stream->sndvar->ssthresh = cur_stream->sndvar->mss * 2; in HandleRTO()
246 cur_stream->sndvar->cwnd = cur_stream->sndvar->mss; in HandleRTO()
248 cur_stream->id, cur_stream->sndvar->cwnd, cur_stream->sndvar->ssthresh); in HandleRTO()
252 cur_stream->sndvar->rstat.rto_cnt++; in HandleRTO()
253 cur_stream->sndvar->rstat.rto_bytes += (cur_stream->snd_nxt - cur_stream->sndvar->snd_una); in HandleRTO()
256 if (cur_stream->on_rto_idx >= 0) in HandleRTO()
257 RemoveFromRTOList(mtcp, cur_stream); in HandleRTO()
260 if (cur_stream->state == TCP_ST_SYN_SENT) { in HandleRTO()
262 if (cur_stream->sndvar->nrtx > TCP_MAX_SYN_RETRY) { in HandleRTO()
263 cur_stream->state = TCP_ST_CLOSED_RSVD; in HandleRTO()
264 cur_stream->close_reason = TCP_CONN_FAIL; in HandleRTO()
265 cur_stream->cb_events |= MOS_ON_TCP_STATE_CHANGE; in HandleRTO()
267 cur_stream->id); in HandleRTO()
268 if (cur_stream->socket) { in HandleRTO()
269 RaiseErrorEvent(mtcp, cur_stream); in HandleRTO()
271 DestroyTCPStream(mtcp, cur_stream); in HandleRTO()
277 cur_stream->id, cur_stream->snd_nxt, cur_stream->sndvar->snd_una); in HandleRTO()
279 } else if (cur_stream->state == TCP_ST_SYN_RCVD) { in HandleRTO()
282 cur_stream->id, cur_stream->snd_nxt, cur_stream->sndvar->snd_una); in HandleRTO()
284 } else if (cur_stream->state == TCP_ST_ESTABLISHED) { in HandleRTO()
287 cur_stream->id, cur_stream->snd_nxt, cur_stream->sndvar->snd_una); in HandleRTO()
289 } else if (cur_stream->state == TCP_ST_CLOSE_WAIT) { in HandleRTO()
292 cur_stream->id, cur_stream->snd_nxt, cur_stream->sndvar->snd_una); in HandleRTO()
294 } else if (cur_stream->state == TCP_ST_LAST_ACK) { in HandleRTO()
298 cur_stream->id, cur_stream->snd_nxt, cur_stream->sndvar->snd_una); in HandleRTO()
300 } else if (cur_stream->state == TCP_ST_FIN_WAIT_1) { in HandleRTO()
303 cur_stream->id, cur_stream->snd_nxt, cur_stream->sndvar->snd_una); in HandleRTO()
304 } else if (cur_stream->state == TCP_ST_CLOSING) { in HandleRTO()
306 cur_stream->id, cur_stream->snd_nxt, cur_stream->sndvar->snd_una); in HandleRTO()
309 } else if (cur_stream->state == TCP_ST_FIN_WAIT_2) { in HandleRTO()
311 cur_stream->id, cur_stream->snd_nxt, cur_stream->sndvar->snd_una); in HandleRTO()
314 cur_stream->id, in HandleRTO()
315 TCPStateToString(cur_stream), cur_stream->sndvar->rto); in HandleRTO()
320 cur_stream->snd_nxt = cur_stream->sndvar->snd_una; in HandleRTO()
321 if (cur_stream->state == TCP_ST_ESTABLISHED || in HandleRTO()
322 cur_stream->state == TCP_ST_CLOSE_WAIT) { in HandleRTO()
324 AddtoSendList(mtcp, cur_stream); in HandleRTO()
326 } else if (cur_stream->state == TCP_ST_FIN_WAIT_1 || in HandleRTO()
327 cur_stream->state == TCP_ST_CLOSING || in HandleRTO()
328 cur_stream->state == TCP_ST_LAST_ACK) { in HandleRTO()
330 if (cur_stream->sndvar->fss == 0) { in HandleRTO()
331 TRACE_ERROR("Stream %u: fss not set.\n", cur_stream->id); in HandleRTO()
334 if (TCP_SEQ_LT(cur_stream->snd_nxt, cur_stream->sndvar->fss)) { in HandleRTO()
336 if (cur_stream->sndvar->on_control_list) { in HandleRTO()
337 RemoveFromControlList(mtcp, cur_stream); in HandleRTO()
339 cur_stream->control_list_waiting = TRUE; in HandleRTO()
340 AddtoSendList(mtcp, cur_stream); in HandleRTO()
344 AddtoControlList(mtcp, cur_stream, cur_ts); in HandleRTO()
348 AddtoControlList(mtcp, cur_stream, cur_ts); in HandleRTO()