ovs命令总结

一、ovs 笔记

1. 控制管理类

  1. 查看网桥和端口
ovs-vsctl show
  1. 创建一个网桥
ovs-vsctl add-br br0
ovs-vsctl set bridge br0 datapath_type=netdev
  1. 添加/删除一个端口
# for system interfaces
ovs-vsctl add-port br0 eth1
ovs-vsctl del-port br0 eth1
# for DPDK
ovs-vsctl add-port br0 dpdk1 -- set interface dpdk1 type=dpdk
options:dpdk-devargs=0000:01:00.0
# for DPDK bonds
ovs-vsctl add-bond br0 dpdkbond0 dpdk1 dpdk2 \
-- set interface dpdk1 type=dpdk options:dpdk-devargs=0000:01:00.0 \
-- set interface dpdk2 type=dpdk options:dpdk-devargs=0000:02:00.0
  1. 设置/清除网桥的 openflow 协议版本
ovs-vsctl set bridge br0 protocols=OpenFlow13
ovs-vsctl clear bridge br0 protocols
  1. 查看某网桥当前流表
ovs-ofctl dump-flows br0
ovs-ofctl -O OpenFlow13 dump-flows br0
ovs-appctl bridge/dump-flows br0
  1. 设置/删除控制器
ovs-vsctl set-controller br0 tcp:1.2.3.4:6633
ovs-vsctl del-controller br0
  1. 查看控制器列表
ovs-vsctl list controller
  1. 设置/删除被动连接控制器
ovs-vsctl set-manager tcp:1.2.3.4:6640
ovs-vsctl get-manager
ovs-vsctl del-manager
  1. 设置/移除可选选项
ovs-vsctl set Interface eth0 options:link_speed=1G
ovs-vsctl remove Interface eth0 options link_speed
  1. 设置 fail 模式,支持 standalone 或者 secure
  • standalone(default):清除所有控制器下发的流表,ovs 自己接管
  • secure:按照原来流表继续转发
ovs-vsctl del-fail-mode br0
ovs-vsctl set-fail-mode br0 secure
ovs-vsctl get-fail-mode br0
  1. 查看接口 id 等
ovs-appctl dpif/show
  1. 查看接口统计
ovs-ofctl dump-ports br0

2流表类

2.1 流表操作
  1. 添加普通流表
ovs-ofctl add-flow br0 in_port=1,actions=output:2
  1. 删除所有流表
ovs-ofctl del-flows br0
  1. 按匹配项来删除流表
ovs-ofctl del-flows br0 "in_port=1"
2.2 匹配项
  1. 匹配 vlan tag,范围为 0-4095
ovs-ofctl add-flow br0
priority=401,in_port=1,dl_vlan=777,actions=output:2
  1. 匹配 vlan pcp,范围为 0-7
ovs-ofctl add-flow br0
priority=401,in_port=1,dl_vlan_pcp=7,actions=output:2
  1. 匹配源/目的 MAC
ovs-ofctl add-flow br0
in_port=1,dl_src=00:00:00:00:00:01/00:00:00:00:00:01,actions=output:2
ovs-ofctl add-flow br0
in_port=1,dl_dst=00:00:00:00:00:01/00:00:00:00:00:01,actions=output:2
  1. 匹配以太网类型,范围为 0-65535
ovs-ofctl add-flow br0 in_port=1,dl_type=0x0806,actions=output:2
  1. 匹配源/目的 IP
    条件:指定 dl_type=0x0800,或者 ip/tcp
ovs-ofctl add-flow br0
ip,in_port=1,nw_src=10.10.0.0/16,actions=output:2
ovs-ofctl add-flow br0
ip,in_port=1,nw_dst=10.20.0.0/16,actions=output:2
  1. 匹配协议号,范围为 0-255
    条件:指定 dl_type=0x0800 或者 ip/ICMP
ovs-ofctl add-flow br0 ip,in_port=1,nw_proto=1,actions=output:2
  1. 匹配 IP ToS/DSCP,tos 范围为 0-255,DSCP 范围为 0-63
    条件:指定 dl_type=0x0800/0x86dd,并且 ToS 低 2 位会被忽略(DSCP 值为
    ToS 的高 6 位,并且低 2 位为预留位)
ovs-ofctl add-flow br0 ip,in_port=1,nw_tos=68,actions=output:2
ovs-ofctl add-flow br0 ip,in_port=1,ip_dscp=62,actions=output:2
  1. 匹配 IP ecn 位,范围为 0-3
    条件:指定 dl_type=0x0800/0x86dd
ovs-ofctl add-flow br0 ip,in_port=1,ip_ecn=2,actions=output:2
  1. 匹配 IP TTL,范围为 0-255
ovs-ofctl add-flow br0 ip,in_port=1,nw_ttl=128,actions=output:2
  1. 匹配 tcp/udp,源/目的端口,范围为 0-65535
# 匹配源 tcp 端口 179
ovs-ofctl add-flow br0 tcp,tcp_src=179/0xfff0,actions=output:2
# 匹配目的 tcp 端口 179
ovs-ofctl add-flow br0 tcp,tcp_dst=179/0xfff0,actions=output:2
# 匹配源 udp 端口 1234
ovs-ofctl add-flow br0 udp,udp_src=1234/0xfff0,actions=output:2
# 匹配目的 udp 端口 1234
ovs-ofctl add-flow br0 udp,udp_dst=1234/0xfff0,actions=output:2
  1. 匹配 tcp flags
    tcp flags=fin,syn,rst,psh,ack,urg,ece,cwr,ns
ovs-ofctl add-flow br0 tcp,tcp_flags=ack,actions=output:2
  1. 匹配 icmp code,范围为 0-255
    条件:指定 icmp
ovs-ofctl add-flow br0 icmp,icmp_code=2,actions=output:2
  1. 匹配 vlan TCI
    TCI 低 12 位为 vlan id,高 3 位为 priority,例如 tci=0xf123 则 vlan_id 为 0x123
    和 vlan_pcp=7
ovs-ofctl add-flow br0 in_port=1,vlan_tci=0xf123,actions=output:2
  1. 匹配 mpls label
    条件:指定 dl_type=0x8847/0x8848
ovs-ofctl add-flow br0 mpls,in_port=1,mpls_label=7,actions=output:2
  1. 匹配 mpls tc,范围为 0-7
    条件:指定 dl_type=0x8847/0x8848
ovs-ofctl add-flow br0 mpls,in_port=1,mpls_tc=7,actions=output:2
  1. 匹配 tunnel id,源/目的 IP
# 匹配 tunnel id
ovs-ofctl add-flow br0 in_port=1,tun_id=0x7/0xf,actions=output:2
# 匹配 tunnel 源 IP
ovs-ofctl add-flow br0
in_port=1,tun_src=192.168.1.0/255.255.255.0,actions=output:2
# 匹配 tunnel 目的 IP
ovs-ofctl add-flow br0
in_port=1,tun_dst=192.168.1.0/255.255.255.0,actions=output:2
2.3 指令动作
  1. 动作为出接口
# 从指定接口转发出去
ovs-ofctl add-flow br0 in_port=1,actions=output:2
  1. 动作为指定 group
# group id 为已创建的 group table
ovs-ofctl add-flow br0 in_port=1,actions=group:666
  1. 动作为 normal
# 转为 L2/L3 处理流程
ovs-ofctl add-flow br0 in_port=1,actions=normal
  1. 动作为 flood
# 从所有物理接口转发出去,除了入接口和已关闭 flooding 的接口
ovs-ofctl add-flow br0 in_port=1,actions=flood
  1. 动作为 all
# 从所有物理接口转发出去,除了入接口
ovs-ofctl add-flow br0 in_port=1,actions=all
  1. 动作为 local
# 一般是转发给本地网桥
ovs-ofctl add-flow br0 in_port=1,actions=local
  1. 动作为 in_port
# 从入接口转发回去
ovs-ofctl add-flow br0 in_port=1,actions=in_port
  1. 动作为 controller
# 以 packet-in 消息上送给控制器
ovs-ofctl add-flow br0 in_port=1,actions=controller
  1. 动作为 drop
# 丢弃数据包操作
ovs-ofctl add-flow br0 in_port=1,actions=drop
  1. 动作为 mod_vlan_vid
# 修改报文的 vlan id,该选项会使 vlan_pcp 置为 0
ovs-ofctl add-flow br0 in_port=1,actions=mod_vlan_vid:8,output:2
  1. 动作为 mod_vlan_pcp
# 修改报文的 vlan 优先级,该选项会使 vlan_id 置为 0
ovs-ofctl add-flow br0 in_port=1,actions=mod_vlan_pcp:7,output:2
  1. 动作为 strip_vlan
# 剥掉报文内外层 vlan tag
ovs-ofctl add-flow br0 in_port=1,actions=strip_vlan,output:2
  1. 动作为 push_vlan
# 在报文外层压入一层 vlan tag,需要使用 openflow1.1 以上版本兼容
ovs-ofctl add-flow -O OpenFlow13 br0 in_port=1,actions=push_vlan:0x8100,set_field:4097-\>vlan_vid,output:2
# set field 值为 4096+vlan_id,并且 vlan 优先级为 0,即 4096-8191,对应的vlan_id 为 0-4095
  1. 动作为 push_mpls
# 修改报文的 ethertype,并且压入一个 MPLS LSE
ovs-ofctl add-flow br0 in_port=1,actions=push_mpls:0x8847,set_field:10-\>mpls_label,output:2
  1. 动作为 pop_mpls
# 剥掉最外层 mpls 标签,并且修改 ethertype 为非 mpls 类型
ovs-ofctl add-flow br0 mpls,in_port=1,mpls_label=20,actions=pop_mpls:0x0800,output:2
  1. 动作为修改源/目的 MAC,修改源/目的 IP
# 修改源 MAC
ovs-ofctl add-flow br0
in_port=1,actions=mod_dl_src:00:00:00:00:00:01,output:2
# 修改目的 MAC
ovs-ofctl add-flow br0
in_port=1,actions=mod_dl_dst:00:00:00:00:00:01,output:2
# 修改源 IP
ovs-ofctl add-flow br0
in_port=1,actions=mod_nw_src:192.168.1.1,output:2
# 修改目的 IP
ovs-ofctl add-flow br0
in_port=1,actions=mod_nw_dst:192.168.1.1,output:2
  1. 动作为修改 TCP/UDP/SCTP 源目的端口
# 修改 TCP 源端口
ovs-ofctl add-flow br0 tcp,in_port=1,actions=mod_tp_src:67,output:2
# 修改 TCP 目的端口
ovs-ofctl add-flow br0 tcp,in_port=1,actions=mod_tp_dst:68,output:2
# 修改 UDP 源端口
ovs-ofctl add-flow br0 udp,in_port=1,actions=mod_tp_src:67,output:2
# 修改 UDP 目的端口
ovs-ofctl add-flow br0 udp,in_port=1,actions=mod_tp_dst:68,output:2
  1. 动作为 mod_nw_tos
# 条件:指定 dl_type=0x0800
# 修改 ToS 字段的高 6 位,范围为 0-255,值必须为 4 的倍数,并且不会去修改 ToS 低 2 位 ecn 值
ovs-ofctl add-flow br0 ip,in_port=1,actions=mod_nw_tos:68,output:2
  1. 动作为 mod_nw_ecn
# 条件:指定 dl_type=0x0800,需要使用 openflow1.1 以上版本兼容
# 修改 ToS 字段的低 2 位,范围为 0-3,并且不会去修改 ToS 高 6 位的 DSCP 值
ovs-ofctl add-flow br0 ip,in_port=1,actions=mod_nw_ecn:2,output:2
  1. 动作为 mod_nw_ttl
# 修改 IP 报文 ttl 值,需要使用 openflow1.1 以上版本兼容
ovs-ofctl add-flow -O OpenFlow13 br0 in_port=1,actions=mod_nw_ttl:6,output:2
  1. 动作为 dec_ttl
# 对 IP 报文进行 ttl 自减操作
ovs-ofctl add-flow br0 in_port=1,actions=dec_ttl,output:2
  1. 动作为 set_mpls_label
# 对报文最外层 mpls 标签进行修改,范围为 20bit 值
ovs-ofctl add-flow br0 in_port=1,actions=set_mpls_label:666,output:2
  1. 动作为 set_mpls_tc
# 对报文最外层 mpls tc 进行修改,范围为 0-7
ovs-ofctl add-flow br0 in_port=1,actions=set_mpls_tc:7,output:2
  1. 动作为 set_mpls_ttl
# 对报文最外层 mpls ttl 进行修改,范围为 0-255
ovs-ofctl add-flow br0 in_port=1,actions=set_mpls_ttl:255,output:2
  1. 动作为 dec_mpls_ttl
# 对报文最外层 mpls ttl 进行自减操作
ovs-ofctl add-flow br0 in_port=1,actions=dec_mpls_ttl,output:2
  1. 动作为 move NXM 字段
# 使用 move 参数对 NXM 字段进行操作
# 将报文源 MAC 复制到目的 MAC 字段,并且将源 MAC 改为 00:00:00:00:00:01
ovs-ofctl add-flow br0 in_port=1,actions=move:NXM_OF_ETH_SRC[]-\>NXM_OF_ETH_DST[],mod_dl_src:00:00:00:00:00:01,output:2
  1. 动作为 load NXM 字段
# 使用 load 参数对 NXM 字段进行赋值操作
# push mpls label,并且把 10(0xa)赋值给 mpls label
ovs-ofctl add-flow br0 in_port=1,actions=push_mpls:0x8847,load:0xa-
\> oXM_OF_MPLS_LABEL[],output:2
# 对目的 MAC 进行赋值
ovs-ofctl add-flow br0 in_port=1,actions=load:0x001122334455-\> oXM_OF_ETH_DST[],output:2
  1. 动作为 pop_vlan
# 弹出报文最外层 vlan tag
ovs-ofctl add-flow br0 in_port=1,dl_type=0x8100,dl_vlan=777,actions=pop_vlan,output:2

2. ovs-dpdk使用VXLAN隧道配置

step1:

ovs-vsctl add-br br0 -- set Bridge br-int datapath_type=netdev -- br-set-external-id br-int bridge-id br-int -- set bridge br-int fail-mode=standalone

step2:

ovs-vsctl add-port br0 vxlan0 -- set Interface vxlan0 type=vxlan options:local_ip=x.x.x.x options:remote_ip=x.x.x.x options:key=120
ovs-vsctl add-port br-int <vf代表口> -- set Interface <vf代表口> type=dpdk options:dpdk-devargs=<物理网卡pci地址>,representor=[0]

持续更新中(有一些在书中搬运),联系邮箱947261733@qq.com

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值