floodlight的安裝、OVS的安裝、連通


Floodlight的安裝

在proxmox上創建一臺虛擬機,操作系統爲ubuntu server 14 .04。

創建好之後,需要連接網絡進行安裝,安裝過程記錄如下:

一、在命令行模式下輸入命令直接安裝:
  1. apt-get update
  2. apt-get install git
  3. apt-get install ant
  4. apt-get install openjdk-7-jdk

二、源碼安裝

  1. git clone git://github.com/floodlight/floodlight.git
  2. cd floodlight/
  3. ant
  4. java -jar target/floodlight.jar

這個時候floodlight就啓動起來,(java -jar target/floodlight.jar)該命令就是啓動floodlight。

OVS 的安裝

在proxmox上創建另外一臺虛擬機,安裝OVS

sudo apt-get install openvswitch-controller openvswitch-switch openvswitch-datapath-source

Ubuntu 14.04的OVS版本,已經是2.02,所以默認安裝就可以。不過不同的發行版,ovs的名字會有點不同。

查看OVS運行情況
  1. ps -ea | grep ovs
  2. 1216 ?        00:00:00 ovsdb-server
  3. 1250 ?        00:00:06 ovs-vswitchd
  4. 2421 ?        00:00:00 ovsdb-client


查看OVS版本
  1. ovs-appctl --version
  2. ovs-appctl (Open vSwitch) 2.0.2
  3. Compiled Aug 15 2014 14:31:01


查看 OVS 支持的 OpenFlow 協議的版本
  1. ovs-ofctl --version
  2. ovs-ofctl (Open vSwitch) 2.0.2
  3. Compiled Aug 15 2014 14:31:02
  4. OpenFlow versions 0x1:0x4



登錄OVS節點:


設置ovs的控制器爲floodlight,10.250.3.10,就是floodlight虛擬機的IP。

  1. ovs-vsctl set-controller ovs-switch tcp:10.250.3.10:6633

設置 OVS 的連接模式爲 secure 模式
  1. ovs-vsctl set Bridge ovs-switch fail-mode=secure

查看

# ovs-vsctl show
6507c214-0c7a-4159-9813-977074f73aa1
    Bridge ovs-switch
        Controller "tcp:10.250.3.10:6633"
            is_connected: true
        fail_mode: secure
        Port "p1"
            tag: 101
            Interface "p1"
                type: internal
        Port "p2"
            Interface "p2"
                type: internal
        Port "p0"
            Interface "p0"
                type: internal
        Port ovs-switch
            Interface ovs-switch
                type: internal
    ovs_version: "2.0.2"



通過訪問 Floodlight 提供的 Web 管理界面 http://<Host Address>:8080/ui/index.html,我們可以查看 Floodlight 控制器的狀態以及所有連接到 Floodlight 的交換機列表
通過 Floodlight 的 RESTAPI,添加兩條新的規則讓端口 p0 和 p1 可以相互通訊。注意:替換命令行中的 switch 的 ID 爲交換機的 datapath ID
注意curl命令,儘量別用 / 換行

  1. curl -d '{"switch": "00:00:d2:3b:94:ce:41:46", "name":"my-flow1", "cookie":"0","priority":"32768","ingress-port":"100","active":"true", "actions":"output=flood"}' http://10.250.3.10:8080/wm/staticflowentrypusher/json

  2. curl -d '{"switch": "00:00:d2:3b:94:ce:41:46", "name":"my-flow2", "cookie":"0","priority":"32768","ingress-port":"101","active":"true", "actions":"output=flood"}' http://10.250.3.10:8080/wm/staticflowentrypusher/json



驗證是否能從端口 p0 發送數據包到 p1
  1. # ip netns exec ns0 ping -c4 192.168.1.101
  2. PING 192.168.1.101 (192.168.1.101) 56(84) bytes of data.
  3. 64 bytes from 192.168.1.101: icmp_seq=1 ttl=64 time=0.625 ms
  4. 64 bytes from 192.168.1.101: icmp_seq=2 ttl=64 time=0.088 ms
  5. 64 bytes from 192.168.1.101: icmp_seq=3 ttl=64 time=0.082 ms
  6. 64 bytes from 192.168.1.101: icmp_seq=4 ttl=64 time=0.048 ms

在 OVS 端也可以看到,流表規則已經被 OVS 同步到本地。
  1. # ovs-ofctl dump-flows ovs-switch
  2. NXST_FLOW reply (xid=0x4):
  3. cookie=0xa00000626d6af5, duration=111.468s, table=0, n_packets=7, n_bytes=630, idle_age=2, in_port=100 actions=FLOOD
  4. cookie=0xa00000626d6af6, duration=83.717s, table=0, n_packets=7, n_bytes=630, idle_age=1, in_port=101 actions=FLOOD

通過 Floodlight 的 RestAPI,查看交換機上的流表規則
  1. curl http://10.250.3.10:8080/wm/staticflowentrypusher/list/00:00:d2:3b:94:ce:41:46/json | python -mjson.tool

採用python的輸出,好看很多的

# curl http://10.250.3.10:8080/wm/stati ... 3b:94:ce:41:46/json | python -mjson.tool
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  1435    0  1435    0     0   109k      0 --:--:-- --:--:-- --:--:--  116k
{
    "00:00:d2:3b:94:ce:41:46": {
        "my-flow1": {
            "actions": [
                {
                    "length": 8,
                    "lengthU": 8,
                    "maxLength": 32767,
                    "port": -5,
                    "type": "OUTPUT"
                }
            ],
            "bufferId": -1,
            "command": 0,
            "cookie": 45035997925042933,
            "flags": 0,
            "hardTimeout": 0,
            "idleTimeout": 0,
            "length": 80,
            "lengthU": 80,
            "match": {
                "dataLayerDestination": "00:00:00:00:00:00",
                "dataLayerSource": "00:00:00:00:00:00",
                "dataLayerType": "0x0000",
                "dataLayerVirtualLan": -1,
                "dataLayerVirtualLanPriorityCodePoint": 0,
                "inputPort": 100,
                "networkDestination": "0.0.0.0",
                "networkDestinationMaskLen": 0,
                "networkProtocol": 0,
                "networkSource": "0.0.0.0",
                "networkSourceMaskLen": 0,
                "networkTypeOfService": 0,
                "transportDestination": 0,
                "transportSource": 0,
                "wildcards": 4194302
            },
            "outPort": -1,
            "priority": -32768,
            "type": "FLOW_MOD",
            "version": 1,
            "xid": 0
        },
        "my-flow2": {
            "actions": [
                {
                    "length": 8,
                    "lengthU": 8,
                    "maxLength": 32767,
                    "port": -5,
                    "type": "OUTPUT"
                }
            ],
            "bufferId": -1,
            "command": 0,
            "cookie": 45035997925042934,
            "flags": 0,
            "hardTimeout": 0,
            "idleTimeout": 0,
            "length": 80,
            "lengthU": 80,
            "match": {
                "dataLayerDestination": "00:00:00:00:00:00",
                "dataLayerSource": "00:00:00:00:00:00",
                "dataLayerType": "0x0000",
                "dataLayerVirtualLan": -1,
                "dataLayerVirtualLanPriorityCodePoint": 0,
                "inputPort": 101,
                "networkDestination": "0.0.0.0",
                "networkDestinationMaskLen": 0,
                "networkProtocol": 0,
                "networkSource": "0.0.0.0",
                "networkSourceMaskLen": 0,
                "networkTypeOfService": 0,
                "transportDestination": 0,
                "transportSource": 0,
                "wildcards": 4194302
            },
            "outPort": -1,
            "priority": -32768,
            "type": "FLOW_MOD",
            "version": 1,
            "xid": 0
        }
    }
}


通過 Floodlight 的 RestAPI,刪除交換機上的流表規則
  1. curl http://10.250.3.10:8080/wm/staticflowentrypusher/clear/00:00:d2:3b:94:ce:41:46/json
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章