Xingguo Long1,2,3, Kun Huang2, Rongwei Yang2, Qingguo Dai2, Zhenyu Li1
1 Institute of Computing Technology, Chinese Academy of Sciences
2 Pengcheng Laboratory
3 University of Chinese Academy of Sciences
📜Paper | 📊Pegasus-Traffic | 🔀Pegasus-Switch | 🖥️Pegasus-Server
Pegasus is a high-speed Named Data Networking (NDN) forwarder that integrates both servers and programmable switches. It leverages programmable switches to handle high-throughput NDN traffic and servers to support the full NDN protocol stack. Additionally, Pegasus introduces a solution for processing variable-length NDN names within programmable switches, enabling high-speed forwarding of real-world NDN traffic.
Reference Devices:
- Programmable switch: Edgecore DCS810 with SDE 9.10.0
- Servers: Dell PowerEdge T640 with Ubuntu 22.04, DPDK 22.07.0 and ConnectX-5 MCX516A Ethernet adapter
- PC (Monitor): locate at the same LAN with programmable switch and servers
Reference testbed topology:
Go to the repository Pegasus-Traffic and clone it to the backend server.
Follow the instructions in the README file to determine the optimal parsable name format based on real-world traffic, and generate names.txt as preparation for FIB insertion on the forwarder.
Go to the repository Pegasus-Switch and clone it to the programmable switch.
First, copy pclndn.xml and types.xml to path/to/your/SDE/install/share/cli/xml
Based on the optimal parsable name format obtained in the Pegasus-Traffic, modify the parser implementation in the data plane (pclndndpv2.p4).
To compile and install the data plane:
cd Pegasus-Switch/pclndndpv2/
./build.sh
./install.shTo compile and start the control plane:
cd Pegasus-Switch/pclndncpv2/
./start_pegasus.shBy control plane, offloading the bitmap for external servers and the MAC table for backend servers:
pclndn
port add
bitmap add
group add key area 0
# Ports connected to backend servers
# Please modify according to your testbed topology
mac add server 0 dmac 0c:42:a1:3a:67:68 port 3/0
mac add server 0 dmac 0c:42:a1:3a:67:69 port 4/0If you want to stop the Pegasus switch:
./stop_pcl_switchd.shGo to the repository Pegasus-Server and clone it to the backend server.
To compile and build:
cd Pegasus-Server/ndn-dpdk/
sudo pnpm install # just for the first make
make clean
NDNDPDK_MK_RELEASE=1 make
sudo make installCopy the names.txt file generated in Pegasus-Traffic to the Pegasus-Server/ndn-dpdk/sample/activate directory. Then, offload the FIB entries, activate, and start the forwarder:
cd Pegasus-Server/ndn-dpdk/sample/activate
sudo pnpm install # just for the first run
# Note: Please modify relevant settings such as MAC address
# according to your testbed topology before running the script below
sh fw-ndntestbed.shIf you want to stop the forwarder:
sudo ndndpdk-ctrl systemd stopVistualize the monitor of forwarder on PC:
ssh -L 5201:127.0.0.1:3333 <forwarder's server name>@<forwarder's server LAN ip>
# Example
ssh -L 5201:127.0.0.1:3333 server201@192.168.109.201
cd Pegasus-Server/ndn-dpdk/sample/status
sudo pnpm install # just for the first run
sudo pnpm startAfter launching the visualization, open a browser on the PC and visit 127.0.0.1:5201 to monitor the forwarder.
Go to the repository Pegasus-Server and clone it to the external server.
To compile and build:
cd Pegasus-Server/ndn-dpdk/
sudo pnpm install # just for the first make
make clean
NDNDPDK_MK_RELEASE=1 make
sudo make installActivate and start the producer:
cd Pegasus-Server/ndn-dpdk/sample/activate
sudo pnpm install # just for the first run
# Note: Please modify relevant settings such as MAC address
# according to your testbed topology before running the script below
sh producer.shIf you want to stop the producer:
sudo ndndpdk-ctrl --gqlserver "http://127.0.0.1:3031" systemd stopVistualize the monitor of producer on PC:
ssh -L 5203:127.0.0.1:3334 <producer's server name>@<producer's server LAN ip>
# Example
ssh -L 5203:127.0.0.1:3334 server202@192.168.109.202
cd Pegasus-Server/ndn-dpdk/sample/status
sudo pnpm install # just for the first run
sudo pnpm start --gqlserver "http://127.0.0.1:3031" --listen "127.0.0.1:3334"After launching the visualization, open a browser on the PC and visit 127.0.0.1:5203 to monitor the producer.
Go to the Pegasus-Server repository on the external server.
Activate and start the consumer:
cd Pegasus-Server/ndn-dpdk/sample/activate
sh consumer.sh <parsableRatio> <interval>
# Example: Consumer generates traffic with 75% parsable names at 10 Kpps
# Note: Please modify relevant settings such as MAC address
# according to your testbed topology before running the script below
sh consumer.sh 75 "0.1ms"If you want to stop the consumer:
sudo ndndpdk-ctrl systemd stopVistualize the monitor of consumer on PC:
ssh -L 5202:127.0.0.1:3333 <consumer's server name>@<consumer's server LAN ip>
# Example
ssh -L 5202:127.0.0.1:3333 server202@192.168.109.202
cd Pegasus-Server/ndn-dpdk/sample/status
sudo pnpm startAfter launching the visualization, open a browser on the PC and visit 127.0.0.1:5202 to monitor the consumer:
Go to the repository L2-Switch and clone it to the programmable switch.
To compile and install the data plane:
cd L2-Switch/
./build.sh
./install.shRun the L2 switch:
./run_switchd.shAdd and enable ports:
ucli
pm
port-add -/0 100G NONE
an-set -/- 2
port-enb -/-Go to the repository NDN-DPDK and clone it to the backend server.
To compile and build:
cd ndn-dpdk/
git checkout 0c34e8b
sudo pnpm install # just for the first make
make clean
NDNDPDK_MK_RELEASE=1 make
sudo make installCopy the names.txt file generated by Pegasus-Traffic, along with fw-ndntestbed-baseline.py and fw-ndntestbed-baseline.sh from Pegasus-Server, to the ndn-dpdk/sample/activate directory. Then, offload the FIB entries, activate, and start the forwarder:
cd ndn-dpdk/sample/activate
sudo pnpm install # just for the first run
# Note: Please modify relevant settings such as MAC address
# according to your testbed topology before running the script below
sh fw-ndntestbed-baseline.sh The rest procedures are the same as in the Pegasus testbed. Please refer to the Forwarder section.
The procedures are the same as in the Pegasus testbed. Please refer to the Producer section.
The procedures are the same as in the Pegasus testbed. Please refer to the Consumer section.
After launching the visualization, open a browser on the PC and visit 127.0.0.1:5202 to monitor the consumer:
If you find Pegasus helpful, please cite our paper:
@article{long2025pegasus,
title={{Pegasus: A Practical High-Speed Cross-Platform NDN Forwarder}},
author={Long, Xingguo and Huang, Kun and Yang, Rongwei and Dai, Qingguo and Li, Zhenyu},
journal={Computer Networks},
year={2025}
}
Pegasus-Server is derived from NDN-DPDK, we appreciate their contributions to the NDN community.