ubuntu中部署开源交换机模拟器bmv2详细步骤

目录

一、前言

  • bmv2(Behavioral Model version 2),是一个开源的软件交换机模拟器。
  • 它允许研究人员和工程师编写、测试和调试网络数据包的处理程序进行自定义网络通信,是学习P4编程和验证网络的重要工具。
  • 也就是说,通过bmv2,你可以看到硬件交换机内部是如何运行的。
  • 接下来的内容,详细介绍了bmv2的部署方法。

二、 bmv2安装部署

1、系统环境

1.1 操作系统要求

  • 推荐使用Ubuntu 18.04 LTS或20.04 LTS版本

    复制代码
     lsb_release -a    #ubuntu查看版本

1.2 硬件要求

  • 最低配置:
    • CPU:双核2.0GHz
    • 内存:4GB
    • 磁盘空间:20GB
  • 推荐配置:
    • CPU:四核3.0GHz及以上

    • 内存:8GB及以上

    • 磁盘空间:50GB及以上

      复制代码
      lscpu    #ubuntu中查看CPU信息
      复制代码
      free  -h   #ubuntu查看内存信息
      复制代码
      df  -H    #ubuntu查看磁盘空间

1.3 软件依赖

  • 必须:
    • g++ (版本7.0及以上)
    • CMake (版本3.10及以上)
    • Python 3 (版本3.6及以上)
    • pip3 (用于安装Python依赖包)
  • 可选:
    • Wireshark (用于数据包分析)
    • Mininet (用于网络仿真测试)
    • Git (用于源码管理)

2、ubuntu中安装bmv2

1.1 初始化配置

  • 设置目标版本(强制使用 20.04 的仓库):

    复制代码
    export TARGET_RELEASE="20.04"
  • 添加仓库源列表:

    复制代码
    echo "deb https://download.opensuse.org/repositories/home:/p4lang/xUbuntu_${TARGET_RELEASE}/ /" | sudo tee /etc/apt/sources.list.d/home:p4lang.list
  • 下载并添加 GPG 密钥(:

    复制代码
    curl -fsSL https://download.opensuse.org/repositories/home:/p4lang/xUbuntu_20.04/Release.key | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/home_p4lang.gpg
  • 更新本地软件包列表

    复制代码
    sudo apt update

1.2 执行安装 bmv2

  • 安装命令

    复制代码
    sudo apt install p4lang-bmv2         #命令会把 simple_switch、simple_switch_grpc 等核心程序以及必要的库文件一并安装好。

三、 p4c安装部署

p4c描述

  • P4c是一款针对P4编程语言的编译器。
  • ‌P4编程语言‌(Programming Protocol-independent Packet Processors)是一种‌专为网络数据设计的语言‌
  • p4语言用于‌自定义网络设备(如交换机、网卡)如何处理和转发数据包‌。

p4c安装

  • 添加 P4 语言所需的第三方依赖仓库

    复制代码
    sudo add-apt-repository ppa:frederic-loui/p4lang-3rd-party-focal
  • 添加 P4 编译器主分支的每日构建版本仓库

    复制代码
    sudo add-apt-repository ppa:frederic-loui/p4lang-master-focal-nightly	
  • 更新软件包列表

    复制代码
    sudo apt update	
  • 安装 P4 编译器以及其他运行库

    复制代码
    sudo apt install p4c p4lang-pi

验证安装

复制代码
p4c --version
 which simple_switch
 simple_switch --version
 which simple_switch_CLI
 which bm_CLI
 which runtime_CLI.py

四、Mininet部署安装

Mininet描述

  • Mininet是一款强大的网络仿真(emulation)工具
  • 可以在一台电脑上,用一条命令就能创建出包含交换机、主机和控制器的虚拟网络。
  • Mininet是学习、开发和测试网络技术的利器。

Mininet部署安装

  • 获取源码

    复制代码
    git clone https://github.com/mininet/mininet.git
  • 安装完整工具链 (Mininet + Open vSwitch + Wireshark):

    复制代码
    cd mininet
    sudo ./util/install.sh -n3v    # -n 表示Mininet,-v表示Open vSwitch,-3表示Wireshark
  • 验证安装

    复制代码
    mn --version

五、验证 bmv2 运行功能

创建一个 test.p4 文件

复制代码
cat > /myproject/test.p4 << 'EOF'
#include <core.p4>
#include <v1model.p4>

typedef bit<48> macAddr_t;
typedef bit<32> ipv4Addr;

header ethernet_t {
    macAddr_t dstAddr;
    macAddr_t srcAddr;
    bit<16>   etherType;
}

struct metadata { }
struct headers {
    ethernet_t ethernet;
}

parser MyParser(packet_in packet, out headers hdr, inout metadata meta,
                inout standard_metadata_t standard_metadata) {
    state start {
        packet.extract(hdr.ethernet);
        transition accept;
    }
}

control MyVerifyChecksum(inout headers hdr, inout metadata meta) {
    apply { }
}

control MyIngress(inout headers hdr, inout metadata meta,
                  inout standard_metadata_t standard_metadata) {
    apply {
        // 简单转发:将包从端口 0 发出,并修改目的 MAC 地址为广播地址
        hdr.ethernet.dstAddr = 0xFFFFFFFFFFFF;
        standard_metadata.egress_spec = 0;
    }
}

control MyEgress(inout headers hdr, inout metadata meta,
                 inout standard_metadata_t standard_metadata) {
    apply { }
}

control MyComputeChecksum(inout headers hdr, inout metadata meta) {
    apply { }
}

control MyDeparser(packet_out packet, in headers hdr) {
    apply {
        packet.emit(hdr.ethernet);
    }
}

V1Switch(MyParser(), MyVerifyChecksum(), MyIngress(), MyEgress(),
         MyComputeChecksum(), MyDeparser()) main;
EOF

编译

  • 当前目录下会生成 test.json 文件

    p4c --target bmv2 --arch v1model test.p4 -o test.json

  • bmv2全功能部署成功。
相关推荐
sdm07042715 小时前
TCP--面向字节流
网络·网络协议·tcp/ip
薛定猫AI15 小时前
Codex 与 Claude Code 全平台安装配置指南(Windows / macOS / Linux)
linux·windows·macos
仙柒41518 小时前
Docker原理
运维·docker·容器
哼?~21 小时前
NAT、代理服务、内网穿透
网络
米高梅狮子1 天前
第2章 docker容器
运维·docker·云原生·容器·架构·kubernetes·自动化
kidwjb1 天前
信号量在进程中的使用
linux·进程间通信
闵孚龙1 天前
Claude Code Ultraplan 远程多代理规划全解析:AI Agent、CCR远程容器、异步规划、状态机、计划传送与企业级自动化治理
运维·人工智能·自动化
上海云盾-小余1 天前
内网边界安全管控:访问权限隔离与入侵阻断方案
网络·安全·web安全
南京码讯光电技术有限公司1 天前
工业无线AP选型指南:从WiFi 5到WiFi 6+5G CPE,如何构建全覆盖、零漫游、高可靠的智能工厂网络?
服务器·网络·5g
sulikey1 天前
个人Linux操作系统学习笔记2 - gcc与库的理解
linux·笔记·学习·操作系统·gcc·