一 、 摘要
本文主要针对 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 使用这种语言来定义其所支持的