【转】[置顶] OVS常用操作
版权声明:本文为博主原创文章,未经博主允许不得转载。
OVS常用操作:
1.添加网桥:ovs-vsctl add-br 交换机名
2.删除网桥:ovs-vsctl del-br 交换机名
3.添加端口:ovs-vsctl add-port 交换机名 端口名(网卡名)
4.删除端口:ovs-vsctl del-port 交换机名 端口名(网卡名)
5.连接控制器:ovs-vsctl set-controller 交换机名 tcp:IP地址:端口号
6.断开控制器:ovs-vsctl del-controller 交换机名
7.列出所有网桥:ovs-vsctl list-br
8.列出网桥中的所有端口:ovs-vsctl list-ports 交换机名
9.列出所有挂接到网卡的网桥:ovs-vsctl port-to-br 端口名(网卡名)
10.查看open vswitch的网络状态:ovs-vsctl show
11.查看 Open vSwitch 中的端口信息(交换机对应的 dpid,以及每个端口的 OpenFlow 端口编号,端口名称,当前状态等等):ovs-ofctl show 交换机名
12.修改dpid:ovs-vsctl set bridge 交换机名 other_config:datapath-id=新DPID
13.修改端口号:ovs-vsctl set Interface 端口名 ofport_request=新端口号
14.查看交换机中的所有 Table:ovs-ofctl dump-tables ovs-switch
15.查看交换机中的所有流表项:ovs−ofctl dump−flows ovs-switch
16.删除编号为 100 的端口上的所有流表项:ovs-ofctl del-flows ovs-switch “in_port=100”
17.添加流表项(以“添加新的 OpenFlow 条目,修改从端口 p0 收到的数据包的源地址为 9.181.137.1”为例):
ovs-ofctl add-flow ovs-switch “priority=1 idle_timeout=0,in_port=100,actions=mod_nw_src:9.181.137.1,normal”
18.查看 OVS 的版本信息:ovs-appctl –version
19.查看 OVS 支持的 OpenFlow 协议的版本:ovs-ofctl –version
match部分:
flow有很多syntax, 一半来说actions之前都是match的部分,常用的一般是
in_port: switch的端口
dl_src: 源mac地址
dl_dst: 目的mac地址
nw_src: 源IP
nw_dst: 目的ip
dl_type: 以太网协议类型 0x0806是arp packet 0x0800是ip packet
nw_proto: 协议类型,需要和dl_type一起使用,比如dl_type是0x0800,nw_proto=1就表示icmp packet
tp_src: tcp udp源端口
tp_dst: tcp udp目的端口
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
ip Same as dl_type=0x0800.
icmp Same as dl_type=0x0800,nw_proto=1.
tcp Same as dl_type=0x0800,nw_proto=6.
udp Same as dl_type=0x0800,nw_proto=17.
arp Same as dl_type=0x0806.
rarp Same as dl_type=0x8035.
- 1
- 2
- 3
- 4
- 5
- 6
- 1
- 2
- 3
- 4
- 5
- 6
actions:
output:port
controller(key=value) 送到controller作为packet-in 消息,括号内的key value pair可以是:
reason=reason ,reason 可以是action,no_match,invalid_ttl
id=controller-id 默认是0,特殊的controller会有一个16位的id
mod_dl_src:mac
Sets the source Ethernet address to mac.
mod_dl_dst:mac
Sets the destination Ethernet address to mac.
mod_nw_src:ip
Sets the IPv4 source address to ip.
mod_nw_dst:ip
Sets the IPv4 destination address to ip.
mod_tp_src:port
Sets the TCP or UDP source port to port.
mod_tp_dst:port
Sets the TCP or UDP destination port to port.
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
完整设定:
查表
ovs-vsctl list bridge ovs-br
關於 Brdige 及 Port
新增 Brdige
ovs-vsctl add-br ovs-br
在 ovs-br 上對應 interface
ovs-vsctl add-port ovs-br eth0
(1) + (2) 的寫法可為
ovs−vsctl add−br ovs-br -- add−port ovs-br eth0
移除 Bridge
ovs-vsctl del-br ovs-br #如果不存在的話, 會有error log
ovs-vsctl --if-exists del-br ovs-br
更改 ofport (openflow port number) 為 100
ovs-vsctl add-port ovs-br eth0 -- set Interface eth0 ofport_request=100
設定 port 為 internal
ovs-vsctl set Interface eth0 type=internal
關於 Controller
設定 Controller
ovs-vsctl set-controller ovs-br tcp:1.2.3.4:6633
設定 multi controller
ovs-vsctl set-controller ovs-br tcp:1.2.3.4:6633 tcp:5.6.7.8:6633
查詢 Controller 設定
ovs-vsctl show
如果有成功連到 controller 則會顯示 is_connected:true, 反之則未連上
ovs-vsctl get-controller ovs-br
移除 Controller
ovs-vsctl del-controller ovs-br
關於 STP (Spanning Tree Protocol)
開啟 STP
ovs-vsctl set bridge ovs-br stp_enable=true
關閉 STP
ovs-vsctl set bridge ovs-br stp_enable=false
查詢 STP 設定值
ovs-vsctl get bridge ovs-br stp_enable
設定 Priority
ovs−vsctl set bridge br0 other_config:stp-priority=0x7800
設定 Cost
ovs−vsctl set port eth0 other_config:stp-path-cost=10
移除 STP 設定
ovs−vsctl clear bridge ovs-br other_config
關於 Openflow Version
支援 OpenFlow Version 1.3
ovs-vsctl set bridge ovs-br protocols=OpenFlow13
支援 OpenFlow Version 1.3 1.2
ovs-vsctl set bridge ovs-br protocols=OpenFlow12,OpenFlow13
移除 OpenFlow 支援設定
ovs-vsctl clear bridge ovs-br protocols
關於 VLAN
設定 VLAN tag
ovs-vsctl add-port ovs-br vlan3 tag=3 -- set interface vlan3 type=internal
移除 VLAN
ovs-vsctl del-port ovs-br vlan3
查詢 VLAN
ovs-vsctl show
ifconfig vlan3
設定 Vlan trunk
ovs-vsctl add-port ovs-br eth0 trunk=3,4,5,6
設定已 add 的 port 為 access port, vlan id 9
ovs-vsctl set port eth0 tag=9
ovs-ofctl add-flow 設定 vlan 100
ovs-ofctl add-flow ovs-br in_port=1,dl_vlan=0xffff,actions=mod_vlan_vid:100,output:3
ovs-ofctl add-flow ovs-br in_port=1,dl_vlan=0xffff,actions=push_vlan:0x8100,set_field:100-\>vlan_vid,output:3
ovs-ofctl add-flow 拿掉 vlan tag
ovs-ofctl add-flow ovs1 in_port=3,dl_vlan=100,actions=strip_vlan,output:1
two_vlan example
ovs-ofctl add-flow pop-vlan
ovs-ofctl add-flow ovs-br in_port=3,dl_vlan=0xffff,actions=pop_vlan,output:1
關於 GRE Tunnel
設定 GRE tunnel
ovs−vsctl add−port ovs-br ovs-gre -- set interface ovs-gre type=gre options:remote_ip=1.2.3.4
查詢 GRE Tunnel
ovs-vsctl show
關於 Dump flows
Dumps OpenFlow flows 不含 hidden flows (常用)
ovs-ofctl dump-flows ovs-br
Dumps OpenFlow flows 包含 hidden flows
ovs-appctl bridge/dump-flows ovs-br
Dump 特定 bridge 的 datapath flows 不論任何 type
ovs-appctl dpif/dump-flows ovs-br
Dump 在 Linux kernel 裡的 datapath flow table (常用)
ovs-dpctl dump-flows [dp]
Top like behavior for ovs-dpctl dump-flows
ovs-dpctl-top
XenServer 開啓 OpenvSwitch 方式
檢查開啟與否
service openvswitch status
開啓
xe-switch-network-backend openvswitch
關閉
xe-switch-network-backend bridge
關於 Log
查詢 log level list
ovs-appctl vlog/list
設定 log level (以 stp 設定 file 為 dbg level 為例)
ovs-appctl vlog/set stp:file:dbg
ovs-appctl vlog/set {module name}:{console, syslog, file}:{off, emer, err, warn, info, dbg}
關於 Fallback
Controller connection: false 的時候, 會自動調成 legacy switch mode
ovs-vsctl set-fail-mode ovs-br standalone
無論 Controller connection status 為何, 都必須通過 OpenFlow 來進行網路行為 (default)
ovs-vsctl set-fail-mode ovs-br secure
移除
ovs-vsctl del-fail-mode ovs-br
查詢
ovs-vsctl get-fail-mode ovs-br
關於 sFlow
查詢
ovs-vsctl list sflow
新增
Set sFlow
刪除
ovs-vsctl -- clear Bridge ovs-br sflow
關於 NetFlow
查詢
ovs-vsctl list netflow
新增
Set NetFlow
刪除
ovs-vsctl -- clear Bridge ovs-br netflow
設定 Out-of-band 和 in-band
查詢
ovs-vsctl get controller ovs-br connection-mode
Out-of-band
ovs-vsctl set controller ovs-br connection-mode=out-of-band
In-band (default)
ovs-vsctl set controller ovs-br connection-mode=in-band
移除 hidden flow
ovs-vsctl set bridge br0 other-config:disable-in-band=true
關於 ssl
查詢
ovs-vsctl get-ssl
設定
ovs-vsctl set-ssl sc-privkey.pem sc-cert.pem cacert.pem
OpenvSwitch Lab 6$ TLS SSL
刪除
ovs-vsctl del-ssl
關於 SPAN
詳細設定
ovs-vsctl add-br ovs-br
ovs-vsctl add-port ovs-br eth0
ovs-vsctl add-port ovs-br eth1
ovs-vsctl add-port ovs-br tap0 \
– –id=@p get port tap0 \
– –id=@m create mirror name=m0 select-all=true output-port=@p \
– set bridge ovs-br mirrors=@m
將 ovs-br 上 add-port {eth0,eth1} mirror 至 tap0
刪除
ovs-vsctl clear bridge ovs-br mirrors # 關於 Table
查 table ovs-ofctl dump-tables ovs-br
關於 Group Table
參考 hwchiu - Multipath routing with Group table at mininet
建立 Group id 及對應的 bucket
ovs-ofctl -O OpenFlow13 add-group ovs-br group_id=5566,type=select,bucket=output:1,bucket=output:2,bucket=output:3
type 共有 All, Select, Indirect, FastFailover, 詳細規格
使用 Group Table
ovs-ofctl -O OpenFlow13 add-flow ovs-br in_port=4,actions=group:5566
關於 VXLAN
參考 rascov - Bridge Remote Mininets using VXLAN
建立 VXLAN Network ID (VNI) 和指定的 OpenFlow port number, eg: VNI=5566, OF_PORT=9
ovs-vsctl set interface vxlan type=vxlan option:remote_ip=x.x.x.x option:key=5566 ofport_request=9
VNI flow by flow
ovs-vsctl set interface vxlan type=vxlan option:remote_ip=140.113.215.200 option:key=flow ofport_request=9
設定 VXLAN tunnel id
ovs-ofctl add-flow ovs-br in_port=1,actions=set_field:5566->tun_id,output:2
ovs-ofctl add-flow s1 in_port=2,tun_id=5566,actions=output:1
關於 OVSDB Manager
參考 OVSDB Integration:Mininet OVSDB Tutorial
Active Listener 設定
ovs-vsctl set-manager tcp:1.2.3.4:6640
Passive Listener 設定
ovs-vsctl set-manager ptcp:6640
OpenFlow Trace
Generate pakcet trace
ovs-appctl ofproto/trace ovs-br in_port=1,dl_src=00:00:00:00:00:01,dl_dst=00:00:00:00:00:02 -generate
其它
查詢 OpenvSwitch 版本
ovs-ofctl -V
查詢下過的指令歷史記錄
ovsdb-tool show-log [-mmm]