net/tcp: change the tcp optdata to dynamic arrays

Signed-off-by: chao.an <anchao@xiaomi.com>
This commit is contained in:
chao.an
2021-07-05 17:03:15 +08:00
committed by Xiang Xiao
parent 87bffc190c
commit a5cdc4e69b
2 changed files with 10 additions and 8 deletions
+9 -7
View File
@@ -628,6 +628,7 @@ void tcp_synack(FAR struct net_driver_s *dev, FAR struct tcp_conn_s *conn,
{
struct tcp_hdr_s *tcp;
uint16_t tcp_mss;
int16_t optlen = 0;
/* Get values that vary with the underlying IP domain */
@@ -642,7 +643,7 @@ void tcp_synack(FAR struct net_driver_s *dev, FAR struct tcp_conn_s *conn,
/* Set the packet length for the TCP Maximum Segment Size */
dev->d_len = IPv6TCP_HDRLEN + TCP_OPT_MSS_LEN;
dev->d_len = IPv6TCP_HDRLEN;
}
#endif /* CONFIG_NET_IPv6 */
@@ -657,7 +658,7 @@ void tcp_synack(FAR struct net_driver_s *dev, FAR struct tcp_conn_s *conn,
/* Set the packet length for the TCP Maximum Segment Size */
dev->d_len = IPv4TCP_HDRLEN + TCP_OPT_MSS_LEN;
dev->d_len = IPv4TCP_HDRLEN;
}
#endif /* CONFIG_NET_IPv4 */
@@ -669,11 +670,12 @@ void tcp_synack(FAR struct net_driver_s *dev, FAR struct tcp_conn_s *conn,
/* We send out the TCP Maximum Segment Size option with our ACK. */
tcp->optdata[0] = TCP_OPT_MSS;
tcp->optdata[1] = TCP_OPT_MSS_LEN;
tcp->optdata[2] = tcp_mss >> 8;
tcp->optdata[3] = tcp_mss & 0xff;
tcp->tcpoffset = ((TCP_HDRLEN + TCP_OPT_MSS_LEN) / 4) << 4;
tcp->optdata[optlen++] = TCP_OPT_MSS;
tcp->optdata[optlen++] = TCP_OPT_MSS_LEN;
tcp->optdata[optlen++] = tcp_mss >> 8;
tcp->optdata[optlen++] = tcp_mss & 0xff;
tcp->tcpoffset = ((TCP_HDRLEN + optlen) / 4) << 4;
dev->d_len += optlen;
/* Complete the common portions of the TCP message */