tcp/conn: request arp before the 3-way handshake
Since the request address was not properly resolved before the handshake, every time of connection, the handshake data will be overwitten into arp packet and retransmitted until the next tcp timer. Request the arp address before the handshake to avoid the retransmission. Change-Id: I80118b9a8096c126c8e16cdf2f7b3d98fca92437 Signed-off-by: chao.an <anchao@xiaomi.com>
This commit is contained in:
parent
027ffa1530
commit
0887203c57
@ -63,6 +63,8 @@
|
||||
#include "devif/devif.h"
|
||||
#include "inet/inet.h"
|
||||
#include "tcp/tcp.h"
|
||||
#include "arp/arp.h"
|
||||
#include "icmpv6/icmpv6.h"
|
||||
|
||||
/****************************************************************************
|
||||
* Pre-processor Definitions
|
||||
@ -1229,6 +1231,38 @@ int tcp_connect(FAR struct tcp_conn_s *conn, FAR const struct sockaddr *addr)
|
||||
goto errout_with_lock;
|
||||
}
|
||||
|
||||
#if defined(CONFIG_NET_ARP_SEND) || defined(CONFIG_NET_ICMPv6_NEIGHBOR)
|
||||
#ifdef CONFIG_NET_ARP_SEND
|
||||
#ifdef CONFIG_NET_ICMPv6_NEIGHBOR
|
||||
if (conn->domain == PF_INET)
|
||||
#endif
|
||||
{
|
||||
/* Make sure that the IP address mapping is in the ARP table */
|
||||
|
||||
ret = arp_send(conn->u.ipv4.raddr);
|
||||
}
|
||||
#endif /* CONFIG_NET_ARP_SEND */
|
||||
|
||||
#ifdef CONFIG_NET_ICMPv6_NEIGHBOR
|
||||
#ifdef CONFIG_NET_ARP_SEND
|
||||
else
|
||||
#endif
|
||||
{
|
||||
/* Make sure that the IP address mapping is in the Neighbor Table */
|
||||
|
||||
ret = icmpv6_neighbor(conn->u.ipv6.raddr);
|
||||
}
|
||||
#endif /* CONFIG_NET_ICMPv6_NEIGHBOR */
|
||||
|
||||
/* Did we successfully get the address mapping? */
|
||||
|
||||
if (ret < 0)
|
||||
{
|
||||
ret = -ENETUNREACH;
|
||||
goto errout_with_lock;
|
||||
}
|
||||
#endif /* CONFIG_NET_ARP_SEND || CONFIG_NET_ICMPv6_NEIGHBOR */
|
||||
|
||||
/* Initialize and return the connection structure, bind it to the port
|
||||
* number. At this point, we do not know the size of the initial MSS We
|
||||
* know the total size of the packet buffer, but we don't yet know the
|
||||
|
Loading…
Reference in New Issue
Block a user