ovs-vsctl 命令詳解


Open vSwitch中有多個命令,分別有不同的作用,大致如下:

  • ovs-vsctl用於控制ovs db
  • ovs-ofctl用於管理OpenFlow switch 的 flow
  • ovs-dpctl用於管理ovs的datapath
  • ovs-appctl用於查詢和管理ovs daemon

本文主要介紹ovs-vsctl。以下命令查詢主機上已有的 OVS bridge,以及其中的 port。

ovs-vsctl show 

例子

$ ovs-vsctl show fc562da8-fb36-4d62-8b47-5502e72069dc Bridge br-vxlan Port "vxlan0" Interface "vxlan0" type: vxlan options: {remote_ip="10.10.10.1"} Port br-vxlan Interface br-vxlan type: internal Port "veth2" Interface "veth2" ovs_version: "2.5.0" 

Bridge 相關命令

創建 bridge

創建bridge(或switch,以下統稱為bridge) br0

使用選項--may-exist后,若欲創建的bridge已存在,該命令什么也不做,也不報錯。

ovs-vsctl [--may-exist] add-br br0 

刪除bridge

刪除 bridge br0

使用選項--if-exists后,若欲刪除的bridge不存在,該命令什么也不做,也不報錯。

ovs-vsctl [--if-exists] del-br br0 

查詢已有的 bridge

ovs-vsctl list-br 

端口相關命令

添加端口

添加端口(物理端口或vNIC)eth1到bridge eth1中

ovs-vsctl [--may-exist] add-port br0 eth1 

創建 bond

在br0上創建一個bond了eth0,eth1和eth2的bond端口bond0

# ovs-vsctl add-bond <bridge> <port> <iface...> ovs-vsctl add-bond br0 bond0 eth0 eth1 eth2 

移除端口

從br0上移除端口eth1

ovs-vsctl [--if-exists] del-port br0 eth1 

列出端口

列出br0上的端口(不包括internal port)

ovs-vsctl list-ports br0 

查看端口詳細數據

列出OVS中端口eth1的詳細數據

$ ovs-vsctl list interface eth1 

OpenFlow 控制器相關

添加控制器

# ovs-vsctl set-controller <bridge> <target...> ovs-vsctl set-controller br0 tcp:1.2.3.4:6633 # 設置多個controller ovs-vsctl set-controller br0 tcp:1.2.3.4:6633 tcp:4.3.2.1:6633 # 添加使用unix socket通信的controller ovs-vsctl set-controller br0 unix:/var/run/xx/xx.sock 

移除控制器

ovs-vsctl del-controller br0 

查詢 brige 上已配置的控制器

ovs-vsctl get-controller br0 

VLAN 相關

配置端口為Access口

設置br0中的端口eth0為VLAN 10的access口

ovs-vsctl set port eth0 tag=10 

添加eth1到指定bridge br0中,同時將其配置成指定VLAN 10的access端口

ovs-svctl add-port br0 eth1 tag=10 

配置端口為Trunk口

在br0上添加port eth1為VLAN 9,10,11的trunk

ovs-vsctl add-port br0 eth1 trunk=9,10,11 

VXLAN 相關

在bridge ovs0中添加遠端IP為10.10.10.1的VXLAN endpoint端口vxlan0

# key=100表示設置vni為100,不設置默認為0 ovs-vsctl add-port ovs0 vxlan0 -- set interface vxlan0 type=vxlan options:remote_ip=10.10.10.1 options:key=100 # 不設key值,vni默認為0 ovs-vsctl add-port ovs0 vxlan0 -- set interface vxlan0 type=vxlan options:remote_ip=10.10.10.1 # key=flow的話,表示該port的vni可以通過openflow的actions來進行設置 # 如: actions=set_field:100->tun_id # 或: actions=set_tunnel:100 ovs-vsctl add-port ovs0 vxlan0 -- set interface vxlan0 type=vxlan options:remote_ip=10.10.10.1 options:key=flow 

其他

Atomic operation

一條命令創建bridge br0的,並添加eth0到br0中

ovs-vsctl add-br br0 -- add-port br0 eth0 

創建 internal port

OVS internal port 可以配置IP地址,普通 port 上配置的IP地址是不起作用的。在 br0 上創建一個internal port in0:

ovs-vsctl add-br br0 in0 -- set interface in0 type=internal ip addr add 10.10.10.10/24 dev in0 # 創建internal port的同時將其設置為VLAN 10的access port ovs-vsctl add-br br0 in1 tag=10 -- set interface in1 type=internal ip addr add 20.20.20.20/24 dev in1 

設置 OpenFlow port id

# 將已在ovs中的端口veth1的OpenFlow端口設置成100 ovs-vsctl set interface veth1 ofport_request=100 # 將端口veth1添加到bridge br0中,並將veth1的OpenFlow端口設置成200 ovs-vsctl add-port br0 veth1 -- set interface veth1 ofport_request=200 

{% admonition note Note %} OpenFlow的端口 id 在設置 flow 的匹配字段 in_port 以及 actions 字段的 output 中都會用到。 
可以通過命令ovs-ofctl show br0來查看 br0 中各端口的 OpenFlow 端口 id,該 id 並不求是按順序的。 {% endadmonition %}

設置OpenFlow版本

ovs-vsctl set bridge br0 protocols=OpenFlow10,OpenFlow12,OpenFlow13 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM