@@ -40,6 +40,7 @@ EventFlags signals;
40
40
static const int BUFF_SIZE = 1200 ;
41
41
char rx_buffer[BUFF_SIZE] = {0 };
42
42
char tx_buffer[BUFF_SIZE] = {0 };
43
+ char rx_last[BUFF_SIZE] = {0 };
43
44
44
45
static const int PKTS = 22 ;
45
46
static const int pkt_sizes[PKTS] = {1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , \
@@ -68,6 +69,7 @@ void UDPSOCKET_ECHOTEST()
68
69
int sent;
69
70
int packets_sent = 0 ;
70
71
int packets_recv = 0 ;
72
+ bool received_duplicate_packet = false ;
71
73
for (unsigned int s_idx = 0 ; s_idx < sizeof (pkt_sizes) / sizeof (*pkt_sizes); ++s_idx) {
72
74
int pkt_s = pkt_sizes[s_idx];
73
75
@@ -76,6 +78,7 @@ void UDPSOCKET_ECHOTEST()
76
78
77
79
for (int retry_cnt = 0 ; retry_cnt <= 2 ; retry_cnt++) {
78
80
memset (rx_buffer, 0 , BUFF_SIZE);
81
+ memset (rx_last, 0 , BUFF_SIZE);
79
82
sent = sock.sendto (udp_addr, tx_buffer, pkt_s);
80
83
if (check_oversized_packets (sent, pkt_s)) {
81
84
TEST_IGNORE_MESSAGE (" This device does not handle oversized packets" );
@@ -85,7 +88,17 @@ void UDPSOCKET_ECHOTEST()
85
88
printf (" [Round#%02d - Sender] error, returned %d\n " , s_idx, sent);
86
89
continue ;
87
90
}
88
- recvd = sock.recvfrom (NULL , rx_buffer, pkt_s);
91
+
92
+ do {
93
+ received_duplicate_packet = false ;
94
+ recvd = sock.recvfrom (NULL , rx_buffer, pkt_s);
95
+ // Check if received duplicated packet
96
+ if (s_idx > 0 && recvd == pkt_sizes[s_idx - 1 ] && memcmp (rx_last, rx_buffer, recvd) == 0 ) {
97
+ printf (" [Round#%02d - Receiver] info, received duplicate packet, returned %d\n " , s_idx, recvd);
98
+ received_duplicate_packet = true ;
99
+ }
100
+ } while (received_duplicate_packet);
101
+
89
102
if (recvd == pkt_s) {
90
103
break ;
91
104
} else {
@@ -94,6 +107,7 @@ void UDPSOCKET_ECHOTEST()
94
107
}
95
108
if (memcmp (tx_buffer, rx_buffer, pkt_s) == 0 ) {
96
109
packets_recv++;
110
+ memcpy (rx_last, rx_buffer, pkt_s);
97
111
}
98
112
// Make sure that at least one packet of every size was sent.
99
113
TEST_ASSERT_TRUE (packets_sent > packets_sent_prev);
0 commit comments