6.P4物理机实现拓扑Ping CN1- switch1 - switch2 - CN2

Ping CN1- switch1 - switch2 - CN2
交换机物理连接
5(s1)-(s4)
9(s1)-9(s2)
13(s1)-cn0
17(s1)-cn1
5(s2)-5(s3)
9(s2)-9(s1)
13(s2)-cn2
17(s2)-cn3
开启物理机S1、S2
asic-setup.sh
开启stratum
stratum_bfrt -chassis_config_file=/etc/stratum/x86-64-accton-wedge100bf-32x-r0/chassis_config.pb.txt  -bf_switchd_cfg=/usr/local/sde/share/p4/targets/tofino/skip_p4.conf -enable_onlp=false -bf_sde_install=$SDE_INSTALL    
交换机打开runtime-shell,并下发表项
s1交换机
S1开启p4-runtime:
docker run -ti -v $PWD:/tmp/ p4lang/p4runtime-sh --grpc-addr 202.197.0.140:9559 --device-id 1 --election-id 0,1 --config /tmp/p4info.txt,/tmp/device_config.pb.bin
向S1交换机下发表项:
te1 = table_entry["Ingress.ipv4_lpm"](action="send") 
te1.match["hdr.ipv4.dst_addr"] = "10.0.2.31/32" 
te1.action["port"]="48"
te1.insert()
te2 = table_entry["Ingress.ipv4_lpm"](action="send") 
te2.match["hdr.ipv4.dst_addr"] = "10.0.2.21/32" 
te2.action["port"]="12"
te2.insert()
s2交换机
docker run -ti -v $PWD:/tmp/ p4lang/p4runtime-sh --grpc-addr 202.197.0.150:9559 --device-id 1 --election-id 0,1 --config /tmp/p4info.txt,/tmp/device_config.pb.bin
te1 = table_entry["Ingress.ipv4_lpm"](action="send") 
te1.match["hdr.ipv4.dst_addr"] = "10.0.2.31/32" 
te1.action["port"]="20"
te1.insert()
te2 = table_entry["Ingress.ipv4_lpm"](action="send") 
te2.match["hdr.ipv4.dst_addr"] = "10.0.2.21/32" 
te2.action["port"]="52"
te2.insert()
测试CN1 ping CN2 
首次进入CN2时,IP还是10.0.1.31,IP网段不正确。【经过本次调整后,通过该程序可直接ping成功!】
进入 sudo vim /etc/sysconfig/network-scripts/ifcfg-eth2 修改相应的网络卡
再分别在CN1和CN2中加入对方的arp
[hxy@cn1 ~]$ sudo arp -s 10.0.2.31 e8:eb:d3:a7:2c:af
[hxy@cn1 ~]$ arp -a 10.0.2.31
? (10.0.2.31) at e8:eb:d3:a7:2c:af [ether] PERM on eth2
[gyn@cn2 ~]$ sudo arp -s 10.0.2.21 e8:eb:d3:a7:29:af
[gyn@cn2 ~]$ arp -a 10.0.2.21
? (10.0.2.21) at e8:eb:d3:a7:29:af [ether] PERM on eth2
测试CN1 ping CN2  成功!
测试CN2 ping CN1  成功!
<think>好的,用户让我详细介绍P4环境搭建的详细步骤。首先,我需要明确用户所说的P4是指什么。P4可能指的是编程语言P4,主要用于网络编程,特别是在软件定义网络(SDN)和数据平面编程中。所以用户可能是在搭建P4的开发环境,用于网络协议或交换机编程。 接下来,我要回忆一下搭建P4环境通常需要的组件。通常包括安装依赖项、获取P4编译器(如p4c)、行为模型(如BMv2),以及一些辅助工具,比如Mininet、PI、Protobuf等。此外,可能还需要考虑Python环境和一些库的支持。 用户可能是网络领域的研究者或学生,想要开始学习P4编程,因此需要从头开始配置环境。他们可能对Linux系统有一定了解,但可能不熟悉具体的依赖和步骤。所以步骤需要详细,包括命令和可能遇到的问题。 首先,我需要确定操作系统的要求。通常推荐使用Ubuntu 18.0420.04,因为这些版本被广泛测试。然后,安装系统依赖,比如Git、Automake等工具。接下来是安装PI(Protocol Independent)库、Protobuf、GRPC,这些是编译BMv2所必需的。 然后是安装p4c编译器,这可能需要从GitHub克隆仓库并编译。之后是BMv2,即行为模型的安装,同样需要从源码编译。可能还需要安装Mininet来模拟网络拓扑,以及一些Python依赖库,如thrift。 用户可能遇到的问题包括依赖项缺失、版本冲突、编译错误等,所以需要指出可能的注意事项,比如使用特定版本的Protobuf或GRPC,避免权限问题使用sudo,以及环境变量配置。 另外,可能还需要安装一些调试工具,如Wireshark和Scapy,用于分析和生成数据包。最后,测试环境是否正常工作,比如运行一个示例程序,用simple_switch启动交换机,并通过Mininet进行测试。 需要确保步骤清晰,分点列出,命令准确,并且提醒用户注意常见错误。可能还需要说明如何通过虚拟机或Docker来简化环境搭建,作为替代方案,特别是对于不熟悉系统配置的用户来说,Docker可能是更简单的方法。 最后,总结整个流程,并提示用户遇到问题时的解决方法,比如查看GitHub的issue或社区支持。这样用户能够有条不紊地按照步骤操作,减少困惑。</think>以下是 P4 开发环境搭建的详细步骤(基于 Ubuntu 系统,推荐 Ubuntu 20.04/22.04): --- ### **1. 系统准备** ```bash # 更新系统 sudo apt update && sudo apt upgrade -y # 安装基础依赖 sudo apt install -y git automake cmake build-essential \ libtool pkg-config libgmp-dev libssl-dev libboost-dev \ libboost-iostreams-dev libboost-graph-dev \ python3 python3-pip tcpdump wireshark ``` --- ### **2. 安装 Protocol Buffers (Protobuf)** P4 工具链依赖 Protobuf v3.18.1 或兼容版本: ```bash # 安装依赖 sudo apt install -y autoconf curl unzip # 下载并编译 Protobuf git clone https://github.com/protocolbuffers/protobuf.git cd protobuf git checkout v3.18.1 # 选择兼容版本 git submodule update --init --recursive ./autogen.sh ./configure make -j$(nproc) sudo make install sudo ldconfig # 更新动态链接库 ``` --- ### **3. 安装 P4 编译器 (p4c)** ```bash # 克隆仓库 git clone --recursive https://github.com/p4lang/p4c.git cd p4c # 编译安装 mkdir build && cd build cmake .. make -j$(nproc) sudo make install ``` --- ### **4. 安装 BMv2 行为模型** ```bash # 安装依赖 sudo apt install -y libreadline-dev libnanomsg-dev # 克隆并编译 BMv2 git clone https://github.com/p4lang/behavioral-model.git cd behavioral-model ./autogen.sh ./configure make -j$(nproc) sudo make install sudo ldconfig ``` --- ### **5. 安装 Mininet(网络模拟工具)** ```bash git clone https://github.com/mininet/mininet cd mininet sudo util/install.sh -n3v # 安装 Mininet + Open vSwitch ``` --- ### **6. 安装 PI(Protocol Independent 组件)** ```bash git clone https://github.com/p4lang/PI.git cd PI ./autogen.sh ./configure --with-proto make -j$(nproc) sudo make install sudo ldconfig ``` --- ### **7. 安装其他工具** #### **Scapy(数据包生成工具)** ```bash pip3 install scapy ``` #### **PTF(P4 Test Framework)** ```bash git clone https://github.com/p4lang/ptf.git cd ptf pip3 install . ``` --- ### **8. 环境验证** 1. **测试 p4c 编译器**: ```bash p4c --version # 应输出类似 "p4c 1.2.4" ``` 2. **运行 BMv2 示例**: ```bash cd behavioral-model/targets/simple_switch sudo ./simple_switch --log-console -i 0@veth0 # 启动一个虚拟交换机 ``` 3. **Mininet 测试**: ```bash sudo mn --test pingall # 验证网络模拟是否正常 ``` --- ### **常见问题** 1. **依赖冲突**:确保 Protobuf 版本与 P4 工具链兼容。 2. **权限问题**:使用 `sudo` 安装全局工具时注意权限。 3. **环境变量**:若命令未找到,检查 `/usr/local/bin` 是否在 `PATH` 中。 --- ### **替代方案:Docker 快速部署** 若不想手动安装,可直接使用 P4 官方镜像: ```bash docker pull p4lang/p4runtime docker run -it p4lang/p4runtime ``` -- 通过以上步骤,您将完成 P4 开发环境的搭建。建议参考 [P4 官方文档](https://github.com/p4lang) 获取最新更新。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值