
如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。
只需在 AI 对话中先发送下面这句话即可:
请先完整阅读并严格遵守以下文档中的全部规则与要求:
https://xuanyuan.cloud/agents.md
在未充分阅读并理解该文档前,不要生成任何命令、配置、修改建议、故障排查方案或技术回答。后续所有输出都必须严格以该文档中的规范为最高优先级执行。查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
https://travis-ci.org/p4lang/behavioral-model.svg?branch=master](https://travis-ci.org/p4lang/behavioral-model)
这是P4软件交换机参考实现的第二个版本,昵称bmv2(behavioral model version 2,行为模型版本2)。该软件交换机采用C++11编写,以P4编译器(如https://github.com/p4lang/p4c%EF%BC%89%E7%94%9F%E6%88%90%E7%9A%84JSON%E6%96%87%E4%BB%B6%E4%BD%9C%E4%B8%BA%E8%BE%93%E5%85%A5%EF%BC%8C%E9%80%9A%E8%BF%87%E8%A7%A3%E9%87%8A%E8%AF%A5%E6%96%87%E4%BB%B6%E6%9D%A5%E5%AE%9E%E7%8E%B0P4%E7%A8%8B%E5%BA%8F%E6%89%80%E6%8C%87%E5%AE%9A%E7%9A%84%E6%95%B0%E6%8D%AE%E5%8C%85%E5%A4%84%E7%90%86%E8%A1%8C%E4%B8%BA%E3%80%82
本仓库包含多种行为模型变体的代码,例如simple_switch、simple_switch_grpc、psa_switch等。有关这些变体的差异详情,请参见此处。
bmv2并非生产级软件交换机,其设计目的是作为开发、测试和调试P4数据平面及相关控制平面软件的工具。因此,bmv2在吞吐量和延迟等性能指标上显著低于https://www.openvswitch.org/%E7%AD%89%E7%94%9F%E4%BA%A7%E7%BA%A7%E8%BD%AF%E4%BB%B6%E4%BA%A4%E6%8D%A2%E6%9C%BA%E3%80%82%E6%9C%89%E5%85%B3bmv2%E6%80%A7%E8%83%BD%E7%9A%84%E6%9B%B4%E5%A4%9A%E4%BF%A1%E6%81%AF%EF%BC%8C%E8%AF%B7%E5%8F%82%E8%80%83%E6%AD%A4%E6%96%87%E6%A1%A3%E3%80%82
在Ubuntu 16.04上,需要安装以下软件包:
还需从源码安装以下依赖(可使用travis/目录下的安装脚本):
若要使用CLI,需安装https://github.com/nanomsg/nnpy Python包,可使用travis/install-nnpy.sh脚本。
为简化操作,我们提供了install_deps.sh脚本,可在Ubuntu 14.04上安装所有所需依赖。
Travis回归测试当前在Ubuntu 14.04上运行。
在MacOS上,可使用tools/macos/bootstrap_mac.sh脚本通过homebrew安装上述所有依赖。注意,编译代码需https://itunes.apple.com/us/app/xcode/id497799835?mt=12%E6%88%96%E6%9B%B4%E9%AB%98%E7%89%88%E6%9C%AC%E3%80%82
bash1. ./autogen.sh 2. ./configure 3. make 4. [sudo] make install # 如需安装bmv2
此外,在Linux上,安装bmv2后可能需要运行sudo ldconfig以刷新共享库缓存。
默认启用调试日志。若出于性能考虑需禁用,可在configure脚本中传递--disable-logging-macros参数。
在"调试模式"下,建议禁用编译器优化并启用二进制符号:
bash./configure 'CXXFLAGS=-O0 -g'
可通过向configure传递--enable-debugger参数启用新的bmv2调试器。
要运行单元测试,只需执行:
bashmake check
若运行测试(make check)时出现nanomsg错误,请尝试以sudo权限运行
要在bmv2中运行自定义P4程序,需先将P4代码编译为软件交换机可解析的JSON表示,该表示将告知bmv2需初始化哪些表、如何配置解析器等。
目前p4lang上有2个支持bmv2的P4编译器:
simple_switch二进制文件执行,为PSA编写的程序可通过psa_switch执行。有关这些变体的差异详情,请参见此处。假设已安装p4c编译器,可通过以下命令为P4_16 v1model程序生成JSON文件:
bashp4c --target bmv2 --arch v1model --std p4-16 <prog>.p4
这将创建<prog>.json输出文件,可将其提供给bmv2的simple_switch二进制文件:
bashsudo ./simple_switch -i 0@<iface0> -i 1@<iface1> <prog>.json
在此示例中,<iface0>和<iface1>是绑定到交换机的接口(分别作为端口0和1)。
CLI代码位于tools/runtime_CLI.py,使用方法如下:
bash./runtime_CLI.py --thrift-port 9090
CLI连接到每个交换机进程中运行的Thrift RPC服务器。9090是默认端口,若在同一台机器上运行多个设备,需为每个设备提供不同端口。一个CLI实例只能连接一个交换机设备。
CLI基于Python的cmd模块实现,支持自动补全。查看代码可了解支持的命令列表,包括:
CLI包含用于配置组播引擎的命令。由于提供了2种不同引擎(SimplePre和SimplePreLAG),启动CLI时需使用*--pre选项指定目标使用的引擎,可接受值为:None、SimplePre(默认值)和SimplePreLAG*。l2_switch目标使用SimplePre引擎,simple_switch目标使用SimplePreLAG引擎。
可查看l2_switch和simple_router的commands.txt文件了解CLI使用示例。
要启用调试器,需确保在configure时传递--enable-debugger标志。启动交换机时还需使用--debugger命令行标志。
交换机运行时,可使用tools/p4dbg.py附加调试器:
bashsudo ./p4dbg.py [--thrift-port <port>]
启动交换机时,使用*--nanolog命令行选项启用事件日志。例如,使用ipc地址ipc:///tmp/bm-log.ipc*:
bashsudo ./simple_switch -i 0@<iface0> -i 1@<iface1> --nanolog ipc:///tmp/bm-log.ipc <JSON文件路径>
交换机运行时,使用tools/nanomsg_client.py:
bashsudo ./nanomsg_client.py [--thrift-port <port>]
该脚本将显示每个数据包的重要事件(表命中/未命中、解析器转换等)。
部分目标(simple_switch和simple_switch_grpc)允许用户在运行时动态加载共享库,通过目标特定的命令行选项--load-modules实现,该选项接受逗号分隔的共享对象列表作为参数。此功能当前仅在支持dlopen的系统上可用。确保共享对象对动态加载器可见(例如在Linux上适当设置LD_LIBRARY_PATH)。配置bmv2时可使用--enable-modules/--disable-modules控制此功能,默认在支持dlopen的系统上启用。
我们将在单独文档中提供更多信息,但可立即使用simple_router目标测试Mininet集成。
在第一个终端中,执行:
bash- cd mininet - sudo python 1sw_demo.py --behavioral-exe ../targets/simple_router/simple_router --json ../targets/simple_router/simple_router.json
在第二个终端中:
bash- cd targets/simple_router - ./runtime_CLI < commands.txt
此时交换机已运行且表已填充。可在Mininet中运行pingall,或在主机h1和h2之间使用iperf启动TCP流。
若使用simple_switch运行P4程序(而非上述示例中的simple_router),只需通过--behavioral-exe向1sw_demo.py提供相应的simple_switch二进制文件。
bmv2并非生产级软件交换机。有关bmv2性能的更多信息,请参考此文档。
首先可查看targets/目录。我们还开始编写一些doxygen文档,专门针对希望使用bmv2构建块实现自定义交换机模型的程序员。若已安装doxygen,可通过运行doxygen Doxyfile生成文档,输出位于doxygen-out目录下,也可在线浏览。
目前,已知以下P4_14功能不受支持:
若发现更多缺失功能或希望添加特定功能,请发送邮件至***,或在https://github.com/p4lang/behavioral-model/issues%E4%B8%8A%E6%8F%90%E4%BA%A4%E5%B8%A6%E6%9C%89%E9%80%82%E5%BD%93%E6%A0%87%E7%AD%BE%E7%9A%84issue%E3%80%82%E6%AC%A2%E8%BF%8E%E8%B4%A1%E7%8C%AE%E4%BB%A3%E7%A0%81%EF%BC%81
请在https://github.com/p4lang/behavioral-model/issues%E4%B8%8A%E6%8F%90%E4%BA%A4%E5%B8%A6%E6%9C%89%E9%80%82%E5%BD%93%E6%A0%87%E7%AD%BE%E7%9A%84issue%E3%80%82
参见CONTRIBUTING.md。
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
来自真实用户的反馈,见证轩辕镜像的优质服务