Introduction

This page provides details related to the light weight IP (LWIP) library and the SW app lwip echo server.
LWIP202 provides a light weight TCP/IP stack to use with ethernet interfaces. It supports:
-> GEM on Zynq and Zynq Ultrascale+ MPSoC (using emacps driver)
-> AXI ethernet (using axiethernet driver)

How to enable

-> lwip202 library can be found at
https://github.com/Xilinx/embeddedsw/tree/master/ThirdParty/sw_services/lwip202
lwip202
|
- doc - Provides the API and data structure details
|
- src - Driver source files which are further organized into
||
---- contrib/ports/xilinx - Contains the interface specific implementation
||
---- lwip-2.0.2 - Contains the stack implementation

-> lwip_echo_server is an application demonstrating the use of lwip202 library with a basic echo test using telnet. It can be found at
https://github.com/Xilinx/embeddedsw/tree/master/lib/sw_apps/lwip_echo_server

Features supported

1. GEM on Zynq/ZynqMP

Controller/Driver features supported

- All the basic controller features are supported through the controller driver emacps - 10/100/1000 speeds, PHY management, DMA, Packet buffer support, Checksum offload.
- ZynqMP only: 64 bit descriptor support, Priority queue support, Jumbo frame support.

Stack Features

- TCP
- UDP
- DHCP

PHY configurations

lwip echo server supports the following PHY configurations:
Family
PHY
Support
Remarks
Zynq
RGMII
Yes


SGMII in PL
Yes
Refer to AR# 66006

1000BaseX in PL
Yes
Refer to AR# 66006

GMII2RGMII convertor in PL
Yes

ZynqMP
RGMII
Yes


SGMII
No


SGMII in PL
Yes
Refer to xapp1306

1000BaseX in PL
Yes
Refer to xapp1306

GMII2RGMII convertor in PL
Yes



2. AXI Ethernet on Microblaze/Zynq/ZynqMP

Controller/Driver features supported

- Support for MII, GMII, RGMII, SGMII, and 1000BASE-X PHY interfaces
- Support for Check sum offloading.
- Supports AXI DMA + 1G Ethernet Configuration on KC705//KCU105Zynq/ZynqMP Platforms
- Supports AXI FIFO + 1G Ethernet Configuration.

Stack Features

- TCP
- UDP
- DHCP
- IGMP
- Multicast

PHY configurations

lwip echo server supports the following PHY configurations
Family
PHY
Support
Remarks
KC705
GMII
Yes


RGMII
Yes


SGMII
Yes


1000Base-x
Yes

ZYNQ
SGMII
Yes
Refer to AR# 66006

1000Base-X
Yes
Refer to AR# 66006
ZYNQMP
SGMII
Yes


1000Base-x
Yes

Features not supported

The following features are not supported but in plan:
MCDMA
10G/25G MAC

Performance

These benchmark performance numbers were obtained by connecting Xilinx boards to Linux PCs/server machines (Ubuntu/Red Hat Enterprise).
The application used is the lwip SW app (see test cases below) with optimal settings on the board side. iperf is run on the linux machine.

Zynq

Board: ZC706
CPU Freq: 666MHz (A9)
Link Speed: 1000Mbps, Full duplex
Raw mode (standalone)

TCP
UDP
MTU
Rx (Mbps)
Tx (Mbps)
RX (Mbps)
TX (Mbps)
1500
949
949
957
956

ZynqMP

Board: ZCU102
CPU Freq 1100MHz (A53)
Link Speed 1000Mbps, Full duplex
DDR 533MHz
CCU: No
Raw mode (standalone)

TCP
UDP
MTU
Rx (Mbps)
Tx (Mbps)
Rx (Mbps)
Tx (Mbps)
1500
949
935
957
956

Test cases

1. Echo server

lwip echo server is used to test lwip202 library with a basic TCP echo application.
Create an lwip echo server application. Run fsbl and then lwip echo server elf.
On the link partner, run
telnet <ip address> 7

Note: If DHCP is not being used (enabled by default), make sure to set static IP addresses in the same group in lwip echo server and the link partner machine.

Sample expected output:
-----lwIP TCP echo server ------
TCP packets sent to port 6001 will be echoed back
Start PHY autonegotiation
Waiting for PHY to complete autonegotiation.
autonegotiation complete
Waiting for Link to be up;
link speed for phy address 12: 1000
Board IP: 10.10.70.5
Netmask : 255.255.255.0
Gateway : 10.10.70.101
TCP echo server started @ port 7
x86# telnet 10.10.70.5 7
Trying 10.10.70.5...
Connected to 10.10.70.5.
Escape character is '^]'.
hello
hello
^]
telnet>quit
x86#

Refer to https://github.com/Xilinx/embeddedsw/blob/master/lib/sw_apps/lwip_echo_server/src/README.txt for more information.

2. Performance tests

Performance measurement with lwip202 library can be done using the TCP/UDP server/client SW apps:
Raw mode:
https://github.com/Xilinx/embeddedsw/tree/master/lib/sw_apps/lwip_tcp_perf_server
https://github.com/Xilinx/embeddedsw/tree/master/lib/sw_apps/lwip_tcp_perf_client
https://github.com/Xilinx/embeddedsw/tree/master/lib/sw_apps/lwip_udp_perf_server
https://github.com/Xilinx/embeddedsw/tree/master/lib/sw_apps/lwip_udp_perf_client
Socket mode:
https://github.com/Xilinx/embeddedsw/tree/master/lib/sw_apps/freertos_lwip_tcp_perf_server
https://github.com/Xilinx/embeddedsw/tree/master/lib/sw_apps/freertos_lwip_tcp_perf_client
https://github.com/Xilinx/embeddedsw/tree/master/lib/sw_apps/freertos_lwip_udp_perf_server
https://github.com/Xilinx/embeddedsw/tree/master/lib/sw_apps/freertos_lwip_udp_perf_client

Xilinx HW running one of the above lwip applications can be connected to a standard linux machine (Ubuntu) to obtain optimal performance numbers.
Raw or socket mode TCP/UDP client/server can be run on Xilinx HW while the iperf server/client (in suitable pairs) can be run on the linux machine.
Refer to the SW apps' README files for more information

3. Miscellaneous functional test

lwip library examples folder contains additional functional tests such as:
- IGMP test case
- TFTP server test case
- TFTP client test case
- Webserver test case
Please refer to this readme file for additional information:
https://github.com/Xilinx/embeddedsw/blob/master/ThirdParty/sw_services/lwip202/examples/README.txt

Known Issues/Limitations

-> No support for 1588
-> No Support for 2500 base-x for axi 1G/2.5G IP, 10G/25G and MCDMA

1. GEM

2. AXI Ethernet

-> The current lwip stack won't support 1G Non processor/Non buffered mode feature
-> No Support for Legacy 10G and 10G/25G MAC.

Current ARs

-> There is an issue with freertos support for AXI Ethernet + FIFO designs in 2017.1 and 2017.2. For details refer to AR-69578.

Change log

2018.2

  • Added hotplug support and minor fixes
dad2851 LwIP202: Avoid redundant axi ethernet config lookup & init
6a26aa9 LwIP202: Moved IEEE registers to separate header file
51db440 LwIP202: Hot plug detect support for EmacPS and AXI Ethernet
lwip echo server changes:
7fae789 Update standalone Echo-server app for hot plug detect

2018.1

  • Added new lwip202 version. lwip141 is deprecated and will be removed from the repository subsequently.
464fc11 LwIP202: Initial commit of LwIP v2.0.2 base source
afca857 LwIP202: copy contrib, Makefile, Changelog from LwIP141
5386fbc LwIP202: Port Xilinx changes
c330050 LwIP202: port contrib folder for LwIP202
cc60e3b LwIP202: port Makefile and Makefile.lwip
d055fe3 LwIP202: Add data folder with mld and tcl file
d60b673 LwIP202: Remove PPC references
cced15e LwIP202: Update Changelog
b06c350 LwIP202: Add IGMP support in xemacps contrib code
2e39353 lwIP202: Add workaround for RX hang in Zynq when using freertos
af32819 lwIP202: Disable L1 prefetch for ARMv8
1bae15c LWIP: Add IPv6 support in lwip202 lib
dad94a9 LWIP: Enable IPv6 support
891972d LWIP: Add Multicast MAC support in hash table
2250808 lwIP202: Options to configure mbox parameters
62df22f lwIP202: Correct proper references of TX BD ring
821796b lwip202: Perform AXI DMA lookup based on base address
289e647 lwip202: Fix jumbo frame checks on R5
b663922 lwip202: Move lwip raw sw apps to examples
cb51032 lwip202: Move lwip socket apps to examples
af0b812 lwip202: Update xInsideISR in emacps_error_handler
a219109 lwip202: Use UINTPTR for axidma base address
09aa57d lwip202: Add support for Realtek phy
32159f4 ThirdParty: Added latest freertos port, freertos10
bbeb096 lwip202: Correct example header names
c7efa4d lwip202: Update lwip socket mode example headers

lwip echo server changes:
6886e45 Update echo server code to work with LwIP 2.0.2
179815b Update echo server mss and tcl to use LwIP 2.0.2
7160846 LWIP: IPv6 Echo server raw mode application
0766f57 LWIP: IPv6 echo server freertos application
190fed8 lib: Updated mld/tcl files of sw_apps and libraries to pick up latest Freertos port 10.0

2017.4

019e94e lwip141: Correct tx bd ring assigments in xemacpsif
27e168d lwip141: Perform AXI DMA lookup based on base address. In multi dma design lookup based on the base address ensures that correct DMA instance is selected.
No changes in lwip echo server and freertos lwip echo server

2017.3

dd92d60 lwip: Add support for EL1 non secure mode
d602f73 lwip: Add SW workaround for TI DP83867 PHY Data integrity issues
811c4a5 lwip: Add freertos support for axiethernet fifo configuration
3221f51 lwip: Correct compiler used for A9
2133760 lwip: Update lwip compiler for A9
100857a lwip141: Make changes to fix conflicting types for xInsideISR
bdd7319 lwip141: Fix for various warnings in the AxiEthernet adapter
0200b10 lwip: Changes for CCI
e78aad2 lwip: Add workaround for RX hang in Zynq when using freertos
cab9ffe lwip141: Disable L1 prefetch for ARMv8
595b2da lwip141: Disable L1 prefetch for AXI DMA in lwip adapter
No changes in lwip echo server and freertos lwip echo server

2017.2

No changes in lwip library and lwip echo server

2017.1

c3fd75c lwip: Detect Xilinx PCS PMA with PHY addr
9fe3dc8 lwip: Add support for TI PHY DP83867 SGMII Configuration (AXI Ethernet)
317b53e lwip: Expose NO_SYS_NO_TIMERS and LWIP_TCP_KEEPALIVE to user
b15331e lwip : Fixed compilation warnings
7c56069 sw_apps, sw_services: updated tcl and mld file with latest freertos port name (lwip and freertos echo server)
749eade lwip: Add jumbo frame support for ZynqMP ethernet
33b4e72 lwip: Correct erroneous write to TI PHYCR register
417f848 lwip: Add SW workaround for TI DP83867 PHY link instability
905bab1 lwip: Update correct compiler details even when no ethernet is found

2016.4

7641174 lwip: Fix Axi Ethernet performance issue on ZynqMP
9062987 lwip: Fix compilation issue for the microblaze based designs
No changes in lwip_echo_server and freertos_lwip_echo_server

2016.3

commit: Change BD space memory attributes for Zynq to avoid corner case TX issues
commit: Dont set SLCR clock dividers when clk src is EMIO because clock is derived from EMIO
commit: Fix compilation issues in emaclite adapter for freertos823 bsp
commit: Add support for freertos in lwIP emaclite adapter
lwip echo server application (and freertos lwip echo server app)
commit: Perform a PHY reset for ZCU102 board

Related Links

http://www.wiki.xilinx.com/Standalone+Device+Drivers
http://www.wiki.xilinx.com/Standalone+Ethernet+Driver