-
基本工具
-
ovs-vsctl
-
1.1.1添加
添加桥
ovs-vsctl add-br br0 -- set bridge br0 datapath_typ=netdev
添加普通端口
ovs-vsctl add-port br0 ens3f0
添加vxlan口
ovs-vsctl add-port br0 vxlan1 -- set interface vxlan1 type=vxlan options:key=flow options:local_ip=10.1.1.11 options:remote_ip=flow
添加dpdk物理口
ovs-vsctl add-port br0 nic2 -- set interface nic2 type=dpdkbond0 options:dpdk-devargs="0000:96:00.0"
添加dpdk虚机口
ovs-vsctl add-port br0 vhu3 -- set interface vhu3 type=dpdkvhostuserclient options:vhost-server-path="/var/run/openvswitch/vhu3"
添加bond口
ovs-vsctl add-bond br0 dpdkbond0 nic1 nic2 -- set interface nic1 type=dpdk options:dpdk-devargs="0000:32:00.0" -- set interface nic2 type=dpdk options:dpdk-devargs="0000:98:00.0"
添加控制器
ovs-vsctl set-controller br0 "tcp:10.4.8.45:6633"
ovs-vsctl set-controller br0 "tcp:10.4.8.45:6633" "tcp:10.4.8.46:6633"
添加Manager
ovs-vsctl set-manager "ptcp:8890"
添加dpdk-init
ovs-vsctl add Open_vSwitch . other_config dpdk-init="true"
添加dpdk-socket-mem(重启生效)
ovs-vsctl add Open_vSwitch . other_config dpdk-socket-mem=’"4096,4096"’
添加pmd-cpu-mask
ovs-vsctl add Open_vSwitch . other_config pmd-cpu-mask="3ffc000000"
1.1.2 删除
删除端口
ovs-vsctl del-port [br0] ens3f0
删除桥
ovs-vsctl del-br br0
删除控制器
ovs-vsctl del-controller br0
删除Manager
ovs-vsctl del-manager
1.1.3修改
修改dpdk端口mtu
ovs-vsctl set interface nic1 mtu_request=9000
修改fail mode
ovs-vsctl set-fail-mode br0 secure
修改桥的datapath_type
ovs-vsctl set bridge br0 datapath_typ=netdev
修改bond模式
ovs-vsctl set port dpdkbond0 bond-mode=balance-tcp
修改lacp
ovs-vsctl set port dpdkbond0 lacp=active
修改dpdk-init
ovs-vsctl set Open_vSwitch . other_config:dpdk-init="true"
修改dpdk-socket-mem
ovs-vsctl set Open_vSwitch . other_config:dpdk-socket-mem="4096,4096"
修改pmd-cpu-mask
ovs-vsctl set Open_vSwitch . other_config:pmd-cpu-mask="3ffc000000"
1.1.4查询
查询桥基本情况
ovs-vsctl show
查询ovs总体配置
ovs-vsctl list Open_vSwitch
查看桥具体信息
ovs-vsctl list bridge br-int
查看port具体信息
ovs-vsctl list port dpdkbond0
查看interface具体信息
ovs-vsctl list interface vhu2
查看controller具体信息
ovs-vsctl list controller
-
ovs-ofctl
查询所有流表
ovs-ofctl -Oopenflow15 dump-flows br-int
按照条件查询流表
ovs-ofctl -Oopenflow15 dump-flows br-int table=200
ovs-ofctl -Oopenflow15 dump-flows br-int reg5=0x77103
ovs-ofctl -Oopenflow15 dump-flows br-int table=140,reg5=0x77103
ovs-ofctl -Oopenflow15 dump-flows br-int out_port=vxlan1
ovs-ofctl -Oopenflow15 dump-flows br-int out_group=100
ovs-ofctl -Oopenflow15 dump-flows br-int ipv6
ovs-ofctl -Oopenflow15 dump-flows br-int dl_dst=fe:80:3e:00:00:02
查询所有流表个数
ovs-ofctl -Oopenflow15 dump-aggregate br-int
按照条件查询流表个数
ovs-ofctl -Oopenflow15 dump-aggregate br-int table=140
ovs-ofctl -Oopenflow15 dump-aggregate br-int reg5=0x77103
ovs-ofctl -Oopenflow15 dump-aggregate br-int table=140,reg5=0x77103
ovs-ofctl -Oopenflow15 dump-aggregate br-int out_port=vxlan1
ovs-ofctl -Oopenflow15 dump-aggregate br-int out_group=100
ovs-ofctl -Oopenflow15 dump-aggregate br-int dl_dst=fe:80:3e:00:00:02
ovs-ofctl -Oopenflow15 dump-aggregate br-int ipv6
查询组表
ovs-ofctl -Oopenflow15 dump-groups br-int
查询组表状态
ovs-ofctl -Oopenflow15 dump-group-stats br-int
查询meter表
ovs-ofctl -Oopenflow15 dump-meters br-int
查询meter表状态
ovs-ofctl -Oopenflow15 meter-stats br-int
查询ct-limit
ovs-ofctl -Oopenflow15 dump-ct-limit br-int
查看所有port状态
ovs-ofctl -Oopenflow15 show br-int
1.3 ovs-appctl
查看支持的命令
ovs-appctl list-commands
查看bond状态
ovs-appctl bond/show
查看所有openflow流表包含隐藏流表
ovs-appctl bridge/dump-flows br-int
查看ovs最大会话数
ovs-appctl dpctl/ct-get-maxconns
查看ovs当前会话数
ovs-appctl dpctl/ct-get-nconns
查看所有会话
ovs-appctl dpctl/dump-conntrack
查看ct-limit使用情况
ovs-appctl dpctl/dump-ct-limits
查看datapath流表
ovs-appctl dpctl/dump-flows
查看分片报文情况
ovs-appctl dpctl/ipf-get-status
查看端口datapatch配置
ovs-appctl dpctl/show
查看端口报文计数
ovs-appctl dpctl/show -s
查看pmd状态
ovs-appctl dpif-netdev/pmd-perf-show
ovs-appctl dpif-netdev/pmd-rxq-show
ovs-appctl dpif-netdev/pmd-stats-show
查看openflow端口port number 和datapath port number
ovs-appctl dpif/show
查看lacp状态
ovs-appctl lacp/show
ovs-appctl lacp/show-stats
查看mempool
ovs-appctl netdev-dpdk/get-mempool-info
Down/up dpdk网卡
ovs-appctl netdev-dpdk/set-admin-state nic1 down|up
查看ovs路由表
ovs-appctl ovs/route/show
查看ovs mac表
ovs-appctl tnl/arp/show
ovs-appctl tnl/neigh/show
查看upcall信息
ovs-appctl upcall/show
流表追踪
ofproto/trace {[dp_name] odp_flow | bridge br_flow} [OPTIONS...] [-generate|packet]
ovs-appctl ofproto/trace br-int "in_port=port-g3wilui20m" "fa163e313c83fa163e5350da080045000034263c40004006ff6dc0a80075a9fea9feca26161de4ed37bd5481615c801001f54a6600000101080a5cbc9d8521f04649"
带状态的流表追踪
在vxlan口进行流表追踪,需要添加tun_id信息,tun_id信息可以从bond口抓包查看到vni值,或者从datapath流表中获取到tun_id。在添加tun_id信息的时候,不能用报文16进制码进行流表追踪,只能指定报文特性信息进行追踪。报文特性信息可以先不添加tun_id,用16进程码进行流表追踪,追踪结果最下面的内容就是报文特性信息,将报文特征信息复制出来,然后添加tun_id信息就可以追踪到正确的流表信息了。
ovs-appctl ofproto/trace br-int tun_id=0x9eb27,tcp,in_port=vxlan1,vlan_tci=0x0000,dl_src=fa:16:3e:f3:6d:cc,dl_dst=fa:16:3e:cb:4b:b7,nw_src=192.168.0.88,nw_dst=192.168.0.92,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=9001,tp_dst=59118 --ct-next "trk,est"
-
抓包工具
Ovs-dpdk环境下抓包工具主要是ovs-tcpdump,其本质调用的是内核tcpdump抓包工具,可一定程度参考tcpdump的使用方法。
tcpdump --help
-
dpdkbond0口抓包
抓包如果有vlan,过滤报文的时候需要加vlan
抓vxlan报文
ovs-tcpdump -i dpdkbond0 -nne vlan and udp and port 4789
ovs-tcpdump -i dpdkbond0 -nne udp and port 4789
抓lacp报文
ovs-tcpdump -i dpdkbond0 -e ether proto 0x8809
按照vxlan内层报文信息过滤抓包
可以参考数据面工具中的cn-vxdump工具,该工具封装了内层报文过滤的方式。
示例:根据内层源mac和4层协议类型抓包
ovs-tcpdump -i dpdkbond0 udp and udp[$((8+8+6+2)):4] = 0x3a99130c and udp[$((8+8+14+9)):1] = 6 -nne
-
vxlan口抓包
ovs-tcpdump -i vxlan1 -nne host 192.168.0.99 and port 9001
-
虚机口抓包
ovs-tcpdump -i port-f85vg9n7sq -nne tcp
2.4抓包写入文件
ovs-tcpdump -i port-f85vg9n7sq -nne tcp -w 6.pcap
2.5解析报文
ovs-tcpdump抓到的报文可以拷贝出来直接用wireshark打开查看,也可以用命令来解析。
ovs-pcap 将报文解析成16进制,该命令在上述流表追踪中可以用到。
ovs-pcap icmp.pcap
tcpdump -r icmp.pcap -nne 将报文信息打印出来。
-
ovs状态检查
如果可以获取到ovs-vaild-check工具,可以先用跑一下这个工具,如果没有,可以按照以下步骤排查基本问题。
3.1检查ovs进程状态
ps -ef | grep ovs
正常情况下,ovs具有ovsdb-server和ovs-vswitchd两个进程。这个两个进程多了或者少了,进程状态都出现问题了。
3.2 检查ovs基本配置
ovs-vsctl show
桥上端口没有error报错,有vxlan,有物理口。
3.3 检查物理口连接状态
ovs-appctl bond/show
3.4 检查虚机口link状态
ovs-vsctl list interfac port-rf0qb51w95