Changes between 160919 and 180821 releases:

	+ Multiple security improvements and fixes in packet parsing routines, DNS
	  caching, and TCP sequence number and ID generation.
	+ Disable NBNS and LLMNR by default.
	+ Add TCP hang protection by default.

We thank Ori Karliner of Zimperium zLabs Team for reporting these issues.

Changes between 160908 and 160919 releases:

	+ Add a NULL check before attempting to close the DHCP socket.  [Prior to
	  160823 the IP task closed the DHCP socket by calling a public API function
	  - which checked for the socket being NULL.  This was changed to call a
	  local private function, which did not have a NULL check, in place of the
	  public API function.]
	+ Various [internal only] naming changes to better comply with the FreeRTOS
	  naming conventions.
	+ Improvements to the Zynq network driver.  DMA transmission buffers now use
	  a counting semaphore. When all TX-buffers are in-use, the IP-task will
	  block momentarily until a TX-buffer becomes available.
	+ Experimental implementation of the TCP window scaling protocol.  The
	  scaling option will always be offered, at least with a factor 1. If the
	  TCP sliding window size becomes more than 64KB, the factor will increase
	  automatically.
	+ ipconfigETHERNET_MINIMUM_PACKET_BYTES is now applied for every protocol:
	  TCP, UDP, and ARP.
	+ Updated the Zynq project to use BufferAllocation_1.c rather than
	  BufferAllocation_2.c - which is a requirement with its current
	  configuration (due to the alignment requirements on the combined cache and
	  DMA configuration).

Changes between 160823 and 160908 releases:

	+ Use ipconfigZERO_COPY_TX_DRIVER as the xReleaseAfterSend() parameter where
	  prvTCPReturnPacket() is called in prvSendData() to prevent unnecessary
	  copying of data.
	+ Remove the use of the uxGetRxEventCount variable, which was used to give
	  priority to incoming messages, but could result in the IP task starving
	  application tasks of processing time.

Changes between 160112 and 160823 releases

	NOTE:  The 160908 release is a maintenance release for the 160112 single
	interface labs release - not a release of the current development branch.

	+ Various minor stability enhancements, including the ability to work with
	  configTICK_RATE_HZ set to less than 1KHz, closing DHCP sockets directly
	  rather than via FreeRTOS_closesocket(), and better handling of unknown
	  TCP packets before an IP address has been assigned.
	+ ipBUFFER_PADDING is now configurable through the ipconfigBUFFER_PADDING
	  constant to improve network buffer alignment handling capabilities (expert
	  users/driver writers only).
	+ Multiple improvements to the FTP server, including to how read only and
	  zero length files are handled.
	+ ipconfigFTP_HAS_USER_PROPERTIES_HOOK (to allow each user to have a
	  different root directory and access rights) and
	  ipconfigHTTP_HAS_HANDLE_REQUEST_HOOK (to handle AJAX style data)
	  introduced, although these are not yet fully tested and the constant names
	  are likely to change.
	+ Introduce ipconfigHAS_TX_CRC_OFFLOADING.
	+ ipconfigUSE_DHCP_HOOK is now called ipconfigUSE_DHCP_HOOK, and the name
	  of the callback function has also changed.  See the web documentation for
	  details.
	+ ipconfigTCP_RX_BUF_LEN is now ipconfigTCP_RX_BUFFER_LENGTH, and
	  ipconfigTCP_TX_BUF_LEN is now ipconfigTCP_TX_BUFFER_LENGTH, which is
	  actually how they have always been documented.
	+ Added example TFTP server capable of receiving (not sending) files.
	  Intended for bootloader type functionality.
	+ Various variable name changes for consistency (mainly ensuring UDP, TCP,
	  DNS, etc. always use the same case letters, and type prefixes are correct).
	+ Various minor edits to improve types used by internal variables.
	+ Simplified mapping of standard library functions to their Visual Studio
	  equivalents.
	+ Improve robustness of network drivers.
	+ Introduce pxResizeNetworkBufferWithDescriptor().
	+ Removed obsolete FreeRTOSIPConfig.h constants from
	  FreeRTOSIPConfigDefaults.h.
	+ Added additional asserts() - predominantly to catch incorrect structure
	  packing.

Changes between 160112 and 160111 releases

	+ Updated the STM32 network driver so checksums are calculated by the
	  hardware.
	+ Implemented a simple "quit" command in the TCP command console.

Changes between 150825 and 160111 releases

	+ New device support:  Demo applications and example drivers are provided
	  for Atmel SAM4E and ST STM32F4 microcontrollers.
	+ Various updates to improve compliance with the FreeRTOS coding standard.
	+ Added a command console example that uses TCP/IP for input and output (the
	  pre-existing command console example uses UDP/IP).
	+ Updated the UDP logging example so it will send log messages to the local
	  UDP broadcast address if a specific IP address is not provided.  This
	  simplifies configuration, but note not all switches and routers will pass
	  broadcast messages.
	+ Add TCP echo client and TCP echo server examples to the Zynq demo.
	+ Minor updates to the Zynq network driver.
	+ Update the Zynq project to use version 2015.4 of the Xilinx SDK.
	+ Introduce FreeRTOS_SignalSocket(), which can be used to interrupt a task
	  that is blocked while reading from a socket ( FreeRTOS_recv[from] ).
	+ Make use of FreeRTOS_SignalSocket() in the FTP and HTTP servers.
	+ Major updates to the NTP client, although this is not included in any of
	  the pre-configured demo applications yet.
	+ Added support for DHCP zero pad option.
	+ Added uxGetMinimumIPQueueSpace(), a function to monitor the minimum amount
	  of space on the message queue.
	+ Better handling of zero length files in the FTP server.
	+ Fixed a bug reported by Andrey Ivanov from swissEmbedded that affects
	  users of 'ipconfigZERO_COPY_TX_DRIVER'.


Changes between 150825 150825 (?)

	+ Added xApplicationDHCPUserHook() so a user defined hook will be
	  called at certain points in the DHCP process if
	  ipconfigDHCP_USES_USER_HOOK is set to 1.
	+ Added FreeRTOS_get_tx_head() to improve TCP zero copy behaviour - for
	  expert use only.
	+ RST is no longer sent if only the ACK flag is set.
	+ Previously, an immediate ACK was only sent when buffer space was
	  exhausted.  Now, to improve performance, it is possible to send an
	  immediate ACK earlier - dependent on the ipconfigTCP_ACK_EARLIER_PACKET
	  setting.
	+ LLMNR and NBNS requests can now be sent to locate other devices -
	  previously these protocols would only be replied to, not generated.
	+ Added Auto-IP functionality (still in test) in case DHCP fails.  Dependent
	  on the ipconfigDHCP_FALL_BACK_LINK_LAYER_ADDRESS and
	  ipconfigARP_USE_CLASH_DETECTION settings.
	+ Added NTP code and demo.
	+ FTP can now STOR and RETR zero-length files.
	+ Added LLMNR demo to Win32 demo - so now the Win32 responds to
	  "ping RTOSDemo".

Changes between 141019 and 150825

	+ Added FTP server, which uses the new FreeRTOS+FAT component.
	+ Added basic HTTP server, which uses the new FreeRTOS+FAT component.
	+ Multiple definitions that are now common with FreeRTOS+FAT have been moved
	  into FreeRTOS's ProjDefs.h header file, and so prefixed with 'pd'.
	+ Introduced ipconfigZERO_COPY_TX_DRIVER, which defines who is responsible
	  for freeing a buffer sent to to the MAC driver for transmission, and
	  facilitates the development of zero copy drivers.
	+ Introduced the FREERTOS_MSG_DONTWAIT flag.  The flag can be used as a
	  simpler and faster alternative to using FreeRTOS_setsockopt() to set the
	  send or receive timeout to 0.
	+ A few functions that were previously all lower case are now mixed case, as
	  lower case function names are only used when they are equivalent to a
	  a Berkeley sockets API function of the same name.
	+ Introduced uxGetMinimumFreeNetworkBuffers() to return the minimum number
	  of network buffers that have ever existed since the application started
	  executing.
	+ Introduce ipconfigETHERNET_MINIMUM_PACKET_BYTES to allow the application
	  writer to set their own minimum buffer size should the hardware not be
	  capable of padding under-sized Ethernet frames.
	+ vNetworkBufferRelease() renamed vReleaseNetworkBuffer() - just for
	  consistency with the names of other functions in the same file.
	+ Grouped DHCP status data into a structure.
	+ DHCP is now tried both with and without the broadcast flag.
	+ Replaced occurrences of configASSERT_VOID() with configASSERT().
	+ ipconfigDNS_USE_CALLBACKS introduced to allow FreeRTOS_gethostbyname() to
	  be used without blocking.
	+ Fix: LLMNR and NBNS behaviour when the reply is in a larger buffer than the
	  request, and BufferAllocation_2 was used.
	+ Introduced ipMAX_IP_TASK_SLEEP_TIME to allow the application writer to
	  override the default value of 10 seconds.
	+ Fix:  Correct error in *pxUDPPayloadBuffer_to_NetworkBuffer().
	+ FreeRTOS_recv() now recognises the FREERTOS_ZERO_COPY flag, which, when
	  set, the void *pvBuffer parameter is interpreted as void **pvBuffer.
	+ FreeRTOS_listen() now returns an error code.  Previously it always
	  returned 0.
	+ Fix:  Previously if a listening socket was reused, and a connection
	  failed, the TCP/IP stack closed the socket, now the socket is correctly
	  left unclosed as it is owned by the application.
	+ Various other formatting and minor fix alterations.
