OFPT_STATS_REQUEST && REPLY
以上的消息如hallo等都是通信过程中必须的部分。还有一些数据包是为了某些目的而设计的如OFPT_STATS_REQUEST && REPLY可以获得统计信息,主要用于请求数据或从交换机状态信息我们可以利用统计信息做:负载平衡,流量监控等基于流量的操作。(在1.3中请求被放在一个或多个OFPT_MULTIPART_REQUEST 消息中,交换机用一个或多个OFPT_MULTIPART_REPLY 消息进行响应。复合消息用于编码请求或应答那些可能携带大量数据而且不能装进单个 OpenFlow 消息(仅限于 64 kb)的情况。)
消息格式:
OFPT_STATS_REQUEST(12B)
type | length | ||
xid | |||
type | flags | ||
body[0] |
|
OFPT_STATS_REPLY(12B)
version | type | length | |
xid | |||
type | flags | ||
body[0] |
|
OFPT_STATS_REQUEST类型有很多,回复的类型也很多。
Type:在请求和响应中,type 字段指所传递信息的种类,并决定如何解析 body 字段:
OFPMP_DESC= 0:整体统计信息。请求交换机版本信息,制造商家等信息。
request body结构体是空。replaybody回复结构体ofp_desc_stats
OFPMP_FLOW = 1:OFPST_DESC单流请求信息,request body结构体是:ofp_flow_stats_request.回复bodyreplay: ofp_flow_stats
OFPMP_AGGREGATE = 2:OFPST_FLOW多流请求信息,request body结构体是ofp_aggregate_stats_request.回复body结构体ofp_aggregate_stats_replay
OFPMP_TABLE =3:OFPST_AGGREGATE,流表请求信息:request为空,回复是流表数组ofp_table_stats
FPMP_PORT_STATS =4:OFPST_TABLE物理端口信息请求。fp_port_stats_request.
ofp_port_stats.
OFPMP_QUEUE=5:队列请求信息:供应商扩展
6:vendor请求信息,有时候没有定义
在1.3中
OFPMP_GROUP=6 组计数器描述
OFPMP_GROUP_DESC=7组描述
OFPMP_GROUP_FEATURES=8。。。13组特征呢个描述。。。
详细的
OFPST_DESC(整体统计信息)
请求BODY:无
回复BODY:ofp_desc_stats
制造商
硬件描述
软件描述
序列号
可读的数据通道描述
OFPST_FLOW(单流统计信息)
请求BODY: ofp_flow_stats_request.
要读的TABLE_ID(来自ofp_table_stats (流表))ofptt_all:所有表
Table_id 表示一个将读取的一个流表的索引值
对齐到32bit
回复BODY:ofp_flow_stats
这个项的长度
流的来源表ID
流已生成的时间
流存在的时间超过上面的时间的时间。
流表项的优先权
超时时间 2个(老化时间)
流里包的数目
流里的字节数
OFPST_AGGREGATE(多流统计信息)-多个流表项的总计信息
请求BODY: ofp_aggregate_stats_request
要读取的表的ID
回复BODY: ofp_aggregate_stats_replay
流中的数据包
流的字节数
流的数量
OFPST_TABLE(表统计信息)
请求BODY:无
回复BODY:ofp_table_stats
表的标识符,低编号的表先
通配符
最大支持的流表项
活跃流表项的数量
被查找表的数量
匹配表的数量
在交换机支持的每一个表中,数组都有一个结构。流表项是以数据包通过表的顺序返回
的。
OFPST_PORT(端口统计信息)
请求BODY:fp_port_stats_request.
必须制定端口
在1.3中port_no字段有选择的过滤统计请求到给定的端口。若访问所有端口的统计,port_no必须设置成 OFPP_ANY
回复BODY:ofp_port_stats.
收到包的数量
已传送包的数量
收到的字节数
传送的字节数
被rx丢弃的包数
被tx丢弃的包数
接收到错误的包数
帧调整的错误数量
在RX溢出的数据包数
CRC错误数
冲突数量
OFPST_QUEUE(队列统计信息)
请求BODY:
回复BODY:
(1)controller分别向sw1、sw2发送stats_request消息(stats_type=0)
(3)aggregate_stats_request(stats_type=2)
结构:header(type=17)/reply_header()/flow_stats/wildcards/match/flow_stats_data
作用:携带流的统计信息,如通过的数据包个数,字节数。
ofp_flow_stats(body[4:8])里面会有的table_id字段表明该流存放在哪一个流表里。
flow_stats_data里面有packet_count和byte_count是最有价值的字段,流量统计就是由这两个字段提供的信息。如想统计某条流的速率:前后两个reply的字节数相减除以duration_time只差就可以求得速率,由速率我们可以做很多基于流量的app,如流量监控,负载均衡等等。