Skip to main content

A P4Runtime-native SDN simulation framework for BMv2.

Project description

p4net

CI Python License Status

A P4Runtime-native SDN simulation framework for BMv2.

Status: 0.2.0 — second public release. APIs are stable for lab use; expect refinement before 1.0.

Features

  • P4Runtime-native control plane.
  • BMv2 simple_switch_grpc data plane.
  • Linux network-namespace based hosts.
  • veth-based links with tc/netem impairment.
  • Programmable Python topology DSL.
  • Interactive CLI.
  • Per-port packet capture.
  • P4Runtime CPU-port packet I/O (<switch> packet send / listen).
  • IPv4 and IPv6 host addressing with per-interface sysctl gating.
  • Asymmetric link impairment (per-direction bandwidth, delay, jitter, loss_pct).
  • Topology visualization (Graphviz DOT / PNG / SVG).
  • No OpenFlow, no Open vSwitch, no Docker.

Requirements

  • Linux kernel >= 5.4.
  • Python 3.10+.
  • BMv2 and p4c installed system-wide.
  • Root or CAP_NET_ADMIN to manage namespaces and veth devices.

Installation

From a fresh checkout:

git clone https://github.com/zhh2001/p4net
cd p4net
python3 -m venv .venv
. .venv/bin/activate
pip install -e '.[dev]'

PyPI distribution may follow a future release.

Quick Start

from pathlib import Path
from p4net import Network
from p4net.topo import Topology

topo = Topology()
h1 = topo.add_host("h1", ip="10.0.0.1/24", mac="00:00:00:00:00:01")
h2 = topo.add_host("h2", ip="10.0.0.2/24", mac="00:00:00:00:00:02")
s1 = topo.add_switch("s1", p4_src=Path("quick_start.p4"))
topo.add_link(h1, s1, port_b=1)
topo.add_link(h2, s1, port_b=2)

with Network(topo) as net:
    print(net.pingall())

A complete runnable version, including the matching quick_start.p4 (a port-2-port swap that needs no runtime table programming) and a tiny static-ARP setup, lives in examples/quick_start/. Run it with:

sudo python examples/quick_start/quick_start.py

or, equivalently, with the p4net console script installed by pip install -e .:

sudo p4net examples/quick_start/quick_start.py

The console script loads any .py file that defines a module-level topology: Topology (and optionally setup(net)), brings up the network, and drops you into an interactive shell. If sudo strips your venv from PATH, run the binary explicitly: sudo env "PATH=$PATH" p4net ....

Examples

Documentation

License

Apache-2.0.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

p4net-0.2.0.tar.gz (149.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

p4net-0.2.0-py3-none-any.whl (74.2 kB view details)

Uploaded Python 3

File details

Details for the file p4net-0.2.0.tar.gz.

File metadata

  • Download URL: p4net-0.2.0.tar.gz
  • Upload date:
  • Size: 149.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for p4net-0.2.0.tar.gz
Algorithm Hash digest
SHA256 d9dfeae85f4b8ad201fac775a1c4c9c4f4a7b25d38ef90ff92dc9bf18474b4f2
MD5 b31f087b84888079c84a10fb97aded48
BLAKE2b-256 c8865eedffb82d52ddc9ed1eb375b62753944d8a9f77f12d9a789fff284a2474

See more details on using hashes here.

File details

Details for the file p4net-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: p4net-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 74.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for p4net-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 163ebd090b75c2ae9e44b28c02740f93957f72b1906186b4720a3a5f40494472
MD5 8fb994da645716ad14bed51eac3e5cac
BLAKE2b-256 f1425d22e0fde35c4a054e08831196c03d80200a7570918c1b80d08370ea558c

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page