Open vSwitch 使用

網橋管理

添加名爲br0的網橋

ovs-vsctl add-br br0

刪除名爲br0的網橋

ovs-vsctl del-br br0

列出所有網橋

ovs-vsctl list-br

判斷網橋br0是否存在

ovs-vsctl br-exists br0

列出掛接到網橋br0上的所有網絡接口

ovs-vsctl list-ports br0

將網絡接口eth0掛接到網橋br0上

ovs-vsctl add-port br0 eth0

刪除網橋br0上掛接的eth0網絡接口

ovs-vsctl del-port br0 eth0

列出已掛接eth0網絡接口的網橋

ovs-vsctl port-to-br eth0


ovsdb是一個非常輕量級的數據庫,與其說它是一個數據庫,不如說它是一個提供增刪查改等功能的臨時配置緩存,之所以這麼說,是因爲ovsdb數據庫的根本就未使用多少數據庫技術,如SQL語言查詢、存儲過程等等。ovsdb 數據庫通過模式文件“openvswitch-1.1.0pre2/vswitchd/vswitch.ovsschema”,如要定製ovsdb數據庫,可通過更改 vswitch.ovsschema 文件實現,不過以下姑且仍以數據庫稱之。


數據庫操作的一般格式爲:

ovs-vsctl list/set/get/add/remove/clear/destroy table record column [value]

默認情況下ovsdb中有以下數據表:

bridge, controller,interface,mirror,netflow,open_vswitch,port,qos,queue,ssl,sflow

即table可爲上面的任一個。record爲數據表中name字段的值,column爲數據表任一個字段的字段名,value字段值。

基本操作:

查看bridge數據表中的所有記錄

獲得bridge數據表_uuid字段的值

設置bridge數據表datapath_type字段的值

清除bridge數據表flood_vlans字段的值

ovs-vsctl remove bridge xenbr0 flood_vlans 23

或者

ovs-vsctl clear bridge xenbr0 flood_vlans

刪除uuid爲69ee0c09-9e52-4236-8af6-037a98ca704d的qos記錄

ovs-vsctl destroy qos 69ee0c09-9e52-4236-8af6-037a98ca704d

2 應用場景設置

QoS設置

針對網絡接口的設置:設置網絡接口vif0.0的帶寬爲1000±100kbps

ovs-vsctl set interface vif0.0 ingress_policing_rate=1000

ovs-vsctl set interface vif0.0 ingress_policing_burst=100

(ingress_policing_rate:最大發送速率(單位均爲kbps)

ingress_policing_burst:超過ingress_policing_rate的最大浮動值)

針對交換機端口的設置:創建在vif0.0端口上的linux-htb QoS,linux-htb QoS可以針對具有指定特徵的數據包流設置最大最小帶寬,且在最大帶寬範圍內,某一特徵的數據包流可以借用其他特徵數據包流未用完的帶寬。

ovs-vsctl -- set port vif0.0 qos=@newqos

-- --id=@newqos create qos type=linux-htb other-config:

max-rate=100000000 queues=0=@q0,1=@q1

-- --id=@q0 create queue other-config:min-rate=100000000 other-config:max-rate=100000000

-- --id=@q1 create queue other-config:min-rate=500000000

將帶寬限制加於某特徵數據包流上

(假設vif0.0的接在交換機1號端口上,ovs-ofctl命令的使用見2.2.3)

ovs-ofctl add-flow xenbr0 "in_port=2,idle_timeout=0,actions=enqueue:1:0"

端口映射

將發往eth0端口和從eth1端口發出的數據包全部定向到eth2端口

(假設eth0、eth1、eth2端口的uuid分別爲:

69ee0c09-9e52-4236-8af6-037a98ca704d

69ee0c09-9e52-4236-8af6-037a98ca704e

69ee0c09-9e52-4236-8af6-037a98ca704f

端口的uuid可以通過ovs-vsctl list port命令查看)

ovs-vsctl -- set bridge xenbr0 mirrors=@m

-- --id=@m create mirror name=mymirror

select-dst-port=69ee0c09-9e52-4236-8af6-037a98ca704d

select-src-port=69ee0c09-9e52-4236-8af6-037a98ca704e

output-port=69ee0c09-9e52-4236-8af6-037a98ca704f

流規則管理

流規則組成

每條流規則由一系列字段組成,分爲基本字段、條件字段和動作字段三部分:

基本字段包括生效時間duration_sec、所屬表項table_id、優先級priority、處理的數據包數n_packets,空閒超時時間idle_timeout等,空閒超時時間idle_timeout以秒爲單位,超過設置的空閒超時時間後該流規則將被自動刪除,空閒超時時間設置爲0表示該流規則永不過期,idle_timeout將不包含於ovs-ofctl dump-flows brname的輸出中。


條件字段包括輸入端口號in_port、源目的mac地址dl_src/dl_dst、源目的ip地址nw_src/nw_dst、數據包類型dl_type、網絡層協議類型nw_proto等,可以爲這些字段的任意組合,但在網絡分層結構中底層的字段未給出確定值時上層的字段不允許給確定值,即一條流規則中允許底層協議字段指定爲確定值,高層協議字段指定爲通配符(不指定即爲匹配任何值),而不允許高層協議字段指定爲確定值,而底層協議字段卻爲通配符(不指定即爲匹配任何值),否則,ovs-vswitchd 中的流規則將全部丟失,網絡無法連接。


動作字段包括正常轉發normal、定向到某交換機端口output:port、丟棄drop、更改源目的mac地址mod_dl_src/mod_dl_dst等,一條流規則可有多個動作,動作執行按指定的先後順序依次完成。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章