1、P4 Runtime
P4Runtime是P4的一个控制面的协议,也叫南向协议,用于下发流表、规则等作用,但是P4一般提供了PCI这一个模块来修改流表等静态存储,这些模块对于需求往往不够,所以本文记录一下如何使用P4Runtime来从控制面读、写、改一些静态的流表、register、counter等。
首先cd到/behavioral-model/tools文件下面,看到目录下有一个runtime_CLI.py,这个文件就是我们用来修改的文件。这个文件本来的功能就是CLI的命令循环,我们可以立足于它做一些自定义的动作,而不需要在CLI的命令行输入,只需要运行一个python脚本就可以了。
-
runtime_CLI.py里面把所有的API都写在了class RuntimeAPI里面了。而在主程序里面只写了一句
RuntimeAPI(args.pre, standard_client, mc_client).cmdloop()
所以我们可以在class RuntimeAPI中自己定义一个函数,函数中调用不同的动作组合,然后在主程序里调用这个成员函数就可以实现运行自己规定的那些动作了,而这些动作怎么组合根据个人的需要即可。
2、P4 Runtime or CLI连接switches
- 当网络结构中含有多个交换设备时,利用一个远程主机开启不同的进程运行CLI可以分别连接多个交换设备
# 开启一个terminal
simple_switch_CLI --thrift-port 9090
# 默认监视端口是9090,连接的是第一个实例的switch
# 再开启一个terminal
simple_switch_CLI --thrift-port 9091
# 默认监视端口是9090,递增一个端口号,连接的是第二个实例的switch
# 再开启一个terminal
simple_switch_CLI --thrift-port 9092
# 默认监视端口是9090,递增2个端口号,连接的是第3个实例的switch
- 当网络结构中含有多个交换设备时,利用一个远程主机开启不同的进程运行python脚本同样可以分别连接多个交换设备
# 开启一个terminal
cd /home/vagrant/behavioral-model/tools
./runtime_CLI.py --thrift-port 9090
# 默认监视端口是9090,连接的是第一个实例的switch
# 再开启一个terminal
./runtime_CLI.py --thrift-port 9091
# 默认监视端口是9090,递增一个端口号,连接的是第二个实例的switch
# 再开启一个terminal
./runtime_CLI.py --thrift-port 9092
# 默认监视端口是9090,递增2个端口号,连接的是第3个实例的switch
- 这里的runtime_CLI.py可以自定义修改给响应的交换机下发一些流表和修改register、counter等数据结构