zoukankan      html  css  js  c++  java
  • ovs vtep 源码

     

        def add_tunnel(self, tunnel, tunnel_key):
            global tun_id
            vlog.info("adding tunnel %s" % tunnel)
            encap, ip = tunnel.split("/")
    
            if encap != "vxlan_over_ipv4":
                vlog.warn("unsupported tunnel format %s" % encap)
                return
    
            tun_id += 1
            tun_name = "vx" + str(tun_id)
    
            ovs_vsctl("add-port %s %s -- set Interface %s type=vxlan "
                      "options:key=%s options:remote_ip=%s"
                      % (self.short_name, tun_name, tun_name, tunnel_key, ip))
    
            for i in range(10):
                port_no = ovs_vsctl("get Interface %s ofport" % tun_name)
                if port_no != "-1":
                    break
                elif i == 9:
                    vlog.warn("couldn't create tunnel %s" % tunnel)
                    ovs_vsctl("del-port %s %s" % (self.short_name, tun_name))
                    return
    
                # Give the system a moment to allocate the port number
                time.sleep(0.5)
    
            self.tunnels[tunnel] = (port_no, tun_name, ip)
    
            add_bfd(ip)
    
            ovs_ofctl("add-flow %s table=0,priority=1000,in_port=%s,"
                      "actions=resubmit(,1)"
                      % (self.short_name, port_no))
    [root@kunpeng82 scripts]# ./ovs-vtep -h
    usage: ovs-vtep [-h] [--root-prefix DIR] [--version] [--log-file [LOG_FILE]]
                    [-v [VERBOSE [VERBOSE ...]]] [--detach] [--no-chdir]
                    [--monitor] [--pidfile [PIDFILE]] [--overwrite-pidfile]
                    PS-NAME
    
    positional arguments:
      PS-NAME               Name of physical switch.
    
    optional arguments:
      -h, --help            show this help message and exit
      --root-prefix DIR     Use DIR as alternate root directory (for testing).
      --version             show program's version number and exit
    
    Logging Options:
      --log-file [LOG_FILE]
                            Enables logging to a file. Default log file is used if
                            LOG_FILE is omitted.
      -v [VERBOSE [VERBOSE ...]], --verbose [VERBOSE [VERBOSE ...]]
                            Sets logging levels, see ovs-vswitchd(8). Defaults to
                            dbg.
    
    Daemon Options:
      --detach              Run in background as a daemon.
      --no-chdir            Do not chdir to '/'.
      --monitor             Monitor ovs-vtep process.
      --pidfile [PIDFILE]   Create pidfile (default /var/run/ovs-vtep.pid).
      --overwrite-pidfile   With --pidfile, start even if already running.
    [root@kunpeng82 scripts]# 
    [root@kunpeng82 scripts]#  vtep-ctl -h
    vtep-ctl: VTEP configuration utility
    usage: vtep-ctl [OPTIONS] COMMAND [ARG...]
    
    VTEP commands:
      show                        print overview of database contents
    
    Manager commands:
      get-manager                 print the managers
      del-manager                 delete the managers
      [--inactivity-probe=MSECS]
      set-manager TARGET...       set the list of managers to TARGET...
    
    Physical Switch commands:
      add-ps PS                   create a new physical switch named PS
      del-ps PS                   delete PS and all of its ports
      list-ps                     print the names of all the physical switches
      ps-exists PS                exit 2 if PS does not exist
    
    Port commands:
      list-ports PS               print the names of all the ports on PS
      add-port PS PORT            add network device PORT to PS
      del-port PS PORT            delete PORT from PS
    
    Logical Switch commands:
      add-ls LS                   create a new logical switch named LS
      del-ls LS                   delete LS and all of its ports
      list-ls                     print the names of all the logical switches
      ls-exists LS                exit 2 if LS does not exist
      bind-ls PS PORT VLAN LS     bind LS to VLAN on PORT
      unbind-ls PS PORT VLAN      unbind logical switch on VLAN from PORT
      list-bindings PS PORT       list bindings for PORT on PS
      set-replication-mode LS MODE  set replication mode on LS
      get-replication-mode LS       get replication mode on LS
    
    Logical Router commands:
      add-lr LR                   create a new logical router named LR
      del-lr LR                   delete LR
      list-lr                     print the names of all the logical routers
      lr-exists LR                exit 2 if LR does not exist
    
    MAC binding commands:
      add-ucast-local LS MAC [ENCAP] IP   add ucast local entry in LS
      del-ucast-local LS MAC              del ucast local entry from LS
      add-mcast-local LS MAC [ENCAP] IP   add mcast local entry in LS
      del-mcast-local LS MAC [ENCAP] IP   del mcast local entry from LS
      clear-local-macs LS                 clear local mac entries
      list-local-macs LS                  list local mac entries
      add-ucast-remote LS MAC [ENCAP] IP  add ucast remote entry in LS
      del-ucast-remote LS MAC             del ucast remote entry from LS
      add-mcast-remote LS MAC [ENCAP] IP  add mcast remote entry in LS
      del-mcast-remote LS MAC [ENCAP] IP  del mcast remote entry from LS
      clear-remote-macs LS                clear remote mac entries
      list-remote-macs LS                 list remote mac entries
    
    Database commands:
      list TBL [REC]              list RECord (or all records) in TBL
      find TBL CONDITION...       list records satisfying CONDITION in TBL
      get TBL REC COL[:KEY]       print values of COLumns in RECord in TBL
      set TBL REC COL[:KEY]=VALUE set COLumn values in RECord in TBL
      add TBL REC COL [KEY=]VALUE add (KEY=)VALUE to COLumn in RECord in TBL
      remove TBL REC COL [KEY=]VALUE  remove (KEY=)VALUE from COLumn
      clear TBL REC COL           clear values from COLumn in RECord in TBL
      create TBL COL[:KEY]=VALUE  create and initialize new record
      destroy TBL REC             delete RECord from TBL
      wait-until TBL REC [COL[:KEY]=VALUE]  wait until condition is true
    Potentially unsafe database commands require --force option.
    Database commands may reference a row in each table in the following ways:
      ACL:
        by UUID
      ACL_entry:
        by UUID
      Arp_Sources_Local:
        by UUID
      Arp_Sources_Remote:
        by UUID
      Global:
        by UUID
        as "."
      Logical_Binding_Stats:
        by UUID
      Logical_Router:
        by UUID
        by "name"
      Logical_Switch:
        by UUID
        by "name"
      Manager:
        by UUID
        by "target"
      Mcast_Macs_Local:
        by UUID
      Mcast_Macs_Remote:
        by UUID
      Physical_Locator:
        by UUID
      Physical_Locator_Set:
        by UUID
      Physical_Port:
        by UUID
        by "name"
      Physical_Switch:
        by UUID
        by "name"
      Tunnel:
        by UUID
      Ucast_Macs_Local:
        by UUID
      Ucast_Macs_Remote:
        by UUID
    
    Options:
      --db=DATABASE               connect to DATABASE
                                  (default: unix:/var/run/openvswitch/db.sock)
      -t, --timeout=SECS          wait at most SECS seconds
      --dry-run                   do not commit changes to database
      --oneline                   print exactly one line of output per command
    
    Output formatting options:
      -f, --format=FORMAT         set output formatting to FORMAT
                                  ("table", "html", "csv", or "json")
      -d, --data=FORMAT           set table cell output formatting to
                                  FORMAT ("string", "bare", or "json")
      --no-headings               omit table heading row
      --pretty                    pretty-print JSON in output
      --bare                      equivalent to "--format=list --data=bare --no-headings"
    
    Logging options:
      -vSPEC, --verbose=SPEC   set logging levels
      -v, --verbose            set maximum verbosity level
      --log-file[=FILE]        enable logging to specified FILE
                               (default: /var/log/openvswitch/vtep-ctl.log)
      --syslog-method=(libc|unix:file|udp:ip:port)
                               specify how to send messages to syslog daemon
      --syslog-target=HOST:PORT  also send syslog msgs to HOST:PORT via UDP
      --no-syslog                 equivalent to --verbose=vtep_ctl:syslog:warn
    
    Active database connection methods:
      tcp:HOST:PORT           PORT at remote HOST
      ssl:HOST:PORT           SSL PORT at remote HOST
      unix:FILE               Unix domain socket named FILE
    Passive database connection methods:
      ptcp:PORT[:IP]          listen to TCP PORT on IP
      pssl:PORT[:IP]          listen for SSL on PORT on IP
      punix:FILE              listen on Unix domain socket FILE
    PKI configuration (required to use SSL):
      -p, --private-key=FILE  file with private key
      -c, --certificate=FILE  file with certificate for private key
      -C, --ca-cert=FILE      file with peer CA certificate
    SSL options:
      --ssl-protocols=PROTOS  list of SSL protocols to enable
      --ssl-ciphers=CIPHERS   list of SSL ciphers to enable
    
    Other options:
      -h, --help                  display this help message
      -V, --version               display version information
    [root@kunpeng82 scripts]#
    vtep-ctl add  Logical_Switch ls2 tunnel_key=44
    vs-vsctl add-port vtep_bfd  bfd192.168.16.83 -- set interface bfd192.168.16.83 type=vxlan options:remote_ip=192.168.16.83  options:key=44
    [root@kunpeng82 scripts]# ovs-vsctl show
    ec7f002f-352c-476c-8348-5f2c86c8194f
        Bridge "br1"
            Port "br1"
                Interface "br1"
                    type: internal
        Bridge "br0_vtep_ls1"
            Port "br0_vtep_ls1"
                Interface "br0_vtep_ls1"
                    type: internal
            Port "vx1"
                Interface "vx1"
                    type: vxlan
                    options: {key="33", remote_ip="192.168.16.81"}
            Port "0100-tortap2-l"
                Interface "0100-tortap2-l"
                    type: patch
                    options: {peer="0100-tortap2-p"}
            Port "0000-tortap1-l"
                Interface "0000-tortap1-l"
                    type: patch
                    options: {peer="0000-tortap1-p"}
        Bridge "br0_vtep_ls2"
            Port "0100-tortap3-l"
                Interface "0100-tortap3-l"
                    type: patch
                    options: {peer="0100-tortap3-p"}
            Port "br0_vtep_ls2"
                Interface "br0_vtep_ls2"
                    type: internal
        Bridge vtep_bfd
            Port vtep_bfd
                Interface vtep_bfd
                    type: internal
            Port "bfd192.168.16.81"
                Interface "bfd192.168.16.81"
                    type: vxlan
                    options: {remote_ip="192.168.16.81"}
            Port "bfd192.168.16.83"
                Interface "bfd192.168.16.83"
                    type: vxlan
                    options: {key="44", remote_ip="192.168.16.83"}
        Bridge "br0"
            Port "0100-tortap2-p"
                Interface "0100-tortap2-p"
                    type: patch
                    options: {peer="0100-tortap2-l"}
            Port "br0"
                Interface "br0"
                    type: internal
            Port "0100-tortap3-p"
                Interface "0100-tortap3-p"
                    type: patch
                    options: {peer="0100-tortap3-l"}
            Port "tortap1"
                tag: 0
                Interface "tortap1"
            Port "tortap3"
                Interface "tortap3"
            Port "0000-tortap1-p"
                Interface "0000-tortap1-p"
                    type: patch
                    options: {peer="0000-tortap1-l"}
            Port "tortap2"
                tag: 0
                Interface "tortap2"
        ovs_version: "2.12.0"
    [root@kunpeng82 scripts]# vtep-ctl list-remote-macs ls0
    ucast-mac-remote
    
    mcast-mac-remote
      unknown-dst -> vxlan_over_ipv4/192.168.16.81
    
    [root@kunpeng82 scripts]# vtep-ctl list-local-macs ls0
    ucast-mac-local
    
    mcast-mac-local
      unknown-dst -> vxlan_over_ipv4/192.168.16.81
    
    [root@kunpeng82 scripts]# vtep-ctl add-ucast-remote ls0 d2:40:3e:24:38:f6 192.168.16.83 ----------------------添加一个单播地址
    [root@kunpeng82 scripts]# ovs-vsctl show
    ec7f002f-352c-476c-8348-5f2c86c8194f
        Bridge "br1"
            Port "br1"
                Interface "br1"
                    type: internal
        Bridge "br0_vtep_ls1"
            Port "br0_vtep_ls1"
                Interface "br0_vtep_ls1"
                    type: internal
            Port "vx1"
                Interface "vx1"
                    type: vxlan
                    options: {key="33", remote_ip="192.168.16.81"}
            Port "0100-tortap2-l"
                Interface "0100-tortap2-l"
                    type: patch
                    options: {peer="0100-tortap2-p"}
            Port "vx2"
                Interface "vx2"
                    type: vxlan
                    options: {key="33", remote_ip="192.168.16.83"}                    ------------------加进来了 key 不是44
            Port "0000-tortap1-l"
                Interface "0000-tortap1-l"
                    type: patch
                    options: {peer="0000-tortap1-p"}
        Bridge "br0_vtep_ls2"
            Port "0100-tortap3-l"
                Interface "0100-tortap3-l"
                    type: patch
                    options: {peer="0100-tortap3-p"}
            Port "br0_vtep_ls2"
                Interface "br0_vtep_ls2"
                    type: internal
        Bridge vtep_bfd
            Port vtep_bfd
                Interface vtep_bfd
                    type: internal
            Port "bfd192.168.16.81"
                Interface "bfd192.168.16.81"
                    type: vxlan
                    options: {remote_ip="192.168.16.81"}
            Port "bfd192.168.16.83"
                Interface "bfd192.168.16.83"
                    type: vxlan
                    options: {key="44", remote_ip="192.168.16.83"}
        Bridge "br0"
            Port "0100-tortap2-p"
                Interface "0100-tortap2-p"
                    type: patch
                    options: {peer="0100-tortap2-l"}
            Port "br0"
                Interface "br0"
                    type: internal
            Port "0100-tortap3-p"
                Interface "0100-tortap3-p"
                    type: patch
                    options: {peer="0100-tortap3-l"}
            Port "tortap1"
                tag: 0
                Interface "tortap1"
            Port "tortap3"
                Interface "tortap3"
            Port "0000-tortap1-p"
                Interface "0000-tortap1-p"
                    type: patch
                    options: {peer="0000-tortap1-l"}
            Port "tortap2"
                tag: 0
                Interface "tortap2"
        ovs_version: "2.12.0"
    [root@kunpeng82 scripts]# 
    [root@kunpeng82 scripts]# vtep-ctl del-ucast-remote ls0 d2:40:3e:24:38:f6
    [root@kunpeng82 scripts]# ovs-vsctl show
    ec7f002f-352c-476c-8348-5f2c86c8194f
        Bridge "br1"
            Port "br1"
                Interface "br1"
                    type: internal
        Bridge "br0_vtep_ls1"
            Port "br0_vtep_ls1"
                Interface "br0_vtep_ls1"
                    type: internal
            Port "vx1"
                Interface "vx1"
                    type: vxlan
                    options: {key="33", remote_ip="192.168.16.81"}
            Port "0100-tortap2-l"
                Interface "0100-tortap2-l"
                    type: patch
                    options: {peer="0100-tortap2-p"}
            Port "0000-tortap1-l"
                Interface "0000-tortap1-l"
                    type: patch
                    options: {peer="0000-tortap1-p"}
        Bridge "br0_vtep_ls2"
            Port "0100-tortap3-l"
                Interface "0100-tortap3-l"
                    type: patch
                    options: {peer="0100-tortap3-p"}
            Port "br0_vtep_ls2"
                Interface "br0_vtep_ls2"
                    type: internal
        Bridge vtep_bfd
            Port vtep_bfd
                Interface vtep_bfd
                    type: internal
            Port "bfd192.168.16.81"
                Interface "bfd192.168.16.81"
                    type: vxlan
                    options: {remote_ip="192.168.16.81"}              // 另外一个192.168.16.83删了
        Bridge "br0"
            Port "0100-tortap2-p"
                Interface "0100-tortap2-p"
                    type: patch
                    options: {peer="0100-tortap2-l"}
            Port "br0"
                Interface "br0"
                    type: internal
            Port "0100-tortap3-p"
                Interface "0100-tortap3-p"
                    type: patch
                    options: {peer="0100-tortap3-l"}
            Port "tortap1"
                tag: 0
                Interface "tortap1"
            Port "tortap3"
                Interface "tortap3"
            Port "0000-tortap1-p"
                Interface "0000-tortap1-p"
                    type: patch
                    options: {peer="0000-tortap1-l"}
            Port "tortap2"
                tag: 0
                Interface "tortap2"
        ovs_version: "2.12.0"
    [root@kunpeng82 scripts]# 
    [root@kunpeng82 scripts]# vtep-ctl add-ucast-remote ls2 d2:40:3e:24:38:f6 192.168.16.83
    [root@kunpeng82 scripts]# ovs-vsctl show
    ec7f002f-352c-476c-8348-5f2c86c8194f
        Bridge "br1"
            Port "br1"
                Interface "br1"
                    type: internal
        Bridge "br0_vtep_ls1"
            Port "br0_vtep_ls1"
                Interface "br0_vtep_ls1"
                    type: internal
            Port "vx1"
                Interface "vx1"
                    type: vxlan
                    options: {key="33", remote_ip="192.168.16.81"}
            Port "0100-tortap2-l"
                Interface "0100-tortap2-l"
                    type: patch
                    options: {peer="0100-tortap2-p"}
            Port "0000-tortap1-l"
                Interface "0000-tortap1-l"
                    type: patch
                    options: {peer="0000-tortap1-p"}
        Bridge "br0_vtep_ls2"
            Port "vx3"
                Interface "vx3"
                    type: vxlan
                    options: {key="44", remote_ip="192.168.16.83"} ---------------------------vxlan44 
            Port "0100-tortap3-l"
                Interface "0100-tortap3-l"
                    type: patch
                    options: {peer="0100-tortap3-p"}
            Port "br0_vtep_ls2"
                Interface "br0_vtep_ls2"
                    type: internal
        Bridge vtep_bfd
            Port vtep_bfd
                Interface vtep_bfd
                    type: internal
            Port "bfd192.168.16.81"
                Interface "bfd192.168.16.81"
                    type: vxlan
                    options: {remote_ip="192.168.16.81"}
            Port "bfd192.168.16.83"
                Interface "bfd192.168.16.83"
                    type: vxlan
                    options: {remote_ip="192.168.16.83"}
        Bridge "br0"
            Port "0100-tortap2-p"
                Interface "0100-tortap2-p"
                    type: patch
                    options: {peer="0100-tortap2-l"}
            Port "br0"
                Interface "br0"
                    type: internal
            Port "0100-tortap3-p"
                Interface "0100-tortap3-p"
                    type: patch
                    options: {peer="0100-tortap3-l"}
            Port "tortap1"
                tag: 0
                Interface "tortap1"
            Port "tortap3"
                Interface "tortap3"
            Port "0000-tortap1-p"
                Interface "0000-tortap1-p"
                    type: patch
                    options: {peer="0000-tortap1-l"}
            Port "tortap2"
                tag: 0
                Interface "tortap2"
        ovs_version: "2.12.0"
    [root@kunpeng82 scripts]# 
    [root@kunpeng82 scripts]# vtep-ctl show
    7ad71c45-a370-4718-89cd-c15d142f1fce
        Physical_Switch "br0"
            tunnel_ips: ["192.168.16.81"]            ----还是只有一个
            Physical_Port "tortap1"
                vlan_bindings:
                    0="ls0"
            Physical_Port "tortap2"
                vlan_bindings:
                    100="ls0"
            Physical_Port "tortap3"
                vlan_bindings:
                    100="ls2"
     vtep-ctl set Physical_Switch br0 tunnel_ips=192.168.16.81
     vtep-ctl add-ps br0 
      vtep-ctl set Physical_Switch br0 tunnel_ips=192.168.16.81,…………
     vtep只能绑定一个bridge
     可以添加多个logic switch
    vtep-ctl add-ls ls0
     vtep-ctl bind-ls br0 p0 100 ls0
     vtep-ctl set Logical_Switch ls0 tunnel_key=33
     vtep-ctl add-ucast-remote ls0 d2:40:3e:24:38:f6 192.168.16.83 
     添加一个单播地址,每添加一个形成一个Port "vx"
  • 相关阅读:
    java打包成windows服务(转)
    java程序在windows系统作为服务程序运行(转)
    java String 转 Long 两种方法区别(转)
    css清除浮动clearfix:after的用法详解(转)
    管理界面的头2
    ROS 设置串口USB软连接
    ROS 用 roboware实现节点信息发送和接收
    javascript实现html中关键字查询
    winfrom 中 label 文字随着窗体大小变化
    lattice planner 规划详解
  • 原文地址:https://www.cnblogs.com/dream397/p/13273296.html
Copyright © 2011-2022 走看看