NDK Change Log
Table of Contents
NDK 3.75
Bugs
NDK-527 |
Improve SysConfig error checking of user-supplied C functions |
NDK-521 |
Fix NIMU Interface ID at build time |
NDK-516 |
The NAT SysConfig module should be limited to one instance |
NDK-513 |
Fix some broken links in documentation |
NDK-512 |
IP & TCP Rx SW checksum validation is skipped if HW checksums are disabled |
NDK-505 |
SysConfig build warnings for some IP options |
NDK-504 |
Issues when configuring NDK ServiceReport functions using SysConfig |
NDK-495 |
Module name for EMAC in SysConfig display should be “EMAC” not “emac” |
NDK-494 |
User supplied function for Service Report in SysConfig fails to compile |
NDK-492 |
NDK_EALREADY error is not being translated in slnetif layer |
NDK-486 |
SlNetIfNDK_bind and SlNetIfNDK_listen do not properly return error codes |
NDK-478 |
Telnet's EchoTcp() EchoUdp() should use a more complete test pattern |
NDK-469 |
Incorrect assert fires if SlNetIfNDK_recvFrom() is passed MSG_DONTWAIT |
NDK-463 |
Sockets ROV view has incorrect calculation for amount of buffer used |
NDK-415 |
Missing setsockopt options in NDK's SlNetIf |
NDK-413 |
NDK_setsockopt() should ensure valid optval ranges are supplied |
NDK-394 |
Fix check for duplicate wildcard sockets in Sock6PcbBind |
NDK-356 |
TCP server sockets do not transition to listen state after call to listen() |
NDK-89 |
UDP client socket doesn't “auto bind” its port |
Enhancements
NDK-525 |
Improve support for devices with partial checksum offload |
NDK-524 |
Remove deprecated winapps directory |
NDK-518 |
Introduce debug stat to track TCP packets dropped due to no open port |
NDK-517 |
Add GenLibs support to contribute libraries via SysConfig |
NDK-511 |
Update docs to position XDC-based NDK config as deprecated |
NDK-498 |
Remove unnecessary TCP software checksums |
NDK-482 |
Add TCP debug logging |
NDK-481 |
Add a free count to NDK's ROV memory view |
NDK-477 |
Introduce protocol specific hardware checksum offload flags |
NDK-475 |
Add M4F (TICLANG) library support |
NDK-473 |
Remove legacy eclipse plugin |
NDK-462 |
Remove deprecated HTTP Server |
NDK-431 |
Add NDK Interface (NIMU) module to NDK sysconfig |
NDK-379 |
Add PBMQ_enqHead() capability |
NDK-62 |
ROV should show IPv4/IPv6 address info |
Compatibility Notes
NDK 3.75 is not binary compatible with NDK 3.71, though it is generally source compatible. The following changes are notable when considering compatibility:
- To address NDK-504, the SysConfig support for handling service report functions has changed.
- Previously (NDK 3.70 and 3.71):
- SysConfig would always generate a service report function, named
serviceReport()
, in ti_ndk_config.c. By default, serviceReport()
did nothing (except when an external DNS server was registered, more on that later). If users configured General.serviceReportHook
, the generated serviceReport()
would call that user-supplied service report hook from the generated serviceReport()
.
- If the user (via SysConfig) 1) configured the “Local IP Address Configuration” (
General.localIPAddrConfig
) to “Use DHCP to Obtain IP Address”, and 2) enabled an external DNS server (General.enableExtDNS
), the generated serviceReport()
would automatically detect when the DHCP Client service added or renewed an IP address, and register the external DNS Server with the stack.
- The default service report function configured for services like DHCP Clients, Telnet, DHCP Servers, NAT and DNS Servers was the always-generated
serviceReport()
.
- Currently (NDK 3.75+):
- SysConfig will no longer generate any service report functions. Users can still configure their own service report functions, but in all cases the application must implement that service report. As a result, the
General.serviceReportHook
config param has been removed.
- If using 1) DHCP Client and 2) an external DNS Server, the user must handle the registration of the external DNS Server with the stack when the DHCP Client adds/renews its IP address.
- The default service report functions for services are now
NULL
.
- To address NDK-431, the NDK SysConfig settings have slightly changed. Please refer to the examples provided in your SDK for new usage.
- To address NDK-462, the NDK’s HTTP/1.0 Server, as well as related scripts/tools (e.g. ti/ndk/tools/binsrc), have been removed. These have been documented as deprecated for over a year. The Network Services Component is now providing a much more fully featured HTTP/1.1 Server, which is recommended.
- To address NDK-524, the host executables previously provided in ti/ndk/winapps have been removed. These have been documented as deprecated for over a year.
- To address NDK-356, the internal state of a socket will now change to LISTEN while listening rather than previously being in CLOSED. Most users will not be affected by this! However, there are some
setsockopt()
options which must be set when a socket is CLOSED, for example the TCP Selective Acknowledgment (SACK) feature. If you are using the SACK feature, you must now be sure to enable SACK (using setsockopt()
) before calling listen()
. Previously, although this was still the recommended approach, users could have enabled SACK after listen()
and before accept()
. That is no longer possible, and attempts to enable SACK on a non-CLOSED socket will fail.
- To address NDK-525, support for hardware offloading of checksum calculation has been extended. To enable new types of hardware, several new fields have been added to the internal PBM packet descriptor (
PBM_Pkt
). Most users will not be affected by this, but this change does require that the device-specific NIMU drivers be rebuilt against this NDK version in order to ensure alignment on this structure change.
- To address NDK-518, a new field was added to the internal
NDK_tcps
global variable. This should not affect users, however if you have any tooling or debug techniques that utilize this variable, you may need to make changes.
NDK 3.71
Bugs
NDK-491 |
Configuring an external DNS server address causes SysConfig crash |
NDK-490 |
DNSGetReply() causes null deference in DNSReplyFree() if mmAlloc() fails for authoritative answers |
NDK-488 |
Errant NIMU driver can cause NULL dereference when receiving multicast packets |
NDK-437 |
Loopback transfers fail when enabling hardware checksums |
NDK-395 |
Address ppc variable build warning in pppoe/nimupppoe.c |
Enhancements
NDK-467 |
SlNetIfNDK should support TLS renegotiation |
NDK 3.70
Bugs
NDK-451 |
DNSReadRecord silently drops records if there is not enough memory |
NDK-449 |
SlNetIfNDK_getSockName does not translate NDK error code upon failure |
NDK-447 |
shutdown() not implemented in SlNetIfNDK |
NDK-446 |
getpeername() not implemented in SlNetIfNDK |
NDK-435 |
F2838X driver should not filter IPv6 multicast packets |
NDK-421 |
Build failure when enabling _STRONG_CHECKING |
NDK-419 |
Add docs describing ipaddrhook timing when configured with static IP |
NDK-418 |
SlNetIfNDK_loadSecObj does not check for duplicate object names |
NDK-408 |
NDK build instructions are out-of-date |
NDK-393 |
Update Docs with user feedback |
NDK-89 |
UDP client socket doesn't “auto bind” its port |
Enhancements
NDK-439 |
C-ROV sockets view should show bound port numbers |
NDK-438 |
Move SysConfig generated NIMU table from drivers to NDK |
NDK-416 |
Add NIMU driver for F2838X |
NDK-412 |
F2838X driver should support HW checksum error drop IOCTL |
NDK-411 |
Add NIMU IOCTL command to control the checksum offload engine's packet drop policy |
NDK-402 |
Add M33 (TICLANG) library support |
NDK-400 |
Users Guide style improvements |
NDK-396 |
remove unneeded -D_INCLUDE_NIMU_CODE from package.bld scripts |
NDK-391 |
NDK C-ROV support files should be generated by SysConfig |
NDK-355 |
Refactor SysConfig service flags |
NDK-354 |
Enable NIMU drivers to offload IPv6 Checksums to hardware |
NDK 3.61
Bugs
NDK-392 |
General documentation updates |
NDK-390 |
TI toolchain versions in release notes are incorrect |
NDK-387 |
NDK's general syscfg module does not pass configuration to stack init hook |
NDK-382 |
NDK services create memory leak when exiting their tasks |
NDK-381 |
Broken link in ConfigDoc.html's DHCP.dhcpClientPcbServer description |
NDK-380 |
Users cannot rebuild A53 libraries |
Enhancements
NDK-353 |
Add M33F (TICLANG) library support |
NDK 3.60
Bugs
NDK-322 |
Rename NDK_RegisterHook and NDK_getsockctx to conform to naming conventions |
NDK-319 |
Possible double free if TLS handshake fails |
NDK-318 |
SlNetIfNDK should use POSIX sem's rather than pthread_mutexes |
NDK-316 |
Remove SysConfig-generated code's dependency on Display |
NDK-315 |
Sockets do not remove themselves from the fd table if not closed through slnetifndk |
NDK-314 |
Changing SysConfig IP addr config from static to dynamic causes build failure |
NDK-92 |
return value of NIMU registered init function not checked |
NDK-29 |
Remove the need for Telnet users to supply VerStr symbol |
Enhancements
NDK-309 |
Enable NIMU drivers to offload IPv4 Checksums to hardware |
NDK-297 |
Provide SysConfig support for configuring the NDK's DHCP Server Module |
NDK-296 |
Provide SysConfig support for configuring the NDK's NAT Module |
NDK-295 |
Provide SysConfig support for configuring the NDK's DNS Module |
NDK-294 |
Update docs with info on Selective Acknowledgement feature |
NDK-270 |
Extend C-ROV NDK socket support |
NDK-238 |
Provide SysConfig support for configuring the NDK's Telnet Module |
Compatibility Notes
NDK 3.60 is mostly compatible with 3.50, with the following exceptions:
- To address NDK-322, the following functions have been renamed:
NDK_getsockctx()
became NDK_getSockCtx()
, and NDK_RegisterHook()
became NDK_registerHook()
. We expect very few users will be impacted, as both of these functions were introduced in NDK 3.50.
- For SimpleLink devices, the SysConfig feature is still in ‘preview’ and the NDK is not yet ensuring compatibility from release to release. Some NDK configuration variables have changed, and as a result, existing .syscfg scripts that configure the NDK may not load, and users may have to restart from an existing example.
NDK 3.50
Bugs
NDK-290 |
Shallow copy of deep object in ti_ndk_config_ip_init() |
NDK-289 |
Fix return codes in slnetifndk sockopt translation |
NDK-284 |
Update ti.ndk.config package to load POSIX Settings module |
NDK-275 |
SlNetSock_getLocalName() broken when using NDK |
NDK-274 |
Broken links in API Guide's Table of Contents |
NDK-268 |
Access to ti_ndk_socket_fdtable must be atomic |
NDK-251 |
NDK_socket/accept needs to honor config parameter maxSockFileDesc |
NDK-228 |
Release notes link to benchmarks broken |
NDK-218 |
Update TcpPrSetOption() to allow SACK to be disabled |
Enhancements
NDK-283 |
Add NDK 2.x to 3.x Migration Guide |
NDK-276 |
SysConfig - Place NDK's Modules in their own category |
NDK-269 |
Update docs to improve IPv6 usability |
NDK-263 |
Minor documentation clarifications |
NDK 3.40
Bugs
NDK-262 |
Translate TCP options in SlNetIfNDK |
NDK-261 |
Add NDK prefix to TCP constants |
NDK-260 |
Error codes in serrno.h need to be prefixed with NDK_ |
NDK-259 |
Add support for ENETDOWN in SlNetIfNDK |
NDK-257 |
Remove documentation for APIs no longer present in NDK |
NDK-252 |
Add support for MSG_PEEK and other missing flags in SlNetIfNDK_recv |
NDK-240 |
Update DNS macros to have NDK_ prefix |
NDK-233 |
Add support into SlNetIfNDK for SO_BROADCAST option |
NDK-135 |
check for NULL pointer before deref in IPv6 route code |
Enhancements
NDK-242 |
Move inet_ntop and inet_pton functions from NDK and into NS |
NDK-199 |
Add C-ROV support into NDK |
NDK-121 |
Add A53F gcc support |
NDK-105 |
Remove support for several legacy targets (non-gcc A8, M3, non-TI M4) |
Compatibility Notes
This release contains several compatibility breaks, which may require users to update and rebuild their source code.
- To address NDK-261, the following TCP macro names were changed. If your code contains references to any previous macro name, it must be updated to prepend
NDK_
to the name:
TCP_NODELAY |
NDK_TCP_NODELAY |
TCP_MAXSEG |
NDK_TCP_MAXSEG |
TCP_NOPUSH |
NDK_TCP_NOPUSH |
TCP_NOOPT |
NDK_TCP_NOOPT |
TCP_SACKPERMITTED |
NDK_TCP_SACKPERMITTED |
TCP_MAXRTT |
NDK_TCP_MAXRTT |
- To address NDK-240, the following DNS macro names were changed. If your code contains references to any previous macro name, it must be updated to prepend
NDK_DNS_E
to the name, with the exception of NOERROR
. NOERROR
is prepended with NDK_DNS_
:
NOERROR |
NDK_DNS_NOERROR |
FORMERR |
NDK_DNS_EFORMERR |
SERVFAIL |
NDK_DNS_ESERVFAIL |
NXDOMAIN |
NDK_DNS_ENXDOMAIN |
NOTIMP |
NDK_DNS_ENOTIMP |
REFUSED |
NDK_DNS_EREFUSED |
OVERFLOW |
NDK_DNS_EOVERFLOW |
MEMERROR |
NDK_DNS_EMEMERROR |
SOCKETERROR |
NDK_DNS_ESOCKETERROR |
NODNSREPLY |
NDK_DNS_ENODNSREPLY |
- To address NDK-260, all of the error code macros found in ti/ndk/inc/serrno.h have been renamed to have
NDK_
prepended to them.
- For example,
EINVAL
has been renamed and is now NDK_EINVAL
.
- Similar for all other error macros found in serrno.h
- If your code contains references to any of these macros, you must update your code to use the new names and rebuild.
- Refer to ti/ndk/inc/serrno.h for further details.
- To address NDK-242, the following APIs were moved out of the NDK and into the Network Services product:
inet_pton
inet_ntop
- If your code contains references to these functions, you may not have to change the actual calls to these functions in your code (since these BSD/POSIX APIs are identically defined by the BSD/POSIX headers in Network Services). However, you may need to update include path and link libraries of your application build, so that Network Services header files and libraries are pulled in. Additionally (if not already being done), it may be necessary to add the appropriate Network Services runtime initialization calls into your application. Please refer to the Network Services documentation and examples for more details.
NDK 3.30
Bugs
NDK-244 |
Translate address family in SlNetIfNDK |
NDK-243 |
Allow servers to request client authentication |
NDK-237 |
TLS handshake fails when the server requests a local certificate but none is provided |
NDK-234 |
inet_ntop() does not null terminate strings correctly for IPv6 |
NDK-232 |
Call Sock6CleanPcb() when an IPv6 address is removed and/or IPv6 is deinitialized |
NDK-230 |
Potential crash if client on a closed, lingering socket sends TCP_RST |
NDK-225 |
Potential crash when sockets linger and the stack is shut down |
NDK-221 |
Broken links in Users and API Guides |
NDK-205 |
Add NDK_ prefix to BIGENDIAN macro |
NDK-200 |
Add NDK_ prefix to global stats variables |
NDK-36 |
add llEnter/llExit around calls to SockCleanPcb() |
Enhancements
NDK-206 |
Update preprocessor big endian detection for all supported compilers |
NDK-127 |
Move getaddrinfo and freeaddrinfo into NS |
Compatibility Notes
getaddrinfo()
and freeaddrinfo()
have been migrated to the Network Services Component (ti/net namespace).
- As part of this migration, the values of the associated error code macros have changed (e.g.
EAI_FAMILY
, EAI_NONAME
, etc.)
- Therefore, any user application code that’s referencing the
EAI_*
macros must be rebuilt.
- The signatures of these functions remain unchanged, so there is no break in compatibility regarding the APIs themselves.
- Some NDK global variables and macros have been renamed to have a namespace prefix
- Any code that’s referencing the NDK global statistics variables (e.g.
tcps
, udps
, etc.) will need to be updated ito add the NDK_
prefix to those macros (e.g. NDK_tcps
, NDK_udps
) and rebuilt.
- Similarly, any code that references the NDK macro
BIGENDIAN
will need to be updated to have the prefix (NDK_BIGENDIAN
) and rebuilt.
NDK 3.20
Bugs
NDK-208 |
Change incorrect use of pthread_self() API in example code of documentation |
NDK-71 |
NDK BSD fd_set type overridden by sys/types.h shipped with BIOS |
Enhancements
NDK-216 |
Handle big endian detection properly for new tool chains |
NDK-190 |
NDK documentation updates |
NDK-184 |
Support SlNetIfNDK_getConnectionStatus() |
NDK-175 |
Make NDK callable from any thread |
NDK-171 |
Update NIMU IOCTL to support query of driver/interface link status |
NDK-55 |
Convert NDK Users Guides from pdf to html (via markdown) |
Compatibility Notes
- NDK + SYS/BIOS applications must define a BIOS Task hook set and register function
- The NDK requires the following function to be registered in the SYS/BIOS *.cfg file:
This can be done using the following configuration code in the *.cfg file:
var Task = xdc.useModule('ti.sysbios.knl.Task');
var ndkHooks = new Task.HookSet();
ndkHooks.registerFxn = '&NDK_hookInit';
Task.addHookSet(ndkHooks);
This Task hook set and registration is handled automatically for application configurations that use the ti.ndk.config.Global module
- A special note to SimpleLink SDK users building non-NDK applications with SYS/BIOS:
- If your application is using the default kernel configuration file, it will already have the previously mentioned configuration code to register the
NDK_hookInit()
function. This will result in undefined symbol errors for non-NDK applications.
- There are three ways to work around this problem in a non-NDK SYS/BIOS application:
- Use a different SYS/BIOS kernel configuration (*.cfg) file
- By default, the kernel configuration used in the examples contains the above code. You can create a new kernel configuration file which does not register the
NDK_hookInit()
function (hence removing the unwanted dependency) and build your application against it.
- Link the appropriate NDK OSAL library (which contains the
NDK_hookInit()
function definition) into your application.
- Although your application doesn’t need the NDK, this will resolve the undefined symbol error.
Provide an empty NDK_hookInit()
stub. This could be done using a weak symbol as follows:
/*
* The following function is only used in applications that use the NDK TCP/IP
* stack
*/
#if defined(__IAR_SYSTEMS_ICC__)
__weak void NDK_hookInit(int32_t id) {}
#elif defined(__GNUC__) && !defined(__ti__)
void __attribute__((weak)) NDK_hookInit(int32_t id) {}
#else
#pragma WEAK (NDK_hookInit)
void NDK_hookInit(int32_t id) {}
#endif
NDK 3.10
Bugs
NDK-201 |
udpecho does not receive correct payload |
NDK-197 |
accept() must support NULL address and address_len params |
NDK-192 |
NDK_bind needs to check for NULL arguments passed |
NDK-183 |
Race condition in SlNetIfNDK_startSec |
Enhancements
NDK-198 |
SlNetIfNDK should return more specific error codes when possible |
NDK-196 |
Add NDK_ prefix to all network byte order macros |
NDK-189 |
SlNetSock-using apps shouldn't require mbedtls footprint if they don't use it |
Compatibility Notes
- To address NDK-196, any code intending to use the NDK-provided “network byte order macros” (e.g.
htonl()
) will need to add the NDK_
prefix to those macros (e.g. NDK_htonl()
). In most cases, users intend to use the BSD/POSIX-defined macros (rather than those in the NDK), and should 1) continue using the BSD/POSIX-defined macros (e.g. htonl()
), and obtain those definitions from the BSD/POSIX headers (e.g. #include <arpa/inet.h>
), found along the BSD/POSIX include path (i.e. source/ti/net/bsd).
NDK 3.00
Bugs
NDK-181 |
NDK timeval struct conflicts with definition in GCC 6.x tool chain |
NDK-167 |
Fix memory leak in socket clean up code |
NDK-130 |
Remove conflicting bzero and bcopy definitions from the NDK |
NDK-120 |
NDK should support/use actual integer file descriptors for socket APIs |
NDK-119 |
Freeing invalid sockets causes crash |
NDK-67 |
Various NDK definitions (pipe and fd macros) conflict with the same ones that are shipped in the compiler |
NDK-61 |
possible race condition in TcpPrDetach causes NULL ptr dereference |
NDK-41 |
NDK interrupt module creates a 256 byte array to store a single interrupt |
NDK-17 |
Must update NDK list_* APIs to have a function pre-fix |
Enhancements
NDK-169 |
Remove NDK's (light) ROV support |
NDK-168 |
Remove C66 big endian libraries |
NDK-155 |
Enable FreeRTOS support in NDK |
NDK-151 |
Add mbedtls support to NDK |
NDK-142 |
Add MSP432E support to NDK |
NDK-140 |
Add support for 32-bit and 64-bit Linux targets in NDK |
NDK-138 |
Remove SNTP from NDK (as it is moving to Network Services) |
NDK-128 |
mmBulkAlloc should call malloc() NOT Memory_alloc() |
NDK-126 |
Remove NDK local typedefs (e.g. UINT32) and use C99 standard types |
NDK-124 |
NDK should use system wide errno |
NDK-115 |
MSG_NOSIGNAL is undefined |
NDK-103 |
Update OS layer to use POSIX APIs |
NDK-73 |
use GNUC preprocessor constant, not default #else, for GNU compiler specific code |
NDK-70 |
ARP table behavior implemented by SDOCM00107816 should be default behavior in NDK |
NDK-20 |
remove Interrupt_add() and related APIs |
Compatibility Notes
NDK 3.x has undergone significant changes from NDK 2.x, and as such, anyone upgrading from a previous NDK 2.x release will require user changes. A brief summary of these changes include:
- Restructuring of the OSAL to support FreeRTOS as well as SYS/BIOS
- Alignment on common C99 data types
- Gradual migration of BSD support from stack-specific NDK (ti/ndk namespace) into stack-agnostic Network Services (ti/net namespace).