The Embedded Experts

Release notes for emNet V3.54.1

Version 3.54.1 [11. Dec 2023]

Program corrections

  1. "TaskPrio.h" file was missing from the shipment. Fixed.

Version 3.54.0 [04. Dec 2023]

New Features

  1. Core: Added IP_AddInterfaceErrorHook() function which allow to set a callback for interface initialization errors.

Improvements

  1. Drivers: For multiple interfaces, when the init failed on one of the interfaces, all interfaces could not be used. Now the init is successful if at least one interface works and the stack starts normally. An optional callback can be used for init failures: IP_AddInterfaceErrorHook()
  2. ARP: With IP_ARP_SNIFF_ON_RX IPs from multicast or broadcast packets are no longer collected.
  3. MQTT samples: Added support for emSSL.
  4. WebSocket samples: Added support for emSSL.

Program corrections

  1. FTP client (optional add-on) and FTP server (optional add-on): Added error handling for _GetLen, _ReadAt and _ForEachDirEntry.
  2. File system abstraction layers: _ReadAt would always return 0 instead of an error or the number of bytes read. Fixed.
  3. File system abstraction layers: _ForEachDirEntry return type changed from void to int. void implementations of _ForEachDirEntry are obsolete now. Updated emFile API accordingly. Please check the migration guide if you are using a custom file system abstraction layer.
  4. emFile file system abstraction layer: _GetLen would return a 4GB length instead of an error. Fixed.
  5. Webserver: HTTP header fields were parsed case-sensitive. RFC 7230 states that header fields should be case-insensitive. Fixed.
  6. TCP: In the very rare case where an ARP resolution failed (e.g. because the ARP table was full) for an IP which received packets from an ongoing TCP connection the packet would be discarded and the next packet would be sent out with a wrong TCP sequence number. Fixed.
  7. TCP: When send() was executing a transfer consisting of multiple packets and one or multiple packets were sent, but an error occurred during sending one of the later packets send() returned SOCKET_ERROR instead of the number of bytes sent. Fixed.
  8. mDNS: In rare cases when the compiler placed an array for the IPv6 address in unaligned memory it was possible for subsequent access to the array during the reception of an mDNS message to cause a hardfault. Fixed.

Version 3.52.0 [28. Sep 2023]

New Features

  1. Added support for ADIN2111 (fixed port configuration only).

Improvements

  1. Driver: Synopsys (non-QOS): GD32F30x and GD32F20x chips have an issue where the ETH controller will stop generating new interrupts after RX descriptors with the DERR (descriptor error bit) have been read. This only happens in cases of heavy flooding. Workarounds have been added to make sure the driver recovers from the unresponsive state.

Program corrections

  1. Core: select() would block indefinitely for timeout == 0, which was the same behaviour as for timeout == -1. select() with timeout == 0 should not block an return immediately. Fixed.
  2. Core: CM_IP_cksum() incorrectly evaluated the carry flag when calculating the checksum. The function must ignore the carry flag. Fixed.
  3. MQTT: The user callback for SUBACK would always report the MQTT PacketID as 0 instead of the actual PacketID. Fixed.

Version 3.50.5 [27. Jun 2023]

New Features

  1. Core: New IP_ACD_STATE states IP_ACD_STATE_ACTIVE_WAIT_BEFORE_BG_PROBES and IP_ACD_STATE_ACTIVE_BG_PERIOD_UPDATE added.
  2. Core: New IP_ACD_EX_CONFIG.InitState member added to allow starting directly in IP_ACD_STATE_ANNOUNCE_SEND_GARP state for EtherNet/IP QuickConnect mode.
  3. Core: New API added:
    • IP_ACD_EndAnnounce()
    • IP_ACD_UpdateBackgroundPeriod()
  4. FTP server (optional add-on): Added IP_FTPS_UseRenameToFullPath() in case a filesystem is used that requires the full path of the new name in a rename operation rather than only the new name alone.
  5. Web server (optional add-on): New progress status WEBS_PROGRESS_STATUS_USER_AUTH added.

Improvements

  1. Web server (optional add-on): MIME type detection and usage based on the internal list or using user registered MIME types was case sensitive. Is now case insensitive to work with lower-case and upper-case extensions.
  2. Web server (optional add-on): For an unknown extension the MIME type "Unknown" was sent. Now omits the "Content-Type:" header field in a response if unknown to allow the browser to try to guess the MIME type.

Program corrections

  1. Core: Using non-blocking send()/sendto() returns with SOCKET_ERROR instead of NumBytesSent if a part of the data has actually already been sent out. Introduced with V3.50.3. Fixed.
  2. Core: Overwriting the IP_PANIC() macro to be also used in a release configuration ("IP_DEBUG = 0") leads to executing IP_PANIC() for successful memory allocations as well. Fixed.
  3. Driver: Kinetis: New code introduced with V3.50.0 might access a NULL pointer if an interface using this driver is used as a hardware interface for a virtual interface like VLAN. Fixed.
  4. FTP client (optional add-on): If FTPC_MODE_IMPLICIT_TLS_REQUIRED is selected, the IP_FTPC_API.pfSetSecure application callback also gets called in case of not being able to connect to the server and then passes a NULL socket handle to the callback. Fixed.
  5. SNMP agent (optional add-on): Possible unaligned access when using SNMPv3 USM PRIV(acy). Fixed.
  6. Web server (optional add-on): In the Basic/Digest authentication access lists, later entries with "lower" path entries can take priority over earlier more specific/"deeper" entries. Fixed.
    The intended behavior is to have "deeper" path entries above "lower" path entries in the access list to allow the list of users that have access to shrink the deeper the access into the system gets.

Version 3.50.3 [2. Jun 2023]

New Features

  1. Driver: Kinetis: New driver specific API added:
    • IP_NI_KINETIS_Config_MSCR_MII_SPEED()
    • IP_NI_KINETIS_Config_MSCR_DIS_PRE()
    • IP_NI_KINETIS_Config_MSCR_HOLDTIME()

Improvements

  1. Core: Added additional checks for the DHCP client such as checking if a gateway provided by the DHCP server is actually reachable via the received IP address and subnet mask.
  2. Core: Added additional checks for TCP to check if a previously selected interface would be selected again for an ongoing connection. This could turn out to be false in case the configuration changes.
  3. Core: Removed/replaced IP_ERR_NO_MEM with the also already exiting IP_ERR_NOMEM . A compatibility macro has been added.
  4. Web server (optional add-on): Improved handling of IP_WEBS_AddVFileHook() with encoding other than HTTP_ENCODING_RAW .
    While not forbidden, using encodings other than RAW were not intended to be used and were not handled correctly in all cases.
    Using encodings other than RAW with VFile hooks should now be supported as well.

Program corrections

  1. Core: Calling send()/sendto() might not set the internal socket error in some cases when returning SOCKET_ERROR and might additionally simply return 0 when being used in non-blocking mode.
    While returning 0 bytes sent in non-blocking mode is technically valid, not settings the socket error internally makes it hard to figure out the reason for this situation. Fixed.
  2. Core: When the DHCP client receives a packet with invalid data it should utilize a wait period of at least 10 seconds before falling back to INIT and sending a DISCOVER again, preventing it from spamming the network. While already implemented, some places did not make use of this procedure. Fixed.
  3. Core: The stack hangs if more than one Ethernet type is added (e.g. IPv6 and PTP). Fixed.
  4. Driver: Kinetis: The driver tables IP_Driver_iMXRT11xx, IP_Driver_iMXRT11xx_ENET and IP_Driver_iMXRT11xx_ENET_1G use a clock divider too low for the default assumed Ethernet bus clock of 198 MHz, resulting in PHY MDC speeds above 2.5 MHz.
    The default divider (assuming 198 MHz bus clock) is changed to the value 39 (previously 32). In addition to the new default, driver specific API is added to allow to apply a custom divider.
  5. Driver: Kinetis: The driver tables IP_Driver_iMXRT11xx, IP_Driver_iMXRT11xx_ENET and IP_Driver_iMXRT11xx_ENET_1G use a configuration that disables the PHY preamble which might not work with some PHYs not capable of omitting the preamble. By default the PHY preamble is now enabled and can be disabled using tghe newly added driver specific API.

Version 3.50.2 [27. Mar 2023]

New Features

  1. Core: Added IP_SOCKET_AbortRead() to be able to abort a read call (recv(), recvfrom(), ...) on a blocking socket from another task.
  2. Driver: Added ST STM32H5xx support to generic Synopsys QOS driver.
  3. Web server (optional add-on): Added IP_WEBS_ConfigIndexRules() to be able to configure automatic index autocomplete of "/some/folder/" to "/some/folder/index.htm" and other variations.

Improvements

  1. Web server (optional add-on): Added method detection for "PUT", "PATCH" and "DELETE" for better REST API usability.

Program corrections

  1. NTP client (optional add-on): Calling IP_NTP_GetTime() or IP_NTP_GetTimestamp() before calling IP_NTP_CLIENT_Start() once or registering another get-time callback can lead to a NULL pointer access. Fixed.

Version 3.50.1 [3. Mar 2023]

Program corrections

  1. Core: The typedef prototype for the IP_WIFI_pfOnSignalChange callback is missing a "const" modifier. Fixed.
  2. Driver: Fixed the following drivers using the no longer existing IP_OS_WaitItem() instead of IP_OS_WaitItemTimed() :
    • ADI ADIN1110
    • SiLabs/Redpine Signals RS9113
  3. Driver: Various drivers are not using the macro variant IP_OS_DISABLE_INTERRUPT()/IP_OS_ENABLE_INTERRUPT() but directly IP_OS_DisableInterrupt()/IP_OS_EnableInterrupt() . This might lead to unwanted effects when the user intends to override the macros for some reason. Fixed.
  4. Web server (optional add-on): Content encoding like "gzip" offered in a request is incorrectly applied to manually created response headers when using IP_WEBS_SendHeader() or IP_WEBS_SendHeaderEx() in a callback. Fixed.

Version 3.50.0 [15. Feb 2023]

New Features

  1. Core: New API added:
    • IP_TASK_Init()
    • IP_TASK_Exec()
    • IP_TASK_WaitForEvent()
    • IP_DTASK_Init()
    • IP_DTASK_ExecAll()
    • IP_DTASK_WaitForEvent()
    • IP_DTASK_GetTimeout()
    • IP_RXTASK_Init()
    • IP_RXTASK_Exec()
    • IP_RXTASK_WaitForEvent()
    • IP_PHY_ReadReg()
    • IP_PHY_WriteReg()
  2. Core: Renamed IP_DTASK_ConfigTimeout() to IP_DTASK_SetTimeout() . A compatibility macro is in place.
  3. Core: New mode flag IP_PHY_MODE_NO_AUTONEG added for IP_SetSupportedDuplexModes() and IP_PHY_ConfigSupportedModes() .
  4. Core: Updated all IP_OS layers. The IP_VERSION define is used so the updated IP_OS layers work for old and new versions of the stack. The old version will be removed some time in the future.

Improvements

  1. Driver: Added a 10 milliseconds timeout for PHY access routine wait loops to all drivers applicable.

Program corrections

  1. Web server (optional add-on): The IP_UTIL_BASE64_*() API sometiems returns 0 for all data processed when it is not. The return values for all of these APIs had to be changed (return value 0 removed) to fix the API in useful way.

Version 3.42.10 [13. Dec 2022]

Improvements

  1. DHCP server (optional add-on): When halting the DHCP server if it has not been configured once (independent of starting it once or never) the IP_DeInit() exit callback for this module does not get called.
    This can lead to problems when starting the DHCP server after initializing the stack again.
    Improved against user calling API in unexpected order by adding the exit callback from a different location.

Program corrections

  1. FTP client (optional add-on): Multi line responses cause the API to return with an error although the operation succeeded. Fixed.
  2. PTP OC Simple Master (optional add-on): FOLLOW-UP messages are not sent with the "sequenceId" of the corresponding SYNC message. This can cause the FOLLOW-UP to be dropped by the Slave if this is correctly checked. Fixed.
  3. PTP OC Simple Master (optional add-on): When responding to a DELAY-REQ with a DELAY-RESP, the "domainNumber" and "correctionField" values are not copied which causes the delay calculations of Transparent Clocks to be dropped one sided, causing wrong Mean Path Delay (MPD) calculations. Fixed.
  4. PTP OC Slave (optional add-on): When a Transparent Clock (TC) adds its residence time to the SYNC message in TWO-STEP mode instead of the FOLLOW-UP, this value gets dropped and results in a constant one sided calculation error. Fixed.
  5. Web server (optional add-on): A missing initialization in IP_WEBS_OnConnectionLimit() can lead to the resource error not being sent out to the client. Fixed.

Version 3.42.9 [10. Nov 2022]

Improvements

  1. Improved alloc/free log/warn outputs when the message type IP_MTYPE_ALLOC is enabled.

Program corrections

  1. MQTT client (optional add-on): When a PUBLISH message was received with zero payload length and zero properties length it was possible for the client to try and read an additional byte from the server. Fixed.
  2. DHCP server (optional add-on): When calling IP_DHCPS_ConfigPool() with the same DHCP address pool size as before, a new pool is allocated but the memory for the old pool is not freed. Fixed.
    Workaround: When configuring a different pool size the memory is freed correctly. A variable that is XOR-ed with 1 can be used to alternate between "POOL_SIZE" and "POOL_SIZE + 1" for each call of IP_DHCPS_ConfigPool() .

Version 3.42.8 [26. Oct 2022]

New Features

  1. Driver: Added support for GigaDevice GD32F30x to generic Synopsys driver.

Program corrections

  1. Driver: Synopsys (non-QOS): Upon re-init the wrong bit was set if promiscuous mode was enabled before. Due to the availability of hash filters with all devices supported by this driver the stack however never needed to activate promiscuous mode. Fixed.
  2. Application examples: SEGGER_ParseIP() and related types are not available in the SEGGER folder. Updated SEGGER folder with new version. Fixed.
  3. MQTT client (optional add-on): IP_MQTT_CLIENT_Publish() incorrectly returned with an error when the PUBLISH message to be sent was larger than the MQTT buffer and there were no properties used (MQTTv5 only). Fixed.

Version 3.42.7 [14. Oct 2022]

New Features

  1. Core: New API added:
    • IP_DHCPC_ConfigRequestLeaseTime()
    • IP_IGMP_JoinGroup_AutoRejoin()
  2. Core: uCOS-III OS abstraction layer is available.
  3. PTP OC Simple Master (optional add-on): New API added:
    • IP_PTP_MASTER_Config()
  4. SNMP agent (optional add-on): Optional support and API for SNMPv3 added.
  5. SNMP agent (optional add-on): Renamed IP_SNMP_AGENT_ProcessRequest() to IP_SNMP_AGENT_ProcessMessage() to better reflect SNMPv3 usage. A compatibility macro is in place.

Improvements

  1. Core: Setting MAC address filters during IP_Init() has been moved internally to allow calling some API like IP_MDNS_SERVER_Start() (that uses multicast and alters the filters for this reason) from IP_X_Config() . Previously this would access driver registers before the driver is enabled.
  2. Core: According to RFC 793 "Transmission Control Protocol", a half-opened or fully opened but not yet accept()-ed TCP connection shall respond with a regular disconnect FIN packet when the parent socket gets closed in these states.
    Previously a RST response was sent which results in the same outcome. Responding with FIN however the nicer way to close the connection and more true to the RFC.
  3. Core: IP_SetMTU() is now allowed to increase the MTU again, for example if it has been lowered by the application before.
  4. Core: Rewrite of the IGMP module for more strict RFC 2236 compatibility.
  5. Core: The "all-systems"/"all-hosts" IGMP group 224.0.0.1 no longer needs to be joined manually. IP_IGMP_Join() calls for this group are silently discarded for backwards compatibility.
  6. Driver: Synopsys QOS: Removed the speculative DSB call added in V.3.42.6 due to finding the root cause of the problem originally investigated.
  7. Driver: Synopsys QOS: Running the application from (internal) RAM with high CPU utilization can cause quite some stress to the AHB bus which sometimes seems to lead to problems when the Ethernet DMA needs to access the bus, ultimately ending in the Ethernet transmit DMA being stopped.
    Added a recovery strategy for smaller AHB problems that restarts the transmit DMA again. This strategy is not able to recover all AHB problems!
    A situation can occur where the transmit DMA gets completely stuck and can not be recovered except for a driver re-init. As this would occur quite often, this is not a suitable solution.
    You can check if you experience a potential AHB problem by checking the "_SYNOPSYS_QOS_NI_Statics[IFaceId].pConfig->Stats.TxStopCnt" counter in an IP_DEBUG configuration. If no other driver resets occur due to other problems this counter should be 0.
    Please be aware that the counter was used differently before V3.42.7 as it was counting more than just the DMA stop condition.
    If you suspect a problem based on the bus access, please try to use the "TSF" (Transmit-Store-Forward) mode by calling "IP_NI_SYNOPSYS_QOS_ConfigTransmitStoreForward(IFaceId, 1)" in the configuration.
  8. Driver: Synopsys QOS: Added a distinction in the code that uses the old (and according toc ustomer feedback) more reliable method when queuing packet for sending-
    While the new method should work in most scenarios, according to customer feedback it seems that the DMA might react strange in some cases like resending an already sent frame.
    The new method however is still required for a race condition handling of the DMA and very small driver configurations (e.g. using only 1 Tx descriptor/buffer).
    As the old method might be more reliable, the new method is now only used for these exceptional cases.
    In case of doubt set the number of Tx descriptors/buffers using IP_NI_SYNOPSYS_QOS_ConfigNumTxBuffers() to the total amount of PacketBuffers in the system plus one.
    This then prevents these conditions to occur at all.
  9. Web server (optional add-on): Added a late check to make sure chunked encoding is always terminated if it has been used before.

Program corrections

  1. Core: A modification introduced in V3.42.3 for improved statistics might truncate or pad packets with more data if the packet is queued for sending zero-copy from the TxSocketBuffer but more data gets added to the TxSocketBuffer before the driver actually sends the packet. Fixed.
  2. Core: When using the socket options SO_DONTROUTE/MSG_DONTROUTE, the code to handle an error in case the message needed routing introduced in V3.42.0 does not free packets, leading to eventually running out of buffers if this happens multiple times. Fixed.
  3. Core: IGMP was not implemented entirely correct which can cause problems in some situations. Fixed by rewriting the IGMP module according to RFC 2236.
  4. Driver: Some memory mapped Ethernet controller might be subject to unordered read/write access due to missing "volatile" for HW access. Fixed. Affected drivers:
    • Davicom DM9000
    • SMSC/Microchip LAN91C111
    • SMSC/Microchip LAN9115
    • SMSC/Microchip LAN9118
    • NIOS2 GMAC II
  5. Driver: Synopsys PTP HW: The _cbGetTime() might access the two timestamp registers while they are updated independently. Fixed by waiting for SET/UPDATE bit cleared by hardware.
  6. PTP OC Slave (optional add-on): A race condition between applying the correction after a SYNC and the MeanPathDelay (MPD) measurement can introduce a small additional jitter into the offset calculation if the MPD is not very stable. Fixed.
  7. SNMP agent (optional add-on): Corrected API typo IP_SNMP_AGENT_AddInformReponseHook() which should be named IP_SNMP_AGENT_AddInformResponseHook() . A compatibility macro is in place.
  8. Web server (optional add-on): The internal "use chunked encoding" flag is not cleared when the connection is reused. Fixed.

Version 3.42.6 [23. May 2022]

Improvements

  1. Core: Allow non stream protocols like UDP to send zero length payloads for better RFC compatibility.
  2. Core: Added further checks against being utilized in malicious network flooding when a broadcast or multicast IP is used as sender address.
  3. Driver: Synopsys QOS: Added a DSB call when disabling Tx interrupts to make sure this really gets executed before we continue to avoid a potential race condition.
  4. FTP server (optional add-on): If the client sends a command that does not require a data connection (e.g.CWD) after requesting a passive data connection via PASV/EPSV, the command is not answered as we wait for a data connection to be established first. Although no standard client behaves like that it is technically not forbidden by the RFC and is now supported.

Program corrections

  1. Core: On big endian targets, instead of the local network multicast TTL of 1 (default) the global network multicast TTL of 64 (default) is used. Fixed.
  2. Core: Binding the same local UDP port to a different interface (previous bind() was not for ANY address) without the socket option SO_REUSEADDR fails while it should not. Fixed.
  3. Driver: Synopsys QOS: Upon a driver re-init it can happen that the PHY gets confused and is no longer working. Fixed by detection of the need for a re-init at all and re-initializing the PHY in this case as well.
  4. FTP server (optional add-on): If a passive data connection was requested using PASV/EPSV, the socket to listen to was created but the connection died before we are able to call accept() or no connect attempt was done, it is possible that the application disconnect callback was executed with an invalid handle. Fixed.
  5. FTP server (optional add-on): List commands with a path parameter of "." can cause an out of bounds read access. Fixed.
  6. IPv6 (optional add-on): When IP_IPV6_Add() is called multiple times with IP_ALLOW_DEINIT enabled it creates an endless loop of OnExit handlers that get stuck when IP_DeInit() is used. Fixed.
  7. MQTT client (optional add-on): IP_MQTT_CLIENT_Unsubscribe() did not work with MQTTv5. Fixed.
  8. MQTT client (optional add-on): PacketIDs from received PUBLISH packets with QoS2 were not read correctly and were subsequentially not confirmed via PUBREL/PUBCOMP correctly. Fixed.
  9. PPP/PPPoE (optional add-on): When using IP_DeInit() the OnExit handler is not added upon re-initializing the stack. Fixed.
  10. SMTP client (optional add-on): Sending attachments with SMTPC_OUT_BUFFER_SIZE not being a multiple of 3 (SMTPC_OUT_BUFFER_SIZE by default is 256 which is not) might corrupt the base64 encoded attachment due to a bug in IP_UTIL_BASE64_EncodeChunk() . Fixed.
  11. Web server (optional add-on): If the upload boundary of a multipart item is the first data read into the InBuffer when reading more data from the connection, an abort of the upload can occur. Fixed.
  12. Web server (optional add-on): The upload boundary is not correctly handled if the client sends it wrapped in '"'. Most clients do not use it like this. Fixed.
  13. Web server (optional add-on): The header fields of a multipart (upload) item are expected in a fixed order. Fixed by now accepting in any order.

Version 3.42.5 [19. April 2022]

New Features

  1. MQTT client (optional add-on): Support for MQTTv5 added. Introduced with V3.42.0 but not mentioned in the release notes.
  2. PTP OC Simple Master (optional add-on): Introduced with V3.42.0 but not mentioned in the release notes. For more details please check the V3.42.0 entry below.

Program corrections

  1. Core: Depending on the frame and protocols included in a packet, IPv4 header options are able to confuse the stack. Fixed.
  2. Driver: Kinetis: The selection to override the use of HW checksum support with IP_NI_KINETIS_EnableHWChecksumComputation()/IP_NI_KINETIS_EnableHWChecksumComputationEx() was overridden in the driver during init. Fixed.
  3. DHCP server (optional add-on): When a DISCOVER message was received without a host name option it was possible for a NULL pointer to be accessed. Fixed.
  4. FTP server (optional add-on): If IP_FS_API.pfGetDirEntryFileTime is NULL an invalid timestamp is used. Fixed.
  5. Web server (optional add-on): The 500 Internal Server Error message added in V3.42.3 might be sent back in some unwanted cases e.g. if the peer closes the connection first/early (typically browsers try to reuse the connection and we close first after a receive timeout). Fixed.

Version 3.42.4 [1. April 2022]

New Features

  1. Core: New API added:
    • IP_ICMP_AddRxHook()
    • IP_ICMP_RemoveRxHook()
  2. IPv6 (optional add-on): New API added:
    • IP_IPV6_GetIPPacketInfo()
    • IP_ICMPV6_AddRxHook()
    • IP_ICMPV6_RemoveRxHook()

Improvements

  1. Core: Return type of IP_GetIPPacketInfo() changed from "const char*" to "const U8*" to reduce type casting.
  2. Core: Workaround(s) for a compiler error that can generate faulty code with at least IAR EWARM V9.20.2 and V9.20.4 with high optimization (regardless of balanced, speed, size).
    Please check/update the OS abstraction layers as well.
  3. SNTP client (optional add-on): Workaround(s) for a compiler error that can generate faulty code with at least IAR EWARM V9.20.2 and V9.20.4 with high optimization (regardless of balanced, speed, size).
  4. PPP/PPPoE (optional add-on): Workaround(s) for a compiler error that can generate faulty code with at least IAR EWARM V9.20.2 and V9.20.4 with high optimization (regardless of balanced, speed, size).

Program corrections

  1. NTP client (optional add-on): Calling IP_NTP_CLIENT_Start() again once it has been called before with IP_ALLOW_DEINIT=1 corrupts the exit list called on IP_DeInit(). Fixed.
  2. NTP client (optional add-on): The "synced" state reported by IP_NTP_GetTimestamp() and IP_NTP_GetTime() is never cleared once the "synced" state has been reached once. Fixed by using a timeout of "PollTimeInLastResponse * (REPEATS(4) + 1)" with REPEATS(4) and then clearing the "synced" state.
  3. Web server (optional add-on): The upload boundary sanity check added in V3.42.2 causes uploads to fail. Fixed.

Version 3.42.3 [24. March 2022]

New Features

  1. Driver: EtherC: Support for Renesas RA6M2 added.
  2. PHY driver: New API for Micrel Switch PHY driver added.
    • IP_PHY_MICREL_SWITCH_ConfigUseInternalRmiiClock()
  3. UPnP (optional add-on): New define IP_UPNP_NUM_REQUESTS added to IP_ConfDefaults.h to limit the number of simultaneous UPnP requests being handled as these now allocate a small chunk of memory (that is freed once the response has been completely sent).

Improvements

  1. Driver: Improved retransmit strategy for the CADENCE driver. Instead of discarding the send queue in the driver upon a transmit buffer underrun the packets are now queued again after cleaning the send path.
  2. SMTP client (optional add-on): Added a check in the SMTP client against out of bounds usage of the "Month" value for IP_SMTPC_APPLICATION.pfGetTimeDate() when the application does not make sure it is used in its specified range of 1..12 for the month as shown in the IP_SendMail.c and IP_SendMail_Secure.c sample.
  3. UPnP (optional add-on): IP_UPNP_Activate() now has a return value to make it possible to check for errors in the application rather than to rely on IP_PANIC() in a debug build only.
  4. Web server (optional add-on): Added sending back a 500 Internal Server Error message instead of simply closing the connection without any response sent back upon an internal error such as a buffer limitation for example.
  5. Web server (optional add-on): Requesting file information from the application is done at a slightly earlier time in the code to allow using its callback to be used before the handling of virtual files such as various hooks.

Program corrections

  1. Core: When using IP fragmentation support when receiving, a packet might be tried to be freed twice. Potential NULL pointer access. Fixed.
  2. Core: In some situations (when using TCP or sending from a receive callback) the loopback interface can potentially end up in an infinite loop with the task stack also growing infinite. Fixed using a different implementation of the internal loopback forwarding for packets.
  3. Core: The improvement of the ACD module in V3.42.0 unfortunately comes with a bug in which the application task does not return and is forever blocked if starting ACD in blocking mode (default is to wait for ACD to be safe about its IP, unfortunately this is never signaled to the waiting task). Fixed.
  4. IPv6 (optional add-on): When using IP fragmentation support when receiving, a packet might be tried to be freed twice. Potential NULL pointer access. Fixed.
  5. MQTT (optional add-on): Socket being gracefully closed by the broker during the connect sequence was not handled correctly. Fixed.
  6. MQTT (optional add-on): It was possible for the DUP flag to be set on QOS0 messages. Fixed.
  7. SMTP client (optional add-on): In the samples IP_SendMail.c and IP_SendMail_Secure.c the callback routine _cbConnect() is missing a closesocket() call in case the connect() fails, slowly eating up resources of the memory pool for each failed attempt to send a mail if this due to a failed connect attempt. Fixed.
  8. UPnP (optional add-on): Delays between consecutive UPnP messages (demanded by the specification) are actively waited for, blocking processing of other received packets in the meantime. Fixed.
  9. Web server (optional add-on): Parsed content from the header fields "Accept:" and "Content-Type:" of a request can be sent back in front of the actual response in some cases. Fixed.

Version 3.42.2 [1. February 2022]

Program corrections

  1. Core: UDP (and similar message oriented protocols) do not correctly process messages with zero-length payload. This can result in using up all packet buffers and getting stuck waiting for an actual payload to be received. Resources can free up if the socket gets closed or the stack is able to receive a message on this socket that has a non-zero payload length. Fixed.
  2. Core: IP_DTASK_Exec() executes for all interfaces instead of the one passed via parameter. Fixed.
  3. Core: In the IP/FS layer IP_FS_emFile.c a leading '/' in the path is also removed when a root path (not used by default) is added to the front (which does not include '/' at the end by design), resulting in a wrong concatenated path. Fixed.
  4. Driver: Synopsys PTP HW: The _cbGetTime() nanoseconds roll-over detection might report one second too far if the seconds value has not been read in the same timer cycle that the reference nanoseconds are taken. Fixed.
  5. Driver: NULL pointer access that might result in an invalid access depending on the CPU architecture. Fixed.
    Affects the following drivers:
    • CADENCE
    • Synopsys (non-QOS)
  6. IPv6 (optional add-on): When returning non zero from the IP_ICMPV6_SetRxHook() callback, the packet is freed twice. Fixed.
  7. Web server (optional add-on): When upload is enabled, a POST boundary bigger than the internal buffer for the boundary causes a buffer overflow. Fixed.

Version 3.42.1 [4. January 2022]

Program corrections

  1. Core: A wrong calculation in an "IP_DEBUG != 0" build debug check leads to halting in IP_PANIC() when packets are freed on a target that uses cache alignment. Fixed. Does not occur in release builds with "IP_DEBUG == 0".

Version 3.42.0 [23. November 2021]

New Features

  1. Core: New API added:
    • IP_ConfigDoNotAddLowLevelChecks_ARP()
    • IP_ConfigDoNotAddLowLevelChecks_UDP()
    • IP_ACD_ActivateEx()
    • IP_ARP_ConfigAnnounceStaticIP()
    • IP_DHCPC_AssignCurrentConfig()
    • IP_DHCPC_ConfigAssignConfigManually()
    • IP_DHCPC_ConfigDisableARPCheck()
    • IP_DHCPC_SendDeclineAndHalt()
    • IP_DHCPC_SendDeclineAndResetIP()
    • IP_RemoveEtherTypeHook()
  2. Driver: ADIN1110: Driver for Analog Devices (ADI) ADIN1110 Ethernet-APL Single Pair Ethernet (SPE) external controller added.
  3. Driver: EtherC: Support for Renesas RA6M4 added.
  4. FTP client (optional add-on): Added APPE(nd) command for IP_FTPC_ExecCmd() .
  5. FTP client (optional add-on): Added new IP_FTPC_ExecCmdEx() that can be used to STOR(e) and APPE(nd) directly from a buffer instead from a file.
  6. FTP client (optional add-on): IP_FTPC_Init() and IP_FTPC_InitEx() no longer check for the parameter pFS_API to be NULL to allow using the new IP_FTPC_ExecCmdEx() and other commands without filesystem as well.
  7. MQTT client (optional add-on): Support for MQTTv5 added.
  8. NTP client (optional add-on): Added IP_NTP_CLIENT_ResetAll() to allow clearing all internal contexts such as the previously added NTP pools.
  9. PPP/PPPoE (optional add-on): Added CHAP-MD5 authentication support. Can be added by calling IP_PPP_CHAP_AddWithMD5() .
  10. PPP/PPPoE (optional add-on): Added IP_MODEM_SetUartConfig() to be able to specify the parameters used with the BSP_UART_* API. Please note that BSP_UART_Init() is no longer called with the interface index as unit. It is now called with zero by default or the value set using the new API.
  11. PTP OC Simple Master (optional add-on): New (simple) PTP Master is available. The master provides a rather simple and by no means full Master implementation that is sufficient to handle PTP OC Slaves and provide a time source for a network. The provided time accuracy is determined by the clock stability of the Master hardware. Stability can be improved by support from a hardware PTP driver. Software timestamping is available as fallback.

Improvements

  1. General: Changed parameter and return types from signed to unsigned types where they are internally already treated unsigned (avoiding unnecessary explicit casts in the stack):
    • IP_DNS_ResolveHostEx()
    • IP_Exec()
    • IP_IsAllZero()
    • IP_IsExpired()
    • IP_IsInitialized()
    • IP_MDNS_ResolveHost()
    • IP_MDNS_ResolveHostSingleIP()
    • IP_SendPacket()
    • IP_SNMP_AGENT_Exec()
    • IP_TCP_Alloc()
    • IP_TCP_AllocEx()
    • IP_UDP_Alloc()
  2. Core: Introduction of IP_DTASK_* API as more generic "Driver Task" replacement for older WiFi specific IP_WIFI_* task API. See [AN07001] "emNet Migration Guide" for more specific details.
  3. Core: The socket options IP_DONTFRAG and SO_DONTROUTE/MSG_DONTROUTE are now functional with setsockopt()/getsockopt() or have been added. Previously only dummy implementations were used to make porting code easier.
  4. Core: A TCP zero-copy child socket might receive data into the Rx socket buffer if the callback is not set fast enough after the sockets is spawned from the parent socket. A socket spawned from a parent/listen socket now inherits a zero-copy callback if one is set for the parent socket.
  5. Core: Improved the ACD module to act closer to the actual RFC 5227. Adapting other rules such as timings and retries can be manipulated using the new IP_ACD_ActivateEx() API and its callback.
  6. Driver: Slight improvement on execution of cache related routines from interrupt context by inlining an if-clause in cache aware drivers.
  7. Driver: Synopsys QOS: Workaround for the "fake dribble bit in 10 Mbit mode" errata entry added.
  8. Driver: Synopsys PTP HW: New API added:
    • IP_NI_SYNOPSYS_PTP_ConfigMinCoarseCorrection()
  9. CoAP (optional add-on): Added sending an automated CON for an observable NON from time to time as suggested by the RFC, to test if a client that has registered for an observable NON resource is still alive.
  10. CoAP (optional add-on): Better test for timeout routine is used.
  11. FTP client (optional add-on): Small modification for sample IP_FS_ReadOnly.c and IP_FS_ReadOnly_2018.c filesystem layers to support uploading a file from the read-only filesystem to a server.
  12. FTP client (optional add-on): IP_FTPC_ExecCmd(FTPC_CMD_LIST) now supports passing a path in the sPara parameter.
  13. PPP/PPPoE (optional add-on): Allow peer to send further ConfReq packets during LCP negotiation phase after receiving an ACK from us. This is not RFC conform and might indicate a problem in the ISP's PPP stack.
  14. PTP OC Slave (optional add-on): IP_PTP_SetTime() can now be used to set a specific time while running if this is supported by the driver. As a fallback a forward correction is used like before.

Program corrections

  1. Core: Some modern compilers might try to use optimized code that does not expect integer overflows, resulting in wrong timeout calculations. Fixed by modifying internal types used for calculations.
  2. Core: When internally selecting an interface to send on, the lookup routine did not stop after the first suitable interface (in the same network), possibly selecting another interface with a gateway instead. Fixed.
  3. Core: IGMP packets do not make use of the "Router Alert" IP header option. This can lead to routers not inspecting IGMP packets and therefore multicast not working as expected. Fixed by adding the IP header option.
  4. Core: The low level UDP check tries to check an IP fragmented packet that is not the first fragment and discards it due to reading wrong values for what is expected to be the UDP header. Fixed by not low level checking UDP packets that are not the first fragment.
  5. Core: When waiting for a DNS server reply, the already doubled timeout for waiting for the next server/retry is used instead of the intended timeout. Fixed.
  6. CoAP (optional add-on): As a CoAP client, additional options received in a response might overwrite parameters necessary for sending additional blocks of an ongoing operation. This might lead to sending further malformed blocks for the ongoing operation. Fixed.
  7. CoAP (optional add-on): As a CoAP server, The received message might get overwritten with the data to send. This might lead to reading the wrong data in callbacks if for example a send header has already been written. Workaround by separating the message buffer given to IP_COAP_SERVER_Init() dynamically into receive and send space. In case of doubt, use twice the maximum UDP MTU the system can receive as buffer size (typically 2 * 1500 bytes).
  8. DHCP server (optional add-on): When configuring a maximum lease time bigger than 4294967 seconds (~49.7 days) or using the INFINITE value with IP_DHCPS_ConfigMaxLeaseTime(), the requested lease time of a client is not checked correctly if it exceeds 4294967 seconds and might result in a very short lease timeout that might even prevent a client from getting a configuration at all. Fixed.
  9. Web server (optional add-on): When using POST URI parameters, these might be parsed into VFile callbacks sParameter instead of the POST content. Fixed.

Version 3.40f [8. November 2021]

Improvements

  1. PTP OC Slave (optional add-on): Improved compatibility between using core stack as object library and PTP in source for internal purposes.

Program corrections

  1. Core: IP_SOCK_recvfrom_ts() does not fill in IP_PACKET_TIMESTAMP.SW_ns (only IP_PACKET_TIMESTAMP.SW_us). Fixed.

Version 3.40e [26. August 2021]

New Features

  1. Core: New API added:
    • IP_SetOnIFaceSelectCallback()
    • IP_PHY_ConfigAfterResetDelay()
  2. New define IP_PHY_AFTER_RESET_DELAY with default of 3 milliseconds/ticks added.
  3. Support for automotive Ethernet PHYs such as NXP TJA1101 (and other PHYs that do not support autonegotiation) added to the generic PHY driver.
  4. Driver: CADENCE: New API added:
    • IP_NI_CADENCE_ConfigMDIOClockDivider()
  5. SNTP client (optional add-on): New API added:
    • IP_SNTPC_ConfigAcceptNoSyncSource()
  6. Web server (optional add-on): New API added:
    • IP_WEBS_MarkSendingCustomHeader()
    • IP_WEBS_METHOD_AddHook_SingleMethod()

Improvements

  1. Core: Added a configurable delay (default IP_PHY_AFTER_RESET_DELAY) between soft resetting the PHY and accessing it for more stability. Can be run-time configured using IP_PHY_ConfigAfterResetDelay() .
  2. Core: IP_SOCK_recvfrom_info() now also fills in the new member IP_SOCK_RECVFROM_INFO.IFaceId so it is possible to see on which interface a UDP packet has been received.
  3. Core: Added support for virtual interfaces using multicast. Multicast was previously not meant to be used with virtual interfaces as these were meant to be used for simple tasks like providing a static fallback IP only.
  4. Core: Added the new IP_DHCPC_AddStateChangeHook() states DHCPC_STATE_REQUEST_NAK and DHCPC_STATE_LEASE_EXPIRED to signal two cases of failing to request/renew an IP address.
  5. Core: Improved interface selection when sending to multicast addresses by checking which interface is a an actual member of the IGMP group.
  6. Core: Opening two UDP or two RAW sockets with the same local port parameter (one bound to ANY_ADDR, the other bound to a specific local address to distinguish between receiving unicast or broadcast) always selects the first connection found in the internal list. We now first iterate over all connections that have a local address parameter set before also looking at connections with ANY_ADDR .
  7. Core: TFTP server: Added hardening against receiving unterminated filename strings.
  8. Core: TFTP server: Added sending a couple of retransmit requests when a client sends an unexpected block number to try getting back in order.
  9. SMTP client (optional add-on): Added automatic retry of HELO after EHLO if no supported authentication method has been sent by the server for EHLO.
  10. SMTP client (optional add-on): Allow using empty username and password if the server requires no authentication (for example if it can only be accessed via a VPN). This was unintentionally possible in possible in previous releases and can now be done by using empty strings or NULL for IP_SMTPC_MTA.sUser and IP_SMTPC_MTA.sPass .
  11. Tail Tagging (optional add-on): Added debug warnings and packet discard (instead of trying to send it anyhow) in case it is not possible to pad a very small packet to the Ethernet minimum size.
  12. Web server (optional add-on): Chrome and compatible browsers are not fully compatible with IP_WEBS_SendLocationHeader() not sending a second pair of CRLF at the end (although not chunked-encoding and connection gets closed). Fine with Firefox for example. Fixed by adding an extra CRLF .
  13. Web server (optional add-on): Automatic sending of "Connection: close" and "Content-Length: LengthOfStaticFile" where possible when the response header gets generated by the stack and these have not been sent by the application before.
  14. WebSocket protocol (optional add-on): Removed the module internal #ifndef define IP_WEBSOCKET_MAX_DATA_SIZE (defaulting to 16 kilobytes) used for a pedantic limit check of the NumBytes parameter of the API. On older architectures like 16-bit the application/compiler has to be aware or check to not overflow an integer parameter, whether it is our API or the BSD socket API what is what our API is based on.

Program corrections

  1. Core: Removed the define IP_ALLOW_NOLOCK (used in IP_ConfDefaults.h) as it was causing more confusion than benefit and might also lead to locking problems when used wrong.
  2. Core: IP_ALLOW_NOLOCK is used as a single indicator if NoLock can be used but might conflict with multiple interfaces added. This might lead to locking problems. Fixed by removing IP_ALLOW_NOLOCK.
  3. Core: IP_DNS_ResolveHostEx() waits for the given timeout although it could return once all servers have answered with a negative answer. Also retries for servers not answering is not sent as expected. Fixed.
  4. Core: The callback added with IP_DHCPC_AddStateChangeHook() does not include IP address information when reporting the DHCPC_STATE_BOUND case when old BOOTP protocol is used. Fixed.
  5. Core: The DHCP client internal timeouts might become confused if a the server grants a lease time of more than ~24.86 days. Fixed by limiting the lease time offered to internal constraints.
  6. Core: The DHCP client is started for an interface if it transitions to the DOWN state. Fixed.
  7. Core: TCP duplicate ACKs are not always correctly handled and might result in a continuous ACK send loop between us and the peer if the peer behaves in the same way. Fixed.
  8. Core: If a zero window probe with one byte gets sent and the byte is accepted by the peer as the zero window situation has just vanished, this results in a wrong assumption about the window on our side when receiving the ACK for the probe byte. Fixed.
  9. Core: The return value for recvfrom() and variations of this API can return values other than SOCKET_ERROR in case of some parameters given. Fixed.
  10. Core: The value for the pAddrLen parameter of recvfrom() and variations is not updated with the written/used length. Fixed.
  11. Core: If the automatic detection of a PHY address fails it will also fail in further (re-)init calls as the PHY address is not reset back to our auto detect value of 0xFF . Fixed.
  12. Core: When using the VLAN or Tail Tagging virtual interface (or one of the rare external drivers that need padding), padding to the minimum Ethernet size of 64 bytes (with FCS) packet size might corrupt data in the TCP TxSocketBuffer. Fixed.
  13. Core: UDP bind() attempts that result in an IP_ERR_ADDR_IN_USE socket error are taken into account when looking up UDP connections internally until they are closed with closesocket() . Fixed.
  14. Core: TFTP server does not send back an error status if the disk runs full on a write. Fixed.
  15. Core: TFTP in some cases responds with wrong error codes not matching the error string. Fixed.
  16. Driver: Synopsys: A driver reset calls an internal packet FIFO modification function in wrong locking state which might cause problems if a task context is currently modifying the same packet FIFO. Fixed.
  17. Driver: Synopsys QOS: A driver reset calls an internal packet FIFO modification function in wrong locking state which might cause problems if a task context is currently modifying the same packet FIFO. Fixed.
  18. Driver: Synopsys QOS: A rather theoretical race condition might cause Tx operations to get stuck. Workaround added to prevent the race condition to occur.
  19. Discover package (optional add-on): We respond to DNS requests that match at least the first character of the requested hostname. Fixed.
  20. IPv6 (optional add-on): A bind() call to set a local IPv4 address might crash the system when IPv6 has been added. Fixed.
  21. NetBIOS (optional add-on): A NetBIOS name of the maximum of 16 characters is not recognized as valid name. Fixed.
  22. Web server (optional add-on): Generating content for a custom error page directly from the callback rather than redirecting to a custom error page file (that could have dynamic content) might select the wrong encoding (chunked/RAW) in the auto generated HTTP header.
    Fixed by making all custom error page content using RAW encoding as the connection in this case gets closed anyhow.
  23. Web server (optional add-on): REST hook did not stop URI path/hook identification on '?' character, introducing the parameter part. Fixed.
  24. WebSocket protocol (optional add-on): Processing a PING frame does not always abort when a subroutine reports an error. Fixed.

Version 3.40d [12. May 2021]

Improvements

  1. Core: Public API hardened against the "BadAlloc" attack vector.
    In the BadAlloc scenario an allocation routine is given a very large number with the goal to overflow its internal variable.
    This is possible as virtually all allocation mechanisms use a couple of additional bytes on top of the originally requested number of bytes for management purposes.
    If this happens the internal allocation reserves a very small chunk of memory due to the overflow of the variable but returns if as the large allocation has succeeded.

    This change is listed as an improvement to the API as it can not be used standalone as a remote attack to corrupt the stack.
    It requires an applicaton that can be driven to execute the allocation for an unreasonable amount of memory e.g. by a web application that allows to specify a free number of datasets to be returned that would include memory allocation to be utilized.
    Therefore this is seen as additional sanity checks if boundary checks in the application are not perfect or missing.

Program corrections

  1. Core: The NAME:WRECK correction in v3.40c unfortunately introduced a bug that prevents resolving domain names with subdomains if the multicast receiver routine is added internally. Fixed.
  2. Core: A guard variable might be ignored in high optimize builds when a certain routine gets inlined. Fixed.
  3. Core: In some configurations the DHCP client might produce UDP packets with wrong UDP checksum that will be discarded by the server, resulting in not being able to get an address. Fixed.
  4. Core: ICMP destination unreachable response for a UDP port that is not open is sent back with data starting at the payload received instead of the IP header. Fixed.
  5. NTP client (optional add-on): If the given NTP server pools do not completely saturate the maximum NTP servers that can be saved internally, each call to IP_NTP_CLIENT_Run() tries to send a DNS request to fetch more servers from the given pool.
    Doing so with every call of IP_NTP_CLIENT_Run() is unnecessary or even harmful in reputation against the DNS server queried.
    If the ARP entry for the DNS server to query has expired this might also lead to sending an ARP for each call of IP_NTP_CLIENT_Run() .
    Fixed by adding a grace period between fetching new servers from a given pool.

Version 3.40c [30. April 2021]

Improvements

  1. Core: Although previously reported (and at this time evaluated) Amnesia:33 DNS specific CVE entries should not have a direct impact on us, these have been evaluated again and the code has been hardened in the process of covering NAME:WRECK, such as randomizing the transaction id for DNS queries, making it harder to guess when crafting a malicious response.
  2. Driver:
    • Synopsys QOS:
      • Due to a bug in the silicon of the MAC, causing at least the TCP and ICMP checksums of bigger frames (above 900-1000 bytes, depends on the protocol the checksum is calculated for) to become zero, which might lead to the frame being discarded by the receiver, hardware Tx checksum computation has been completely turned off by default (was previously enabled in TSF mode). This occurs for example with an STM32H743 rev. V with the ETH_MACVR register being 0x0000_3142 .

Program corrections

  1. Core: The DNS client is vulnerable against the NAME:WRECK attack where offsets in a maliciously crafted DNS response are not sufficiently checked. Fixed.
    NAME:WRECK can lead to DoS (Denial of Service) by trying to read outside of the DNS packet data which might cause an error depending on the CPU architecture.
    Besides potentially crashing the device, this attack vector has been declared low-risk due to the following points:
    • No data breaching is involved (can not be used to extract data from the target) and needs a maliciously forged DNS answer that uses a specific transaction id under which we have just sent a DNS query (attacker needs to be able to network monitor the device in any kind of way or make a very good guess).
    • Low risk for regular unicast DNS: To become able to extract the transaction id of our query, the attacker would need to become a Man-In-The-Middle in the network.
    • Low risk for m(multicast)DNS: The attacker would need to have access to the network within multicast boundaries, as muilticast messages typically have a small TTL value to be blocked/discarded at routers/gateways so they are not sent into other network segments such as the Internet.
  2. Core: In a network with short RTT (Round-Trip-Time), the TCP retransmit timer is not correctly exponentially extended for each retransmit of the same segment, resulting in shorter time until resetting the connection than intended. Fixed.
  3. Discover package (optional add-on): Also subject to NAME:WRECK attack vector. Fixed.
    Considered low-risk as this service is targeted towards LAN usage which means an attacker would need to become a part of the network first. Additional checks for hardening against this attack vector have been added.
  4. Discover package (optional add-on): The mDNS response FLUSH bit was set for regular unicast DNS responses as well, making unicast DNS responses fail with some clients. Fixed.

Version 3.40b [17. March 2021]

New Features

  1. Driver: Kinetis: Added support for NXP i.MXRT11xx Gigabit Ethernet (ENET_1G).

Improvements

  1. Core: TCP defending against spoofed RST packets with wrong sequence number implemented as suggested by RFC 4953 section "3.1.2. TCP RST Window Attenuation" (ignore => ACK probe/stimulate peer). This resolves CVE-2004-0230 as for example reported by Nessus plugin id 12213 .

Program corrections

  1. Core: IP_AssignMemory() internal check for an alignment to be at least 8 bytes unfortunately reports an alignment error for said alignment. Fixed.
  2. Driver: A change in the Synopsys driver to use store-forward mode introduced with v3.40 does not work for NXP LPC43xx devices. If the LPC43xx driver is installed, the driver has to use cut-through mode and do Rx checksum calculations in software. Fixed.
  3. Driver: A recovery reset in the Synopsys QOS does not re-enable hash filters if these are used in addition to the number of available precise filters (typically 4). Fixed.
  4. Driver: The Kinetis driver does not report IP header checksum offloading (instead ICMP is reported twice), therefore the checksum gets calculated in software. Fixed.

Version 3.40a [29. June 2020]

New Features

  1. Core: New API added:
    • IP_SOCK_recvfrom_info()
  2. FTP server (optional add-on): Added new API to send custom sign on messages:
    • IP_FTPS_SetSignOnMsgCallback()
    • IP_FTPS_SendFormattedString()
    • IP_FTPS_SendMem()
    • IP_FTPS_SendString()
    • IP_FTPS_SendUnsigned()

Improvements

  1. SNMP agent (optional add-on): Added the OID trap define IP_SNMP_GENERIC_TRAP_OID_ENTERPRISE_SPECIFIC for traps sent for enterprise/customer branch specific reasons.
  2. MQTT client (optional add-on): PINGRESP handling optimized.

Program corrections

  1. Core: The PHY write test added in v3.40 expects the software reset bit (bit 15 in BMCR register) to be useable. For switches the bit is present but read only, resulting the loopback bit remaining active after the test. Fixed by writing back the register value initially read.
  2. Core: IP_DHCPC_SetVendorOptionsCallback() renamed to IP_DHCPS_SetVendorOptionsCallback() as it has been wrongly given the DHCP client prefix.
  3. MQTT client (optional add-on): Duplicate flag in publish message header is not at the correct position. Fixed.
  4. MQTT client (optional add-on): Availability of error handling callback was not checked. Fixed.

Version 3.40 [2. April 2020]

New Features

  1. Core: IP_SetNanosecondsCallback() added. Timestamps taken based on IP_SetMicrosecondsCallback() will internally be multiplied by 1000. Only one callback has to be set.
  2. Core: IP_MDNS_ResolveHostSingleIP() added.
  3. Core: IP_NI_PauseRx() added for better anti-flood counter measure (better implementration than IP_NI_PauseRxInt() that was added with v3.22a). Has to be supported by the NI driver.
  4. Core: IP_NI_ConfigUsePromiscuousMode() added to be able to force the driver into promiscuous mode if supported.
  5. Core: IP layer PacketId now gets randomized based on the time the first Ethernet packet is received.
  6. Core: Socket option IP_TLL and IP_MULTICAST_TTL added to setsockopt()/getsockopt() .
  7. Core: New API added:
    • IP_ConfigReportSameMacOnNet()
    • IP_DHCPC_GetOptionRequestList()
    • IP_DHCPC_SetOnOptionCallback()
    • IP_DHCPC_SetOptionRequestList()
    • IP_IsInitialized()
    • IP_SetUseRxTask()
    • IP_ShutDown()
    • IP_SOCKET_AddGetSetOptHook()
    • IP_SOCKET_GetErrorCode()
  8. DHCP server (optional add-on): IP_DHCPS_SetReservedAddresses() can now reserve addresses based on HW/MAC address, hostname or both.
  9. PTP OC Slave (optional add-on): IP_PTP_OC_SetInfoCallback() added.
  10. Driver: CADENCE driver, new API added:
    • IP_NI_CADENCE_SetPhyUpdateCallback()
  11. Driver: Added automatic MDIO clock divider selection (MDIO CR value) to Synopsys and Synopsys QOS if BSP_IP_API->pfGetEthClock() callback is available.
  12. Driver: Added support for NXP i.MXRT11xx (Fast Ethernet) support to Kinetis driver.
  13. Driver: Added support for GigaDevice GD32F450 to generic Synopsys driver.
  14. Driver: Added support for TI TMS432E to generic Synopsys driver.
  15. Driver: Synopsys NI driver, new API added:
    • IP_NI_SYNOPSYS_ConfigUseTxCopy()
  16. Driver: Synopsys PTP HW driver, new API added:
    • IP_NI_SYNOPSYS_PTP_GetFineValues()
  17. Driver: Synopsys PTP HW driver now can be used with Synopsys QOS NI driver as well.
  18. Driver: Synopsys QOS support for Synopsys [QOS] PTP HW driver added.
  19. Driver: Added Enterprise IEEE 802.1x aka RADIUS support to Microchip/ATMEL (AT)WILC1000 WiFi driver. Use ASF v3.45 SDK as there is a bug in m2m_wifi_download_cert() .
    • New API IP_NI_WIFI_ATMEL_ATWILC_DownloadCert() added.
    • WiFi sample callbacks and IP_Config updated with samples and instructions.
  20. Driver: New driver API added to Redpine Signals RS9113 WiFi driver to update the module firmware:
    • IP_NI_WIFI_REDPINE_RS9113_SetUpdateCallback()
  21. FTP client (optional add-on): Added support for active FTP mode.
  22. FTP server (optional add-on): New configuration member NumBytesInBufBeforeFlush added to structure FTPS_BUFFER_SIZES. Can be used to synchronize writes to the FS layer sector size.
  23. Web server (optional add-on): IP_WEBS_Send204NoContent() for a captive portal added.
  24. Web server (optional add-on): New progress status WEBS_PROGRESS_STATUS_HEADER_PARSED added.
  25. Web server (optional add-on): New header configuration member sStartLine added to WEBS_HEADER_CONFIG when WEBS_USE_ENHANCED_FORM_HANDLING is used.
  26. Web server (optional add-on): In addition to gzip, static files like Javascript can now be stored with other encodings like Brotli as well:
    • IP_WEBS_ConfigStaticEncodedFiletypes()

Improvements

  1. Product: The product has been renamed from embOS/IP to emNet to make it more visible that it is not necessarily bundled/relies on embOS as RTOS.
     
  2. Core: IP_Init() has been extended with a return value. Lower layers (including the driver) can now report a problem during IP_Init() to the application. Adaptation for drivers that use infinite loops on init or other operations that are expected to be successful on stable hardware need to be requested by the customer or will be changed with future releases. Memory constraints during init should still be verified and tested with a build that support IP_PANIC() checks!
  3. Core: Trying to sync newly added internal timers to existing timers with same execution periods. This reduces waking up at different times for management tasks.
  4. Core: Define IP_TCP_RETRANS_NUM added.
  5. Core: A TCP race condition on the wire when sending FIN after sending payload can cause retransmits. Improved.
  6. Core: The backlog value given to listen()/IP_SOCK_listen() was previously limited by the IP_SOCKET_MAX_CONN define which defaults to 16. The define has been removed as it should not limit the amount set by the application without knowledge of the user or in a library.
  7. Core: Most IP_DHCPC_* API now has return values (previously void) to reflect memory allocation errors if called after IP_Init()/IP_X_Config() .
  8. Core: Added some more parameter checks for socket API.
  9. Core: IP_SetPacketToS() can now be used to set the DSCP field for IPv4 and IPv6 as well.
  10. Core: Sockets spawned form a server side parent/listen socket now carry over the ToS/DSCP setting from the parent.
  11. Driver: Added IP_DeInit() support to ATMEL/Microchip ATWILC1000 WiFi driver.
  12. Driver: Removed infinite loops in Synopsys and Synopsys QoS driver init. Errors during IP_Init() are reported back to application.
  13. Driver: Added internal scan retries on failure to Redpine Signals RS9113 driver for better network detection.
  14. Driver: Added output of module firmware version to Redpine Signals RS9113 driver.
  15. Driver: CADENCE IP in Xilinx Zynq seems to have a problem with the padding option offered by the Ethernet DMA, resulting in hardware checksums to succeed but delivering corrupted data via DMA. Disabled the 2 byte HW padding for Xilinx Zynq.
  16. Driver: Updated Redpine Signals RS9113 WiFi driver to Redpine Signals WiseConnect SDK v1.7.8 . Updating to this SDK version is advised. Please note that there are slight API changes in the SDK that now make the driver incompatible when being used out of the box with older SDK versions.
  17. FTP server (optional add-on): Workaround added for Google Chrome sending "LIST -l" where the "-l" parameter is actually not FTP standard.
  18. PTP OC Slave (optional add-on): General code improvements.

Program corrections

  1. Core: TCP retransmit counter is not reset when the connection recovers to normal, causing a RST after several retransmits even as the connection is able to recover. Fixed.
  2. Core: Calling recv() or recvfrom() on a UDP socket with the flag MSG_TRUNC might return invalid data. Fixed.
  3. Core: Under some rare circumstances TCP segmentation could lead to presenting data in an alignment not supported by the NI driver. Fixed.
  4. Driver: Driver does not free all resources on IP_DeInit() and might use old memory instead of re-allocating memory on re-init. Fixed. Applies to the following drivers:
    • CADENCE
    • EtherC
    • NIOSII Altera TSE
    • Synopsys
    • Synopsys QoS
  5. Driver: Some drivers contain recover strategies for critical states that might interfere with access from other tasks at the same time. This typically only happens if the hardware/network is not stable enough and even then it requires certain criteria to be met to actually end up in a problem state when trying to recover. Fixed. Recover strategies for the following drivers have been changed:
    • EtherC
    • Kinetis
    • Synopsys
    • Synopsys QoS
  6. Driver: ASIX AX88180 driver does not reset its static configuration variables on IP_DeInit() . Fixed.
  7. Driver: Synopsys driver tries to recover from various not specified Ethernet errors by re-initializing itself. The peripheral reset involved will also reset the PTP hardware unit and restart the PTP timing and lose any previous synchronization. Fixed by not asserting the peripheral reset if a PTP HW driver has been added. For most of these errors it should be possible to recover by re-initializing the peripheral without reset.
  8. Driver: Synopsys PTP HW driver might return an old timestamp if the seconds register is read and the nanoseconds register overlaps and increases the seconds register before we can read the nanoseconds register. Fixed by reading the nanoseconds register before and after the seconds register and correcting the seconds if we detect the overlap of the nanoseconds register.
  9. FTP server (optional add-on): A CWD command to a file as done by Google Chrome to test if this is a directory or file was not correctly evaluated as file, resulting in reporting success to CWD to a file which confused Chrome. Fixed.
  10. MQTT client (optional add-on): IP_MQTT_CLIENT_Unsubscribe() might not unlock its API if the connection breaks down while sending data. Fixed.
  11. PTP OC Slave (optional add-on): General code cleanup.
  12. PTP OC Slave (optional add-on): Delay request timeouts sent by the master other than 1s lead to an underflow of the request delay timeout leading to a huge timeout. Fixed.
  13. SMTP client (optional add-on): Chunked sending of attachments encodes each chunk as its own base64 item. Surprisingly this is understood by Mozilla Thunderbird but all other clients like Microsoft Outlook seem to expect only a single base64 encoded item per multipart section. Fixed by using proper chunked encoding into a single big base64 encoded item.
  14. SNMP agent (optional add-on): Accessing a branch with a zero ID as second digit (e.g. iso(1).std(0).x) selects the parent instead (e.g. iso(1).x). Fixed.
  15. Web server (optional add-on): Potential buffer overflow if the end of a CGI tag can not be found. Fixed.
  16. Web server (optional add-on): IP_WEBS_WEBSOCKET_AddHook() could only be used with a sub protocol while this should be optional. Fixed by allowing to use an empty string for no sub protocol.
  17. Web server (optional add-on): A 401 unauthorized response for authentication always uses the realm from the very first access list entry. Fixed.
  18. Web server (optional add-on): For various reasons that are arguable a browser might send a POST with "Content-Length: 0" which is not correctly handled, leading to an abort of the request. Fixed.
  19. WebSocket protocol (optional add-on): The CloseCode when sending a CLOSE frame was incorrectly counted towards the header and not counted for the payload length. Fixed. Most implementations do not even bother to evaluate the closing reason at all and simply close the socket on a CLOSE frame without reading its payload.

Version 3.30d [19. December 2019]

New Features

  1. Core: Socket option SO_RCVTIMEO can now be used as timeout for accept() and returns with IP_ERR_TIMEDOUT in this case. Similar behavior as Linux and some other BSD compatible stacks.
  2. Core: Socket option SO_SNDTIMEO can now be used as timeout for connect() and returns with IP_ERR_TIMEDOUT in this case. Similar behavior as Linux and some other BSD compatible stacks.

Improvements

  1. Core: Added more length checks to IP/ICMP/UDP (TCP not affected) layers as defense against malicious hand crafted packets.
  2. Core: If using a Gigabit PHY and limiting modes to 10/100 and the PHY has the Gigabit AutoNeg advertisement bits set by default they do not get cleared. Fixed/Improved. This is a rather unusual setup as having a Gigabit capable MAC and having a Gigabit PHY BUT limiting to 10/100 by magnetics is a rather unusual or at least new situation. There are new System-On-Module (SOM) solutions that come with Gigabit capable CPU/MAC and Gigabit PHY on the module but the mode can still be limited on the magnetics used as they are not part of the SOM!
  3. FTP server (optional add-on): Allowing non ASCII characters to be used to support various charsets like Shift JIS for Japanese characters.
  4. Web server (optional add-on): Support for paths with URL encoding added.
  5. Web server (optional add-on): Workaround for a bug in Google Chrome added where the filename="" field is missing if no file to upload is selected.

Program corrections

  1. Core: TCP keepalive values exceeding 16-bit values were internally truncated to the lower 16-bit of the original value, shortening the keepalive probe period. Fixed.
  2. Core: DHCP client interface configuration does not get reset in all cases where the state falls back to INIT. Fixed.
  3. Core: DHCP client starting with an IP address set in order to try to request the same address again does not work. Fixed.
  4. Core: A malicious hand crafted IP packet can traverse to the ICMP layer and cause access to a NULL pointer. Fixed by adding more length checks, see improvements.
  5. Driver: Buffer overflow in Microchip/Micrel KSZ8851SNL driver if a packet bigger than 1518 bytes (Ethernet standard) is received. Fixed.
  6. FTP server (optional add-on): Wildcard support introduced in v3.14 does not work correctly with wildcards in file names but only in folder names. Fixed.
  7. FTP server (optional add-on): Data connection is not always closed in case of bad sequence of commands. Fixed.
  8. Web server (optional add-on): Receiving a Sec-WebSocket-Key header field that exceeds the maximum of 24 base64 encoded bytes as specified in the WebSocket standard might result in a buffer overflow. Fixed.

Version 3.30c [10. January 2019]

Improvements

  1. Driver: MICROCHIP ENC424J600/ENC624J600 optimized by using set data pointer command in SPI mode instead of reading away data to discard.
  2. Driver: Added IP_DeInit() support to Kinetis driver.

Program corrections

  1. Core: ACD defend callback is always called for interface 0 instead of the real interface Id. Fixed.
  2. Driver: CADENCE driver uses a wrong register offset when writing precise filters for devices with GMAC Ethernet controller. This results in writing to wrong registers if multiple precise filters are used e.g. with multicast usage. Fixed.
  3. Driver: Synopsys QOS driver uses the wrong bits to disable its Tx/Rx logic (used for example with IP_NI_PauseRxInt() for flood counter measure). Fixed.
  4. Discover package (optional add-on): If multiple TXT records are added the free space within the packet to send is not correctly calculated. Fixed.
  5. FTP client (optional add-on): File handle might not get closed correctly during a STOR command if an error occurs on socket level. Fixed.
  6. MQTT client (optional add-on): IP_MQTT_CLIENT_SetLastWill() and IP_MQTT_CLIENT_SetKeepAlive() can only be set during an established connection instead of not being connected. Fixed.
  7. Web server (optional add-on): The new progress status WEBS_PROGRESS_STATUS_METHOD_URI_VER_PARSED that has been introduced with v3.30b leads to a memory leak with the shipped DynContent sample code. Fixed in the sample. Please use the updated _cbOnProgressNotify() callback.

Version 3.30b [26. October 2018]

New Features

  1. Core: New API added:
    • IP_RAW_ReducePayloadLen()
    • IP_UDP_ReducePayloadLen()
  2. Driver: NXP i.MXRT105x support added to NXP/Freescale Kinetis driver.
  3. Driver: NXP i.MX6 Solo/DualLite support added to NXP/Freescale Kinetis driver.
  4. Driver: Added NXP LPC54xxx support to generic Synopsys QOS driver.
  5. PHY driver: Support for KSZ8863 added to Micrel switch driver.
  6. Web server (optional add-on): New progress status WEBS_PROGRESS_STATUS_METHOD_URI_VER_PARSED added.

Improvements

  1. Core: Improvements for IP/FS and WiFi implementation samples/layers.
  2. Driver: WiFi Redpine Signals RS9113 driver detection for WPA/WPA2 mixed security added.
  3. Discover package (optional add-on): If a PTR record is explicitly requested and added to an answer the SRV and TXT records will be added for better compatibility. Optional according to RFC.
  4. Web server (optional add-on): IP_WEBS_Redirect() can now be called from more locations like VFile hooks and other callbacks.
  5. Web server (optional add-on): Content type "image/svg+xml" for .svg files added.
  6. WebSocket protocol (optional add-on): Support for PING frames added. These would previously simply cause a disconnect if required by the peer.

Program corrections

  1. Core: An IP_TIMER added very late during runtime might not correctly time out. Fixed.
  2. Core: Unicast DHCP messages might be wrongly discarded with multi interface configurations. Fixed.
  3. Core: Despite careful testing, unicast DHCP as in the DHCP RFC does not seem to be supported by some Access Points, making it a bad choice as default. Reverted back to old pre v3.30 default of using broadcast with mode switching disabled. Unicast and/or mode switching can still be enabled using IP_DHCPC_ConfigUniBcStartMode() .
  4. Core: Some modules do not compile with IP_NO_BSD_SOCK_API enabled. Fixed.
  5. Core: ACK sequence number used in keepalive requests is decremented by one. This works fine but gets detected by some TCP test suites. Fixed.
  6. Driver: The restriction for STM32F7 and Tightly-Coupled-Memory and its configuration check introduced with v3.30 does not apply and has been removed.
  7. Driver: WiFi Redpine Signals RS9113 driver auto region detection can cause problems when enabled to automatic mode. Fixed by now setting it manually if required.
  8. Discover package (optional add-on): Packets might be sent with additional garbage data at the end, resulting in clients discarding the message. Fixed.
  9. FTP server (optional add-on): It is possible to store filenames longer than the filename buffer supports, resulting in not being able to delete the file via FTP. Fixed.
  10. MQTT client (optional add-on): Username and password can only be set during an established connection with IP_MQTT_CLIENT_SetUserPass() instead of not being connected. Fixed.
  11. NTP client (optional add-on): NTP API calls use public DNS client API which causes a double API lock and might cause returning with a timeout. Fixed.
  12. PPP/PPPoE (optional add-on): Packet resend does not work as intended. Fixed.
  13. SMTP client (optional add-on): According to RFC a second EHLO has to be sent for a secured connection which is not done but seems to be tolerated by many servers. Fixed.
  14. Web server (optional add-on): Form data not sent URL encoded is not correctly handled in all cases. Fixed.
  15. Web server (optional add-on): IP_WEBS_METHOD_CopyData() might run into an endless loop situation if no data is left in the input buffer. Fixed.
  16. WebSocket protocol (optional add-on): The continue handling for non-blocking sockets does not correctly work when discarding a frame/message. Fixed.
  17. WebSocket protocol (optional add-on): The socket error status is not correctly returned if sending got interrupted and sending continued with sending the payload. Fixed.
  18. WebSocket protocol (optional add-on): IP_WEBSOCKET_Recv() returns only after the amount of bytes requested has been fulfilled or on error. Should return after at least one byte can be returned or error. Fixed.

Version 3.30a [9. July 2018]

New Features

  1. Web server (optional add-on): New configurable all-in-one emWeb sample IP_WebserverSample_IPv4_IPv6_SSL.c added.

Program corrections

  1. Core: DHCP client unicast/broadcast automatic switching introduced with v3.30 only works for DISCOVER but fails if the REQUEST step was reached. Fixed.
  2. Driver: The Synopsys Tightly-Coupled-Memory configuration check for STM32F7 devices introduced with v3.30 is too restrictive. Fixed.
  3. WebSocket protocol (optional add-on): The new sample IP_WEBSOCKET_printf_Client.c is missing from the shipment. Fixed.

Version 3.30 [4. July 2018]

New Features

  1. Core: Support for WiFi Access Point mode added.
  2. Core: IP_SUPPORT_IPV4 configuration define added that allows to disable and remove IPv4 code.
  3. Core: IP_SOCKET_ID_LIMIT configuration define added.
  4. Core: DHCP client now switches between unicast and broadcast behavior for better WiFi support. Starts with unicast, configurable via IP_DHCPC_ConfigUniBcStartMode() .
  5. Core: New API added:
    • IP_DisableIPv4()
    • IP_SOCKET_CloseAll()
  6. Core: New WiFi API for Access Point mode added:
    • IP_WIFI_AddClientNotificationHook()
  7. Driver: New driver API added to Redpine Signals RS9113 WiFi driver for Access Point mode:
    • IP_NI_WIFI_REDPINE_RS9113_SetAccessPointParameters()
  8. Driver: Added WEP support to Microchip/ATMEL (AT)WILC1000 WiFi driver.
  9. Driver: Updated Microchip/ATMEL (AT)WILC1000 WiFi driver to use ASF v3.40 SDK API.
  10. DHCP server (optional add-on): IP_DHCPS_SetReservedAddresses() added for address reservation.
  11. Discover package (optional add-on): Added the Flags field to DNS-SD entries to be able to set the FLUSH bit for specific entries.
  12. FTP server (optional add-on): IPv6 support added by adding commands EPRT and EPSV.
  13. FTP server (optional add-on): New commands FEAT, MLST and MLSD for machine parsed directory listing added.
  14. IPv6 (optional add-on): New API added:
    • IP_IPV6_ChangeDefaultConfig()
    • IP_IPV6_SetLinkLocalUnicastAddr()
    • IP_IPV6_INFO_GetConnectionInfo()
  15. SMTP client (optional add-on): Support for AUTH PLAIN authentication added.
  16. Web server (optional add-on): New API added to register a hook that gets notified at different useful steps while serving a request:
    • IP_WEBS_AddProgressHook()
  17. Web server (optional add-on): HTTP cookie support added via new API:
    • IP_WEBS_HEADER_AddFieldHook()
    • IP_WEBS_HEADER_CopyData()
    • IP_WEBS_HEADER_GetFindToken()
    • IP_WEBS_HEADER_SetCustomFields()
  18. Web server (optional add-on): Support for custom error pages added, new API:
    • IP_WEBS_SetErrorPageCallback()
  19. WebSocket protocol (optional add-on): New API for client mode added:
    • IP_WEBSOCKET_InitClient()

Improvements

  1. Core: Checked API locks and improved efficiency where not required to lock.
  2. Core: IP_TCP_ADD_ACK_TO_RST_PACKETS can be enabled to send an ACK flag with a RST packet. Disabled by default.
  3. Core: DHCP client now checks for the correct Client Identifier option value in a server response if this is used by the server.
  4. Core: DHCP client transmit ID is now random generated.
  5. Driver: Added illegal frame detection handling to Renesas EtherC driver for RX64M compatible devices and Synergy devices.
  6. Driver: Checks added for Synopsys and Synopsys QoS based STM32F7/H7 devices to identify if Tightly-Coupled-Memory is used that can not be accessed by the DMA.
  7. Driver: Synopsys and Synopsys QOS MDIO clock range (needs to match CPU frequency) can not be set by using IP_NI_SYNOPSYS_ConfigMDIOClockRange() and IP_NI_SYNOPSYS_QOS_ConfigMDIOClockRange() .
  8. Driver: SPI DMA support for Microchip/Micrel KSZ8851SNL driver added.
  9. FTP server (optional add-on): Improved detection for LIST/NLST parameter being a file or folder.
  10. MQTT client (optional add-on): Support for publisher and subscriber on the same connection added.
  11. WebSocket protocol (optional add-on): The API now supports non-blocking sockets as well.

Program corrections

  1. Core: Parts of IPv6 might not be re-initialized correctly when using IP_DeInit(). Fixed.
  2. Core: Using send() on a connected UDP socket uses a wrong foreign address. Fixed.
  3. Core: According to RFC 2131 DHCP broadcast messages shall be sent without source IP address as long as no address has been acquired. Fixed.
  4. Core: DHCP client shall only fall back to send a REQUEST on link down if it has a valid configuration from before. Fixed.
  5. Core: recv()/recvfrom() might access a NULL pointer if a socket gets closed just before it gets accessed. Fixed.
  6. Core: IP_SOCKET_GetAddrFam(), IP_SOCK_errno() and select() with SOC_CHECK_ALWAYS enabled do not correctly use the API lock and might access a socket that no longer exists. Fixed.
  7. Data received via IP-over-USB is not counted by IP_STATS. Fixed.
  8. Discover package (optional add-on): The FLUSH bit is not set for answers to the primary hostname. Fixed.
  9. FTP server (optional add-on): Parameter "/" for LIST command is not handled correctly. Fixed.
  10. FTP server (optional add-on): NLST command returns LIST result. Fixed.
  11. FTP server (optional add-on): Possible NULL pointer access in application callbacks as it is not checked if a data connection has been established if the command requires one. Fixed.
  12. IPv6 (optional add-on): Using IPv6 in a configuration with multiple interfaces where at least one of them has no IPv6 address assigned can lead to a NULL pointer access. Fixed.
  13. MQTT client (optional add-on): MQTT connect message uses unaligned access which might be a problem for some CPUs and is not big endian compatible. Fixed.
  14. PPP/PPPoE (optional add-on): Using the ACCM field has been disabled long ago as it did not seem to work due to bad documentation in the RFC. Most peers accept that we simply escape all characters instead of obeying the negotiated ACCM but some do not. Fixed by correctly implementing ACCM handling.
  15. SMTP client (optional add-on): Having no or multiple FROM addresses returns success for IP_SMTPC_Send() where this should be an error. Fixed.
  16. SMTP client (optional add-on): Having no recipients returns success for IP_SMTPC_Send() where this should be an error. Fixed.
  17. SNMP agent (optional add-on): Length field for octet strings and OID values above 127 is not correctly stored as multi-byte length. Fixed.
  18. Web server (optional add-on): WebServer always treats POST parameter urlencoded even if they are not. Fixed.
  19. WebSocket protocol (optional add-on): Internet Explorer requires PONG frame handling. Fixed by adding handling for this case.
  20. WebSocket protocol (optional add-on): A buffer overflow on the stack might occur when a message of more than 32 bytes gets discarded. Fixed.

Version 3.22c [29. November 2017]

New Features

  1. Core: New API for packet flood handling added:
    • IP_NI_PauseRxInt()

Improvements

  1. DHCP server (optional add-on): IP_DHCPS_Init() is now obsolete. Its function is handled by IP_DHCPS_ConfigPool() that needs to be called anyhow.

Program corrections

  1. Core: Too strict interface down check discards PPP packets. Fixed.
  2. Core: API lock added to IP_ACD_Activate() in v3.20 blocks IP_Task during activate, resulting in not recognizing a first collision. Fixed.
  3. Driver: Renesas EtherC driver might discard frames before they are completely received by the DMA logic. Fixed.

Version 3.22b [5. September 2017]

Improvements

  1. Web server (optional add-on): Internal padding for allocated structures as resetting #pragma pack in some toolchains might not work reliable.

Program corrections

  1. Core: In case of a memory shortage, failing in creating a socket might access an uninitialized pointer. Fixed.
  2. Ship: The add-on MQTT Client is missing in v3.22 PRO shipments. Fixed.

Version 3.22a [1. August 2017]

Improvements

  1. Core: Reduced internal operations on interfaces with hardware state down.

Program corrections

  1. Core: Under certain configurations with "IP_MAX_IFACES == 1", the RxTask might not be locked properly against a Tx interrupt. Fixed.
  2. Core: Packets on loopback interface are discarded due to a flood/spoofing check. Fixed.

Version 3.22 [28. July 2017]

New Features

  1. Core: New API added:
    • IP_DHCPC_AddStateChangeHook()
    • IP_DNS_ResolveHostEx()
    • IP_DNS_SendDynUpdate()
    • IP_DNS_SetTSIGContext()
    • IP_MDNS_ResolveHost()
    • IP_NI_AddPTPDriver()
    • IP_SendPingCheckReply()
    • IP_SetMicrosecondsCallback()
    • IP_SetRandCallback()
    • IP_SOCK_recvfrom_ts()
  2. Core: New configuration defines added:
    • IP_NO_BSD_SOCK_API
  3. FTP client (optional add-on): Support for implicit/explicit SSL/TLS added. New API:
    • IP_FTPC_InitEx()
  4. FTP server (optional add-on): Support for implicit/explicit SSL/TLS added. New API:
    • IP_FTPS_AllowOnlySecured()
    • IP_FTPS_IsDataSecured()
  5. PTP OC Slave (optional add-on): PTP (IEEE 1588v2) Ordinary Clock add-on released.
  6. NTP client (optional add-on): NTP client add-on released.

Program corrections

  1. Core: VLAN packets that use priority bits are discarded. Fixed, priority bits are now ignored.
  2. Driver: Renesas RZ/A1 driver overwrites manually set PHY address. Fixed.
  3. Driver: Renesas EtherC driver tries to resend the same packet endlessly when link goes down while sending. Fixed.
  4. Discover package (optional add-on): A name check might not end properly. Fixed.
  5. Web server (optional add-on): IP_WEBS_Redirect() does not close an opened file handle. Fixed.

Version 3.20 [22. June 2017]

New Features

  1. Core: New API for Taskless Accept for TCP added:
    • IP_TCP_Accept()
  2. Core: Added profiling define IP_SUPPORT_PROFILE_PACKET to be able to trace packet alloc/free operations.
  3. Core: Added UDP early discard check for UDP packets that are not for this target. Optmized packet buffer usage.
  4. Core: Added IP fragmentation support by enabling IP_SUPPORT_FRAGMENTATION_IPV4 and/or IP_SUPPORT_FRAGMENTATION_IPV6. New API:
    • IP_FRAGMENT_ConfigRx()
    • IP_FRAGMENT_Enable()
    • IP_IPV6_FRAGMENT_ConfigRx()
    • IP_IPV6_FRAGMENT_Enable()
  5. Driver: New generic driver for Synopsys QoS based devices added (ST STM32H7).
  6. Driver: New driver API added to Synopsys driver to force transmit store and forward mode to prevent transmit underflows with slow external RAM:
    • IP_NI_SYNOPSYS_ConfigTransmitStoreForward()
  7. Driver: New driver API added to Redpine Signals RS9113 WiFi driver to select internal or external antenna and gain:
    • IP_NI_WIFI_REDPINE_RS9113_ConfigAntenna()
    • IP_NI_WIFI_REDPINE_RS9113_ConfigRegion()
  8. Driver: New driver API added to Renesas EtherC driver to skip interrupt setup (for manual polling):
    • IP_NI_ETHERC_ConfigSkipIntSetup()
    • IP_NI_ETHERC_ISRHandler()
  9. Discover package (optional add-on): New add-on package available containing protocols (mDNS/DNS server, NetBIOS) necessary to access your target by its name under several operation systems (Windows/Mac/Linux).
  10. CoAP (optional add-on): Stand alone Constrained Application Protocol (CoAP) server/client add-on released.

Improvements

  1. Core: Improved handling of small memory configurations that require more buffers than configured.
  2. FTP server (optional add-on): Removed trailing slash for file system from MKD commands as it confused some file systems.
  3. FTP server (optional add-on): Trying to delete a non-empty folder does not close the connection and allows a client to delete files from folders and retry.

Program corrections

  1. Ship: Some of the shipped sample configurations for BSP_IP.c are missing the include for SEGGER.h for our types U8/U16/U32. Fixed.
  2. Ship: Dummy driver was not shipped. Fixed.
  3. Core: IP_ARP_CleanCache() and IP_ARP_CleanCacheByInterface() do not remove pending ARP requests. Fixed.
  4. Core: TFTP IP_TFTP_SendFile() returns with success if server does not respond at all. Fixed.
  5. Core: TFTP IP_TFTP_ServerTask() does not send empty response for existing files of zero bytes. Fixed.
  6. Driver: ATMEL ATWILC1000 WiFi driver uses uint8_t type where uint8 should be used and might fail to compile if nothing else includes an uint8_t type. Fixed.
  7. SMTP client (optional add-on): Return value for multipart send callback added to allow abort sending if there is a problem with an attachment. See migration guide.

Version 3.16 [23. March 2017]

New Features

  1. Core: New API added.
    • IP_SetGlobalMcTTL()
    • IP_SetLocalMcTTL()
    • IP_DHCPC_ConfigDNSManually()
  2. Driver: Added dummy driver that can be used as a placeholder to skip interface indexes.
  3. Driver: Added generic Renesas EtherC driver. Replaces the Renesas RX driver and adds Synergy S5 & S7 support.
  4. Driver: Added generic NXP LPC driver. Replaces the NXP LPC17xx/40xx, LPC23xx/24xx, LPC32xx drivers.
  5. Driver: Added NXP LPC18xx/43xx support to generic Synopsys driver.
  6. FTP server (optional add-on): Added new API that supports dynamic memory allocation instead buffers on task stack:
    • IP_FTPS_ConfigBufSizes()
    • IP_FTPS_CountRequiredMem()
    • IP_FTPS_Init()
    • IP_FTPS_ProcessEx()
    • IP_FTPS_SetSignOnMsg()
  7. Web server (optional add-on): Static files like Javascript can be stored pre-compressed as gzip:
    • IP_WEBS_ConfigFindGZipFiles()

Improvements

  1. MQTT client (optional add-on): Improved QOS handling for receiving messages with 0 bytes payload.
  2. Driver: All drivers have been changed to IP_BSP_API. See shipped IP_Config_*.c samples or [AN07001] embOS/IP Migration Guide changes for embOS/IP V3.08 for required changes.
  3. Driver: Added IP_DeInit() support for WiFi driver Longsys GT202.
  4. Driver: Removed RTOS.h dependency from PIC32MZ driver. Cache handling needs to setup in IP_X_Config(), see shipped sample configuration.
  5. Driver: ConnectOne iW WiFi will now use the pre-prgrammed MAC address (if any) read with "AT+iMACA?".

Program corrections

  1. Core: recv()/recvfrom() pAddrLen is not correctly checked for size for IPv6 sockets. Fixed.
  2. Core: Windows IP_FS layer pfRename() did not correctly work. Fixed.
  3. Core: A very rare combination of alignment and TCP socket buffer usage might lead to a problem with the DMA of drivers. Fixed.
  4. Core: In a rare condition TCP with timestamps enabled might send wrong content. Fixed.
  5. Core: In the rare condition that the DHCP client gets activated with first DNS server set to a zero IP, a NULL pointer is used. Fixed.
  6. MQTT client (optional add-on): Socket disconnect (return value 0) might not be passed down to the application. Fixed.
  7. Web server (optional add-on): The header field "Connection:" is not correctly parsed if the content is not "Upgrade" only. Fixed.
  8. Driver: Microchip ENCx24J600 problem for workaround introduced in v3.14 identified. The driver does not use bitwise register access where necessary. Fixed (small API change in IP_NI_ENCX24J600_ACCESS structure).
  9. Driver: PIC32MZ does not work when IP_RxTask() is used. Fixed.
  10. Driver: WiFi driver Longsys GT202 might get stuck due to a race condition. Fixed.

Version 3.14 [23. December 2016]

New Features

  1. IPv6 (optional add-on): Added support for virtual interfaces without own Ethernet type created with IP_AddVirtEtherInterface() .
  2. FTP server (optional add-on): LIST/NLST commands now support wildcards '*' and '?' in the parameter to support Windows FTP client mdelete/mget/mput commands.
  3. MQTT client (optional add-on): Stand alone add-on MQTT (MQ Telemtry Transport) client released.
  4. SMTP client (optional add-on): Support for attachments (multipart items) added.
  5. WebSocket protocol (optional add-on): Stand alone WebSocket add-on released.
  6. Web server (optional add-on): WebSocket connection handling added (needs WebSocket add-on). New API added:
    • IP_WEBS_WEBSOCKET_AddHook()

Improvements

  1. Core: Identical MAC address filters from multiple interfaces are removed so each filter address is only set once for a hardware interface.
  2. Driver: Microchip ENCx24J600 might not clear correctly the transmit flag if Tx and Rx are ongoing at the same time. Workaround added.
  3. Driver: ConnectOne iW WiFi module might need some additional time after reset to become stable. After reset delay added to the driver on reset.
  4. Web server (optional add-on): Extended return values for IP_WEBS_Process[Ex][Last]() .

Program corrections

  1. Core: IP_SendPacket() sets pPacket->pData without 2 bytes padding. This might not work with all drivers. Fixed.
  2. Core: DHCP client does not register IP_DeInit() callback if IP_DHCPC_Activate() is not called (e.g. only IP_DHCPC_Halt() is called). Fixed.
  3. Core: Multicast filters are only generated based on config of first interface. Fixed.
  4. Driver: WiFi Longsys GT202 does not set link down on disconnect. Fixed.
  5. Driver: SNR range if WiFi Longsys GT202 was 0..95 but should be 0..90. Fixed.
  6. Driver: WiFi ConnectOne iW driver tries to strlen() on NULL pointer. Fixed.
  7. Driver: WiFi Redpine Signals RS9113 driver tries to strlen() on NULL pointer. Fixed.
  8. SMTP client (optional add-on): Buffer overflow when receiving very long lines. Fixed.

Version 3.12 [11. October 2016]

New Features

  1. Core: New API added.
    • IP_NI_ClrBPressure()
    • IP_NI_SetBPressure()
    • IP_PHY_ConfigGigabitSupport()
  2. Core: PHY driver template added.
  3. Driver: The following ATMEL drivers have been moved into the generic Cadence driver:
    • AT91CAP9
    • AT91SAM7X
    • AT91SAM9X (standalone driver is kept due to better performance with iRAM)
    • AT91SAM9260
    • AT91SAM9263
    • AT91SAM9G20
    • AT91SAM9G45
    • ATSAM3X
  4. Driver: Microchip PIC32MZ driver added.
  5. PHY driver: Marvell 88E1111 PHY driver for Fiber added. Copper runs with generic PHY driver.
  6. SMTP client (optional add-on): Added support for sending mails using a secured connection (SSL stack required).
  7. Web server (optional add-on): Digest Authentication (RFC 2069) support added. New API added:
    • IP_WEBS_AUTH_DIGEST_CalcHA1()
    • IP_WEBS_AUTH_DIGEST_GetURI()
    • IP_WEBS_GetProtectedPath()
    • IP_WEBS_UseAuthDigest()

Improvements

  1. Core: Reducing code size by using shared SEGGER components for log and warn messages.
  2. Driver: ASIX AX88180 IPv6 support improved.
  3. Driver: ATMEL AT91SAM9X cache handling improved.
  4. Driver: ATMEL AT91SAM9X now uses IP_BSP_API.
  5. Driver: Cadence improved Tx underrun handling for targets with slow memory added.
  6. Driver: DAVICOM DM9000 improved handling of overrun situations added.
  7. Driver: DAVICOM DM9000 back pressure can be disabled by using IP_NI_ClrBPressure() for faster receiving if the hardware is able to handle it.
  8. Driver: Freescale i.MX25 multicast hash filters added.
  9. Driver: Luminary/TI LM3S6965 promiscuous mode added for multicast support.
  10. Driver: Luminary/TI LM3S9B90 promiscuous mode added for multicast support.
  11. Driver: Microchip ENCx24J600 now uses IP_BSP_API and multicast hash filters added.
  12. Driver: Microchip ENCx24J600 function IP_NI_ENCx24J600_ConfigUseSPI() added.
  13. Driver: Microchip ENCx24J600 workaround added where Tx seems to get stuck due to a hardware problem.
  14. Driver: NXP LPC32xx promiscuous mode and multicast hash filters added.
  15. Driver: Synopsys correction of bad frame checking in v3.10 does not work with ST STM32F1 due to a hardware bug. Workaround added.

Program corrections

  1. Core: DHCPc DISCOVER packet gets corrupted when host and/or domain name and/or vendor options occupy more space than available in a BOOTP packet. Fixed.
  2. Core: IP_SUPPORT_LOG/IP_SUPPORT_WARN defines might produce compile errors in combinations with IP_DEBUG 0. Fixed.
  3. Core: IP_OS_embOS.c does not correctly de-initialize if IP_DeInit() is used results in a problem on next IP_Init() (introduced with v3.10). Fixed.
  4. Driver: ASIX AX88180 buffer size is wrong in documentation. Fixed.
  5. Driver: ATMEL AT91RM9200 received packet size is calculated with CRC but should be without.
  6. Driver: ATMEL AT91RM9200 does not free HW buffers if no packet buffers were free in the stack. Fixed.
  7. Driver: Luminary/TI LM3S6965 runs in 10Mbit mode. Fixed.
  8. Driver: NXP LPC32xx crashes if stack has no more free packet buffers. Fixed.

Version 3.10 [12. September 2016]

New Features

  1. Core: WiFi support added. WiFi API added.
    • IP_WIFI_AddAssociateChangeHook()
    • IP_WIFI_AddInterface()
    • IP_WIFI_AddIsrExecDoneHook()
    • IP_WIFI_AddSignalChangeHook()
    • IP_WIFI_Connect()
    • IP_WIFI_ConfigAllowedChannels()
    • IP_WIFI_ConfigRegDomain()
    • IP_WIFI_Disconnect()
    • IP_WIFI_IsrExec()
    • IP_WIFI_IsrTask()
    • IP_WIFI_Scan()
    • IP_WIFI_Security2String()
    • IP_WIFI_ConfigIsrTaskAlwaysSignaled()
    • IP_WIFI_ConfigIsrTaskTimeout()
    • IP_WIFI_SignalIsrTask()
  2. Core: New API added.
    • IP_AddLinkChangeHook()
    • IP_IsAllZero()
    • IP_NI_ConfigLinkCheckMultiplier()
    • IP_SetOnPacketFreeCallback() (IP_SUPPORT_ON_PACKET_FREE_CB needs to be enabled)
  3. Core: IP_FS layer for Linux added.
  4. Driver: Added support for TI TM4C to generic Synopsys driver.
  5. Driver: Added multicast support for LPC17xx/LPC40xx driver.
  6. Web server (optional add-on): New API added.
    • IP_WEBS_SendFormattedString()
  7. FTP client (optional add-on): Commands PROT and PBSZ have been added to IP_FTPC_ExecCmd()

Improvements

  1. Core: IP_FS layer for Win32 extended by adding optional functionality.
  2. Driver: Moved port setup from Freescale Kinetis K60 driver to BSP_IP.c to make the driver more generic.
  3. Web server (optional add-on): Improved abort condition checking on file uploads.

Program corrections

  1. Core: TCP retransmissions forced by duplicate ACKs do not transmit an older chunk but the most recent chunk. Fixed.
  2. Driver: Synopsys driver forwards frames with bad checksums to the stack where they will be checked again. Fixed.
  3. Driver: LPC17xx/LPC40xx driver does not work with new PHY driver abstraction. Fixed.

Version 3.08a [12. July 2016]

New Features

  1. Web server (optional add-on): New functions added.
    • IP_WEBS_CountRequiredMem()
    • IP_WEBS_SetUploadFileSystemAPI()
    • IP_WEBS_SetUploadMaxFileSize()
  2. Web server (optional add-on): Callback set with IP_WEBS_SetFileInfoCallback() can override the file system API to use for a file.

Program corrections

  1. Core: Win32 FS porting layer might use a wrong return return value for _IP_FS_WIN32_WriteAt(). Fixed.
  2. Driver: Freescale K60/K70 driver does not forward MII/RMII mode to PHY which causes a warning when the PHY module fixes it. Fixed.
  3. Driver: Renesas RX driver sets wrong values for filters in big endian mode. Fixed.

Version 3.08 [30. June 2016]

New Features

  1. Core: SystemView API profiling support added.
  2. Core: IP_BSP_API added. More information can be found in the migration guide. Drivers already using the new IP_BSP_API.
    • Synopsys
    • NXP (Freescale) K60/K70
  3. Core: New API added.
    • IP_AddEtherTypeHook()
    • IP_AddOnPacketFreeHook()
    • IP_AllocEtherPacket()
    • IP_AllocEx()
    • IP_BSP_SetAPI()
    • IP_FreePacket()
    • IP_PHY_DisableCheck()/IP_PHY_DisableCheckEx() has a new flag PHY_DISABLE_WATCHDOG .
    • IP_SendEtherPacket()
    • IP_SYSVIEW_Init()
  4. Driver: New generic driver for Synopsys Ethernet IP added. Replacement for the following drivers.
    • Infineon XMC45xx
    • ST STM32F1
    • ST STM32F2/F4
    • ST STM32F7
    • Spansion (Fujitsu) MB9Bx10T
  5. Web server (optional add-on): New functions added.
    • IP_WEBS_AddPreContentOutputHook()
    • IP_WEBS_ConfigUploadRootPath()
    • IP_WEBS_SendLocationHeader()
    • IP_WEBS_SetHeaderCacheControl()

Improvements

  1. Driver: Hardware filtering added to ST STR912 driver.
  2. Driver: Multicast filtering added to Toshiba TMPM369 driver.
  3. Web server (optional add-on): IP_WEBS_Redirect() now supports redirecting to VFiles.

Program corrections

  1. Core: TFTP tries to send an error packet to the server if unable to open a local file to store. Fixed.
  2. Driver: TI TM4C does not work correctly with IPv6. Fixed.
  3. PPP/PPPoE (optional add-on): Service name has always been added to a PADR packet although no service name has been sent by the peer. Fixed.
  4. Web server (optional add-on): IP_WEBS_Redirect() does not prevent the web server from sending a second header. Fixed.

Version 3.06 [12. May 2016]

New Features

  1. Core: New API added.
    • IP_NI_GetTxQueueLen()
  2. Core: New IP_STATS module with the following functions added.
    • IP_STATS_EnableIFaceCounters()
    • IP_STATS_GetIFaceCounters()
    • IP_STATS_GetLastLinkStateChange()
    • IP_STATS_GetRxBytesCnt()
    • IP_STATS_GetRxDiscardCnt()
    • IP_STATS_GetRxErrCnt()
    • IP_STATS_GetRxNotUnicastCnt()
    • IP_STATS_GetRxUnicastCnt()
    • IP_STATS_GetRxUnknownProtoCnt()
    • IP_STATS_GetTxBytesCnt()
    • IP_STATS_GetTxDiscardCnt()
    • IP_STATS_GetTxErrCnt()
    • IP_STATS_GetTxNotUnicastCnt()
    • IP_STATS_GetTxUnicastCnt()
  3. SNMP agent (optional add-on): ADDON SNMP agent: Stand alone add-on SNMP agent released including MIB-II (System and Interfaces) support for embOS/IP out of the box.

Program corrections

  1. Core: ICMP packets from a broadcast or multicast address are not correctly discarded. Fixed.
  2. IPv6 (optional add-on): Random unicast address generation is not random. Fixed.
  3. Web server (optional add-on): Using the old web server API with buffers allocated from task stacks does not setup parameter handling correctly. Fixed.

Version 3.04a [20. April 2016]

New Features

  1. Core: New API added.
    • IP_FindIFaceByIP()
    • IP_NI_GetAdminState()
    • IP_NI_GetIFaceType()
    • IP_NI_GetState()
    • IP_NI_SetAdminState()
  2. Driver: Support for ATMEL SAM4E added to CADENCE driver.

Improvements

  1. Core: Removed a double API lock/unlock that confuses FreeRTOS. In general our behavior was correct.
  2. Driver: Some CADENCE GMAC units seem to have a problem with IPv6 multicast. Workaround by using promiscuous mode in this case.

Program corrections

  1. Core: A NULL pointer might be accessed when searching for a socket. Fixed.
  2. Core: IGMPv2 group reports should be addressed to the group instead of the ALL_HOSTS multicast address. Fixed.
  3. Driver: Renesas RX driver discards packets on overrun. Together with using the IP_RxTask() this might lead to not receiving any packet at all. Fixed.
  4. Web server (optional add-on): A buffer overflow might occur when parameters are copied from the input buffer to the parameter buffer. Fixed.

Version 3.04 [16. March 2016]

New Features

  1. Core: Added SystemView trace support (IP_SUPPORT_TRACE) for sending/receiving packets for more insight of stack operations.
  2. Core: Added IP_OK_TRY_OTHER_HANDLER return value for zero-copy callback in case another handler should be allowed to try his luck (using the same port with multiple callbacks).
  3. Core: Added IP_ICMP_RX_ALLOW_BC_MC (default 0 to avoid DDOS instrumentation) to allow accepting ICMP requests sent to a broadcast or multicast address.
  4. PHY driver: IP_PHY_DisableCheck() and IP_PHY_DisableCheckEx() can disable PHY access after first link up in case PHY access consumes too much time (happens when MDIO signals need to be generated manually).
  5. Web server (optional add-on): Added IP_WEBS_AddRequestNotifyHook() for request logging.

Improvements

  1. Core: Reduced overall time that interrupts are disabled by the stack.
  2. Driver: Added support for back-to-back sending for improved speed for CADENCE driver.
  3. Driver: Added IP_NI_RZ_A1_HandleTxFromRxTask() to Renesas RZ/A1 driver to reduce interrupt run time due to missing FIQ functionality of CPU.
  4. Driver: Added hash filtering to STM32 drivers.

Program corrections

  1. Core: Offsets for cache handling from cached to uncached might be calculated twice depending on the driver. Fixed.
  2. Core: IP_CACHE_* routines do not align clean/invalidate accesses and do not work with changed embOS API. Fixed.
  3. Core: PHY access routines might get called for interfaces without a PHY driver. Fixed.
  4. Core: A too small configuration might lead to a situation (when using TCP) where all buffers are used up by Tx and will never be freed as no Rx can be received. Fixed.
  5. Core: DHCP client does not correctly handle large lease times (U32 overrun). Lease time is now capped at 49 days.
  6. Core: Adding a loopback interface in IP_X_Config() causes a problem during IP_Init(). Adding a loopback interface after IP_Init() succeeds. Fixed.
  7. Core: The TCP sequence number of a lost FIN is incremented for a retransmit where it should not. Fixed.
  8. Driver: On Tx queue reset of ST STM32F2/F4 the TxInt packet counter is not reset. Fixed.
  9. FTP server (optional add-on): By accident a development version was shipped in version 3.02b. Fixed.
  10. Web server (optional add-on): The VFile callback with index 0 is treated as error when being found. Fixed.

Version 3.02b [23. December 2015]

New Features

  1. Core: FreeRTOS OS abstraction layer is available.
  2. Core: New API added.
    • IP_GetFreePacketCnt()
    • IP_GetIFaceHeaderSize()
  3. Core: New PHY driver API added.
    • IP_PHY_ConfigAltAddr()
    • IP_PHY_ConfigUseStaticFilters()
    • IP_PHY_ReInit()
  4. PHY driver: New API for Micrel Switch PHY driver added.
    • IP_PHY_MICREL_SWITCH_ConfigLearnDisable()
    • IP_PHY_MICREL_SWITCH_ConfigRxEnable()
    • IP_PHY_MICREL_SWITCH_ConfigTxEnable()

Improvements

  1. Core: Improved cache handling of the stack for future driver improvements.
  2. Driver: Added support for back-to-back sending for improved speed for ST STM32F2/F4 and Infineon XMC45xx.
  3. Driver: Freescale Kinetis K60 driver Tx speed improved.

Program corrections

  1. Core: recvfrom() does not accept NULL parameters for UDP sockets. Fixed.
  2. Core: IP_INFO_GetConnectionList() does not stop after MaxItems parameters is reached. Fixed.
  3. Core: DHCP client renews its IP addr. after the complete lease time has expired instead of half of it. Fixed.

Version 3.02a [30. November 2015]

Improvements

  1. Driver: Added support for promiscuous mode to Renesas RX driver to fully support Multicast and IPv6.

Program corrections

  1. NetBIOS (optional add-on): NetBIOS always sends back on the first interface instead on the interface that the request was received. Fixed.
  2. Tail Tagging (optional add-on): Automatic MTU calculation from hardware interface does not take the tail tagging byte into account, resulting in a MTU 1 byte too large. Fixed.
  3. Driver: Microchip ENCx24J600 might get stuck in a rare condition when the link goes down. Fixed.

Version 3.02 [25. November 2015]

New Features

  1. Core: New API added.
    • IP_ARP_CleanCache()
    • IP_ARP_CleanCacheByInterface()
    • IP_ConfigMaxIFaces()
    • IP_ConfigNumLinkDownProbes()
  2. Core: Support for PHY drivers and new PHY driver API added.
    • IP_PHY_AddDriver()
    • IP_PHY_ConfigAddr()
    • IP_PHY_ConfigSupportedModes()
    • IP_PHY_DisableCheckEx()
  3. PHY driver: Generic PHY driver replaced (with legacy API support) and new generic PHY driver API added.
    • IP_PHY_GENERIC_RemapAccess()
  4. Driver: Renesas RX driver now supports RX64M and RX71M devices including dual MAC support.
  5. Driver: TI TM4C (Tiva C) driver updated due to possible Ethernet initialization problem mentioned in errata (SPMZ850D ETH#02).
  6. Tail Tagging (optional add-on): Virtual Micrel Tail Tagging interface added.
  7. Web server (optional add-on): New functions added.
    • IP_WEBS_UseRawEncoding()
    • IP_WEBS_GetConnectInfo()

Improvements

  1. Core: Code cleanup and intelligent stack usage to reduce task stack requirements.
  2. Driver: Micrel KSZ8851SNL updated for IPv6 support.

Program corrections

  1. Core: IP_ResolveHost() returns an error if provided with an IP address instead of a host name due to a parsing error. Fixed.
  2. Core: IP_ACD_Activate() always checks link state of interface #0. Fixed.
  3. Core: Cache clean/invalidate calls do not make sure that NumBytes is a multiple of a cacheline and might result in OS_Error with latest embOS release. Fixed.
  4. Driver: V850 drivers might read the wrong packet size. Under heavy load it might happen that the number of bytes received are not updated in the descriptor in time. Fixed by re-reading the status.
  5. Web server (optional add-on): Browsing a VFile that does not exist sends back random buffer content. Fixed.

Version 3.00b [9. October 2015]

Program corrections

  1. Web server (optional add-on): CGI names are not compared completely and might result in finding the wrong callback. Fixed.

Version 3.00a [7. October 2015]

New Features

  1. Core: New API added.
    • IP_ConfigNumLinkUpProbes()
    • IP_SOCKET_GetAddrFam()
    • IP_SOCKET_GetLocalPort()
  2. Driver: Freescale Kinetis K60 driver now supports IPv6 (hardware checksum computation only supports IPv4).

Improvements

  1. SNTP client (optional add-on): Non-standard bit-field usage might not compile with older compilers. Fixed by removing bit-field usage.

Program corrections

  1. Core: Keepalives are sent with source and destination port set to zero. Fixed.
  2. Core: Driver filters are set too early during init. Fixed.
  3. Core: An incorrect parameter is used when selecting the interface to send with UDP and IPv6 enabled. Fixed.
  4. Core: Flood protection does not work in all cases. Fixed.
  5. Driver: Infineon XMC45xx, ST STM32F1xx/STM32F2xx/STM32F4xx and TI TM4C (Tiva C) get stuck once a hardware counter reaches half of its max. value. Fixed.
  6. FTP client (optional add-on): Responses that span multiple lines might not be always detected correctly. Fixed.
  7. FTP client (optional add-on): Upon a bad password the execution is not aborted. Fixed.
  8. IPv6 (optional add-on): TCP software checksum calculation generates wrong checksum. Fixed.
  9. IPv6 (optional add-on): Wrong interface for sending might be selected. Fixed.
  10. IPv6 (optional add-on): Multicast addr. are not correctly removed when no longer needed. Fixed.
  11. IPv6 (optional add-on): Driver filters are accessed before the driver is completely initialized. Fixed.

Version 3.00 [14. August 2015]

New Features

  1. Core: New API added.
    • IP_GetMaxAvailPacketSize()
    • IP_GetMTU()
    • IP_IGMP_AddEx()
    • IP_TCP_AllocEx()
  2. Driver: Added driver for NIOSII Altera Triple Speed Ethernet (TSE) Controller (10/100MBit).
  3. Driver: Added driver for Renesas RZ/A1.
  4. IPv6 (optional add-on): IPv6 support added.
  5. Web server (optional add-on): New API for dynamic configuration added.
    • IP_WEBS_AddUpload()
    • IP_WEBS_ConfigBufSizes()
    • IP_WEBS_ConfigRootPath()
    • IP_WEBS_Flush()
    • IP_WEBS_Init()
    • IP_WEBS_ProcessEx()
    • IP_WEBS_ProcessLastEx()
    • IP_WEBS_SendHeaderEx()

Improvements

  1. Core: Discard packets sent from broadcast or multicast addresses instead of answering to them for several protocols like TCP, ICMP and others to prevent flooding the network.
  2. DHCP server (optional add-on): Discard packets received on an interface for which no DHCP server has been started.

Program corrections

  1. Core: MTU can be set to a value higher than supported by the interface. Fixed.
  2. Core: TCP zero-copy might damage the socket list due to a missing lock. Fixed.
  3. Driver: TI LM3S6965 & LM3S9B90 might loose an interrupt and stop working. Fixed.
  4. Web server (optional add-on): Using multiple user/pass combinations (introduced with v2.20h) for the same path leads to accept invalid logins. Fixed.