OpenFlow 的消息共分为三类:
Controller-to-Switch
顾名思义,此类消息是由控制器主动发出
Features 用于获取交换机特性
Configuration 用于配置 OpenFlow 交换机
Modify-State (用来修改交换机状态修改流表)
Read-States 用来获取交换机状态
Send-Packet 用来发送数据包
Barrier 阻塞消息
Asynchronous
异步消息,此类消息由交换机主动发出
Packet-in 用来告知控制器交换机接收到数据包
Flow-Removed 用来告知控制器交换机的流表被删除
Port-Status y用来告知控制器交换机端口状态更新
Error 用来告知控制器交换机发生错误
Symmetric
对称消息,控制器和交换机都可以发起
Hello 用来建立 OpenFLow 连接
Echo 用来确认控制器与交换机之间的连接状态
Vendor 厂商自定义消息
消息格式OpenFlow 协议数据包由 Header 和 Message 两部分组成。
OpenFlow Header的结构:
struct ofp_header { uint8_t version; /*OpenFlow 协议的版本*/ uint8_t type; /*消息类型*/ uint16_t length; /*整个数据包的长度*/ uint32_t xid; /*这个数据包的标识id*/ }OpenFlow Message 的结构与具体的消息类型有关: