1:Action
OFPActionOutput Class是用来转送指定封包,其中包含Packet-Out和Flow Mod。设定好要传送的最大封包容量(max_len)和要传送的Controller目的地做为Constructor的参数。对于设定目的地,除了实体连接端口号之外还有一些其他的值可以进行定义。
名称 | 说明 |
OFPP_IN_PORT | 转送到接收端口 |
OFPP_TABLE | 转送到最前端的 |
OFPP_NORMAL | 使用交换器本身的L2 / L3功能转送 |
OFPP_FLOOD | 转送(Flood)到所有VLAN的物理连接埠,除了来源端口跟已闭锁的端口之外 |
OFPP_ALL | 转送到除了来源端口之外的所有端口 |
OFPP_CONTROLLER | 转送到Controller的Packet-In信息 |
OFPP_LOCAL | 转送到交换器本身(local port) |
当指定max_len为0时,Binary data将不会被加在Packet-In的信息中。当OFPCML_NO_BUFFER被指定时,所有的封包将会加入Packet-In信息中而不会暂存在OpenFlow交换器。
2:Match
有许多种类的指定条件可以用在Match,随着OpenFlow版本的持续更新,数量也在持续增加中。在OpenFlow 1.0时仅有12种,OpenFlow 1.3时数量就来到约40种。若想要了解每个指令的细节,请参考OpenFlow规格书。本章仅简要列出OpenFlow 1.3的Match指令。
3:Instruction
Instruction是用来定义当封包满足所规范的Match条件时,需要执行的动作。下面列出相关的定义。
Instruction | 说明 |
Goto Table(必要) | 在OpenFlow 1.1或更新的版本中,multiple flow tables将是必需支援的项目。透过Goto Table的指令可以在多个table间进行移转,并继续相关的比对及对应的动作。例如:「收到来自port 1的封包时,增加VLAN-ID 200的tag,并移动至table 2」。而所指定的table ID则必须是大于目前的table ID。 |
Write Metadata(选项) | 写入Metadata以做为下一个table所需的参考资料。 |
Write Actions(必要) | 在目前的action set中写入新的action,如果有相同的action存在时,会进行覆盖。 |
Apply Actions(选项) | 立刻执行所指定的action不对现有的action set进行修改。 |
Clear Actions(选项) | 清空目前存在action set中的数据。 |
Meter(选项) | 指定该封包到所定义的meter table。 |
以下的类别是对应各个Instruction的Ryu实作。
OFPInstructionGotoTable
OFPInstructionWriteMetadata
OFPInstructionActions
OFPInstructionMeterWrite/Apply/Clear Actions已经包含在
OPFInstructionActions中,可以在安装的时候进行提取。
备注:Write Actions虽然在规格中被列为必要,但是目前的Open vSwitch并不支持该功能。Apply Actions是目前Open vSwitch所提供的功能,所以可以用来替代Write Actions。Write Actions预计在Open vSwitch 2.1.0中支持。