OVS,SandBox,连接流实验

conjunctive match fields / ovs-fields(7)

Posted by chochi on June 7, 2018

CONJUNCTIVE MATCH

实验说明

  • OVS2.4之后支持流的连接匹配操作,通俗来说,就是类似两个不重和集合的笛卡尔积,满足其中任意一个结果即可匹配成功。
  • 在链接匹配中,支持的位数>=2,在实际操作时,要对每个维编号,从1~n,序号的排列没有影响, 只是作以区分。
  • 流可以有多个链接动作,具有不同的链接ID。
  • 链接流有一下三个步骤:
    • 为 conjunctive flow entry 指定一个 32-bit 的ID,唯一。
    • 为每个维从1~n编号。
    • 将没维的所有可能匹配下发流表项,所有优先级必须一直,且匹配值没有重复。
  • Conjunction ID Field image

    更多细节请参照OVS官方文档:ovs-fields(7) P12~14 CONJUNCTIVE MATCH FIELDS

实验准备:Sandbox学习

将OVS从远程仓库GIT下来后,进入官方教程目录下,执行sandbox文件。 该sandbox创造了隔离与本台物理机的虚拟化环境,操作简化,易于测试学习。 关于sandbox的学习可以参照ovs的官方教程文档,Open vSwitch Advanced Features 章节。

image 默认创建了sanbox文件夹为数据库目录,里面ovs-vswitchd.log日志记录所有操作。

实验过程

  1. 在sandbox环境下创建一个名为chochi.cn的网桥,并为该网球增加两个端口,P1,P2,记得要up端口~ image 然后我们在看看端口信息~ image
  2. 为了让操作更骚一些,我们将table1逻辑定义为链接table,所有连接操作都在表1。故,我们将一些流丢如表1。ofproto/trace 操作可以看到该模拟流所有匹配到的流表项。从下图可以看出,流已经被转发至表1,但因为没有匹配到的流表项,所以直接被drop了。 image

  3. 我们在table1添加一条 conjunctive flow entry ,指定ID为1234,因为是虚拟环境,动作也不知道要做什么,我们先简单指定为drop。 image

  4. 恩,然后就开启骚操作。我们将ip_src的匹配定义为第一维,ip_dst的匹配定义为第二维。(每个维可以任意匹配字段,但不要用重合就可以)。ip_src ∈{10.1.0.1, 10.1.0.2} 为第一维,所以在动作里面要明确写出,1/2的意思就是,一共有2维,其中该维为第一维。ip_dst ∈ {10.0.0.1, 10.0.0.2} image

  5. 这是模拟一个流,查看匹配结果。 image

  6. 在加入一条流表项,但是优先级与其他不同。我们可以看到因为优先级不匹配,所有在表1无法正确的匹配到连接流。 image

  7. 修改一下连接流的操作,从drop改为将数据发送到表3. image image