Maestro解析

Maestro是源自RICE Univ.的Openflow controller,對其關鍵設計解析如下:

1 View

在Maestro中,View代表了一組相關的網絡狀態的子集。網絡狀態state的一個典型例子是路由表(which determines howdata packets are forwarded in the network.)。View的目的就是提供上層控制應用併發訪問網絡的最小粒度。所有的View都必須重載實現下面幾個重要的方法:boolean whetherInterested(Event e)  – (在初始階段創建event和view之間的註冊);

Boolean processEvent(Event e) – (顧名思義,通常處理事件就是更新對應的數據結構);

Void commit(Driver driver) – (向網絡中發包)。

2 Event

在Maestro中,Event是Openflow網絡中數據交換的基本單元,它對應到Openflow規範中的Message。它可以由交換機產生(如對應於ofp_packet_in的PacketInEvent),也可以由控制器產生(如對應於ofp_flow_mod的FlowModEvent),因此在Maestro中需要實現每個Event的convertToBytes來與Openflow規範兼容。Event是組成View的數據單元。

Maestro中的事件肯定要於Openflow規範中的事件相兼容的,這是一個突破點。

3 Application

在Maestro中,一個aplication代表一個網絡控制應用。這個application繼承自App類,僅通過ViewIOBucket process(ViewIOBucket input)這個方法與Maestro平臺進行交互實施網絡控制。其中ViewIOBucket是一個按照索引順序position存放的View的集合,這個索引順序與DAG指定的順序是相同的,因此Maestro能夠顯式控制application之間的交互。

4 Driver

在Maestro中,driver主要用於實現上層控制邏輯跟各種不同的底層網絡(路由器、交換機)進行交互,因此,它有收包和發包兩個動作。在目前的Openflow driver中,收包功能主要是當網絡中有新的數據報到達時,driver將其轉換成爲相應的Event,目前包括四類:SwitchJoinEvent,SwitchLeaveEvent,PacketInEvent,LLDPPacketInEvent;發包功能主要是driver通過提供commitEvent方法讓View添加事件,並通過事件中的convertToByte方法將其轉換成Openflow規範報文發送出去,目前包括兩類:PacketOutEvent和FlowModEvent。

這裏也是Maestro中跟事件相關的地方,也是一個突破點。

4 DAG

DAG指定了網絡控制邏輯的執行順序和交互。通過在DAG中標註輸入和輸出,可以顯式指定不同控制邏輯間的交互;通過分析不同DAG間輸入輸出View的衝突,可以協調不同網絡控制應用對網絡資源的共享。

在Maestro中有一個全局環境Environment來存儲系統中的所有View的最新狀態。當一個DAG執行時,先從Environment中拷貝所需要用到View的snapshot,整個DAG執行完後再提交commit,這樣可以保證DAG執行過程中application不會產生inconsistent的輸入與輸出View。

 

We will first illustrate a briefcomparison between the events which are specified in Openflow Specification1.2 (Openflowmessages for short) and which have been implemented in Maestro 0.2.1(Maestroevents for short), both are the latest version available currently. Based onwhich, we will go through the differences one event at a time. Finally, weconclude with the possible enhancements on Mastro based on our observations.

 Table 1 Brief comparison

Openflow messages

Maestro events

Features

OFPT_FEATURES_REQUEST/REPLY

Configuration

OFPT_GET_CONFIG_REQUEST/ OFPT_SET_CONFIG

Modify-State

FlowModEvent

Read-State

 

Packet-out

PacketoutEvent

Barrier

 

Packet-in

PacketInEvent

Flow-Removed

 

Port-status

OFPT_STATS_REQUEST/REPLY

Error

OFPT_ERROR

Hello

OFPT_HELLO

Echo

OFPT_ECHO_REQUEST/REPLY

Experimenter

 

 

LLDPPacketInEvent(沒怎麼實現)

 

SwitchJoinEvent

 

SwitchLeaveEvent(沒怎麼實現)




Maestro的運行

首先在Ant後對Maestro進行編譯。Ant主要利用Maestro中的build.xml進行編譯,生成build目錄下面的.class文件。


然後再命令行下運行java -cp build/ sys.Main conf/openflow.confconf/learningswitch.dag 1啓動Maestro。注意build/和sys.Main中間要有一個空格才能找到jar文件,由此也可見sys目錄下面的main.java應該是整個程序的入口。




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章