Skip to content
@NDN-PEGASUS

NDN-PEGASUS

Pegasus: A Practical High-Speed Cross-Platform NDN Forwarder


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


📌 Overview

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.

⚙️ Prerequisites

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:

🚀 Pegasus Testbed Quick Setup

1. Optimal Parsable Name Format

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.

2. Pegasus Switch

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.sh

To compile and start the control plane:

cd Pegasus-Switch/pclndncpv2/
./start_pegasus.sh

By 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/0

If you want to stop the Pegasus switch:

./stop_pcl_switchd.sh

3. Forwarder

Go 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 install

Copy 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.sh

If you want to stop the forwarder:

sudo ndndpdk-ctrl systemd stop

Vistualize 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 start

After launching the visualization, open a browser on the PC and visit 127.0.0.1:5201 to monitor the forwarder.

4. Producer

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 install

Activate 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.sh

If you want to stop the producer:

sudo ndndpdk-ctrl --gqlserver "http://127.0.0.1:3031" systemd stop

Vistualize 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.

5. Consumer

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 stop

Vistualize 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 start

After launching the visualization, open a browser on the PC and visit 127.0.0.1:5202 to monitor the consumer:

🚀 Baseline Testbed Quick Setup

1. L2 Switch

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.sh

Run the L2 switch:

./run_switchd.sh

Add and enable ports:

ucli
pm
port-add -/0 100G NONE
an-set -/- 2
port-enb -/-

2. Baseline Forwarder

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 install

Copy 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.

3. Producer

The procedures are the same as in the Pegasus testbed. Please refer to the Producer section.

4. Consumer

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:

📖 Citation

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}
}

🤝 Acknowledgments

Pegasus-Server is derived from NDN-DPDK, we appreciate their contributions to the NDN community.

Pinned Loading

  1. Pegasus-Traffic Pegasus-Traffic Public

    The scripts that process the real-world NDN traffic traces to determine the optimal parsable name format.

    Python 4

  2. Pegasus-Switch Pegasus-Switch Public

    Pegasus switch implementation

    C++ 3

  3. L2-Switch L2-Switch Public

    L2 switch for baseline

    P4 1

  4. Pegasus-Server Pegasus-Server Public

    Pegasus server derived from NDN-DPDK

    Go 2

Repositories

Showing 5 of 5 repositories

Top languages

Loading…

Most used topics

Loading…