ONOS+P4 Tutorial 1 - 2020-03


  • 在进行本实验前,应学习ONOS 以及 P4的相关知识 。 本实验在opennetworkinglab
    提供的教程镜像中进行。

简介

请访问 ONOS+P4+SRv6-Tutorial 并阅读相关介绍.
本文旨在记录有关 Software tools basics and packet I/O的实验步骤。请注意文章时间以及教程文件版本,下文所提到的文件位置可通过搜索查找。

Step1

首先,需要对 main.p4文件进行修改。查找有关“egress pipeline”的函数(即:control EgressPipeImpl)。将“packet_in”设为有效并将P4所保留的metadata赋值给pipeline的入端口,从而实现pipeline对数据包的读取。
相关代码应修改如下:

if (standard_metadata.egress_port == CPU_PORT) {
            hdr.packet_in.setValid();
            hdr.packet_in.ingress_port = standard_metadata.ingress_port;
        }

编辑完成后,在tutorial文件夹下打开终端,运行:

make p4

Step2

然后我们可以通过一些测试来评估我们的p4程序是否有效。找到packetio.py 文件并参考p4info.txt文件进行修改,该文件指定的P4Runtime实体使用编译P4程序后获得的相同名称,相关代码应修改如下:

packet_out_msg = self.helper.build_packet_out(
                payload=str(pkt),
                metadata={
                    "egress_port": outport,
                    "_pad": 0
                })
...
self.insert(
			self.helper.build_table_entry(
            table_name="IngressPipeImpl.acl",
            match_fields={
                # Ternary match (value, mask)
                "hdr.ethernet.ether_type": (eth_type, 0xffff)
            },
            action_name="IngressPipeImpl.clone_to_cpu",
            priority=DEFAULT_PRIORITY
        ))
...
exp_packet_in_msg = self.helper.build_packet_in(
                payload=str(pkt),
                metadata={
                    "ingress_port": inport,
                    "_pad": 0
                })

打开终端,运行未报错即可:

cd ptf
make packetio

Step3

最后,您需要在**…/InterpreterImpl.java中修改ONOS管道解释器。简而言之,为inportMetadataNameoutPortMetadataName**设置正确的值。它与您在步骤2中修改的值相同(即:ingress_port和engress_port)。

Step4

启用ONOS服务:

make onos-run

该命令将启动ONOS,待ONOS启用完毕后打开另一个终端运行:

make app-build
make app-reload

上述命令要求ONOS控制器重新加载已启用的app,完成后打开第三个终端窗口,运行:

make topo

该命令将启动基于mininet的拓扑脚本(…/topo.py)。该脚本创建一个2x2 fabric拓扑并启动Mininet CLI。此时ONOS和Mininet已在运行状态,下一步需要将ONOS与4个开关连接起来。在空闲终端窗口(或重新打开一个),输入:

make netcfg

上述命令使onos加载netcfg.json文件,此时ONOS与四台交换机已然连接。

验证

打开浏览器访问 http://127.0.0.1:8181/onos/ui 。访问用户名为 onos 和密码为 rocks 。在这里,您可以自由地与ONOS UI交互。有关如何使用ONOS web UI的更多信息,请参考指导。详细的调试流程可在此处查询。

你可能感兴趣的:(ONOS+P4 Tutorial 1 - 2020-03)