@@ -46,6 +46,11 @@ static const int pkt_sizes[PKTS] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, \
4646 100 , 200 , 300 , 400 , 500 , 600 , 700 , 800 , 900 , 1000 , \
4747 1100 , 1200
4848 };
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+
4954Timer tc_exec_time;
5055int time_allotted;
5156}
@@ -68,6 +73,7 @@ void UDPSOCKET_ECHOTEST()
6873 int sent;
6974 int packets_sent = 0 ;
7075 int packets_recv = 0 ;
76+ bool received_duplicate_packet = false ;
7177 for (unsigned int s_idx = 0 ; s_idx < sizeof (pkt_sizes) / sizeof (*pkt_sizes); ++s_idx) {
7278 int pkt_s = pkt_sizes[s_idx];
7379
@@ -85,7 +91,20 @@ void UDPSOCKET_ECHOTEST()
8591 printf (" [Round#%02d - Sender] error, returned %d\n " , s_idx, sent);
8692 continue ;
8793 }
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+
89108 if (recvd == pkt_s) {
90109 break ;
91110 } else {
@@ -94,6 +113,7 @@ void UDPSOCKET_ECHOTEST()
94113 }
95114 if (memcmp (tx_buffer, rx_buffer, pkt_s) == 0 ) {
96115 packets_recv++;
116+ pkt_received[s_idx] = true ;
97117 }
98118 // Make sure that at least one packet of every size was sent.
99119 TEST_ASSERT_TRUE (packets_sent > packets_sent_prev);
0 commit comments