编译


  • boot.sh遇到如下错误
    1. saking@saking-server:~/dev/ovs/ovs$ ./boot.sh
    2. configure.ac:39: error: possibly undefined macro: LT_INIT
    3. If this token and others are legitimate, please use m4_pattern_allow.
    4. See the Autoconf documentation.
    5. autoreconf: /usr/bin/autoconf failed with exit status: 1
    原因在于libtool没有安装,安装即可
    sudo apt-get install libtool-bin
    

调试


控制器

faucet是一个简易的openflow控制器实现,通过docker容器运行即可docker pull faucet/faucet

  • 配置文件路径/etc/faucet/faucet.yaml

    dps:
      switch-1:
          dp_id: 0x1
          timeout: 3600
          arp_neighbor_timeout: 3600
          interfaces:
              1:
                  native_vlan: 100
              2:
                  native_vlan: 100
              3:
                  native_vlan: 100
              4:
                  native_vlan: 200
              5:
                  native_vlan: 200
    vlans:
      100:
          faucet_vips: ["10.100.0.254/24"]
      200:
          faucet_vips: ["10.200.0.254/24"]
    routers:
      router-1:
          vlans: [100, 200]
    
  • 运行日志/var/log/faucet/faucet.log,调试过程中通过这个来查看。

  • faucet openflow table的实现(可以在faucet的document里面查看) ``` Table 0 Port-based ACLs

Table 1 Ingress VLAN processing

Table 2 VLAN-based ACLs

Table 3 Ingress L2 processing, MAC learning

Table 4 L3 forwarding for IPv4

Table 5 L3 forwarding for IPv6

Table 6 Virtual IP processing, e.g. for router IP addresses implemented by Faucet

Table 7 Egress L2 processing

Table 8 Flooding

<a name="mt0Pa"></a>
#### 交换机
```bash
$ ovs-vsctl add-br br0 \
         -- set bridge br0 other-config:datapath-id=0000000000000001 \
         -- add-port br0 p1 -- set interface p1 ofport_request=1 \
         -- add-port br0 p2 -- set interface p2 ofport_request=2 \
         -- add-port br0 p3 -- set interface p3 ofport_request=3 \
         -- add-port br0 p4 -- set interface p4 ofport_request=4 \
         -- add-port br0 p5 -- set interface p5 ofport_request=5 \
         -- set-controller br0 tcp:127.0.0.1:6653 \
         -- set controller br0 connection-mode=out-of-band
  • ofport_request=port_num,port_num为openflow的端口号,需要和控制器一致。
  • datapath-id需要和控制器一致。
  • 日志路径,prefix-dir/var/log/openvswitch/ovs-vswitchd.log,prefix-dir为编译指定的prefix。默认为根目录
  • 交换机流表查看ovs-ofctl dump-flows br0
  • 流量的仿真调试:ovs-appctl ofproto/trace br0 in_port=p1

ovs常用工具


系统工具

  • ovs-ctl:用于控制ovs所有进程及内核模块的启动停止。
  • ovs-appctl:可以用于连接ovs的各个进程查看进程保存的数据等。

    模块工具

  • ovs-vswitchd

    • ovs-vsctl:控制ovs-vswitchd的配置,通过将配置写入数据库实现。可以认为是管理ovs-vswitchd的工具。
  • datapath
    • ovs-dpctl:创建,删除,修改datapath。这个和ovs-vswitchd的功能一样,只不过绕过了ovs-vswitchd,直接管理内核的datapath。可以认为是命令行级别的ovs-vswitchd。
    • ovs-dpctl-top:datapath的top工具,可以实时查看datapath的数据包统计。
    • ovs-ofctl:流表查看,可以查看openflow/megaflow/microflow
  • ovsdb
    • ovsdb-client:针对ovsdb-server的工具,可以执行数据库的命令。管理数据库的命令行工具。
    • ovsdb-tool:针对数据库的小工具,比如初始化数据库,合并等。