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