• 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  
    

     

     
  • 相关阅读:
    python——二分查找算法
    python实现二分查找
    git merge 与 git rebase的区别
    mysql查询表死锁和结束死锁的方法
    mysql的undo log和redo log
    Python中给List添加元素的4种方法
    输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字
    Python中生成器和迭代器的区别(代码在Python3.5下测试):
    mysql锁
    每天一个linux命令(46):vmstat命令
  • 原文地址:https://www.cnblogs.com/wangjq19920210/p/8999887.html
Copyright © 2020-2023  润新知