服务器虚拟p4交换机,p4 运行虚拟交换机(simple_switch)

1cd74d6224fffc88eefaaa919c14fb51.png

16334daeea3ebf22c2dab4ead4ff817f.png

2477c2605fc8deb46157ba96362d04ba.png

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

c3a0fcf559fb01a6bf73c5af545cd0fb.png

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 &

18ee806402a0fcd20e864afc5a3f18e6.png

启动运行时CLI

simple_switch_CLI --thrift-port 9090 # 9090 为thrift默认端口(或者 simple_switch_CLI)

ea40f1d6f2c0fa6bfbba2e1781c7471d.png

simple_switch_CLI 充当控制器

查看全部表格

show_tables

50820c0807b48b26126393b49cdb4c41.png

查看表格信息

table_info ipv4_lpm # table_info

270ef07107ec7a6917fc6c1b0cdfaaf3.png

添加转发规则

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

27f6f9ee1f24139948a070769c78f743.png

查看转发流表

table_dump ipv4_lpm # table_dump

9e112c0a904a5ee2d3b24b0342dc46e0.png

监听端口

tcpdump

sudo tcpdump -n -i veth3 # sudo tcpdump -n -i

9234c4520f80178c2305133d39cb235f.png

wireshark

可视化界面直接抓包即可

注入数据包

scapy

启动程序

sudo scapy

2d75d4b1ef6169dccc5265ed6005824f.png

生成数据包

p = Ether()/IP(dst="12.12.1.1")/UDP()

f8fe03aacc895286a2a5b62527a4d3c8.png

从 veth1 端口注入

sendp(p, iface="veth1")

50c716178948d74bcb6d89cb0b2b65b1.png

端口监听结果:收到包和转发了该包

14baab9e2a46d43f1a9e7641bbd425a9.png

切换p4程序

此处修改了代码逻辑(添加了Egress处理)

67c474162328e716fd590ba56ce3be78.png

加载新的配置文件

load_new_config_file: 将新的json配置推送至目标交换机,此时数据平面尚未改变,换句话说,目标交换机仍然按照先前的配置(或P4程序)对来访的数据报进行处理;然而,控制平面需要按照新的配置和P4程序下发控制规则,但这些控制规则目前不会影响数据平面的处理;

load_new_config_file

e397bcc1c94fde42c51aeaac69f1d2bb.png

swap_configs: 在数据平面启用新的json配置

swap_configs

f970832f805f55f478312139035b2465.png

后续操作与以上操作类似

ERROR

无法绑定同一个thrift端口

3f29874328a8be11cc4337c7d4ca2285.png

内容来源于网络如有侵权请私信删除

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值