Lines Matching refs:pctx

24 		struct pkt_ctx *pctx);
63 struct pkt_ctx *pctx) in HandleActiveOpen() argument
65 const struct tcphdr* tcph = pctx->p.tcph; in HandleActiveOpen()
67 cur_stream->rcvvar->irs = pctx->p.seq; in HandleActiveOpen()
68 cur_stream->snd_nxt = pctx->p.ack_seq; in HandleActiveOpen()
69 cur_stream->sndvar->peer_wnd = pctx->p.window; in HandleActiveOpen()
72 cur_stream->rcvvar->last_ack_seq = pctx->p.ack_seq; in HandleActiveOpen()
73 ParseTCPOptions(cur_stream, pctx->p.cur_ts, (uint8_t *)tcph + TCP_HEADER_LEN, in HandleActiveOpen()
79 UpdateRetransmissionTimer(mtcp, cur_stream, pctx->p.cur_ts); in HandleActiveOpen()
89 struct pkt_ctx *pctx) in ValidateSequence() argument
91 const struct tcphdr* tcph = pctx->p.tcph; in ValidateSequence()
112 pctx->p.seq, ts.ts_val, cur_stream->rcvvar->ts_recent); in ValidateSequence()
121 TS_TO_USEC(pctx->p.cur_ts - cur_stream->rcvvar->ts_last_ts_upd)); in ValidateSequence()
122 cur_stream->rcvvar->ts_last_ts_upd = pctx->p.cur_ts; in ValidateSequence()
131 if (!TCP_SEQ_BETWEEN(pctx->p.seq + pctx->p.payloadlen, cur_stream->rcv_nxt, in ValidateSequence()
140 if (pctx->p.seq + 1 == cur_stream->rcv_nxt) { in ValidateSequence()
142 pctx->p.seq, cur_stream->rcvvar->rcv_wnd); in ValidateSequence()
148 if (TCP_SEQ_LEQ(pctx->p.seq, cur_stream->rcv_nxt)) { in ValidateSequence()
157 AddtoTimewaitList(mtcp, cur_stream, pctx->p.cur_ts); in ValidateSequence()
177 struct pkt_ctx *pctx) in ProcessRST() argument
196 if (pctx->p.seq == 0 || in ProcessRST()
198 pctx->p.seq == cur_stream->rcv_nxt + 1 || in ProcessRST()
200 pctx->p.ack_seq == cur_stream->snd_nxt) in ProcessRST()
210 cur_stream->rcv_nxt + 1, pctx->p.ack_seq); in ProcessRST()
306 struct pkt_ctx *pctx) in ProcessACK() argument
308 const struct tcphdr* tcph = pctx->p.tcph; in ProcessACK()
309 uint32_t seq = pctx->p.seq; in ProcessACK()
310 uint32_t ack_seq = pctx->p.ack_seq; in ProcessACK()
318 cwindow = pctx->p.window; in ProcessACK()
344 if (TCP_SEQ_GT(seq + pctx->p.payloadlen, cur_stream->rcv_nxt)) in ProcessACK()
345 cur_stream->rcv_nxt = seq + pctx->p.payloadlen; in ProcessACK()
384 if (ack_seq == cur_stream->rcvvar->last_ack_seq && pctx->p.payloadlen == 0) { in ProcessACK()
486 pctx->p.cur_ts - cur_stream->rcvvar->ts_lastack_rcvd); in ProcessACK()
538 UpdateRetransmissionTimer(mtcp, cur_stream, pctx->p.cur_ts); in ProcessACK()
548 struct pkt_ctx *pctx) in ProcessTCPPayload() argument
560 if (TCP_SEQ_LT(pctx->p.seq + pctx->p.payloadlen, cur_stream->rcv_nxt)) in ProcessTCPPayload()
570 if (TCP_SEQ_GT(pctx->p.seq + pctx->p.payloadlen, cur_stream->rcv_nxt + rcvvar->rcv_wnd)) { in ProcessTCPPayload()
575 pctx, MOS_ON_ERROR); in ProcessTCPPayload()
580 pctx, MOS_ON_ERROR); in ProcessTCPPayload()
613 loff_t off = seq2loff(rb, pctx->p.seq, (rcvvar->irs + 1)); in ProcessTCPPayload()
625 int fflen = tcprb_fflen(rb, pctx->p.payload, pctx->p.payloadlen, off); in ProcessTCPPayload()
635 pctx, MOS_ON_ERROR); in ProcessTCPPayload()
642 pctx, MOS_ON_ERROR); in ProcessTCPPayload()
648 ret = tcprb_pwrite(rb, pctx->p.payload, pctx->p.payloadlen, off); in ProcessTCPPayload()
688 cur_stream->id, pctx->p.payloadlen, in ProcessTCPPayload()
701 struct pkt_ctx *pctx) in Handle_TCP_ST_LISTEN() argument
704 const struct tcphdr* tcph = pctx->p.tcph; in Handle_TCP_ST_LISTEN()
720 cur_stream->rcv_nxt = pctx->p.seq; in Handle_TCP_ST_LISTEN()
731 struct pkt_ctx *pctx) in Handle_TCP_ST_SYN_SENT() argument
733 const struct tcphdr* tcph = pctx->p.tcph; in Handle_TCP_ST_SYN_SENT()
738 if (TCP_SEQ_LEQ(pctx->p.ack_seq, cur_stream->sndvar->iss) in Handle_TCP_ST_SYN_SENT()
740 || TCP_SEQ_GT(pctx->p.ack_seq, cur_stream->snd_nxt) in Handle_TCP_ST_SYN_SENT()
773 int ret = HandleActiveOpen(mtcp, cur_stream, pctx); in Handle_TCP_ST_SYN_SENT()
783 cur_stream->rcv_nxt = pctx->p.seq; in Handle_TCP_ST_SYN_SENT()
811 Handle_TCP_ST_ESTABLISHED(mtcp, cur_stream, pctx); in Handle_TCP_ST_SYN_SENT()
825 struct pkt_ctx *pctx) in Handle_TCP_ST_SYN_RCVD() argument
827 const struct tcphdr* tcph = pctx->p.tcph; in Handle_TCP_ST_SYN_RCVD()
837 cur_stream->snd_nxt = pctx->p.ack_seq; in Handle_TCP_ST_SYN_RCVD()
853 if (pctx->p.ack_seq != sndvar->iss + 1) in Handle_TCP_ST_SYN_RCVD()
854 Handle_TCP_ST_ESTABLISHED(mtcp, cur_stream, pctx); in Handle_TCP_ST_SYN_RCVD()
889 if (pctx->p.seq == cur_stream->pair_stream->sndvar->iss) { in Handle_TCP_ST_SYN_RCVD()
891 pctx->p.seq, cur_stream->pair_stream->sndvar->iss); in Handle_TCP_ST_SYN_RCVD()
906 struct pkt_ctx *pctx) in Handle_TCP_ST_ESTABLISHED() argument
908 const struct tcphdr* tcph = pctx->p.tcph; in Handle_TCP_ST_ESTABLISHED()
914 if (pctx->p.seq == cur_stream->pair_stream->sndvar->iss) { in Handle_TCP_ST_ESTABLISHED()
916 pctx->p.seq, cur_stream->pair_stream->sndvar->iss); in Handle_TCP_ST_ESTABLISHED()
923 cur_stream->id, pctx->p.seq, cur_stream->rcv_nxt, in Handle_TCP_ST_ESTABLISHED()
924 pctx->p.ack_seq, cur_stream->snd_nxt); in Handle_TCP_ST_ESTABLISHED()
925 cur_stream->snd_nxt = pctx->p.ack_seq; in Handle_TCP_ST_ESTABLISHED()
930 if (pctx->p.payloadlen > 0) { in Handle_TCP_ST_ESTABLISHED()
931 if (ProcessTCPPayload(mtcp, cur_stream, pctx)) { in Handle_TCP_ST_ESTABLISHED()
941 ProcessACK(mtcp, cur_stream, pctx); in Handle_TCP_ST_ESTABLISHED()
950 TCP_SEQ_GEQ(pctx->p.seq + pctx->p.payloadlen, cur_stream->rcv_nxt) in Handle_TCP_ST_ESTABLISHED()
952 pctx->p.seq + pctx->p.payloadlen == cur_stream->rcv_nxt in Handle_TCP_ST_ESTABLISHED()
956 cur_stream->rcv_nxt = pctx->p.seq + pctx->p.payloadlen; in Handle_TCP_ST_ESTABLISHED()
969 cur_stream->rcv_nxt, pctx->p.seq + pctx->p.payloadlen, in Handle_TCP_ST_ESTABLISHED()
970 pctx->p.seq, pctx->p.payloadlen); in Handle_TCP_ST_ESTABLISHED()
980 struct pkt_ctx *pctx) in Handle_TCP_ST_CLOSE_WAIT() argument
982 if (TCP_SEQ_LT(pctx->p.seq, cur_stream->rcv_nxt)) { in Handle_TCP_ST_CLOSE_WAIT()
985 cur_stream->id, pctx->p.seq, cur_stream->rcv_nxt); in Handle_TCP_ST_CLOSE_WAIT()
991 ProcessACK(mtcp, cur_stream, pctx); in Handle_TCP_ST_CLOSE_WAIT()
997 struct pkt_ctx *pctx) in Handle_TCP_ST_LAST_ACK() argument
999 const struct tcphdr* tcph = pctx->p.tcph; in Handle_TCP_ST_LAST_ACK()
1001 if (TCP_SEQ_LT(pctx->p.seq, cur_stream->rcv_nxt)) { in Handle_TCP_ST_LAST_ACK()
1004 cur_stream->id, pctx->p.seq, cur_stream->rcv_nxt); in Handle_TCP_ST_LAST_ACK()
1010 ProcessACK(mtcp, cur_stream, pctx); in Handle_TCP_ST_LAST_ACK()
1019 DumpIPPacket(mtcp, pctx->p.iph, pctx->p.ip_len); in Handle_TCP_ST_LAST_ACK()
1029 if (pctx->p.ack_seq == cur_stream->sndvar->fss + 1) { in Handle_TCP_ST_LAST_ACK()
1032 UpdateRetransmissionTimer(mtcp, cur_stream, pctx->p.cur_ts); in Handle_TCP_ST_LAST_ACK()
1042 cur_stream->id, pctx->p.ack_seq, cur_stream->sndvar->fss + 1); in Handle_TCP_ST_LAST_ACK()
1056 struct pkt_ctx *pctx) argument
1058 const struct tcphdr* tcph = pctx->p.tcph;
1060 if (TCP_SEQ_LT(pctx->p.seq, cur_stream->rcv_nxt)) {
1064 cur_stream->id, pctx->p.seq, cur_stream->rcv_nxt);
1071 ProcessACK(mtcp, cur_stream, pctx);
1076 pctx->p.ack_seq == cur_stream->sndvar->fss) ||
1077 pctx->p.ack_seq == cur_stream->sndvar->fss + 1)) {
1081 pctx->p.ack_seq == cur_stream->sndvar->fss + 1) {
1083 cur_stream->sndvar->snd_una = pctx->p.ack_seq;
1084 if (TCP_SEQ_GT(pctx->p.ack_seq, cur_stream->snd_nxt)) {
1086 cur_stream->id, pctx->p.ack_seq);
1087 cur_stream->snd_nxt = pctx->p.ack_seq;
1103 pctx->p.ack_seq, cur_stream->sndvar->fss);
1110 pctx->p.tcph->syn ? "S" : "",
1111 pctx->p.tcph->fin ? "F" : "",
1112 pctx->p.tcph->rst ? "R" : "",
1113 pctx->p.tcph->psh ? "P" : "",
1114 pctx->p.tcph->urg ? "U" : "",
1115 pctx->p.tcph->ack ? "A" : "");
1122 if (pctx->p.payloadlen > 0) {
1123 if (ProcessTCPPayload(mtcp, cur_stream, pctx)) {
1136 TCP_SEQ_GEQ(pctx->p.seq + pctx->p.payloadlen, cur_stream->rcv_nxt)
1138 pctx->p.seq + pctx->p.payloadlen == cur_stream->rcv_nxt
1152 AddtoTimewaitList(mtcp, cur_stream, pctx->p.cur_ts);
1158 cur_stream->rcv_nxt, pctx->p.seq + pctx->p.payloadlen,
1159 pctx->p.seq, pctx->p.payloadlen);
1169 struct pkt_ctx *pctx) argument
1171 const struct tcphdr* tcph = pctx->p.tcph;
1175 ProcessACK(mtcp, cur_stream, pctx);
1183 if (pctx->p.payloadlen > 0) {
1184 if (ProcessTCPPayload(mtcp, cur_stream, pctx)) {
1197 TCP_SEQ_GEQ(pctx->p.seq + pctx->p.payloadlen, cur_stream->rcv_nxt)
1199 pctx->p.seq + pctx->p.payloadlen == cur_stream->rcv_nxt
1207 AddtoTimewaitList(mtcp, cur_stream, pctx->p.cur_ts);
1213 cur_stream->id, pctx->p.seq, pctx->p.ack_seq,
1216 DumpIPPacket(mtcp, pctx->p.iph, pctx->p.ip_len);
1224 struct pkt_ctx *pctx) argument
1226 const struct tcphdr* tcph = pctx->p.tcph;
1230 ProcessACK(mtcp, cur_stream, pctx);
1240 if (pctx->p.ack_seq != cur_stream->sndvar->fss + 1) {
1244 cur_stream->id, pctx->p.ack_seq, cur_stream->snd_nxt,
1246 DumpIPPacketToFile(stderr, pctx->p.iph, pctx->p.ip_len);
1254 cur_stream->sndvar->snd_una = pctx->p.ack_seq;
1256 UpdateRetransmissionTimer(mtcp, cur_stream, pctx->p.cur_ts);
1261 AddtoTimewaitList(mtcp, cur_stream, pctx->p.cur_ts);
1272 struct pkt_ctx *pctx) argument
1274 struct tcphdr* tcph = pctx->p.tcph;
1282 ret = ValidateSequence(mtcp, cur_stream, pctx);
1285 cur_stream->id, pctx->p.seq, cur_stream->rcv_nxt);
1287 DumpIPPacket(mtcp, pctx->p.iph, pctx->p.ip_len);
1297 cur_stream->sndvar->peer_wnd = pctx->p.window;
1300 (uint32_t)pctx->p.window << cur_stream->sndvar->wscale_peer;
1303 cur_stream->last_active_ts = pctx->p.cur_ts;
1311 if (ProcessRST(mtcp, cur_stream, pctx)) {
1318 pctx->p.tcph->fin) {
1324 if (pctx->p.seq == cur_stream->pair_stream->sndvar->fss) {
1326 pctx->p.seq, cur_stream->pair_stream->sndvar->fss);
1334 Handle_TCP_ST_LISTEN(mtcp, cur_stream, pctx);
1338 Handle_TCP_ST_SYN_SENT(mtcp, cur_stream, pctx);
1343 if (tcph->syn && pctx->p.seq == cur_stream->rcvvar->irs)
1344 Handle_TCP_ST_LISTEN(mtcp, cur_stream, pctx);
1346 Handle_TCP_ST_SYN_RCVD(mtcp, cur_stream, pctx);
1347 if (pctx->p.payloadlen > 0 && cur_stream->state == TCP_ST_ESTABLISHED)
1348 Handle_TCP_ST_ESTABLISHED(mtcp, cur_stream, pctx);
1353 Handle_TCP_ST_ESTABLISHED(mtcp, cur_stream, pctx);
1357 Handle_TCP_ST_CLOSE_WAIT(mtcp, cur_stream, pctx);
1361 Handle_TCP_ST_LAST_ACK(mtcp, cur_stream, pctx);
1365 Handle_TCP_ST_FIN_WAIT_1(mtcp, cur_stream, pctx);
1369 Handle_TCP_ST_FIN_WAIT_2(mtcp, cur_stream, pctx);
1373 Handle_TCP_ST_CLOSING(mtcp, cur_stream, pctx);
1381 AddtoTimewaitList(mtcp, cur_stream, pctx->p.cur_ts);
1401 struct pkt_ctx *pctx) argument
1413 EnqueueACK(mtcp, cur_stream, pctx->p.cur_ts, ACK_OPT_NOW);
1416 EnqueueACK(mtcp, cur_stream, pctx->p.cur_ts, ACK_OPT_AGGREGATE);
1419 AddtoControlList(mtcp, cur_stream, pctx->p.cur_ts);
1424 pctx->p.iph->daddr, pctx->p.tcph->dest,
1425 pctx->p.iph->saddr, pctx->p.tcph->source,
1426 0, pctx->p.seq + 1, 0, TCP_FLAG_RST | TCP_FLAG_ACK,
1427 NULL, 0, pctx->p.cur_ts, 0, 0, -1);
1430 pctx->p.iph->daddr, pctx->p.tcph->dest,
1431 pctx->p.iph->saddr, pctx->p.tcph->source,
1432 pctx->p.ack_seq, 0, 0, TCP_FLAG_RST | TCP_FLAG_ACK,
1433 NULL, 0, pctx->p.cur_ts, 0, 0, -1);
1454 struct pkt_ctx *pctx) argument
1456 UpdateRecvTCPContext(mtcp, cur_stream, pctx);
1463 PreRecvTCPEventPrediction(mtcp_manager_t mtcp, struct pkt_ctx *pctx, argument
1466 tcp_rb_overlapchk(mtcp, pctx, recvside_stream);