This page provides details related to the light weight IP (LWIP) library and the SW app lwip echo server.
...
Table of Contents | ||
---|---|---|
|
Introduction
- GEM on Zynq, Zynq Ultrascale+ MPSoC and Versal (using emacps driver)
- AXI ethernet (using axiethernet driver)
How to enable
- lwip211 lwip213 library can be found at
https://github.com/Xilinx/embeddedsw/tree/master/ThirdParty/sw_services/lwip211lwip213
lwip211lwip213
|
- 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.01.2 3 - Contains the stack implementation - lwip_echo_server is an application demonstrating the use of lwip 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/Versal
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 and Versal 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:
...
Note: AMD Xilinx embeddedsw build flow is changed from 2023.2 release to adapt to the new system device tree based flow. For further information, refer to the wiki page Porting embeddedsw components to system device tree (SDT) based flow - Xilinx Wiki - Confluence (atlassian.net).
The .yaml(in data folder) and CMakeLists.txt & lwip213.cmake (in src folder) files are needed for the System Device Tree based flow. The Driver .tcl and .mld files are for the older build flow which will be deprecated in the future.
Features supported
1. GEM on Zynq/ZynqMP/Versal
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 and Versal 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 | |
PS SGMII (with fixed link) | Yes | Enable library config parameter "sgmii_fixed_link" (2023.1 and above) | ||||||
SGMII in PL | Yes | Refer to xapp1306 | ||||||
1000BaseX in PL | Yes | Refer to xapp1306 | ||||||
GMII2RGMII convertor in PL | Yes | |||||||
Versal | RGMII | Yes |
...
MII PHY support
Features not supported
- The following features are not supported:
- MCDMA
- 10G/25G MAC
Performance
...
- There is no support for common MDIO bus for two GEMs on lwip. For ex., on VCK190 board, GEM0 can be used with TI PHY (at PHY address 1) via the dedicated MDIO0 bus but GEM1 cannot be used with TI PHY at PHY address 2 via the common MDIO0.
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)
...
Performance measurement with lwip 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
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
NOTE: These performance tests are not supported or benchmarked with emaclite. The application throws an error message to indicate the same when built on emaclite designs.
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/treeblob/master/libThirdParty/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
NOTE: These performance tests are not supported or benchmarked with emaclite. The application throws an error message to indicate the same when built on emaclite designs.
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:services/lwip213/examples/README.txt
Known issues/Limitations
- No support for 1588
- No Support for 10G/25G
- No MCDMA support
- Performance numbers are not benchmarked on PL interfaces on Microblaze
- lwip perf client application cannot be rerun without a power on reset. For ex., doing rst -proc from xsdb before downloading the executable again does not work. It is required to perform "power 0 power 1" in systest before running a new test.
1. GEM
None
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.
- Emaclite support in lwip is broken in 2018.2. Please refer to AR-71330.
Change log
2023.2
https://github.com/Xilinx/embeddedsw/blob/master/ThirdParty/sw_services/lwip211/examples/README.txt
Known issues/Limitations
- No support for 1588
- No Support for 10G/25G
1. GEM
None
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.
- Emaclite support in lwip is broken in 2018.2. Please refer to AR-71330.
Change log
xilinx_v2023.2/doc/ChangeLog#L537
2023.1
https://github.com/Xilinx/embeddedsw/blob/xilinx_v2023.1/doc/ChangeLog#L231
2022.2
https://github.com/Xilinx/embeddedsw/blob/xlnx_rel_v2022.2/doc/ChangeLog#L178
2022.1
https://github.com/Xilinx/embeddedsw/blob/xilinx_v2022.1/doc/ChangeLog#L161
2021.2
https://github.com/Xilinx/embeddedsw/blob/xlnx_rel_v2021.2/doc/ChangeLog#L138
2020.2
Summary:
- Bugfixes related to RX BD setup, RX pbuf handling in error path, mkfs format in examples, VCU118 PHY handling and lwip timer & delay handling.
- Minor changes in lwip app tcl checks and usage of canonical definitions.
...
https://github.com/Xilinx/embeddedsw/commits/xilinx-v2020.1/ThirdParty/sw_services/lwip211
3e7863e sw_apps: Remove xps_timer reference
...
AXI Ethernet Standalone Driver
Library documentation - https://docs.xilinx.com/r/en-US/oslib_rm/Using-lwIP