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全功能部署成功。
相关推荐
爱吖吖吖a11 小时前
CSMA/CA(载波侦听多路访问/冲突避免)
网络·网络协议
X7x511 小时前
ACL访问控制列表:网络安全的守护神
网络协议·网络安全·信息与通信·acl
j_xxx404_11 小时前
Linux:深入解析ELF文件结构
linux·运维·服务器
互联网推荐官11 小时前
上海软件定制开发与数字化建设:D-coding 全平台应用架构及实施指南
大数据·运维
ShineWinsu11 小时前
对于Linux:进程间通信IPC(共享内存)的解析
linux·服务器·面试·笔试·进程·共享内存·ipc
代码中介商11 小时前
Linux 进程间通信:共享内存与消息队列完全指南
linux·运维·服务器
计算机安禾11 小时前
【Linux从入门到精通】第27篇:文本处理三剑客(上)——grep 正则表达式实战
linux·运维·正则表达式
码到成功>_<11 小时前
Linux中grep命令使用说明
linux
minji...11 小时前
Linux 网络套接字编程(六)TCP的通信是全双工的,自定义协议的定制,序列化和反序列化
linux·运维·服务器·网络·c++