常见的 OpenFlow 消息类型及其格式
- OFPT_HELLO:
用于交换机和控制器之间的初始握手。
格式:包含 OpenFlow 版本信息。 - OFPT_FEATURES_REQUEST:
控制器发送给交换机,要求交换机报告其能力。
格式:不包含额外的数据。 - OFPT_FEATURES_REPLY:
交换机响应 OFPT_FEATURES_REQUEST,报告其能力和资源信息。
格式:包含交换机的 datapath ID、缓冲区数量、流表数量、能力标志和端口信息。 - OFPT_FLOW_MOD:
控制器发送给交换机,用于添加、修改或删除流表项。
格式:包含匹配字段、优先级、超时、动作列表等。 - OFPT_PACKET_IN:
交换机发送给控制器,通知控制器有数据包需要处理。
格式:包含数据包的原始数据、输入端口、缓冲区 ID 等。 - OFPT_PACKET_OUT:
控制器发送给交换机,用于向指定端口发送数据包。
格式:包含数据包的原始数据、输出端口、动作列表等。
下面是ryu 源码里面一些字段的含义
# 消息类型(Message Types)
# 这些常量用于表示 OpenFlow 消息的类型
OFP_HELLO = 0 # 交换 Hello 消息,用于建立初始连接
OFP_ERROR = 1 # 错误消息,用于报告错误
OFP_ECHO_REQUEST = 2 # Echo 请求消息,用于测试连接
OFP_ECHO_REPLY = 3 # Echo 回复消息,用于响应 Echo 请求
OFP_EXPERIMENTER = 4 # 实验者消息,用于自定义扩展
OFP_FEATURES_REQUEST = 5 # 特性请求消息,用于请求交换机特性
OFP_FEATURES_REPLY = 6 # 特性回复消息,用于报告交换机特性
OFP_GET_CONFIG_REQUEST = 7 # 配置请求消息,用于请求交换机配置
OFP_GET_CONFIG_REPLY = 8 # 配置回复消息,用于报告交换机配置
OFP_SET_CONFIG = 9 # 设置配置消息,用于设置交换机配置
OFP_PACKET_IN = 10 # 数据包输入消息,用于通知控制器有数据包需要处理
OFP_FLOW_REMOVED = 11 # 流表项删除消息,用于通知控制器流表项被删除
OFP_PORT_STATUS = 12 # 端口状态消息,用于报告端口状态变化
OFP_PACKET_OUT = 13 # 数据包输出消息,用于控制器向交换机发送数据包
OFP_FLOW_MOD = 14 # 流表项修改消息,用于添加、修改或删除流表项
OFP_GROUP_MOD = 15 # 组修改消息,用于添加、修改或删除组
OFP_PORT_MOD = 16 # 端口修改消息,用于修改端口属性
OFP_TABLE_MOD = 17 # 表修改消息,用于修改流表属性
# 端口号(Port Numbers)
# 这些常量用于表示特殊的端口号
OFPP_MAX = 0xffffff00 # 最大端口号
OFPP_IN_PORT = 0xfffffff8 # 数据包的输入端口
OFPP_TABLE = 0xfffffff9 # 流表
OFPP_NORMAL = 0xfffffffa # 正常交换机处理
OFPP_FLOOD = 0xfffffffb # 泛洪,发送到所有端口
OFPP_ALL = 0xfffffffc # 所有端口
OFPP_CONTROLLER = 0xfffffffd # 控制器端口
OFPP_LOCAL = 0xfffffffe # 本地端口
OFPP_ANY = 0xffffffff # 任意端口
# 动作类型(Action Types)
# 这些常量用于表示 OpenFlow 动作的类型
OFPAT_OUTPUT = 0 # 输出动作
OFPAT_COPY_TTL_OUT = 11 # 拷贝 TTL 到输出
OFPAT_COPY_TTL_IN = 12 # 拷贝 TTL 到输入
OFPAT_SET_MPLS_TTL = 15 # 设置 MPLS TTL
OFPAT_DEC_MPLS_TTL = 16 # 减少 MPLS TTL
OFPAT_PUSH_VLAN = 17 # 压入 VLAN 标签
OFPAT_POP_VLAN = 18 # 弹出 VLAN 标签
OFPAT_PUSH_MPLS = 19 # 压入 MPLS 标签
OFPAT_POP_MPLS = 20 # 弹出 MPLS 标签
OFPAT_SET_QUEUE = 21 # 设置队列
OFPAT_GROUP = 22 # 组动作
OFPAT_SET_NW_TTL = 23 # 设置网络 TTL
OFPAT_DEC_NW_TTL = 24 # 减少网络 TTL
OFPAT_SET_FIELD = 25 # 设置字段
OFPAT_PUSH_PBB = 26 # 压入 PBB 标签
OFPAT_POP_PBB = 27 # 弹出 PBB 标签
# 匹配字段(Match Fields)
# 这些常量用于表示 OpenFlow 匹配字段的类型
OFPXMT_OFB_IN_PORT = 0 # 输入端口
OFPXMT_OFB_IN_PHY_PORT = 1 # 物理输入端口
OFPXMT_OFB_METADATA = 2 # 元数据
OFPXMT_OFB_ETH_DST = 3 # 以太网目的地址
OFPXMT_OFB_ETH_SRC = 4 # 以太网源地址
OFPXMT_OFB_ETH_TYPE = 5 # 以太网类型
OFPXMT_OFB_VLAN_VID = 6 # VLAN ID
OFPXMT_OFB_VLAN_PCP = 7 # VLAN 优先级
OFPXMT_OFB_IP_DSCP = 8 # IP DSCP
OFPXMT_OFB_IP_ECN = 9 # IP ECN
OFPXMT_OFB_IP_PROTO = 10 # IP 协议
OFPXMT_OFB_IPV4_SRC = 11 # IPv4 源地址
OFPXMT_OFB_IPV4_DST = 12 # IPv4 目的地址
OFPXMT_OFB_TCP_SRC = 13 # TCP 源端口
OFPXMT_OFB_TCP_DST = 14 # TCP 目的端口
OFPXMT_OFB_UDP_SRC = 15 # UDP 源端口
OFPXMT_OFB_UDP_DST = 16 # UDP 目的端口
OFPXMT_OFB_SCTP_SRC = 17 # SCTP 源端口
OFPXMT_OFB_SCTP_DST = 18 # SCTP 目的端口
OFPXMT_OFB_ICMPV4_TYPE = 19 # ICMPv4 类型
OFPXMT_OFB_ICMPV4_CODE = 20 # ICMPv4 代码
OFPXMT_OFB_ARP_OP = 21 # ARP 操作
OFPXMT_OFB_ARP_SPA = 22 # ARP 源协议地址
OFPXMT_OFB_ARP_TPA = 23 # ARP 目的协议地址
OFPXMT_OFB_ARP_SHA = 24 # ARP 源硬件地址
OFPXMT_OFB_ARP_THA = 25 # ARP 目的硬件地址
OFPXMT_OFB_IPV6_SRC = 26 # IPv6 源地址
OFPXMT_OFB_IPV6_DST = 27 # IPv6 目的地址
OFPXMT_OFB_IPV6_FLABEL = 28 # IPv6 流标签
OFPXMT_OFB_ICMPV6_TYPE = 29 # ICMPv6 类型
OFPXMT_OFB_ICMPV6_CODE = 30 # ICMPv6 代码
OFPXMT_OFB_IPV6_ND_TARGET = 31 # IPv6 邻居发现目标地址
OFPXMT_OFB_IPV6_ND_SLL = 32 # IPv6 邻居发现源链路层地址
OFPXMT_OFB_IPV6_ND_TLL = 33 # IPv6 邻居发现目标链路层地址
OFPXMT_OFB_MPLS_LABEL = 34 # MPLS 标签
OFPXMT_OFB_MPLS_TC = 35 # MPLS 流量类别
OFPXMT_OFB_MPLS_BOS = 36 # MPLS 序列结束
OFPXMT_OFB_PBB_ISID = 37 # PBB ISID
OFPXMT_OFB_TUNNEL_ID = 38 # 隧道 ID
OFPXMT_OFB_IPV6_EXTHDR = 39 # IPv6 扩展头部
# 能力标志(Capabilities)
# 这些常量用于表示交换机的能力标志
OFPC_FLOW_STATS = 1 << 0 # 支持流统计
OFPC_TABLE_STATS = 1 << 1 # 支持表统计
OFPC_PORT_STATS = 1 << 2 # 支持端口统计
OFPC_GROUP_STATS = 1 << 3 # 支持组统计
OFPC_IP_REASM = 1 << 5 # 支持 IP 重组
OFPC_QUEUE_STATS = 1 << 6 # 支持队列统计
OFPC_PORT_BLOCKED = 1 << 8 # 端口阻塞
# 错误类型和代码(Error Types and Codes)
# 这些常量用于表示 OpenFlow 错误的类型和代码
OFPET_HELLO_FAILED = 0 # Hello 消息失败
OFPET_BAD_REQUEST = 1 # 错误的请求
O
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。