p4运行simple_switch
编译p4程序
p4c -b bmv2 mine.p4 -o mine.bmv2
搭建网络拓扑
# First pair: veth0-veth1
sudo ip link add name veth0 type veth peer name veth1
sudo ip link set dev veth0 up
sudo ip link set dev veth1 up
sudo ip link set veth0 mtu 9500
sudo ip link set veth1 mtu 9500
sudo sysctl net.ipv6.conf.veth0.disable_ipv6=1
sudo sysctl net.ipv6.conf.veth1.disable_ipv6=1
# Second pair: veth2-veth3
sudo ip link add name veth2 type veth peer name veth3
sudo ip link set dev veth2 up
sudo ip link set dev veth3 up
sudo ip link set veth2 mtu 9500
sudo ip link set veth3 mtu 9500
sudo sysctl net.ipv6.conf.veth2.disable_ipv6=1
sudo sysctl net.ipv6.conf.veth3.disable_ipv6=1
# Second pair: veth4-veth5
sudo ip link add name veth4 type veth peer name veth5
sudo ip link set dev veth4 up
sudo ip link set dev veth5 up
sudo ip link set veth4 mtu 9500
sudo ip link set veth5 mtu 9500
sudo sysctl net.ipv6.conf.veth4.disable_ipv6=1
sudo sysctl net.ipv6.conf.veth5.disable_ipv6=1
BMv2 运行p4程序
普通运行
sudo simple_switch -i 0@veth0 -i 1@veth2 -i 2@veth4 mine.bmv2/mine.json &
运行时切换p4程序
在运行simple_switch时加入--enable-swap参数
sudo simple_switch -i 0@veth0 -i 1@vetn2 -i 2@veth4 mine.bmv2/mine.json -- --enable-swap &
启动运行时CLI
simple_switch_CLI --thrift-port 9090 # 9090 为thrift默认端口(或者 simple_switch_CLI)
simple_switch_CLI 充当控制器
查看全部表格
show_tables
查看表格信息
table_info ipv4_lpm # table_info
添加转发规则
table_add =>
比如:
table_add ipv4_lpm ipv4_forward 10.10.0.0/16 => 0
table_add ipv4_lpm ipv4_forward 20.20.0.0/16 => 1
table_add ipv4_lpm ipv4_forward 30.30.0.0/16 => 2
查看转发流表
table_dump ipv4_lpm # table_dump
监听端口
tcpdump
sudo tcpdump -n -i veth3 # sudo tcpdump -n -i
wireshark
可视化界面直接抓包即可
注入数据包
scapy
启动程序
sudo scapy
生成数据包
p = Ether()/IP(dst="12.12.1.1")/UDP()
从 veth1 端口注入
sendp(p, iface="veth1")
端口监听结果:收到包和转发了该包
切换p4程序
此处修改了代码逻辑(添加了Egress处理)
加载新的配置文件
load_new_config_file: 将新的json配置推送至目标交换机,此时数据平面尚未改变,换句话说,目标交换机仍然按照先前的配置(或P4程序)对来访的数据报进行处理;然而,控制平面需要按照新的配置和P4程序下发控制规则,但这些控制规则目前不会影响数据平面的处理;
load_new_config_file
swap_configs: 在数据平面启用新的json配置
swap_configs
后续操作与以上操作类似
ERROR
无法绑定同一个thrift端口
内容来源于网络如有侵权请私信删除