@@ -46,6 +46,11 @@ static const int pkt_sizes[PKTS] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, \
46
46
100 , 200 , 300 , 400 , 500 , 600 , 700 , 800 , 900 , 1000 , \
47
47
1100 , 1200
48
48
};
49
+ static bool pkt_received[PKTS] = {false , false , false , false , false , false , false , false , false , false , \
50
+ false , false , false , false , false , false , false , false , false , false , \
51
+ false , false
52
+ };
53
+
49
54
Timer tc_exec_time;
50
55
int time_allotted;
51
56
}
@@ -68,6 +73,7 @@ void UDPSOCKET_ECHOTEST()
68
73
int sent;
69
74
int packets_sent = 0 ;
70
75
int packets_recv = 0 ;
76
+ bool received_duplicate_packet = false ;
71
77
for (unsigned int s_idx = 0 ; s_idx < sizeof (pkt_sizes) / sizeof (*pkt_sizes); ++s_idx) {
72
78
int pkt_s = pkt_sizes[s_idx];
73
79
@@ -85,7 +91,20 @@ void UDPSOCKET_ECHOTEST()
85
91
printf (" [Round#%02d - Sender] error, returned %d\n " , s_idx, sent);
86
92
continue ;
87
93
}
88
- recvd = sock.recvfrom (NULL , rx_buffer, pkt_s);
94
+
95
+ do {
96
+ received_duplicate_packet = false ;
97
+ recvd = sock.recvfrom (NULL , rx_buffer, pkt_s);
98
+ // Check if received duplicated packet
99
+ for (unsigned int d_idx = 0 ; d_idx < PKTS; ++d_idx) {
100
+ if (pkt_received[d_idx] && d_idx != s_idx && recvd == pkt_sizes[d_idx]) {
101
+ printf (" [Round#%02d - Receiver] info, received duplicate packet %d\n " , s_idx, d_idx);
102
+ received_duplicate_packet = true ;
103
+ break ;
104
+ }
105
+ }
106
+ } while (received_duplicate_packet);
107
+
89
108
if (recvd == pkt_s) {
90
109
break ;
91
110
} else {
@@ -94,6 +113,7 @@ void UDPSOCKET_ECHOTEST()
94
113
}
95
114
if (memcmp (tx_buffer, rx_buffer, pkt_s) == 0 ) {
96
115
packets_recv++;
116
+ pkt_received[s_idx] = true ;
97
117
}
98
118
// Make sure that at least one packet of every size was sent.
99
119
TEST_ASSERT_TRUE (packets_sent > packets_sent_prev);
0 commit comments