opendaylight 开发学习笔记基础篇 - sdnlab.pdfVIP

  • 7
  • 0
  • 约4.98千字
  • 约 6页
  • 2017-09-02 发布于天津
  • 举报

opendaylight 开发学习笔记基础篇 - sdnlab.pdf

opendaylight 开发学习笔记基础篇 - sdnlab

OpenDaylight 开发学习笔记 基础篇 Openflowjava 篇 @北邮-Kobe 一、摘要 本文主要针对Openflowjava 部分进行实例简述,初学者需要对java 了解一 些,总结一些我自己的学习收获,不足之处请指正。 Openflowjava 工程作为 Opendaylight 南向接口的协议栈存在,与 openflowplugin 工程及外部的netty.io 网络库紧密联系。其主要作用是接受南 向接口上报的消息、解码、将其交给Openflowplugin 以便进一步上报以及接收 Openflowplugin 传达的发送消息的指令并将其编码为字节流从南向接口中发出。 结构上与功能相关的是Openflow-protocol-api 及Openflow-protocol-impl 两 个文件夹下的代码。前者中用一系列yang 文件定义了控制器支持的Openflow 消 息结构及对应的收、发行为,后者包含了消息的解码、编码及上报、下发的功能 逻辑。 netty.io网络库在Opendaylight中负责处理控制器与switch间的TCP连接。 控制器接收上报的Openflow消息时,消息的二进制字节流会被装入netty的 Bytebuf类对象中传递给Openflowjava以供解码,发送消息时,消息相关的数据 在编码序列化后被封装进Bytebuf类中交给netty完成发送。 Openflowplugin作为opendaylight处理openflow消息的外挂组件进一步负责解 码后消息的分类、处理、上传以及发送消息时控制器指令数据的分发、消息体 数据的组织与打包。Openflowplugin控制着openflow消息收发的流程和逻辑, openflowjava作为其末端动作的执行者存在。 二、Openflow-protocol-api 部分开发 openflow-protocol-api 文件夹下的代码主要是 openflow-protocol- api/src/main/yang 路径下的一系列yang 文件,yang 是一种表示结构与属性的语 言,同时也是一个RFC 标准(RFC6020)。Opendaylight 使用这种语言来定义其所 支持的 openflow 消息结构以及消息的收发动作。在项目编译阶段,maven 会调 用 opendaylight 的yangtools 工具根据yang 文件生成一系列java 文件,包括各 openflow 消息的容器类、容器类的构造器以及侦听并接收这些容器类的接口。通 过yang 文件,我们可以简单清晰地定义我们需要的消息类型以及其上传/下发管 道。 在上述路径下最为重要的是openflow-protocol.yang 及openflow-types.yang 两 个文件,前者定义了openflow 消息和动作,后者包含了自定义、非yang 语言内 置的特殊数据类型。此目录下我们主要进行yang 文件的改写,将一些协议的字 段写成yang 的形式,主要进行openflow-protocol.yang 与openflow-types.yang 两 个model 中的协议添加。 在 openflow-protocol.yang 文件中,grouping 语句用于定义一个数据结构块, uses 语句可将其他 grouping 结构块复用进当前结构块。通过这种方法可定义对 应于所有openflow 消息的数据结构块。但这些结构快并非对openflow 消息中所 有字段的映射。如果这是一个从南向接口接受的消息,则结构快中只需要包含希 望从消息获取并进一步上报的字段。如果是发送的消息,其结构快中只需要包含 那些来自于控制器指令的数据。而 length、padding 等字段则不需要包括。也就 是说,yang 文件中消息的定义是对实际的openflow 消息中有用数据的一种抽象。 下面是yang 文件中对flow-stats 消息的数据结构块定义。 在定义了消息结构后,还需要在同一 yang 文件内定义消息的行为。相关的 语句是notification 和rpc。notification 用于定义控制器被动等待收取的消 息的收取行为。rpc 用于定义控制器主动发送的消息的发送行为以及可能的 switch 应答消息的收取行为。如使用notificatio

文档评论(0)

1亿VIP精品文档

相关文档