/*!
@page middleware_log Middleware Change Log

@section lwip lwIP for MCUXpresso SDK
  Lightweight IP (lwIP) is a small independent implementation of the TCP/IP protocol suite.
  Source code included in this SDK is based on development version 2.2.0.dev taken from 3rd party lwIP GIT repository.
  The webpage https://git.savannah.nongnu.org/cgit/lwip.git allows to browse the repository and also contains URLs for its cloning.
  The development versions (X.Y.Z.dev) do not refer to a single source code snapshots. To avoid ambiguity,
  change log below contains SHA-1 hashes of GIT commits used when importing the code into the SDK.

  - 2.2.0_rev7
    - New features:
      - Ported lwIP 2.2.0.dev (2022-05-09, branch: master, SHA-1: 239918ccc173cb2c2a62f41a40fd893f57faf1d6) to MCUXpresso SDK.
      - Added function ethernetif_probe_link() which reads actual link, speed and duplex settings from phy and passes them to driver.
        Stack could be set to call this function periodically by setting ETH_LINK_POLLING_INTERVAL_MS to value higher than zero.
      - Added helper functions ethernetif_wait_linkup() and ethernetif_wait_ipv4_valid() to allow blocking of RTOS task or 
        bare metal application until link is up or IPv4 address becomes valid.
      - Added NETC adaptation layer.
      - Processing of rx packets under RTOS moved from ISR to a separate task to improve system reaction times.
        Switch back to old behavior can be done by setting ETH_DO_RX_IN_SEPARATE_TASK macro to 0.
    - Bug fixes:
      - port: Fixed copying of pbuf contents. Previous code was using an incorrect end condition and could result
        in the overrun of the destination buffer if more packets were on the queue.
      - port: Delegating pbuf_free calls to tcpip_thread via pbuf_free_callback where possible (RTOS),
        ensured pbuf_free is not called from interrupt context when LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT is not set (bare metal).
      - port/enet_ethernetif_qos.c - Fixed ENET_RXBD_NUM which was used instead of ENET_TXBD_NUM.
      - port/enet_ethernetif_qos.c - Fixed buffer alignment to be at least 64.
      - src/apps/lwiperf: Fixed IPv6 TCP TX throughput lower than IPv4 by modifying maximum segment size
        to avoid sending two segments instead of one.
      - src/apps/lwiperf: Out-of-order datagrams in UDP RX server mode are counted to the throughput.
      - src/apps/httpsrv: Implemented receive timeouts on sockets.
      - src/apps/httpsrv: Don't assert on HTTP session task creation failure.
      - src/apps/httpsrv: Fixed build with IPv6 enabled.
      - src/apps/httpsrv: Updated endianess macros required for websocket SHA generation.
      - src/apps/httpsrv: Added missing includes.

  - 2.2.0_rev6
    - New features:
      - Ported lwIP 2.2.0.dev (2022-03-25, branch: master, SHA-1: 124dc0a64ef5d7c14a27e3115e5888df6559cb72) to MCUXpresso SDK.
      - Implemented leaving of multicast groups on ENET and ENET QOS.

  - 2.2.0_rev5
    - New features:
      - Ported lwIP 2.2.0.dev (2021-05-11, branch: master, SHA-1: 7ec4e9be304e7f8953740f10b2c810a292e89449) to MCUXpresso SDK.
      - LPC ENET adaptation layer allocates more buffers for frame reception now.
        Previously the number of receive buffers was determined by ENET_RXBD_NUM, which defaults to 5.
        It is determined by ENET_RXBUFF_NUM now, which is 2 * ENET_RXBD_NUM by default.
        Increase was needed because the actual version of LPC ENET driver always hold ENET_RXBD_NUM number of buffers
        and few additional buffers are needed for passing zero-copy frame data to lwIP.
        If this takes too much memory in your application, you can counteract by decreasing PBUF_POOL_SIZE,
        since PBUF_POOL is used only for transmission when LPC ENET, Kinetis ENET or ENET QOS is used.

  - 2.2.0_rev4
    - New features:
      - Ported lwIP 2.2.0.dev (2021-03-05, branch: master, SHA-1: 0056522cc974d2be2005c324f37187b5b3695765) to KSDK 2.0.0.
      - LWIP_DHCP_DOES_ACD_CHECK option default changed to 0 (disabled):
        - Although the ACD check makes getting IP address from DHCP more robust, it added several seconds delay at startup of all applications which use DHCP.
        - This feature was not present in earlier versions of lwIP.
      - ENET QOS adaptation layer - implemented zero-copy on receive.
      - Kinetis ENET and ENET QOS adaptation layers allocate more buffers for frame reception now.
        Previously the number of receive buffers was determined by ENET_RXBD_NUM, which defaults to 5.
        It is determined by ENET_RXBUFF_NUM now, which is 2 * ENET_RXBD_NUM by default.
        Increase was needed because the actual version of Kinetis ENET and ENET QOS drivers always hold ENET_RXBD_NUM number of buffers
        and few additional buffers are needed for passing zero-copy frame data to lwIP.
        If this takes too much memory in your application, you can counteract by decreasing PBUF_POOL_SIZE,
        since PBUF_POOL is used only for transmission when Kinetis ENET or ENET QOS is used.
      - Removed ethernetif_config_t.non_dma_memory field which was required to configure memory ranges unusable by ENET DMA on LPC devices.
        The setting has been replaced by BOARD_ENET_NON_DMA_MEMORY_ARRAY macro.

  - 2.2.0_rev3
    - New features:
      - Ported lwIP 2.2.0.dev (2020-07-07, branch: master, SHA-1: c385f31076b27efb8ee37f00cb5568783a58f299) to KSDK 2.0.0.

  - 2.2.0_rev2
    - New features:
      - Kinetis ENET adaptation layer - implemented zero-copy on receive.
      - lwiperf - counter of transferred bytes extended from 32 to 64 bit
    - Bug fixes:
      - Fixed restarting Auto IP from DHCP.

  - 2.2.0_rev1
    - New features:
      - Ported lwIP 2.2.0.dev (2019-12-12, branch: master, SHA-1: 555812dcec38c9a2ef1ef9b31816291549fbf9f8) to KSDK 2.0.0.
      - Implemented LWIP_ASSERT_CORE_LOCKED related functions in sys_arch.c. It can be enabled in lwipopts.h:
        - <tt>\#define LWIP_ASSERT_CORE_LOCKED() sys_check_core_locking()</tt>
        - <tt>\#define LWIP_MARK_TCPIP_THREAD() sys_mark_tcpip_thread() // if NO_SYS == 0</tt>
        - <tt>\#define LOCK_TCPIP_CORE() sys_lock_tcpip_core() // if NO_SYS == 0 and LWIP_TCPIP_CORE_LOCKING == 1</tt>
        - <tt>\#define UNLOCK_TCPIP_CORE() sys_unlock_tcpip_core() // if NO_SYS == 0 and LWIP_TCPIP_CORE_LOCKING == 1</tt>

  - 2.1.2_rev5
    - New features:
      - Implemented TCP_USER_TIMEOUT socket option.
      - Implemented SIOCOUTQ ioctl.

  - 2.1.2_rev4
    - New features:
      - Ported lwIP 2.1.3.dev (2019-02-27, branch: STABLE-2_1_x, SHA-1: 1bb6e7f52de1cd86be0eed31e348431edc2cd01e) to KSDK 2.0.0.
      - Updated sys_thread_new implementation and comment.
      - Kinetis ENET adaptation layer - reading frames into a pbuf chain is conditionally compiled only when a single pbuf from pool
        cannot hold maximum frame size (PBUF_POOL_BUFSIZE >= maximum frame size).
        Avoiding this code also reduces stack size requirements by about 1.5 kilobytes.
    - Bug fixes:
      - Fixes in ethernetif_linkoutput() in enet_ethernetif_lpc.c:
        - Removed access to possibly freed pbuf.
        - Call pbuf_free() when transmit buffers not available.
        - When copying pbuf chain, updating the number of necessary transmit buffers to wait for, which can be often smaller in the copy.
      - When CGI script is reading POST data by chunks, the loop in httpsrv_read() may cause blocking in receive function waiting for more data at the end of the stream
        - HTTPSRV_cgi_read() - added limiting of the last chunk length according to content length to avoid undesired blocking
      - Applied AUTOIP patch https://savannah.nongnu.org/patch/?9847 - with modification to support multiple network interfaces.
      - Fixed buffer overflow in httpsrv when application provided CGI script does not handle the whole content of POST request
    - Removed LwipMibCompiler contrib application as it contained LGPL licensed files in SharpSnmpLib.

  - 2.1.2_rev3
    - New features:
	  - lwiperf updated with UDP client/server support from the patch 9751 (https://savannah.nongnu.org/patch/?9751)

  - 2.1.2_rev2
    - Bug fixes:
	  - Fixed lwiperf_abort() in lwiperf.c to correctly close connections and free resources

  - 2.1.2_rev1
    - New features:
      - Ported lwIP 2.1.2 (2018-11-22, SHA-1: 159e31b689577dbf69cf0683bbaffbd71fa5ee10) to KSDK 2.0.0.
      - Ported lwIP-contrib 2.1.0 (2018-09-24, SHA-1: 35b011d4cf4c4b480f8859c456587a884ec9d287) to KSDK 2.0.0.

  - 2.0.3_rev1
    - New features:
      - Ported lwIP 2.0.3 (2017-09-15, SHA-1: 92f23d6ca0971a32f2085b9480e738d34174417b) to KSDK 2.0.0.

  - 2.0.2_rev1
    - New features:
      - Ported lwIP 2.0.2 (2017-03-13, SHA-1: c0862d60746e2d1ceae69af4c6f24e469570ecef) to KSDK 2.0.0.
	  
  - 2.0.0_rev3
    - New features:
      - Ported lwIP 2.0.0 (2016-11-10, SHA-1: 216bf89491815029aa15463a18744afa04df58fe) to KSDK 2.0.0.
	  
  - 2.0.0_rev2
    - New features:
      - Ported lwIP 2.0.0 RC2 (2016-08-08, SHA-1: b1dfd00f9233d124514a36a8c8606990016f2ad4) to KSDK 2.0.0.
	  
  - 2.0.0_rev1
    - New features:
      - Ported lwIP 2.0.0 RC0 (2016-05-26) to KSDK 2.0.0. 
	  - Changed lwIP bare-metal examples to use poll-driven approach instead of interrupt-driven one.
	  
  - 1.4.1_rev2
    - New features:
      - Enabled critical sections in lwIP.
    - Bug fixes:
      - Fixed default lwIP packet-buffer size to be able to accept a maximum size frame from the ENET driver.
      - Fixed possible drop of multi-frame packets during transmission.
 
  - 1.4.1_rev1
    - New features:
      - Ported lwIP 1.4.1 to KSDK 2.0.0.
*/
