本文参考
(1)Varant Download:点我
(2)Mac上安装Git:戳我
(3)Github P4-vSwitch/Varant:点我
(4)Mac强制重新启动:戳我
实验环境:
Mac OS X 10.11.5
相关硬件概览:
- 型号名称: MacBook Air
- 型号标识符: MacBookAir7,2
- 处理器名称: Intel Core i5
- 处理器速度: 1.6 GHz
- 处理器数目: 1
- 核总数: 2
- L2 缓存(每个核): 256 KB
- L3 缓存: 3 MB
- 内存: 8 GB
前言
p4-vSwitch PISCES是一种基于OvS的Software Switch,装有DPDK等内核组件,它一般使用P4语言作为其描述,采用Vagrant工具进行虚拟环境的分支控制。
安装模拟环境,相当于装三个VMs虚拟环境:交换机环境(Switch),发生器(Generator),接收器(Receiver)。
之前我们接触了P4factory,进行了简单的样例测试;那么现在我们想要做的,就是模拟一个环境,看看P4程序能不能在该环境下发挥它的作用。
大概需要五个终端,运行三个虚拟环境:三个终端A,B,C运行Switch虚拟环境,D运行Receiver虚拟环境,E运行Generator虚拟环境。
提示一:
之前我走了很多弯路,在Ubuntu14.04虚拟环境下安装PISCES和Vagrant。
但是在执行
vagrant up
这一步的时候,会出现没有找到VirtualBox的相关文件。
后来百度了一下Vagrant这个工具,才发现这是一个管理虚拟环境的工具,并不是要运行在虚拟环境中,而是要装在和VirtualBox并行的系统中!
我的母系统是OS,那么我的Vagrant和VirtualBox就需要装在该系统下。
提示二:
请根据上文提供的Vagrant安装网址和VirtualBox的官网进行安装。
注意:虚拟环境一定得是VirtualBox,其他的比如VMwareWorkstation就不行。
Setup Virtual Machines (VMs)
首先自然是安装三个虚拟环境。下一段是关于它们的描述:
There are three virtual machines: Switch, Generator, and Receiver. The Generator sends traffic to the switch on its eth1 interface, the switch then processes the packet based on the configured P4 program and sends it out to the receiver on its eth2 interface. The receiver receives the traffic and displays stats on the screen.
第一步 Add the vagrant box:
$ vagrant box add pisces-ubuntu-trusty64 http://www.cs.princeton.edu/~mshahbaz/projects/pisces/vagrant/ubuntu-trusty64.box
这一步需要十分钟左右的等待,笔者所处的WiFi环境不是特别好,有一次下了一天一夜只有5%,换到实验室就没有问题,十分钟解决。
第二步 Clone the vagrant repository.
$ git clone https://github.com/P4-vSwitch/vagrant.git
$ cd vagrant
这一步蛮快的,5s不到。进入vagrant目录。
第三步 启动虚拟机 Bring up virtual machines.
$ vagrant up
这一步等了20min,跑了估计有10G多的闪存。。
小提示:
It can take vagrant 10-15 mins to start up the VMs. So sit back, relax, and wait for the setup to complete. :-)
大意:要花您十几分钟的时间开启这三个虚拟机,不妨坐下来放松一下~
Also, the VMs being setup are only compatible with VirtualBox, make sure this provider is available to vagrant.
大意是我上文中提到的虚拟环境必须是VirtualBox支持的。
这一步完成之后,虚拟环境的安装就告一段落了。
Examples 一次失败的P4样例l2_switch 测试
We show how to build a simple layer-2 switch using PISCES. We use the l2_switch.p4 program provided with the p4lang/p4factory repository.
这里的样例,在P4Switch中有,是一个基于二层交换机的P4程序。
在终端A:
登录上Switch虚拟机 Log into the switch VM.
$ vagrant ssh switch
注意:必须首先cd到该目录再进行vagrant命令操作,我的命令是:
cd /Users/wasdns/vagrant
a. Compiling l2_switch.p4 编译该P4程序
首先,在Switch虚拟环境中设置DPDK的环境变量:
$ export RTE_SDK=/home/vagrant/ovs/deps/dpdk
$ export RTE_TARGET=x86_64-native-linuxapp-gcc
$ export DPDK_DIR=$RTE_SDK
$ export DPDK_BUILD=$DPDK_DIR/$RTE_TARGET/
Compile the l2_switch.p4 program. Specify /vagrant/examples/l2_switch/l2_switch.p4 for the p4inputfile flag.
编译程序,为该程序设置一个flag:
$ cd ~/ovs
$ sudo ./configure --with-dpdk=$DPDK_BUILD CFLAGS="-g -O2 -Wno-cast-align" \
p4inputfile=/vagrant/examples/l2_switch/l2_switch.p4 \
p4outputdir=./include/p4/src
$ sudo make clean
$ sudo make -j 2
命令复制即可,照打的话可能会出现换行问题。
b. Running l2_switch.p4 跑这个样例
Run ovsdb-server
在终端B上:
打开终端B,登录到Switch虚拟机上,命令:
cd /Users/wasdns/vagrant
vagrant ssh switch
运行OvS数据库服务器:
$ cd ~/ovs/ovsdb
$ sudo ./ovsdb-server --remote=punix:/usr/local/var/run/openvswitch/db.sock \
--remote=db:Open_vSwitch,Open_vSwitch,manager_options --pidfile
Run ovs-vswitchd
打开终端C,登录到Switch上,运行ovs-vswitchd.
$ cd ~/ovs/vswitchd
$ sudo ./ovs-vswitchd --dpdk -c 0x1 -n 4 -- unix:/usr/local/var/run/openvswitch/db.sock --pidfile
Create an OVS bridge
Open a third terminal, log into the switch VM and run the following commands to create a new OVS bridge.
打开终端C,登录到Switch上,创建新的一个OvS bridge:
$ cd ~/ovs/utilities
$ sudo ./ovs-vsctl --no-wait init
$ sudo ./ovs-vsctl add-br br0 -- set bridge br0 datapath_type=netdev
$ sudo ./ovs-vsctl set bridge br0 protocols=OpenFlow15
$ sudo ./ovs-vsctl add-port br0 dpdk0 -- set Interface dpdk0 type=dpdk
$ sudo ./ovs-vsctl add-port br0 dpdk1 -- set Interface dpdk1 type=dpdk
原文提供了删除bridge的方法:
$ sudo ./ovs-vsctl del-br br0
以及显示bridge设置的方法:
$ sudo ./ovs-vsctl show
安装流规则 Install flow rules
$ cd /vagrant/examples/l2_switch/
$ sudo ./l2_switch.sh
Send and receive test traffic 制造traffic 并对Switch进行测试
打开终端D,登录到Generator虚拟环境上。
cd /Users/wasdns/vagrant
vagrant ssh generator
进入pktgen目录:
$ cd ~/pktgen
运行pktgen -Run pktgen as follows:
$ sudo ./app/app/x86_64-native-linuxapp-gcc/app/pktgen -c 0x3 -n 4 -- -P -m "1.0" -f /vagrant/examples/l2_switch/generator.pkt
接下来待续···
强制重启Mac
正常情况下,笔记本运行到这一步不卡爆才怪:
Control + command + 电源键 = 强制重启。
接下来
在Ubuntu下安装VirtualBox,争取在实验室环境下跑出来!
2016/10/22