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全功能部署成功。
相关推荐
蓝速科技1 小时前
会议室门牌公告通知发布选型与落地指南丨蓝速科技
大数据·运维·数据库·人工智能·科技
Ivanqhz1 小时前
SVD++算法
java·服务器·网络·深度学习·神经网络
chicheese1 小时前
Linux 面试速查表:从初级到高级,附高频场景答题模板
linux·运维
Linux-lucky2 小时前
32-38-Linux学习之旅之MySQL综合
linux·运维·学习·mysql·ubuntu
智能运维指南3 小时前
2026年ITSM系统怎么选?四款主流方案与五维评估模型
运维·itsm·嘉为蓝鲸
vortex53 小时前
常用终端模拟器全面对比:Kitty、WezTerm、Ghostty 与 Konsole
linux
我命由我123453 小时前
Git 推送报错:error: src refspec main does not match any
运维·git·gitee·github·运维开发·学习方法·版本控制
骇客野人3 小时前
测试环境MySQL迁移Vastbase(海量数据库)完整改造与落地实施方案
运维·服务器
迪康Defender3 小时前
终端安全实战:如何高效解决企业U盘泄密与管控难题
运维·网络·安全·web安全·终端安全管理
网安小学生(兼顾数据库版)3 小时前
固件+软件供应链:ONEKEY+Mend如何实现全链路安全覆盖
网络·安全·web安全