mirror of
https://github.com/faucetsdn/ryu.git
synced 2026-01-24 18:11:24 +01:00
ofproto_v1_5_parser: Fix OFPFlowStats/OFPAggregateStats to use OFPStats
OpenFlow Spec 1.5 introduces OXS into flow statistics multipart and flow aggregate multipart. This patch fixes these multipart to use OXS. Signed-off-by: IWASE Yusuke <iwase.yusuke0@gmail.com> Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
This commit is contained in:
parent
141957fbbd
commit
c7df2ef4fb
@ -4071,55 +4071,34 @@ class OFPExperimenterStatsReply(OFPMultipartReply):
|
||||
|
||||
|
||||
class OFPFlowStats(StringifyMixin):
|
||||
def __init__(self, table_id=None, duration_sec=None, duration_nsec=None,
|
||||
priority=None, idle_timeout=None, hard_timeout=None,
|
||||
flags=None, importance=None, cookie=None, packet_count=None,
|
||||
byte_count=None, match=None, instructions=None,
|
||||
length=None):
|
||||
def __init__(self, table_id=None, reason=None, priority=None,
|
||||
match=None, stats=None, length=0):
|
||||
super(OFPFlowStats, self).__init__()
|
||||
self.length = 0
|
||||
self.length = length
|
||||
self.table_id = table_id
|
||||
self.duration_sec = duration_sec
|
||||
self.duration_nsec = duration_nsec
|
||||
self.reason = reason
|
||||
self.priority = priority
|
||||
self.idle_timeout = idle_timeout
|
||||
self.hard_timeout = hard_timeout
|
||||
self.flags = flags
|
||||
self.importance = importance
|
||||
self.cookie = cookie
|
||||
self.packet_count = packet_count
|
||||
self.byte_count = byte_count
|
||||
self.match = match
|
||||
self.instructions = instructions
|
||||
self.stats = stats
|
||||
|
||||
@classmethod
|
||||
def parser(cls, buf, offset):
|
||||
flow_stats = cls()
|
||||
|
||||
(flow_stats.length, flow_stats.table_id,
|
||||
flow_stats.duration_sec, flow_stats.duration_nsec,
|
||||
flow_stats.priority, flow_stats.idle_timeout,
|
||||
flow_stats.hard_timeout, flow_stats.flags,
|
||||
flow_stats.importance, flow_stats.cookie,
|
||||
flow_stats.packet_count,
|
||||
flow_stats.byte_count) = struct.unpack_from(
|
||||
(flow_stats.length, flow_stats.table_id, flow_stats.reason,
|
||||
flow_stats.priority) = struct.unpack_from(
|
||||
ofproto.OFP_FLOW_STATS_0_PACK_STR, buf, offset)
|
||||
offset += ofproto.OFP_FLOW_STATS_0_SIZE
|
||||
|
||||
flow_stats.match = OFPMatch.parser(buf, offset)
|
||||
match_length = utils.round_up(flow_stats.match.length, 8)
|
||||
inst_length = (flow_stats.length - (ofproto.OFP_FLOW_STATS_SIZE -
|
||||
ofproto.OFP_MATCH_SIZE +
|
||||
match_length))
|
||||
offset += match_length
|
||||
instructions = []
|
||||
while inst_length > 0:
|
||||
inst = OFPInstruction.parser(buf, offset)
|
||||
instructions.append(inst)
|
||||
offset += inst.len
|
||||
inst_length -= inst.len
|
||||
|
||||
flow_stats.instructions = instructions
|
||||
stats_length = (flow_stats.length - (ofproto.OFP_FLOW_STATS_0_SIZE +
|
||||
match_length))
|
||||
if stats_length > 0:
|
||||
flow_stats.stats = OFPStats.parser(buf, offset)
|
||||
|
||||
return flow_stats
|
||||
|
||||
|
||||
@ -4214,34 +4193,30 @@ class OFPFlowStatsReply(OFPMultipartReply):
|
||||
def flow_stats_reply_handler(self, ev):
|
||||
flows = []
|
||||
for stat in ev.msg.body:
|
||||
flows.append('table_id=%s '
|
||||
'duration_sec=%d duration_nsec=%d '
|
||||
'priority=%d '
|
||||
'idle_timeout=%d hard_timeout=%d flags=0x%04x '
|
||||
'importance=%d cookie=%d packet_count=%d '
|
||||
'byte_count=%d match=%s instructions=%s' %
|
||||
(stat.table_id,
|
||||
stat.duration_sec, stat.duration_nsec,
|
||||
stat.priority,
|
||||
stat.idle_timeout, stat.hard_timeout,
|
||||
stat.flags, stat.importance,
|
||||
stat.cookie, stat.packet_count, stat.byte_count,
|
||||
stat.match, stat.instructions))
|
||||
flows.append('table_id=%s reason=%d priority=%d '
|
||||
'match=%s stats=%s' %
|
||||
(stat.table_id, stat.reason, stat.priority,
|
||||
stat.match, stat.stats))
|
||||
self.logger.debug('FlowStats: %s', flows)
|
||||
"""
|
||||
def __init__(self, datapath, type_=None, **kwargs):
|
||||
super(OFPFlowStatsReply, self).__init__(datapath, **kwargs)
|
||||
|
||||
|
||||
class OFPAggregateStats(ofproto_parser.namedtuple('OFPAggregateStats', (
|
||||
'packet_count', 'byte_count', 'flow_count'))):
|
||||
class OFPAggregateStats(StringifyMixin):
|
||||
def __init__(self, stats=None, length=None):
|
||||
super(OFPAggregateStats, self).__init__()
|
||||
self.stats = stats
|
||||
# Note: length field is specific to this implementation.
|
||||
# It does not have a corresponding field in the specification.
|
||||
self.length = length
|
||||
|
||||
@classmethod
|
||||
def parser(cls, buf, offset):
|
||||
agg = struct.unpack_from(
|
||||
ofproto.OFP_AGGREGATE_STATS_REPLY_PACK_STR, buf, offset)
|
||||
stats = cls(*agg)
|
||||
stats.length = ofproto.OFP_AGGREGATE_STATS_REPLY_SIZE
|
||||
return stats
|
||||
stats = OFPStats.parser(buf, offset)
|
||||
agg = cls(stats)
|
||||
agg.length = utils.round_up(stats.length, 8)
|
||||
return agg
|
||||
|
||||
|
||||
@_set_stats_type(ofproto.OFPMP_AGGREGATE_STATS, OFPAggregateStats)
|
||||
@ -4316,10 +4291,7 @@ class OFPAggregateStatsReply(OFPMultipartReply):
|
||||
def aggregate_stats_reply_handler(self, ev):
|
||||
body = ev.msg.body
|
||||
|
||||
self.logger.debug('AggregateStats: packet_count=%d byte_count=%d '
|
||||
'flow_count=%d',
|
||||
body.packet_count, body.byte_count,
|
||||
body.flow_count)
|
||||
self.logger.debug('AggregateStats: stats=%s', body.stats)
|
||||
"""
|
||||
def __init__(self, datapath, type_=None, **kwargs):
|
||||
super(OFPAggregateStatsReply, self).__init__(datapath, **kwargs)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user