openflow协议代码的大体结构如下:
1.涉及报文传输与生成的main函数
2.udatapath.c负责datapath (OpenFlow网络中,每个OpenFlow实例都使用唯一的Datapath ID来标识本实例。缺省情况下,OpenFlow实例的Datapath ID由实例ID和设备桥MAC组成,用户可以配置Datapath ID。)
3.controller.c负责controller
4.secchan.c负责安全通道
5.dpctl.c负责dp
具体代码结构参考百度文库:http://wenku.baidu.com/link?url=KLvgQJLI-Luk0nYqq7IIvyhr4E3nvP0LTH0P6CcFiJX-H-2pJx8DNh2IeNG-iVWBgv_gpk-960ArKSd–ye0f0ixuQ-m2-StZ3daigY2DJe
根据openflow协议的代码结构就比较好理解软的交换机的实现组件的组成,openflow13softwareswitch组件以及其作用:
1)ofdatapath:交换机的安装启用
2)ofprotocol:用来连接交换机和控制器的安全通道
3)oflib:用来转换1.3版本格式的库
4)dpctl:是从console口来配置switch的一个工具(这个会在另外一篇文章中详细说明)
安装请参考:https://github.com/CPqD/ofsoftswitch13 中给出的步骤
运行:
1)启动datapath
sudo udatapath/ofdatapath --datapath-id=<dpid> --interfaces=<if-list> ptcp:<port>
这个命令会启动datapath,使用给定的datapath ID和列出的接口。它将会打开一条被动的TCP连接通道在给定的端口上。如果想要获得完整的选项列表,使用–help参数
2)启动secure channel,这将会将第一步中启动的datapath连接到控制器上。
secchan/ofprotocol tcp:<switch-host>:<switch-port> tcp:<ctrl-host>:<ctrl-port>
备注:这里的switch-host就是127.0.0.1 switch-port是自己设置的端口一般为6632或6633
这将会打开TCP连接到交换机和控制器上,基于OpenFlow协议在二者之间进行沟通。想要获得完整的选项清单请使用–help参数。
配置:
可以使用dpctl工具向switch发送要求
例如:检查流表0的流状态统计
utilities/dpctl tcp:<switch-host>:<switch-port> stats-flow table=0
增加一个meter
utilities/dpctl tcp:<switch-host>:<switch-port> meter-mod cmd=add,meter=1 drop:rate=50
想要获得完整的选项清单仍然使用–help参数
但是dpctl有一些使用限制
1.不支持OXM掩码
2.不支持多部分消息
3.一些set_field的action fieds将不会呈现