bugfix: fix ICMP specify length issue
This commit is contained in:
parent
7c5a5617a8
commit
9230e0d26d
2 changed files with 4 additions and 3 deletions
|
@ -103,10 +103,10 @@ static int esp_ping_receive(esp_ping_t *ep)
|
|||
int len = 0;
|
||||
struct sockaddr_storage from;
|
||||
int fromlen = sizeof(from);
|
||||
uint16_t data_head = (uint16_t)(sizeof(struct ip_hdr) + sizeof(struct icmp_echo_hdr));
|
||||
|
||||
while ((len = recvfrom(ep->sock, buf, sizeof(buf), 0, (struct sockaddr *)&from, (socklen_t *)&fromlen)) > 0) {
|
||||
if (len >= (int)(sizeof(struct ip_hdr) + sizeof(struct icmp_echo_hdr))) {
|
||||
ep->recv_len = (uint32_t)len;
|
||||
if (len >= data_head) {
|
||||
if (from.ss_family == AF_INET) {
|
||||
// IPv4
|
||||
struct sockaddr_in *from4 = (struct sockaddr_in *)&from;
|
||||
|
@ -126,6 +126,7 @@ static int esp_ping_receive(esp_ping_t *ep)
|
|||
if ((iecho->id == ep->packet_hdr->id) && (iecho->seqno == ep->packet_hdr->seqno)) {
|
||||
ep->received++;
|
||||
ep->ttl = iphdr->_ttl;
|
||||
ep->recv_len = lwip_ntohs(IPH_LEN(iphdr)) - data_head; // The data portion of ICMP
|
||||
return len;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -82,7 +82,7 @@ typedef struct {
|
|||
.count = 5, \
|
||||
.interval_ms = 1000, \
|
||||
.timeout_ms = 1000, \
|
||||
.data_size = 56, \
|
||||
.data_size = 64, \
|
||||
.tos = 0, \
|
||||
.target_addr = ip_addr_any_type, \
|
||||
.task_stack_size = 2048, \
|
||||
|
|
Loading…
Reference in a new issue