示例¶
p4net 仓库中的 examples/ 目录收录了八个可运行的拓扑,每个示例
只展示一项特性,源代码因此短小易读、便于复制。任选一个运行:
(如果 PATH 中没有控制台脚本,使用 sudo python
examples/<name>/topology.py 也可以。)
包含哪些示例¶
- 快速上手(端口翻转) —— 一台交换机上的两台 主机,使用写死的端口翻转流水线。最小可运行拓扑,无需运行时表项 编程。
- L3 转发 —— 同样的两台主机,但流水线通过
Python 在启动时编程下发的
ipv4_lpm表来转发。ARP 已预先注入。 - CPU 上送 —— 单主机拓扑,每个数据平面包都通过
CPU 端口上送控制器。演示
<switch> packet send与<switch> packet listen。 - 双栈 —— 两台主机各自在同一
/24与/64上配置 IPv4 与 IPv6 地址。展示按接口的 IPv6 sysctl 门控。 - 非对称链路 —— 两台主机,链路按方向
整形。演示
delay_a_to_b/delay_b_to_a以及由此产生的单向 RTT 不对称。 - IPv6 LPM —— 两台仅 IPv6 的主机,128 位 LPM
表在运行时编程。展示
<switch> table dump把 IPv6 表项渲染为 人类可读形式(fd00::1/128)而非裸字节。 - INT(带内遥测) —— 单交换机 INT:流水线在每个转发 包里插入一个 14 字节 shim 头,携带交换机标识、入端时间戳、出 端口、队列深度与原始 etherType。原始套接字 listener 在接收端 解析 shim。
- 多跳 INT —— 两台串联交换机各自插入自己的 shim;listener 解析整条逐跳栈。更贴近生产形态的遥测拓扑;同一份 P4 二进制跑在两台交换机上,身份通过 v1.2 寄存器 API 提供。
一览¶
| 示例 | 主机 | 交换机 | IPv4 | IPv6 | 非对称 | CPU 上送 | 运行时表项 | 遥测 |
|---|---|---|---|---|---|---|---|---|
| quick_start | 2 | 1 | ✓ | |||||
| l3_forwarding | 2 | 1 | ✓ | ✓ | ||||
| cpu_punt | 1 | 1 | ✓ | ✓ | ||||
| dual_stack | 2 | 1 | ✓ | ✓ | ||||
| asymmetric_link | 2 | 1 | ✓ | ✓ | ||||
| ipv6_lpm | 2 | 1 | ✓ | ✓ | ||||
| int | 2 | 1 | ✓ | ✓ | ✓ | |||
| int_multi_hop | 2 | 2 | ✓ | ✓ | ✓ (×2) |
教程在一份 4 主机 2 交换机的程序里把所有特性 组合在一起——可以作为「大杂烩」示例参考,但单独一项特性看这里 往往更容易理解。