首页 > 代码库 > OVS常用操作「转」

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=http://www.mamicode.com/00:00:00:00:00:01,dl_dst=00:00:00:00:00:02 -generate>

其它

查詢 OpenvSwitch 版本
    ovs-ofctl -V
查詢下過的指令歷史記錄
    ovsdb-tool show-log [-mmm]

 

 
 

OVS常用操作「转」