3-OpenFlow通用抽象-下

OpenFlow通用抽象(下)

Instructions - 流表项指令

分为两类

  • 修改或操作动作集(Action Set)
  • 修改多级流表处理. (表之间的跳转)

指令和动作的区别

  • 指令(Instruction): 处理流程控制. 可以操作动作集.
  • 动作(Action):对数据包的处理.

流表项指令

流表项指令

Aciton - 动作

action

Action Set

  • 每个包进入pipeline端口会分配一个Action Set. 初始这个集合为空.
  • 通过匹配后, 指令会在这个集合中添加一系列动作.
  • 最后,包离开流水线的时候, 会执行这个动作集合.
  • 如果不定义Action List, 执行顺序是默认顺序, 即从上往下执行.
  • 如果定义了, Action List, 执行顺序就是按照Action List来.

Table Miss

能匹配任意数据包, 优先级最低.

  • 所以, 在包与所有其他流表项都无法匹配时, 才会与Table Miss
  • 在Table Miss 中的指令集中可以自定义一下操作, 如把数据包交给控制器.

计数器

Counter

  • 计数的, 比如该流表项匹配了多少数据包, 字节数, 等等.

失效时间-TimeOut

  • 在这个timeout 这个时间内没有数据包匹配到这个流表项时. 会采取一定的策略:
    • 删除这个流表项
    • 或者降低这个流表项的优先级
    • 其他
  • 因为这个流表项很可能已经多余了.

Flow Table 详细处理流程

数据包先进入流表端口0

  • 数据包进入流表端口
  • 抽取包头域, 匹配查找, 搜索优先级最高的匹配表项
  • 执行相应的指令, 有很多种:
    • 直接对包执行动作
    • 不直接执行, 而是添加Action Set
    • 流表间的跳转

metadata

还有对Metadata的处理

  • 在流表0的Metadata 只包含一个输入端口信息
  • metadata也可以和包头组成一个匹配域与白头进行匹配查找
  • 如果有goto table 指令, 会将对应的metadata传递给相应的表

Group Table - 组表

  • 定义一组端口去做特定操作. 比如组播, 负载均衡等等.
  • 组表项:

组表项

  • 组表项ID. 32位无符号整数
  • 组表项类型: 定义了一组对端口的操作.
  • 计数器: 记录组表项处理的报文数目
  • 指令: 动作桶

组表项类型

组表项类型

Meter Table - 计量表

  • 计量表项:

计量表项

  • 计量带:

计量带

  • 可选类型:

band类型