This page describes all changes made to the mip_tcp package, TCP, since its release.
6.34 (2019-11-25, 15:58):
- MISRA-C:2004: violations eliminated.
6.33r2 (2019-11-25, 12:30):
- AutoSAR test report added to the package.
6.33 (2019-09-06, 12:00):
- If a TCP frame received in sequence overlapped with a full out-of-sequence TCP frame received earlier then the TCP/IP stack could stop working correctly (IP buffer was present in two different queues).
6.32 (2019-05-30, 09:00):
- NULL pointer access could happen if the registered callback function was called by the TCP module just after removing it (due to close or interface drop).
6.31 (2019-03-11, 09:00):
- Corrected checking of maximum value for received sequence number.
6.30 (2019-02-13, 16:55):
- MISRA-C:2004: violations eliminated.
6.29 (2019-01-21, 11:30):
- Overlapped messages are now merged to existing data (previously, old data was dropped).
- Corrected sending of ACK for incorrect packets. (Previously ACK was send for ACK that was smaller than current sequence number).
6.28 (2019-01-16, 12:45):
- Added data handling in final ACK of three way handshake.
6.27 (2018-12-14, 12:00):
- MISRA-C:2004: violations eliminated.
6.26 (2018-10-17, 17:59):
- Incoming TCP packets might previously be incorrectly treated as invalid. This forced the sending node to resend the packets unnecessarily, causing performance issues.
6.25 (2018-09-19, 12:41):
- Added IP aliasing support for IPv4.
6.24r2 (2018-08-29, 18:09):
- Document HTML link added to the documentation folder.
- History and document files renamed to the package name.
6.24 (2018-07-27, 13:15):
- Corrected Sequence number/ acknowledge number checking for incoming packets to conform with RFC 792.
- Corrected Reset handling: reset is valid if sequence number is correct, or if state is SYN-SENT and acknowledge number is correct.
6.23 (2018-07-10, 08:45):
- Added sending of Keepalive ACK, when keepalive packet received without data.
- Corrected window length calculation (previously an overflow could occur).
- Corrected insertion of out of sequence packets (previously only first packet from RX acknowledge wait queue was inserted).
6.22 (2018-05-16, 08:11):
- Valid SEQ number sent with RST packet when out-of-sequence ACK was received in LISTEN state.
- Sending RST when out-of-sequence ACK was received in SYN-SENT state.
6.21 (2018-03-19, 8:35):
- Corrected ACK/SEQ number check in FIN-WAIT-1/FIN-WAIT-2 state.
- Changes related to MISRA static analysis.
6.20 (2018-03-19, 14:30):
- Corrected ACK number check when receiving RST+ACK packet.
6.19 (2018-03-06, 14:00):
- Changed tce_unack_len to uint32_t to enable it to handle maximum unacknowledged length of 0xFFFFu.
6.18 (2018-03-05, 13:00):
- Added generation of IP_NTF_TX_RDY to tcp_tx_ready_ntf() (in some situations this function waited until timeout, because IP_NTF_TX_RDY was not generated).
- Added extra sending of Window expand window when last send window size will be lower than 2*unacknowledged data length.
- Corrected SEQ and ACK numbers when simultaneous close.
- Corrected RST handling in SYN-RECEIVED state.
- RST is now issued when TCP packet is received after LAST-ACK becomes CLOSED state.
- SEQ number in ACK packet is now correct when TCP packet is received in TIME-WAIT state.
- TCP DATA packet is dropped when received in SYN-SENT state (no ACK is sent).
- TCP DATA packet is dropped when received in CLOSE-WAIT state (no ACK is sent).
6.17 (2018-02-26, 11:04):
- TCP_KEEPALIVE_IDLE_TIMEOUT set to high (>65535) values caused TCP keep-alive malfunction and compiler warnings.
6.16 (2018-01-19, 15:00):
- Corrected window size calculation for fragmented packets.
6.15 (2018-01-16, 15:45):
- Corrected error during handling of data during FIN-WAIT-1, FIN-WAIT-2. This error caused IP buffer to be sent twice.
6.14 (2017-12-21, 12:30):
Checking of acknowledgment and sequence number in states FIN-WAIT-1, FIN-WAIT-2, CLOSE-WAIT, CLOSING, and LAST-ACK.
- State LAST-ACK now transits to CLOSED after receiving a correct acknowledgment.
- State FIN-WAIT-1 now sends correct sequence in acknowledgment to received FIN (simultaneous connection close).
- ESTABLISHED state acknowledges packets with acknowledgment set to outside of receiving window.
- Now responds to data received during FIN-WAIT-1, FIN-WAIT-2 with an RST message.
6.13 (2017-11-23, 12:02):
- Checks acknowledgment and sequence number of RST packets and drops if invalid.
- Checks acknowledgment and sequence number of ACK packets and replies with correct numbers in ESTABLISHED, FIN-WAIT-1, FIN-WAIT-2, and CLOSING states.
- Now sends RST if receives an invalid ACK in SYN-RCVD state.
6.12 (2017-10-27, 11:24):
- Added support for enabling TCP keep-alive mechanism on individual connections.
6.11 (2017-08-15, 11:48):
- New API function tcp_get_local_mss_window() added to get local MSS and Receive windows size on a connection.
6.10 (2017-06-14, 07:11):
- TCP connection can be accepted when it is already in CLOSE WAIT state and there is received data.
- Half open connections with SYNC bit are now rejected.
- Send Reset function now correctly handles packets with TCP options.
- Added detection of half-open connections.
- Corrected destination IP address of re-transmitted packets.
- Corrected tcp_connect(): created connection is aborted if connection timeouts.
- Cleared VC++ compilation warnings about potentially uninitialized variables.
- Corrected compilation warnings related to tcp_handle_rx_pkt().
- Local address is now taken from incoming connection for IPv6.
- ip_route_get_ip_addr() is called only once for IPv6 connection to prevent changing of local address during connection.
- compilation warnings eliminated.
- TCP header options NOP and EOL handling implemented.
- warnings eliminated.
- IP address type is changed in tcp_connect() function.
- updated to work with IP base major version 6.
- tcp_connect() function parameters changed, local port can be defined.
- updated to work with IP base major version 5.
- Checksum calculation and verification can be switched separately for protocols.
- Sending of RST flagged packets was fixed.
- output parameter added to tcp_rx_ready() which reports the amount of unread bytes of a connection.
- required package version checks added.
- tcp_get_buf() function parameters changed.
- never send more than MTU size packet to a remote node (to make sure TCP packets do not need to be fragmented).
- retry sending a missed TCP control datagram, instead of waiting forever for a buffer if it's not immediately available. This fix is required because all timer related operations could block in case a buffer was not available.
- added TCP_LOCAL_PORT_COUNT to the configuration file. This way initiated connections will rotate the port number between TCP_LOCAL_PORT_BASE and TCP_LOCAL_PORT_BASE + TCP_LOCAL_PORT_COUNT - 1. The original implementation used fixed port numbers from TCP_LOCAL_PORT_BASE using the connection index.
- tcp_set_ip_opt() function introduced.
- abort connection from tcp_disconnect if called when connection establishment is in progress.
- corrected IP_MTU_SIZE buffer size request for tcp_get_buf().
- added the option to set MSS, window size and max. unacknowledged length for every interface.
- set IP TTL for sent TCP packets.
- introduced HCC_UNUSED_ARG for unused arguments.
- timeouts rounded up to higher values.
- updated to work with the new routing module.
- comments fixed.
- TCP will not send RST datagram in case a connection can't be accepted because port is not opened, or max. number of connections on the port is reached or the system ran out of free connections.
- Further TCP packets could be sent even if remote window size shrank to zero.
- added mutex lock/unlock to ip_tcp_delete() where required as mutex lock/unlock was removed from ip_stack_delete().
- The system could lockup if in RESET state a datagram was received for that connection.
- Packet re-transmission was not executed anymore if sending the packet failed once (this could mean that if ETH cable was unplugged during transmission, packet sending was never retried).
- tcp_connection_state() can return IP_DISCONNECT_WAIT.
- multi-interface compliant.
- duplicated ACK packets occurred if smaller than TCP_MAX_UNACK_LEN packet was received and a packet was sent before TCP_RX_UNACK_TIMEOUT.
- converted to use IP buffer notification if buffer is not available when a control datagram needs to be sent.
- IP buffer release fixed at unexpected connection close/reset.
- First RX notification could have been lost after tcp_accept().
- If an opened connection was closed before tcp_accept() could obtain the connection then it was corrupted. This only happened with OS.
- lockup could occur if connection close/reset arrived before the sent package was acknowledged.
- Zero Window Probe added.
- don't abort connection if send failed, keep retrying.
- general retries added for initializing and closing connection.
- start, stop and delete added.
- comments changed, beautified.
- TCP options obtained incorrectly at tcp_connect() from the SYN+ACK reply.
- Initial release.