扩展OpenFlow协议:OpenvSwitch+Floodlight实现

需积分: 0 0 下载量 63 浏览量 更新于2024-06-30 收藏 443KB PDF 举报
"这篇文档介绍了如何扩展OpenFlow协议,特别是在OpenvSwitch+Floodlight的环境中。作者Baohua Yang在2012年12月15日更新了这个过程,主要内容是添加新的消息类型和行动,以实现自定义功能,如通过指定端口发送带有特定IP地址的网络包。文档分为两大部分:Floodlight的扩展和涉及的模块修改。" OpenFlow协议是一种网络控制协议,允许网络管理员和软件定义网络(SDN)控制器对数据平面进行编程。在OpenvSwitch+Floodlight的架构中,OpenFlow协议扮演着关键角色,连接着物理交换机(ovs)和控制器(Floodlight)。 扩展OpenFlow协议首先需要定义新的消息类型。例如,文档中提到的`PacketRemote`消息,它允许控制器指示交换机将处理过的数据包从特定端口发送出去,并在发送前更改其IP地址。这个过程涉及到Floodlight控制器中的代码修改。 在Floodlight的扩展部分,关键的步骤是在`src/main/java/org/openflow/protocol/action/OFActionType.java`文件中声明新的消息类型。这是通过在`OFActionType`枚举中添加新的条目来完成的,每个条目对应一个特定的行动。为了确保与ovs的兼容性,新消息的ID必须与ovs中定义的一致。文档中提到了几个现有的行动类型,如`OUTPUT`(用于指定输出端口)、`SET_VLAN_ID`(设置VLAN ID)和`SET_VLAN_PCP`(设置VLAN优先级),并以此为例说明如何添加新的`ActionRemote`。 添加新的行动类型需要创建一个新的`OFAction`子类,例如`OFActionRemote`,并提供一个`Instantiable`实例化器,以便Floodlight在运行时能够创建这个新类型的实例。 此外,扩展OpenFlow协议还需要修改三个主要模块:控制器模块、ovs用户态模块和内核态的datapath模块。控制器模块负责处理新消息的逻辑,ovs用户态模块处理与控制器的通信,而内核态的datapath模块则实现实际的数据包转发规则。 扩展OpenFlow协议是一个涉及编码、协议解析和网络流量控制的复杂过程。在Floodlight这样的SDN控制器中,这通常需要深入理解协议规范,以及控制器和交换机之间的交互机制。通过这样的扩展,网络管理员和开发者可以实现更精细的网络控制,满足特定的业务需求或创新网络服务。