通用命令
exit 優雅關閉ovs-vswitchd進程
qos/show interface 查詢內核中關於qos的配置以及和給出端口有關的狀態
cfm/show [interface]
顯示在指定端口上CFM配置的詳細信息。如果沒有指定接口,則顯示所有使能了CFM的接口
cfm/set-fault [interface] status 強制將指定端口的CFM模塊的錯誤狀態(如果沒指定接口則是全部接口)設置成指定的狀態。可以是”true”,”false”,”normal”
stp/tcn [bridge]
在運行了stp的bridge上強制進行拓撲變更。之將導致該dp發送拓撲變更通知並且刷新MAC表。。如果沒有指定橋,則應用到所有dp
橋命令
這些命令用於管理橋。
fdb/flush [bridge]
清除指定橋的MAC學習表,沒有指定橋則應用於所有橋
fdb/show bridge 列出指定橋上每個MAC直至與VLAN的對應信息,並且包含該學習到該MAC的端口號還有該條目的age信息,單位為秒
bridge/reconnect [bridge]
命令橋斷開和當前openFlow控制器的連接並且重連,如果沒有指定橋,則應用於所有橋,這個命令可以在分析排查控制器錯誤的時候很有用
bridge/dump-flows bridge 列出橋上所有的流,包括那些在其他命令中(例如 ovs-ofctl dump-flows)默認隱藏的流.一些機制比如帶內管理等設置的流策略是不行允許修改和覆蓋的,所以對控制器來說他們是隱藏的。
BOND命令 這些命令管理ovs橋上綁定端口。要了解這些命令,你需要了解一種叫做源負載分擔(SLB)的實施細節。作為直接將源MAC地址設成SLAVE的做法,通過特定的計算將48bit的MAC自動化映射到一個8bit的值(MAC hash)。所有匹配這個hash值得mac地址被指定為slave。
bond/list 列出所有的綁定配置,以及slaves,范圍包含所有橋
bond/show[port] 給出指定端口的所有綁定有關的信息(updelay,downdelay,距離下次進行重新平衡的時間),如果沒指定端口,則列出所有bond的端口。同時也列出所有slave的信息,包括這些slave是處於enable還是disable狀態、完成一個正在實施中的updelay或者一個downdelay的時間、是否是激活態的slave。任何關於LACP的信息可以使用lacp/show來查看。
bond/migrate port hash slave 僅適用於配置了SLB的綁定。分配一個指定的machash值給一個新的slave。Port指定了bond的端口,hash則是將要遷移的mac hash值(十進制0到255之間),slave即是要新的slave。 這個重新制定的關系不是永久的:rebalanceing或者發生fail-over時,這個mac hash蔣輝按照常規的方式切換到新的slave上面
MAC hash值不能指定到一個disable態的slave上
bond/set-active-slave port slave 將給定slave設為激活態的slave。給定的slave必須是enable狀態。
這個配置不是永久的:如果該slave變成disable,將會自動選擇一個新的slave。
bond/enable-slave port slave
bond/disable-slave port slave Enable/disableslave在給定的bond port上,忽略任何updelay和downdelay。
這個設置不是永久的:他將保持到該slave的承載狀態變化
bond/hashmac [valn] [basis]
返回指定mac(伴隨指定vlan和basis)的hash值
lacp/show [port] 列出所有指定端口的lacp關聯信息。包括active/passive、system id、systempriority。同時列出每個slave 的信息:enable/disable、連接上或者未連接上、端口id和優先級、主用信息和成員信息。如果沒有指定端口,則顯示所有應用了CFM的接口信息。
數據通道命令(datapath)
這些命令管理邏輯數據通道。類似ovs-dpctl的命令。
dpif/dump-dps 在多行中顯示所有配置的datapath名稱
dpif/show[dp….]
打印dp的匯總信息,包括dp的狀態還有連接上的端口列表。端口的信息包括openFlow的端口號,datapath的端口號,以及類型(本地端口被標識為openflow port 65534)
如果指定了一個或多個datapath,將只顯示指定的這些dp的信息。否則,則顯示所有dp的信息。
dpif/dump-flows dp 想控制端打印dp中流表的所有條目。
這個命令主要來與debugOpen Vswitch.它所打印的流表不是openFlow的流條目。它打印的是由dp模塊維護的簡單的流。如果你想查看OpenFlow條目,請使用ovs-ofctl dump-flows。 dpif/del-fow dp 刪除指定dp上所有流表。同上所述,這些不是OpenFlow流表。
OpenFlow協議命令
這些命令管理核心OpenFlow交換的實施。
ofproto/list 列出所有運行中ofproto實例。這些名字可能在ofproto/trace中用到。
ofproto/trace[dpname] odp_flow [-generate] [packet] ofproto/tracebridgebr_flow [-generate] [packet]追蹤報告構造包在交換機中的路徑。包頭(例如源和目的)和元數據(比如:入端口),一起組成它的“flow”,根據這些“flow”決定包的目的地。你可以用些列途徑地址流。 dpnameodp-flow odp-flow 是一個可以使用 ovs-dpctl dump-flows命令打印出來的流。如果你所有的橋都是同樣樣的類型,這也是通常的情況,那么你可以忽略 dp-name,但是如果你的橋擁有不同類型(即,ovs-netdev和ovs-system型),那么你必須要指定dp-name。 bridgebr_flow br_flow是一種可以使用ovs−ofctl add−flow命令添加的流類型。(這不是一個OpenFlow流:除了其他的差異,這種流永遠不會有通配符)bridge指定了被追蹤的br-flow經過的橋名。
通常情況下,你可以只指定一個流,用以上提到的一種形式,但是有時候你可能需要值一個確切的數據包來代替流
副作用 有些動作是由副作用的,比如,normal 動作能刷新MAC學習表,learn動作會改變OpenFlow表。ofproto/trace只有在指定包的時候發生副作用。如果你需要虛作用,那么你必須提供一個包。
(output 動作也是明顯的副作用,但是ofproto/trace 永遠不會執行這個動作,即便是你制定了包的時候)
不完整的信息 大多數時候,Open Vswitch能夠盡力用流就得出一個包所經路徑的所有信息,但是在一些特定場景下,ovs可能需要查看一些不包含在流內的其他包的部分信息。這種情況下,如果你不提供一個包,那么ofproto/trace就會提示你需要一個包。
如果你希望在ofproto/trace 操作中包含一個包,你有兩種方法實現:
-generate 這個選項,附加在之前敘述的兩種流方式后面用來在內生成該流的一個包並且使用這個包。如果你的目地是利用副作用,那么這個選項是你達成目標的最容易的方法。但是-generate 不是一個填充不完整信息的好方式,因為生成的包是基於流信息的,即是說這個包並不能帶有任何這個流以外的信息。
packet 這種形式提供了一個明確的以十六進制數字序列表示的包。一個以太網幀至少14 bytes長,即至少28個16進制的數字。很明顯,使用手工輸入是很不方便的。好在我們的ovs-pacp 和ovs-tcpundump 工具提供了簡便的方法。
利用這種形式,包頭直接從packet中提取,那么odp_flow或者br_flow應該只包含元數據。元數據可以是以下類型:
skb_priority 報文的qos優先級 skb_mark 報文的SKB標記 tun_id 報文到達的隧道id號 in_port 報文到達的端口
第一種流格式的in_port的值是內核 datapath的端口號,而OpenFlow的端口號值是OpenFlow的端口號。這兩種端口號一般都是不一樣的,而且沒什么關系可言。
ofproto/self-check [switch] 運行內部一致性檢查,並且返回一個簡要的匯總。指定橋的時候限定在該實例,否則是所有實例。如果匯總報告了任何錯誤,那么ovs的日志中會包含更多詳細的信息。請將這些錯誤報告作為bug發送給ovs的開發者。
vlog命令
這些命令管理ovs-vswitchd的日志配置
vlog/set [spec] 設置日志等級。沒有spec時,設置所有模塊和設施的日志等級為dbg。其他情況下,spec是一個用逗號或者空格或者冒號分隔的單詞列表,最多支持下面所述范疇的每樣配置一個。
l 一個可用模塊名,可以用ovs-appctlvlog/list 命令來查看所有可用模塊名。
l syslog、console、file改變着三項任意項的日志等級。
l off、emer、err、warn、info、dbg,這些用來控制日志等級,不低於這些等級的消息蔣輝被記錄在日志中,所有低於該等級的將被過濾。參考ovs-appctl查看日志等級的詳細定義。
如果沒有指定spec, 對於file選項,不論日志等級是否設置,只有當ovs-vswitchd調用 –log-file選項時,日志才會被記錄至文件。
為了保持和老版本的ovs的兼容性,any可以作為合法參數但是不會發生作用。 vlog/set PATTERN:facility:pattern 設置應用於每個設施日志的格式,可以參考ovs-appctl查看格式的可用語法信息。
vlog/list 列出所有支持記錄日志的模塊和他們當前的日志等級。
vlog/reopen 讓ovs-vswitchd關閉並且重新打開日志文件(可以用於在轉換日志后,重新建立一個新日志文件來使用)
需要ovs-vswitchd 使能 –log-file選項時才有效 vlog/disable-rate-limit [module]… vlog/enable-rate-limit [module]… 默認情況下,ovs-vswitchd 限制了記錄日志的速率。當消息發生的頻率高於默認值時,該消息將會被抑制。這將節省磁盤空間,讓日志更加可讀,並且讓進程更加流暢,但是有些情況下的排錯需要更多的細節。這樣,vlog/disable−rate−limit允許特定獨立模塊的日志記錄不限制在默認速率下。你可以指定一個或多個模塊名,這些模塊名可以通過vlog/list查看。不指定模塊名或者使用any關鍵字將應用到所有記錄日志的模塊。 vlog/enable−rate−limit命令,和vlog/disable−rate−limit的語法一樣,可以恢復速率限制。 內存命令(MEMORYCOMMANDS) 報告內存的使用率 memory/show 顯示一些ovs-vswitchd內存使用的基礎狀態信息。ovs−vswitchd也會在啟動后並且周期性的檢測內存的增長
COVERAGE COMMANDS 這個命令管理ovs−vswitchd的“coverage counters”,即在守護進程運行期間發生的特殊事件的次數。除了使用這個命令意外,當ovs−vswitchd檢測到主循環運行周期異常長的時候,會自動以INFO的日志等級記錄coverage counters。
主要用於性能分析和debugging。 coverage/show 顯示coverage counters值。
壓力選項命令(STRESSOPTION COMMANDS)
這些命令允許開發者測試OpenvSwitch,從而觸發一些只有在極端案例中出現的行為。開發和測試者因此可以更加容易的發現只有在偶然的后者極端情況下才會出現的bug。壓力選項可能導致一些非正常的行為,但這些行為可能並不是bug,所以,這些命令應該僅僅用於測試。
stress/enable
stress/disable 所有壓力選項的開關 stress/list 以下用表格形式列出了所有可用的壓力選項和他們的設置,表頭如下:
NAME
一個單詞用來定義這個選項,並在stress/set中使用這個名字
DESCRIPTION
為不了解這個選項內部代碼和該選項完成動作的人所添加的描述信息
PERIOD
現行配置的觸發周期。如果壓力選項是去使能狀態,那么這也是disabled。否則這是一個表示壓力選項觸發的動作時間發生的間隔計數。
MODE
如果壓力選項disabled,那么值為n/a。其他情況,如果選項制定了確切的觸發周期那么是periodic,如果是指定周期內隨機觸發則是random COUNTER 如果壓力選項disabled,那么n/a,其余情況,顯示下個觸發周期錢一共觸發了多少次。
HITS
這個壓力選項從程序啟動開始一共觸發了多少次
RECOMMENDED
對不熟悉間隔的人建議的周期。這是一個可信的壓力,不會造成系統的崩潰。MINIMUM/MAXIMUM
周期的最大/最小值
DEFAULT
默認周期,這將會在今使能了壓力選項(tress/enable),但是沒有具體配置的時候(stress/set)。當壓力選項為關閉時默認關閉。
stress/set option period [random|periodic] 設置壓力選項option的周期為給定period值。period為0是disable這個選項。指定random時,將以一個平均周期為給定period的值來隨機觸發這個選項,指定periodic時,將精確地以周期值來觸發動作。之后是默認值。
有過壓力選項沒有用stress/enable使能,這個命令將不會生效。
限制(LIMITS)
我們相信限制和我們如下所寫的一樣精確。這些限制假設你使用linux內核的dp。
l 大約256個橋需要5000個文件描述符來(ovs-switchd進程每個datapath需要17個文件描述符)
l 每個橋65280個端口。根據綁定的hash標的尺寸,每個橋接口在1024以上,性能將會降級
l 每個橋可以學習2048個MAC條目
l 內核的流僅受限於內核的可用內存。32位的內核每個橋維護的流數大於1048576或者64位的內核維護的流數目大於262144時,性能將會降級。(ovs-vswitchd永遠都不應該加載那么多條流)
l OpenFlow流僅受限於可用內存。性能根據獨特的通配符個數呈現線性分布。OpenFlow表中相同通配符的流信息都有相同的查找時間。但是當一個表擁有很多不同通配置的流時,查表的時間就線性上升了。
l 每個橋255端口可以加入STP協議
l 每個橋支持32個端口鏡像(MIRROR)
l 端口名最長15字節(這是linux系統內核的限制)