-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathrule_parser.c
69 lines (65 loc) · 1.84 KB
/
rule_parser.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#include "rule_parser.h"
const char *stall_text[] = {
"HEAD_LOSS", "UNDETERMINED", "DOUBLE_RETRANSMISSION", "SMALL_CWND", "CONTINUOUS_LOSS", "ACK_DELAY", "ACK_LOSS", "PACKET_DELAY", "CLIENT_IDLE", "CONNECTION_CLOSING", "RECOVERY_LOSS",};
const char *stall_details[] = {
"Stall happens when syn or syn-ack loss.",
"This stall could not be determined.",
"The retransmitted packet is dropped.",
"Packet loss happens when the congestion window is smaller than 4 MSS.",
"All the outstanding packets are lost.",
"Delayed-ACKs at server.",
"ACK loss happens.",
"RTT jitter (current RTT is larger than (\\tau SRTT)).",
"Client uploading another file.",
"Connection closing.",
"Stall happens at the recovery state.",
};
enum stall_type parse_stall(struct tcp_stall_state *tss)
{
if (tss->retrans + tss->spurious > 0) {
if (tss->head == 1)
return HEAD_LOSS;
if (tss->tail == 1)
return CLIENT_IDLE;
if (tss->cur_pkt_retrans > 0) {
if (tss->cur_pkt_spurious + tss->cur_pkt_retrans >= 2) {
return DOUBLE_RETRANSMISSION;
} else {
if (tss->sacked >= 3) {
if (tss->duration + tss->cur_time - tss->third_dup_ack_time > tss->rto + tss->srtt)
return DOUBLE_RETRANSMISSION;
else
return UNDETERMINED;
} else {
// if (tss->ca_state == TCP_CA_RECOVERY_LOSS)
// return RECOVERY_LOSS;
return SMALL_CWND;
}
}
} else {
if (tss->cur_pkt_spurious > 0) {
/*if (tss->ack_delay_time > tss->rto - tss->srtt) {
return ACK_DELAY;
} else {
return ACK_LOSS;
}*/
return ACK_LOSS;
} else {
return UNDETERMINED;
}
}
} else {
if (tss->cur_pkt_dir == DIR_IN) {
if (tss->duration > tss->rto + tss->srtt) {
return CONTINUOUS_LOSS;
} else {
return PACKET_DELAY;
}
} else {
if (tss->last_dir == DIR_IN)
return ACK_DELAY;
else
return CLIENT_IDLE;
}
}
}