常见的 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

putao
5 声望0 粉丝

推动世界向前发展,改善民生。