01-OpenFlow配置
本章節下載: 01-OpenFlow配置 (525.49 KB)
目 錄
1.9 忽略OpenFlow功能為報文添加的Permit標記
1.15.2 Action List和Action Set整合的限製
1.16.5 MAC-IP流表與Extensibility流表的配合
OpenFlow是SDN(Software Defined Network,軟件定義網絡)架構中定義的一個控製器與轉發層之間的通信接口標準。OpenFlow允許控製器直接訪問和操作網絡設備的轉發平麵,這些網絡設備可能是物理上的,也可能是虛擬的。
OpenFlow的思想是分離控製平麵和數據平麵,二者之間使用標準的協議通信;數據平麵采用基於流的方式進行轉發。
OpenFlow網絡由OpenFlow設備(Switch)和控製器(Controller)通過安全通道(OpenFlow channel)組成,如圖1-1所示。Switch與Controller通過TLS或者TCP建立安全通道,進行OpenFlow消息交互,實現表項下發、查詢以及狀態上報等功能。下文如果沒有特殊說明,交換機指的就是OpenFlow設備。
圖1-1 OpenFlow網絡組成
OpenFlow Switch有下麵兩種:
· OpenFlow-Only Switch:僅支持OpenFlow轉發。
· OpenFlow-Hybrid Switch:既支持OpenFlow轉發,也支持正常轉發。
OpenFlow接口有如下類型:
· 物理接口:比如以太網接口。可以作為入接口和出接口。
· 邏輯接口:比如二層聚合接口等。對於SF係列接口板,二層聚合接口可以作為入接口和出接口;對於其他係列接口板,二層聚合接口和三層聚合接口可以作為入接口。
· 保留接口:由轉發動作定義的接口,實現OpenFlow轉發功能。具體類型請參見表1-1。
類型 |
說明 |
Controller |
報文上送控製器 |
Local |
報文上送本地CPU |
Normal |
報文正常轉發 |
OpenFlow支持多實例。每個OpenFlow實例可以單獨連接控製器,相當於一台獨立的交換機,根據控製器下發的流表項指導流量轉發。
下文如果沒有特殊說明,交換機指的就是一個OpenFlow實例。
OpenFlow實例有以下類型:
· 全局類型:對設備上所有流量都根據OpenFlow流表項轉發。將OpenFlow實例配置為該類型後,設備所有業務接口都屬於該OpenFlow實例。
· VLAN類型:配置VLAN內的流量根據OpenFlow流表項轉發,其他VLAN內的流量進行正常轉發。配置VLAN類型的OpenFlow實例時,需要同時指定OpenFlow實例對應的VLAN,VLAN內所有接口都屬於該OpenFlow實例。
OpenFlow需要將設備的支持能力、當前的接口信息等設備信息上報給控製器後,控製器才能夠下發流表項指導轉發。
在配置更改的情況下,需要重新激活實例使配置生效。激活配置後,OpenFlow實例會與所有控製器斷開連接,然後重新進行連接。
OpenFlow協議規定需要將接口信息上報給控製器,這些接口包括物理接口、邏輯接口以及保留接口中的Local。
對於通過VLAN劃分作用範圍的OpenFlow實例,當且僅當接口所屬VLAN完全包含了OpenFlow配置的映射VLAN後,該接口才是此OpenFlow實例的接口,可以被上報到控製器。如果配置了loosen模式,隻要接口所在VLAN與實例配置VLAN存在交集,接口就屬於OpenFlow實例。
OpenFlow通過流表(Flow Table)來匹配和處理報文,在同一個流表中按流表項的優先級進行先後匹配。一台交換機上可以包含一個或者多個流表。
流表類型如下:
· MAC-IP流表:通過MAC地址表和FIB表實現。隻能匹配目的MAC地址、VLAN以及目的IP地址,動作也僅支持修改目的MAC地址、源MAC地址、VLAN、TUNNEL ID以及指定出接口。具體請參見1.16 附錄 B MAC-IP流表。
· Extensibility流表:擴展流表,使用ACL實現。
· Exact-match流表:精確匹配流表,通過引用ACL的EM(Exact Match,精確匹配)模板進行報文匹配,從而提升Controller可下發到設備的流表項的規格數量。關於EM模板的介紹,請參見“ACL和QoS命令參考”中的“ACL”。
流表項如圖1-2所示:
· Match Fields:匹配規則。可以匹配入接口、報文頭等字段。
· Priority:優先級。定義流表項之間的匹配順序,優先級高的先匹配。
· Counters:統計計數。統計有多少個報文和字節匹配到該流表項。
· Instructions:動作指令集。定義匹配到該流表項的報文需要進行的處理。流表項動作指令集是對動作進行操作,流表項的動作有兩種執行類型:
¡ 動作集(Action Set):一係列動作的組合,不會立刻修改報文內容,直到報文不再需要進入下一級流表,動作集裏每種動作僅能存在一個,並且按照表1-2從上到下的順序執行。
¡ 動作序列(Action List):需要立即執行的一係列動作,其動作內容與動作集相同,但是會立即修改報文的內容,其效果是累加的,並且執行順序是按照下發的順序執行的。
Instruction |
處理 |
Meter |
對匹配到流表項的報文進行限速 |
Apply-Actions |
立即執行動作序列中的動作 |
Clear-Actions |
清除動作集中的所有動作 |
Write-Actions |
更改動作集中的所有動作 |
Write-Metadata |
更改流表間數據,在支持多級流表時使用 |
Goto-Table |
進入下一級流表 |
具體動作類型如表1-3所示。
表1-3 動作類型(1.3.1版本)
動作名稱 |
可選/必選 |
描述 |
Output |
必選 |
轉發報文到特定的OpenFlow端口,例如物理端口、邏輯端口以及OpenFlow保留端口 |
Drop |
必選 |
沒有直接的動作來代表Drop,當動作集中不含有Output指令時,報文被丟棄。通常空指令集、空動作集或執行清空動作集後,報文被丟棄 |
Group |
必選 |
將報文轉交給Group處理,該動作的含義由Group的類型定義 |
Set-Queue |
可選 |
為報文指定隊列ID。當報文被轉發到特定端口時,隊列ID通常被用於基本QoS |
Push-Tag Pop-Tag |
可選 |
適用於VLAN頭 |
Set-Field |
可選 |
識別報文字段的類型,並且可以修改該字段的值。通常隻適用於最外層的字段(例如當內外層均有VLAN tag時,該動作隻修改最外層的VLAN Tag) |
Change-TTL |
可選 |
改變報文中IPv4的TTL或IPv6的Hop Limit。隻適用於最外層的字段 該動作可以設置TTL(TTL必須已經存在)、減少TTL、TTL值拷貝(inwards/outwards) |
· Timeouts:超時時間。包括了idle time和hard time。
¡ idle time:在idle time時間內,如果沒有報文匹配到該流表項,則此流表項被刪除。
¡ hard time:在hard time時間超時後,無論是否有報文匹配到該流表項,此流表項都會被刪除。
· Cookie:控製器選用的自定義數據,不用於處理報文。可能被控製器用於匹配流表項。
如圖1-3所示,當報文進入交換機後,必須從流表ID最小的流表開始依次匹配;流表可以按次序從小到大越級跳轉,但不能從某一流表向前跳轉至流表ID更小的流表。一旦在某個流表匹配到後,會更新此報文的動作集(允許被下一級流表覆蓋),到了最後一個流表後,所有的動作會被執行,此時報文的內容會被修改,指定出接口進行轉發。如果在某個流表處理時,處理指令包含Action List,則報文的一份拷貝立即執行Action List而不需要在最後一個流表處理結束後再執行。
圖1-3 OpenFlow轉發示意圖
每個流表都包含一個Table Miss流表項,該表項用於定義在流表中沒有匹配的報文的處理方式,該表項的匹配域為通配,即匹配任何報文,優先級為0,動作指令與正常表項相同。
Group Table由Group表項組成,Group表項被流表項所引用,提供額外的報文轉發功能。
圖1-4 Group表項結構
· Group Identifier:Group ID,用於識別Group,32bits。
· Group Type:Group類型。
¡ All:執行所有動作桶,用於組播或者廣播。
¡ Select:自動選擇一個動作桶執行。
¡ Indirect:始終執行固定的動作桶。
¡ Fast failover:始終執行第一個活躍的動作桶。
· Counters:當報文被Group處理時,更新計數器。
· Action Buckets:一個由動作桶組成的有序列表。每個動作桶由許多動作組成。
動作桶支持的具體動作類型如表1-4所示。
動作名稱 |
可選/必選 |
描述 |
Output |
必選 |
轉發報文到特定的OpenFlow端口,例如物理端口、邏輯端口以及OpenFlow保留端口 |
Set-Field |
可選 |
識別報文字段的類型,並且可以修改該字段的值 識別報文字段的類型,並且可以修改該字段的值 本動作支持識別和修改的報文字段包括: · 以太網目的MAC地址、以太網源MAC地址 · VLAN ID · IPv4源地址、IPv4目的地址 · UDP源端口、UDP目的端口 |
Meter Table由Meter表項組成,Meter表項被流表項所引用,為所有引用Meter表項的流表項提供報文限速的功能。
圖1-5 Meter表項結構
· Meter Identifier:Meter ID,用於識別meter,32bits。
· Meter Bands:一個Meter表項可以包含一個Meter Band,該Meter Band定義了速率以及動作。當報文的速率超過了該Meter Band,則根據該Meter Band中定義的動作進行處理。
· Counters:當報文被Meter處理時,更新計數器。
圖1-6 Meter Bands結構
· Band Type:Band類型,定義報文如何處理。為可選,可使用丟棄(drop),即報文高於該速率會被丟棄;以及重新標記DSCP(dscp remark)。
· Rate:Meter用於選擇Band的最低速率,即報文速率高於該速率並最接近該速率,該Band將被應用。
· Counters:當Band處理報文時,更新計數器。
· Type Specific arguments:某些Band含有的特定參數。
交換機與控製器通過TLS或者TCP建立Channel,進行OpenFlow消息交互,實現表項下發、查詢以及狀態上報等功能。
OpenFlow協議中定義了三種消息類型:Controller to Switch消息、異步消息和同步消息,每種報文類型都有很多子類型。
Controller to Switch消息是指由控製器產生並發送到交換機,用來查詢交換機的消息,可以不需要交換機響應。這些消息主要由控製器用來對交換機進行狀態查詢和修改配置等操作。
表1-5 Controller to Switch消息
子類型 |
描述 |
Features |
用於控製器發送請求來了解交換機的能力,交換機必須回應該報文 |
Configuration |
用於控製器設置,查詢交換機的配置,交換機隻有在控製器查詢時回應 |
Modify-State |
用於管理交換機的狀態,如流表項和端口狀態。該命令主要用於增加、刪除、修改、交換機內的流表表項,組表表項以及交換機端口的屬性 |
Multipart |
用於控製器收集交換機各方麵的信息,例如當前配置,統計信息等 |
Packet-Out |
用於通過交換機特定端口發送報文,這些報文可以通過Packet-In消息觸發,也可以通過控製器直接發送。通常Packet-Out消息包含整個之前接收到的Packet-In消息所攜帶的報文或者buffer ID(用於指示存儲在交換機內的特定報文)。這個消息需要包含一個動作列表,當交換機收到該動作列表後會對Packet-Out消息所攜帶的報文執行該動作列表。如果動作列表為空,Packet-Out消息所攜帶的報文將被交換機丟棄 |
Barrier |
用於確認之前下發動作是否成功。控製器發送Barrier請求消息,當交換機確認之前下發的流表等操作都已經成功時會回複Barrier應答消息 |
Role-Request |
用於設定或查詢OpenFlow channel的角色。通常用於交換機和多個控製器相連的情況 |
Asynchronous-Configuration |
控製器使用該報文設定異步消息過濾器來接收其隻希望接收到的異步消息報文,或者向交換機查詢該過濾器。通常用於交換機和多個控製器相連的情況 |
異步(Asynchronous)消息是由交換機發送給控製器,用來通知交換機上發生的某些異步事件的消息。例如,當某一條規則因為超時而被刪除時,交換機將自動發送一條Flow-Removed消息通知控製器,以方便控製器作出相應的操作,如重新設置相關規則等。
表1-6 異步消息
子類型 |
描述 |
Packet-In |
轉移報文的控製權到控製器。對於所有通過匹配流表項或者Table Miss後轉發到保留端口Controller端口的報文均要通過Packet-in消息送到控製器。也有部分其他流程,如TTL檢查等,也需要通過該消息和控製器交互。Packet-In既可以攜帶報文,也可以通過在交換機內部設置報文的Buffer來僅攜帶報文頭以及其Buffer ID傳輸給控製器。控製器在接收到Packet-In消息後會對其接收到的報文或者報文頭和Buffer ID進行處理,並發回Packet-out消息通知交換機如何處理該報文 |
Flow-Removed |
通知控製器將某個流表項從流表中移除。通常該消息在控製器發送刪除流表項的消息或者流表項的兩個定時器其中之一超時時產生 |
Port-Status |
通知控製器端口狀態或設置的改變 |
Error |
通知控製器交換機出現的問題或錯誤 |
對稱(Symmetric)消息,就是雙向對稱的消息,主要用來建立連接和檢測對方是否在線等。
表1-7 對稱消息
子類型 |
描述 |
Hello |
當連接啟動時交換機和控製器會發送Hello交互 |
Echo |
用於驗證控製器與交換機之間連接的存活,控製器和交換機都會發送Echo request/reply消息,而且對於接收到的Echo request消息必須能返回Echo reply消息。 該消息也可用於測量控製器與交換機之間鏈路的延遲和帶寬 |
Experimenter |
為將來新加入的特性預留的消息 |
OpenFlow中包含連接檢測定時器和重連定時器,作用如下:
· 連接檢測定時器:定義發送Echo request報文時間間隔,設備發送三次Echo request報文,仍然沒有收到Echo reply報文,則交換機斷開與控製器的連接。
· 重連定時器:定義交換機與控製器斷開連接後,下次開始重新連接的時間間隔。
一個OpenFlow交換機可以與多個控製器建立連接,初始連接時,多個控製器的角色相同,權限相同,控製器可以通過OpenFlow消息設置本控製器的角色,各種角色的權限如表1-8所示。
角色 |
權限 |
Master |
處於該角色的控製器擁有全部權限,可以下發流表項,查詢統計信息,接收設備上報的狀態信息,在多個控製器中僅能有一個控製器是Master角色 |
Equal |
處於該角色的控製器同樣擁有全部權限,相對於Master角色,唯一不同的是可以有多個控製器處於Equal角色 |
Slave |
處於該角色的控製器僅擁有部分權限,Controller to switch消息中不能下發流表項,Group表項以及Meter表項,不允許修改接口配置和設備配置,不允許執行Packet Out操作。異步消息中,缺省情況下設備不會上送Flow Remove消息和Packet In消息,僅能上送接口狀態變化消息,但是異步消息的上送能力可以通過控製器的設置異步消息進行修改 |
交換機與多個控製器建立連接時,連接分為Single模式和Multiple模式:
· Multiple模式:同一時刻可以與多個控製器建立連接。交換機會同時連接實例內所有的控製器,在與某個控製器連接失敗或者斷開連接時,在重連定時器超時後重新進行連接,直到連接成功。
· Single模式:同一時刻僅與一個控製器建立連接,其他控製器作為備份。當且僅當當前的連接斷開後,交換機會連接下一個控製器,直到連接成功。
交換機與每個控製器建立的連接中,可包含一個主連接和多個輔助連接:
· 主連接:一般用於控製消息的處理(下發流表項、獲取數據、信息上報等),使用TCP/SSL保持可靠的連接。
· 輔助連接:用於提高控製器和OpenFlow交換機的通信能力。輔助連接的目的地址和端口號可以和主連接不一致。
如果交換機與所有控製器斷開連接,則交換機進入連接中斷模式,連接中斷模式分為兩種:
· Secure模式:連接斷開後,交換機根據流表項轉發。不主動刪除控製器下發的表項,而是等待表項超時後進行刪除,一旦連接建立成功,未超時的表項依然存在。匹配的流表項中執行output controller動作轉發的流量被丟棄。創建OpenFlow實例時,缺省為Secure模式。
· Smart模式:連接斷開後,交換機根據流表項轉發。不主動刪除控製器下發的表項,而是等待表項超時後進行刪除,一旦連接建立成功,未超時的表項依然存在。匹配的流表項中執行output controller動作轉發的流量進行正常轉發。
· Standalone模式:連接斷開後,交換機正常轉發。
如果交換機與控製器重新連接成功,則繼續作為OpenFlow設備根據流表項進行轉發。
· OpenFlow Switch Specification Version 1.3.3
設備需要安裝MC-NAT的License,才能接收控製器下發的帶有Set-Field動作的Group表項。有關該動作的介紹,請參見表1-4。有關License的詳細介紹,請參見“基礎配置指導”中的“License管理”。
OpenFlow暫不支持轉發報文到VXLAN隧道接口。
三層以太網接口/三層聚合接口/三層以太網子接口/三層聚合子接口暫不支持OpenFlow特性。
OpenFlow流表僅支持出方向匹配二層聚合接口和三層聚合接口,入方向不支持匹配接口。
設備不支持出接口為三層以太網接口/三層聚合接口/三層以太網子接口/三層聚合子接口的Group表項。
設備不支持接受Set-Field動作為修改ip_ecn(IP報文的ECN域)的Extensibility流表項。關於ECN的介紹,請參見“ACL和QoS配置指導”中的“擁塞避免”。
當配置全局實例時,需要注意:
· 當下發某流表項的動作為Output時,不支持指定出接口為flood或all。
· 當下發某流表項的動作為修改目的MAC或源MAC地址時,必須指定動作類型為Output並且出接口隻支持指定為以太網接口或聚合接口。有關下發流表項的介紹,請參見《H3C VCF控製器REST API》。
· 配置了聚合負載分擔采用本地轉發優先的情況下,OpenFlow控製器不能在設備上創建Group表項。兩者配置互斥。關於聚合負載分擔的介紹,請參見“二層技術-以太網交換配置指導”中的“以太網鏈路聚合”。
· OpenFlow控製器隻支持在設備上創建出端口為物理端口或者聚合端口的Group表項。
· OpenFlow控製器不支持在設備上創建動作為修改IPv6地址的Group表項。
· 當設備上安裝了LSCM1GT48SC0接口板時,OpenFlow控製器不支持在設備上創建動作為修改IPv4源地址或UDP源端口,且出端口為聚合端口的Group表項。
· OpenFlow控製器在設備上創建動作為修改UDP端口號的Group表項隻對IPv4 UDP報文生效。
· OpenFlow控製器在設備上創建的Group表項,出端口發出的報文可能會攜帶vlan tag,請根據實際組網需求修改該端口的VLAN配置。關於端口VLAN的配置,請參見“二層技術-以太網交換配置指導”中的“VLAN”。
交換機上匹配OpenFlow流表的報文若出接口同時為報文的入接口,則需要同時在表項對應的出接口上通過port bridge enable命令開啟接口橋功能,否則,流量無法正常轉發。關於接口橋功能的詳細介紹,請參見“接口管理配置指導”中的“以太網接口”。
對於LSCM2係列SC單板和SD係列接口板、SE係列接口板,控製器下發OpenFlow流表的命令,如果想要匹配IPv6報文,應在流表的匹配字段中加入IPv6報文字段,如指定以太網類型為0x86DD。對於LSCM1GT48SC0單板,控製器下發OpenFlow流表的命令,如果想要匹配IPv6報文,應在流表的匹配字段中加入IPv6報文字段,如指定以太網類型為0x86DD。 如果想要匹配MPLS報文,應在流表的匹配字段中加入MPLS報文字段,如指定以太網類型為0x8847或0x8848。
對於SF係列接口板轉發的VXLAN、GRE、NVGRE報文,即使設備存在匹配源MAC、customer-vlan-id的流表,也無法匹配該報文。
OpenFlow配置任務如下:
(1) 配置OpenFlow實例
a. 創建OpenFlow實例
c. (可選)配置帶內管理VLAN
d. (可選)配置流表和流表項
e. (可選)配置控製器連接模式
f. (可選)配置禁止上送控製器的端口類型
在轉發與控製分離的組網中必選;在其他組網中可選。
h. (可選)開啟Smart Group表項下發功能
本功能用於優化IPTV業務性能,需要和支持Smart Group表項的控製器配合使用。
i. 激活OpenFlow實例
j. (可選)配置OpenFlow實例的屬性
(2) 配置連接控製器
(3) (可選)配置OpenFlow實例作為SSL服務器監聽控製器
(4) (可選)刷新MAC-IP流表的三層表項
(5) (可選)忽略OpenFlow功能為報文添加的Permit標記
(6) (可選)使用OpenFlow關閉接口
(7) (可選)開啟OpenFlow告警功能
(8) (可選)配置OpenFlow流量監測功能的參數
(1) 進入係統視圖。
system-view
(2) 創建OpenFlow實例,並進入OpenFlow實例視圖。
openflow instance instance-id
(3) (可選)配置OpenFlow實例的Datapath ID。
datapath-id id
缺省情況下,OpenFlow實例的Datapath ID由實例ID與設備橋MAC組成,其中前16個比特為實例ID,後48個比特為設備橋MAC。
Datapath ID用來在唯一標識OpenFlow實例,不同OpenFlow實例的Datapath ID不能相同。
(4) (可選)配置OpenFlow報文的DSCP值。
tcp dscp dscp-value
缺省情況下,未配置OpenFlow報文的DSCP值。
對於VLAN類型的OpenFlow實例,需要注意的是:
· 一個VLAN僅能屬於一個OpenFlow實例,否則會導致流量無法正確處理。
· 如果配置的對應VLAN不存在,在激活實例時,設備將會自動創建該VLAN。
· 同一個接口所屬VLAN必須屬於同一OpenFlow實例,否則,控製器下發的不同實例的接口狀態消息會相互覆蓋。
· VLAN對應的VLAN接口不能配置BFD MAD檢測功能,該功能的相關內容請參見“虛擬化技術配置指導”中的“IRF”。
(1) 進入係統視圖。
system-view
(2) 進入OpenFlow實例視圖。
openflow instance instance-id
(3) 配置OpenFlow實例的類型。
classification global
缺省情況下,未配置OpenFlow實例的類型。
(1) 進入係統視圖。
system-view
(2) 進入OpenFlow實例視圖。
openflow instance instance-id
(3) 配置OpenFlow實例的類型。
classification vlan vlan-id [ mask vlan-mask ] [ loosen ]
缺省情況下,未配置OpenFlow實例的類型。
帶內管理VLAN內的流量進行正常轉發,用於OpenFlow設備與控製器建立安全通道。
僅在帶內管理VLAN的接口不屬於OpenFlow接口。
對於VLAN類型的OpenFlow實例,帶內管理VLAN必須是OpenFlow實例配置的對應VLAN的子集。
對於全局類型和VLAN類型的OpenFlow實例,通過管理以太網接口之外的接口連接控製器時,需要將該接口所屬VLAN配置為帶內管理VLAN。
對於端口類型的OpenFlow實例,無需配置帶內管理VLAN。
(1) 進入係統視圖。
system-view
(2) 進入OpenFlow實例視圖。
openflow instance instance-id
(3) 配置帶內管理VLAN。
in-band management vlan vlan-id-list
缺省情況下,未配置帶內管理VLAN。
一個OpenFlow實例僅支持配置一個MAC-IP流表,對於SF係列接口板,支持配置多個Extensibility流表;對於SD係列接口板僅支持配置一個Extensibility流表。
Extensibility流表ID必須大於MAC-IP流表ID。
MAC-IP流表中,必須配置Table Miss流表項的缺省動作為正常轉發,否則OpenFlow實例無法正常激活。
(1) 進入係統視圖。
system-view
(2) 進入OpenFlow實例視圖。
openflow instance instance-id
(3) 配置流表類型和流表ID。
flow-table { mac-ip mac-ip-table-id | extensibility extensibility-table-id }*
缺省情況下,流表類型為Extensibility,流表ID為0。
(4) 配置Extensibility的流表項的最大值。
flow-entry max-limit limit-value
缺省情況下,Extensibility表的流表項的最大個數為65535。
控製器下發的流表表項數量超過最大值時,向控製器返回失敗。
(5) 配置允許動態ARP表項覆蓋OpenFlow ARP表項。
precedence dynamic arp
缺省情況下,禁止動態ARP表項覆蓋OpenFlow ARP表項。
僅MAC-IP流表支持本功能。
(6) 允許控製器下發的流表中包含聚合接口的成員端口。
permit-port-type member-port
缺省情況下,禁止控製器下發的流表中包含聚合接口的成員端口。
(7) 配置Table Miss流表項的缺省動作為正常轉發。
default table-miss permit
缺省情況下,Table Miss流表項的缺省動作為丟棄。
(1) 進入係統視圖。
system-view
(2) 進入OpenFlow實例視圖。
openflow instance instance-id
(3) 配置控製器連接模式。
controller mode { multiple | single }
缺省情況下,控製器連接模式為Multiple模式。
配置該功能後,交換機不再向控製器上送對應三層以太網接口、三層聚合接口、VLAN接口的信息。
OpenFlow OAP實例不支持本功能。
(1) 進入係統視圖。
system-view
(2) 進入OpenFlow實例視圖。
openflow instance instance-id
(3) 配置禁止上送控製器的端口類型。
forbidden port { l3-physical-interface | vlan-interface | vsi-interface } *
缺省情況下,未配置禁止上送控製器的端口類型,即所有接口類型都上送控製器。
僅在OpenFlow實例激活狀態下才能配置該命令。
(1) 進入係統視圖。
system-view
(2) 進入OpenFlow實例視圖。
openflow instance instance-id
(3) 開啟OpenFlow數據轉發平麵功能。
data-plane enable
缺省情況下,OpenFlow數據轉發平麵功能處於關閉狀態。
在IPTV業務的OpenFlow場景中,同一節目可能同時包含視頻、不同語言的音頻和字幕等多種流量,控製器需要向交換機下發多個流表項來匹配和控製這些流量的轉發。因控製器性能限製,下發大量流表項可能會有延遲,影響節目切換速度。
為了解決該問題,可以在交換機上開啟本功能,使控製器能夠預先向其下發一次Smart Group表項,其中定義了所有可能的流量轉發動作(例如用戶出接口)。切換節目時,控製器通過一種Controller to Switch消息來指導交換機使用已有表項的組合,而不必多次下發新的表項。
Smart Group表項分為以下兩種類型:
· Program Group表項:用於標識某個節目的轉發動作,和普通Group表項一樣可以被流表項引用,來提供額外的報文轉發功能。Program Group表項缺省沒有動作桶,需要通過綁定Target Group表項來獲取動作。
· Target Group表項:用於標識目標用戶,包含一個動作桶,其中定義了Output(用戶出接口)等動作。Target Group表項僅用於存放動作,而不能被流表項引用。一個Program Group表項可以綁定多個Target Group表項來使用多個動作,從而實現報文的組播。
Smart Group表項結構如圖1-7所示。
圖1-7 Smart Group表項結構
· Class Type:用於識別Smart Group表項類型,長度為1個字節。取值0x00表示Program Group表項,取值0x01表示Target Group表項。
· Program/Target ID:Program ID或Target ID,長度為2個字節。
· Flow ID:流量ID,用於在Program/Target ID相同的Smart Group表項中標識不同的報文流,長度為1個字節。
控製器將Target Group表項下發到交換機後,隻能通過先刪除再重新配置的方式進行修改。
(1) 進入係統視圖。
system-view
(2) 進入OpenFlow實例視圖。
openflow instance instance-id
(3) 開啟Smart Group表項下發功能。
smart-group enable
缺省情況下,Smart Group表項下發功能處於關閉狀態。
新配置或修改OpenFlow實例後,需要激活實例使配置生效。重新激活實例時,交換機會斷開與所有控製器的連接,清除已下發的流表,更新能力集,重新與控製器建立連接。
(1) 進入係統視圖。
system-view
(2) 進入OpenFlow實例視圖。
openflow instance instance-id
(3) 激活OpenFlow實例。
active instance
缺省情況下,OpenFlow實例處於未激活狀態。
配置OpenFlow實例屬性時,無需激活OpenFlow實例即可生效。
(1) 進入係統視圖。
system-view
(2) 進入OpenFlow實例視圖。
openflow instance instance-id
(3) 配置OpenFlow實例的描述信息。
description text
缺省情況下,未配置OpenFlow實例的描述信息。
(4) 配置OpenFlow定時器相關參數。
¡ 配置連接檢測定時器。
controller echo-request interval interval
缺省情況下,連接檢測定時器的值為5。
¡ 配置重連定時器。
controller connect interval interval
缺省情況下,重連定時器的值為60。
(5) 配置MAC地址相關功能。
¡ 配置OpenFlow實例對應的VLAN禁止MAC地址學習。
mac-learning forbidden
缺省情況下,OpenFlow實例對應的VLAN允許MAC地址學習。
帶內管理VLAN中配置的VLAN不受該功能限製。
¡ 配置匹配控製器查詢或刪除流表項指令中的動態MAC地址。
mac-ip dynamic-mac aware
缺省情況下,忽略控製器查詢或刪除流表項指令中的動態MAC地址。
僅MAC-IP流表支持本功能。
(6) 配置禁止ARP報文上送的控製器
forbidden packet-in arp controller controller-id-list
缺省情況下,未配置禁止ARP報文上送的控製器。
配置該功能後,交換機不再向指定控製器上送ARP報文,防止設備中的大量ARP報文衝擊這些控製器。
(7) 關閉流表項變化成功後打印日誌的開關。
flow-log disable
缺省情況下,流表項變化成功後打印日誌的開關處於開啟狀態。
(8) 開啟OpenFlow環路保護功能。
loop-protection enable
缺省情況下,OpenFlow環路保護功能處於關閉狀態。
取消激活OpenFlow實例後,OpenFlow下發一條流表項,丟棄該實例對應VLAN內的所有流量,避免出現環路。
輔助連接配置和主連接配置不做配置衝突檢查,如果輔助連接與主連接配置衝突,則無法建立輔助連接。
(1) 進入係統視圖。
system-view
(2) 進入OpenFlow實例視圖。
openflow instance instance-id
(3) 配置主連接。
controller controller-id address { ip ipv4-address | ipv6 ipv6-address } [ port port-number ] [ local address { ip local-ipv4-address | ipv6 local-ipv6-address } [ port local-port- number ] ] [ ssl ssl-policy-name [ access-control-policy acp-policy-name ] ] [ vrf vrf-name ]
源IP地址必須為OpenFlow實例中端口的IP地址,否則交換機和控製器之間無法建立連接。
(4) (可選)配置輔助連接。
controller controller-id auxiliary auxiliary-id transport { tcp | udp | ssl ssl-policy-name } [ address { ip ipv4-address | ipv6 ipv6-address } ] [ port port-number ]
輔助連接中未配置IP地址或接口號時,則IP地址或接口號與主連接一致。
fail-open mode { secure | smart | standalone }
缺省情況下,連接中斷模式為Secure。
(6) (可選)開啟OpenFlow連接備份功能。
tcp-connection backup
缺省情況下,OpenFlow連接備份功能處於開啟狀態。
開啟連接備份功能後,設備發生主備倒換時,OpenFlow實例仍然保持與控製器的連接。
本功能僅支持設備隻有兩個主控板(MPU)進行主備倒換的場景。
僅基於TCP的OpenFlow連接支持開啟連接備份功能。
未開啟SSL服務器時,設備作為TCP/SSL客戶端主動連接控製器(SSL服務器);啟動SSL服務器之後,設備作為SSL服務器端被動等待控製器(SSL客戶端)連接。關於SSL的詳細介紹,請參見“安全配置指導”中的“SSL”。
配置該功能後,無需激活OpenFlow實例即可生效。
不能通過重複執行本命令修改OpenFlow實例啟動的SSL服務器。如需修改,請先通過undo listening port命令刪除OpenFlow實例啟動的SSL服務器,再執行listening port命令重新啟動SSL服務器。
(1) 進入係統視圖。
system-view
(2) 進入OpenFlow實例視圖。
openflow instance instance-id
(3) 配置OpenFlow實例作為SSL服務器監聽控製器。
listening port port-number ssl ssl-policy-name
缺省情況下,未配置OpenFlow實例作為SSL服務器監聽控製器。
某些情況下,MAC-IP流表的三層表項會被覆蓋,可以通過命令行手工刷新MAC-IP流表,使設備重新從控製器獲取三層表項。
(1) 進入係統視圖。
system-view
(2) 進入OpenFlow實例視圖。
openflow instance instance-id
(3) 刷新MAC-IP流表的三層表項。
refresh ip-flow
當OpenFlow流表項的Output Action為Normal時,命中該表項的報文將被正常轉發,並被添加Permit標記。攜帶Permit標記的報文即使匹配了MQC的丟棄動作(例如,CAR中的Discard動作),也不會被丟棄。配置本功能後,設備會忽略OpenFlow功能為報文添加的Permit標記,該報文可以被MQC的丟棄動作處理。
(1) 進入係統視圖。
system-view
(2) 配置忽略OpenFlow功能為報文添加的Permit標記。
openflow permit-flag ignore
缺省情況下,不會忽略OpenFlow功能為報文添加的Permit標記。
使用OpenFlow關閉接口後,通過display interface命令查看接口顯示信息時,Current state為OFP DOWN。
使用OpenFlow關閉接口後,可以通過如下方式打開接口:
· undo openflow shutdown命令打開接口。
· 通過控製器下發PORT_MOD消息打開接口。
(1) 進入係統視圖。
system-view
(2) 進入接口視圖。
interface interface-type interface-number
(3) 使用OpenFlow關閉接口。
openflow shutdown
缺省情況下,未使用OpenFlow關閉接口。
開啟OpenFlow模塊的告警功能後,該模塊會生成告警信息,用於報告該模塊的重要事件。生成的告警信息將發送到設備的SNMP模塊,通過設置SNMP中告警信息的發送參數,來決定告警信息輸出的相關屬性。
有關告警信息的詳細介紹,請參見“網絡管理和監控配置指導”中的“SNMP”。
(1) 進入係統視圖。
system-view
(2) 開啟OpenFlow模塊的告警功能。
snmp-agent trap enable openflow [ connect-state ]
缺省情況下,OpenFlow的告警功能處於開啟狀態。
控製器通過NETCONF可以開啟設備的流表項的流量監測功能,設備上通過命令行可以配置該監測功能的參數。
對於開啟了OpenFlow流量監測功能的流表項,設備每隔一段時間監測匹配該流表項的字節和報文計數的變化。如果這些計數被連續多次監測到沒有變化,則設備通過NETCONF將該流表項的流量無增長事件發送給控製器。之後,如果這些計數被監測到增長,則設備通過NETCONF將該流表項的流量增長事件發送給控製器。
通過display openflow flow-table命令可以查看流表項信息。顯示結果中,Flow entry字段下的byte count、packet count字段分別表示匹配該流表項的字節計數、報文計數。
設備的流表項的流量監測功能是控製器通過NETCONF下發<action>操作開啟的。如下NETCONF報文表示:在DatapathID對應的OpenFlow實例的TableID為0的流表中,開啟CookieID等於1的所有流表項的流量監測功能。
<rpc message-id="100" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<action>
<error-option>stop-on-error</error-option>
<top xmlns="//www.yolosolive.com/netconf/action:1.0">
<OFP>
<FlowMonitor>
<Application>
<DatapathID>410026760491999</DatapathID>
<TableID>0</TableID>
<CookieID>1</CookieID>
<Enable>1</Enable>
</Application>
</FlowMonitor>
</OFP>
</top>
</action>
</rpc>
大量流表項開啟OpenFlow流量監測功能的情況下,如果配置的流量監測間隔較小,可能導致設備CPU負擔過重。
OpenFlow流量監測功能僅監測由控製器下發給Openflow實例的流表項的相關流量,屬性為default和local的流表項不參加監測。
流表項開啟OpenFlow流量監測功能後,控製器下發給該流表項的idle time屬性(數據流匹配流表項的超時時間)不生效。
(1) 進入係統視圖。
system-view
(2) 進入OpenFlow實例視圖。
openflow instance instance-id
(3) 配置OpenFlow流量監測間隔。
flow-monitor interval interval
缺省情況下,未配置流量監測間隔。
如果不配置流量監測間隔,OpenFlow流量監測功能不會生效。
(4) (可選)配置OpenFlow流量中斷的連續監測次數閾值。
flow-monitor threshold threshold
缺省情況下,流量中斷的連續監測次數閾值為2。
在完成上述配置後,在任意視圖下執行display命令可以顯示配置後OpenFlow的運行情況。
表1-9 OpenFlow顯示和維護
操作 |
命令 |
顯示OpenFlow實例的詳細信息 |
display openflow instance [ instance-id ] |
顯示OpenFlow實例的控製器信息 |
display openflow instance instance-id { controller [ controller-id ] | listened } |
顯示OpenFlow實例的輔助連接信息 |
display openflow instance instance-id auxiliary [ controller-id [ auxiliary auxiliary-id ] ] |
顯示OpenFlow實例的流表信息 |
display openflow instance instance-id flow-table [ table-id ] |
顯示OpenFlow實例的Group表信息 |
display openflow instance instance-id group [ group-id ] |
顯示OpenFlow實例的Meter表信息 |
display openflow instance instance-id meter [ meter-id ] |
顯示OpenFlow實例的Smart Group表信息 |
display openflow instance instance-id smart-group { program-group [ program-id ] | target-group [ target-id ] } |
顯示OpenFlow實例的概要信息 |
display openflow summary |
清除控製器發送和接收報文的統計計數 |
reset openflow instance instance-id { controller [ controller-id ] | listened } statistics |
· 創建OpenFlow實例1,把VLAN 4092和4094映射到OpenFlow實例中1,並激活實例。
· 配置OpenFlow實例1連接的控製器,用來控製Switch上的流量轉發。
圖1-8 VLAN類型OpenFlow配置組網圖
# 創建VLAN 4092和4094。
<Switch> system-view
[Switch] vlan 4092
[Switch-vlan4092] quit
[Switch] vlan 4094
[Switch-vlan4094] quit
# 創建實例並映射VLAN
[Switch] openflow instance 1
[Switch-of-inst-1] classification vlan 4092 mask 4093
# 配置控製器1的IP地址為192.168.49.49,並激活實例
[Switch-of-inst-1] controller 1 address ip 192.168.49.49
[Switch-of-inst-1] active instance
[Switch-of-inst-1] quit
# 顯示實例詳細信息。
[Switch] display openflow instance 1
Instance 1 information:
Configuration information:
Description : --
Active status : Active
Inactive configuration:
None
Active configuration:
Classification: VLAN, total VLANs(2)
4092, 4094
...
Port information:
none
Active channel information:
Controller 1 IP address: 192.168.49.49 port: 6633
(1) VLAN匹配
在使用VLAN劃分OpenFlow實例的情況下,對VLAN的匹配存在一定的限製。
表1-10 VLAN匹配項列表
VLAN |
MASK |
匹配的報文 |
- |
- |
匹配在OpenFlow實例VLAN內的所有報文 |
0 |
- |
匹配無VLAN tag的報文,但是入接口的PVID必須在OpenFlow實例內 |
0 |
有值 |
不支持 |
有效VLAN |
-/有值 |
不支持 |
0x1000 |
-/非0x1000的值 |
不支持 |
0x1000 |
0x1000 |
匹配有VLAN tag的報文,但是該VLAN tag必須在OpenFlow實例內 |
有效VLAN | 0x1000 |
-/有值 |
根據VLAN+MASK進行匹配,前提是VLAN+MASK必須在OpenFlow實例內 |
其他 |
其他 |
不支持 |
(2) 協議報文的匹配
對於協議報文,一旦相關的協議配置使能後,協議報文不會進入OpenFlow轉發處理,仍然由相關協議進行處理,但是對於LLDP報文比較特殊,對於LLDP報文的使用限製請參見1.15.5 。
(3) MetaData的匹配
MetaData用於流表間的匹配信息傳遞,在非第一級流表支持下發MetaData的匹配,如果控製器在第一級流表下發了MetaData的匹配項,Switch返回不支持。
(1) Clear actions的限製
¡ 單級流表的情況下,支持Clear actions。
¡ 多級流表的情況下,僅第一級流表支持Clear actions與其他instruction的動作配合,後續流表僅支持單獨下發Clear Actions。
(2) Apply actions的限製
不支持Action List中包含多個Output的情況,僅支持一個Output時,請參見1.15.2 。
(3) Write MetaData/MetaMask
在且僅在非最後一級流表的情況下,Switch支持Write MetaData/MetaMask的操作,否則Switch返回不支持。
(4) Go To Table
在且僅在非最後一級流表的情況下,Switch支持Go To Table的操作,否則Switch返回不支持。
OpenFlow Switch設備整合Action Set和Action List為Action Set,其整合原則如下。
Action List和Action Set中的Action(除Output和Group外)如果不存在衝突,則全部保留為Action Set;如果存在衝突,則以Action Set的動作替換Action List中的動作(其原因是Action List要執行在Action Set之前)。
· 當Action List和Action Set中都存在一個Output的Action時,Action List中的Output發送的報文不會對報文進行任何修改,其執行順序最優,Action Set中的Ouput會執行Action List和Action Set中的所有修改。
· 當Action List和Action Set中僅存在一個Output的Action時,該Output為報文出接口,執行順序按照Action Set的順序。
· 當Action List中存在一個Output的Action,Action Set中存在一個Group的Action(Output的Action存在與否都可以)時,Action List中的Output發送的報文不會對報文進行任何修改,Group在Action Set中。
· 其他情況不支持。
在Packet out消息中Output為Normal、Local、In port或To Controller時,入接口隻能是設備上的物理接口或者邏輯接口,不能是OpenFlow保留口。
在Packet Out消息中如果同時存在Buffer ID和報文,OpenFlow Switch隻會獲取Buffer ID對應的緩存報文進行處理,忽略消息中攜帶的報文。
如果Packet Out消息中的報文沒有VLAN tag,則OpenFlow Switch將入接口的PVID作為報文所在的VLAN進行轉發處理。
· 如果入接口不是設備上的接口,且Output是設備上的接口,則使用出接口的PVID發送。
· 如果入接口不是設備上的接口,且Output是保留口Flood和All,請參見“4. 出接口限製”的處理。
Packet Out中指定的Output為保留口的Flood和All時的處理機製。
(1) 出接口為Flood的情況
¡ Packet Out的報文攜帶VLAN tag,則報文在該VLAN內廣播。
¡ Packet Out的報文沒有攜帶VLAN tag,但是入接口是OpenFlow Swtich上的接口,則報文在入接口的PVID內廣播。
¡ Packet Out的報文沒有攜帶VLAN tag,並且入接口是Controller,則報文在所有OpenFlow接口發送一份。
(2) 出接口為All的情況
¡ Packet Out的報文攜帶VLAN tag,則報文在該VLAN內廣播。
¡ Packet Out的報文沒有攜帶VLAN tag,無論入接口是什麼接口,報文都在所有OpenFlow接口發送一份。
對於Packet in消息中的報文:
· 上送時如果其VLAN tag與該報文入接口的PVID相同,那麼該報文的VLAN tag會被刪除。
· 上送時如果其VLAN tag與該報文入接口的PVID不同,那麼該報文的VLAN tag不會被刪除。
· 對於上送原因是No Match的報文支持緩存,緩存大小是1K個報文。
· 對於其他上送原因的報文不支持緩存,整個報文都會被上送,並且Cookie是全F。
OpenFlow網絡可以通過LLDP發現拓撲,對於匹配LLDP報文存在如下限製:
· 設備上必須全局使能LLDP。
· LLDP報文匹配後上送控製器不受實例限製,隻要收到報文的接口在OpenFlow實例內,並且實例內有匹配LLDP報文並上送控製器的表項,則LLDP報文就會在該實例上送控製器。
· Switch在激活後缺省會生成Table Miss表項,其動作是Drop,此表項不能被控製器通過Modify的動作修改,不能被控製器通過Mulipart消息查詢到,僅能由控製器通過Add進行添加Table Miss的動作進行修改。
· Table Miss表項僅能通過嚴格匹配進行修改和刪除,在非嚴格匹配的情況下,即使匹配項是通配也不能夠操作Table Miss表項。
· Table Miss表項被刪除後,會生成缺省的Table Miss表項,其動作是Drop。
在非嚴格匹配的情況下,不支持通過match域為通配修改所有普通流表項。
OpenFlow Switch支持兩種類型的Flow Table,MAC-IP類型和Extensibility類型。允許通過命令行指定Table ID,Flow Table會根據Table ID進行排序。Flow Table需要重新激活後才能生效。
MAC-IP流表是使用MAC地址表項和路由表項實現Flow Table;Extensibility流表使用ACL實現Flow Table。
必選的能力是控製器下發時必須攜帶的匹配或者動作項,可選能力是下發時可攜帶可不攜帶,如果不攜帶的話由Switch添加缺省的匹配或者動作項。
二層表項使用MAC地址表實現,其支持能力如表1-11所示。
表1-11 MAC-IP流表二層表項支持能力
支持項 |
能力 |
必選匹配項 |
· VLAN · 單播目的MAC地址 |
可選匹配項 |
無 |
必選動作項 |
指定出接口 |
可選動作項 |
· Go to table(在多級流表存在的情況下,即使控製器不下發,Swtich上缺省下發該動作) · Write Meta(在多級流表存在的情況下,即使控製器不下發,Switch上缺省下發目的MAC匹配的MetaData) |
三層表項使用路由表實現,其支持能力如表1-12所示。
表1-12 MAC-IP流表三層表項支持能力
支持項 |
能力 |
必選匹配項 |
· VLAN · 以太網類型eth_type · 單播目的IP地址 · 單播目的MAC地址(必須是匹配VLAN對應的VLAN接口的MAC地址) |
可選匹配項 |
無 |
必選動作項 |
· 指定出接口 · 修改VLAN · 修改目的MAC地址 |
可選動作項 |
· 修改源MAC地址(源MAC地址會修改為目的出接口所在VLAN對應的VLAN接口的MAC地址) · TTL減1 · Go to table(在多級流表存在的情況下,即使控製器不下發,Swtich上缺省下發該動作) · Write Meta(在多級流表存在的情況下,即使控製器不下發,Switch上缺省下發目的IP地址匹配的MetaData) |
MAC-IP流表的Flow Entry有一定的限製,控製器需要遵循這些限製下發表項,否則可能會造成轉發錯誤。
二層表項的限製如表1-13所示。
表1-13 MAC-IP流表二層表項限製
表項類型 |
限製 |
匹配項限製 |
目的MAC地址不是本機MAC地址 |
動作項限製 |
出接口屬於匹配的VLAN |
三層表項的限製如表1-14所示。
表1-14 MAC-IP流表三層表項限製
表項類型 |
限製 |
匹配項限製 |
· 匹配的VLAN所對應的VLAN接口UP · 目的MAC地址是匹配VLAN對應的VLAN接口的MAC地址 · 目的IP地址不是本機IP地址 |
動作項限製 |
· 指定出接口屬於目的VLAN · 目的MAC地址不是本機MAC地址 · 如果修改源MAC地址,源MAC地址必須是目的出接口所在VLAN對應的VLAN接口的MAC地址 |
三層表項能夠下發的前提是匹配VLAN所對應的VLAN接口存在並且處於UP狀態,且VLAN接口會作為OpenFlow接口上報(包括了VLAN接口的鏈路狀態和MAC地址),在VLAN接口刪除時同時也會上報給控製器,需要由控製器刪除對應的三層流表項,因此需要控製器保證三層表項的正確性,Switch端不對三層表項的匹配項限製進行檢查。
MAC-IP流表的Table Miss支持下列Output Action:
· Normal:報文正常轉發。
在支持MAC-IP流表的情況下,Switch支持Controller獲取和刪除動態MAC地址表項。
控製器可以通過指定VLAN、單個MAC或者單個MAC與VLAN來獲取和刪除動態MAC地址表項。
MAC-IP流表和Extensibility流表通過MetaData/Mask可以實現多級流表。
MAC-IP流表支持Write MetaData/Mask,Extensibility流表支持Match MetaData/Mask。
MetaData Mask每個Bit表示不同的含義,MetaData中對應的Bit位置位表示匹配,未置位表示通配,具體參見表1-15。
MetaData Mask Bit |
含義 |
MetaData |
Bit 0 |
目的MAC |
1,置位,表示匹配到目的MAC |
0,未置位,表示未匹配到目的MAC |
||
Bit 1 |
源MAC |
1,置位,表示匹配到源MAC |
0,未置位,表示未匹配到源MAC |
||
Bit 2 |
目的IP |
1,置位,表示匹配到目的IP |
0,未置位,表示未匹配到目的IP |
||
其他 |
保留 |
保留 |
Extensibility流表和MAC-IP流表配合時:
· 當Extensibility流表中的Output動作不是Normal時,MAC-IP流表不會生效,所有動作根據Extensibility流表進行處理;
· 當Extensibility流表中的Output動作是Normal時,Output動作根據MAC-IP流表進行處理,其餘動作根據Extensibility流表進行處理。
不同款型規格的資料略有差異, 詳細信息請向具體銷售和400谘詢。H3C保留在沒有任何通知或提示的情況下對資料內容進行修改的權利!