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文件。

Maestro解析_第1张图片

然后再命令行下运行java -cp build/ sys.Main conf/openflow.confconf/learningswitch.dag 1启动Maestro。注意build/和sys.Main中间要有一个空格才能找到jar文件,由此也可见sys目录下面的main.java应该是整个程序的入口。




你可能感兴趣的:(Maestro解析)