Hi Shivani,
The AGGREGATE_STATS message has the same problem as what I mentioned on my
previous mail. OpenFlow 1.5 introduced "OXS" structure (EXT-334) and this
structure is also used in The AGGREGATE_STATS message, but OVS does not support
it...
FYI, I found a workaround for this issue, but please note this is a very dirty
way.
$ git diff
diff --git a/ryu/app/simple_switch_15.py b/ryu/app/simple_switch_15.py
index 6a86ba7..b04ce81 100644
--- a/ryu/app/simple_switch_15.py
+++ b/ryu/app/simple_switch_15.py
@@ -17,12 +17,27 @@ from ryu.base import app_manager
from ryu.controller import ofp_event
from ryu.controller.handler import CONFIG_DISPATCHER, MAIN_DISPATCHER
from ryu.controller.handler import set_ev_cls
+from ryu.ofproto import ofproto_v1_4
+from ryu.ofproto import ofproto_v1_4_parser
from ryu.ofproto import ofproto_v1_5
+from ryu.ofproto import ofproto_v1_5_parser
from ryu.lib.packet import packet
from ryu.lib.packet import ethernet
from ryu.lib.packet import ether_types
+# HACK: OVS 2.9.0 does not yet support the EXT-334, here injects OF14 parser
+# for the workaround.
+class OFPFlowStatsReply(ofproto_v1_5_parser.OFPMultipartReply,
+ ofproto_v1_4_parser.OFPFlowStatsReply):
+ pass
+
+
+ofproto_v1_5_parser.OFPMultipartReply._STATS_MSG_TYPES[
+ # Note: not OFPMP_FLOW_STATS(=17), use OFPMP_FLOW_DESC(=1)
+ ofproto_v1_5.OFPMP_FLOW_DESC] = OFPFlowStatsReply
+
+
class SimpleSwitch15(app_manager.RyuApp):
OFP_VERSIONS = [ofproto_v1_5.OFP_VERSION]
@@ -48,6 +63,8 @@ class SimpleSwitch15(app_manager.RyuApp):
ofproto.OFPCML_NO_BUFFER)]
self.add_flow(datapath, 0, match, actions)
+ self.send_flow_stats_request(datapath)
+
def add_flow(self, datapath, priority, match, actions):
ofproto = datapath.ofproto
parser = datapath.ofproto_parser
@@ -59,6 +76,40 @@ class SimpleSwitch15(app_manager.RyuApp):
match=match, instructions=inst)
datapath.send_msg(mod)
+ def send_flow_stats_request(self, datapath):
+ # HACK: Use OF14 parser
+ ofp = ofproto_v1_4
+ ofp_parser = ofproto_v1_4_parser
+
+ cookie = cookie_mask = 0
+ match = ofp_parser.OFPMatch()
+ req = ofp_parser.OFPFlowStatsRequest(datapath, 0,
+ ofp.OFPTT_ALL,
+ ofp.OFPP_ANY, ofp.OFPG_ANY,
+ cookie, cookie_mask,
+ match)
+ datapath.send_msg(req)
+
+ @set_ev_cls(ofp_event.EventOFPFlowStatsReply, MAIN_DISPATCHER)
+ def flow_stats_reply_handler(self, ev):
+ # HACK: Use OF14 parser
+ 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))
+ self.logger.debug('FlowStats: %s', flows)
+
@set_ev_cls(ofp_event.EventOFPPacketIn, MAIN_DISPATCHER)
def _packet_in_handler(self, ev):
msg = ev.msg
$ ryu-manager ryu/app/simple_switch_15.py --verbose
...(snip)...
EVENT ofp_event->SimpleSwitch15 EventOFPFlowStatsReply
FlowStats: ["table_id=0 duration_sec=3644 duration_nsec=58000000 priority=1
idle_timeout=0 hard_timeout=0 flags=0x0000 importance=0 cookie=0 packet_count=9
byte_count=826 match=OFPMatch(oxm_fields={'in_port': 2, 'eth_dst':
'7a:12:92:fb:67:25'})
instructions=[OFPInstructionActions(actions=[OFPActionOutput(len=16,max_len=65509,port=1,type=0)],len=24,type=4)]",
"table_id=0 duration_sec=3644 duration_nsec=55000000 priority=1 idle_timeout=0
hard_timeout=0 flags=0x0000 importance=0 cookie=0 packet_count=8 byte_count=728
match=OFPMatch(oxm_fields={'in_port': 1, 'eth_dst': '7e:76:39:e3:b8:c1'})
instructions=[OFPInstructionActions(actions=[OFPActionOutput(len=16,max_len=65509,port=2,type=0)],len=24,type=4)]",
'table_id=0 duration_sec=0 duration_nsec=0 priority=0 idle_timeout=0
hard_timeout=0 flags=0x0000 importance=0 cookie=0 packet_count=3 byte_count=182
match=OFPMatch(oxm_fields={})
instructions=[OFPInstructionActions(actions=[OFPActionOutput(len=16,max_len=65535,port=4294967293,type=0)],len=24,type=4)]']
Thanks,
Iwase
On 2018年02月23日 01:05, shivani dommeti wrote:
Hi Iwase Yusuke,
Thank you for the response.
Working on:
RYU version:3.27
Ovs version: 27.2
OpenFlow version:1.5.
I have tried to get the flow stats using OFPAggregateStatsRequest API and i see
the following error:
Encounter an error during parsing OpenFlow packet from switch.This implies
switch sending a malformed OpenFlow packet.version 0x06 msg_type 19 msg_len 40
xid 2049228120 buf 0x06 0x13 0x00 0x28 0x7a 0x24 0xbd 0x58 0x00 0x02 0x00 0x00
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x02 0x00 0x00 0x00 0x00
Traceback (most recent call last):
File "/usr/lib/python2.7/site-packages/ryu/ofproto/ofproto_parser.py", line
69, in msg
return msg_parser(datapath, version, msg_type, msg_len, xid, buf)
File "/usr/lib/python2.7/site-packages/ryu/ofproto/ofproto_v1_5_parser.py",
line 59, in msg_parser
return parser(datapath, version, msg_type, msg_len, xid, buf)
File "/usr/lib/python2.7/site-packages/ryu/ofproto/ofproto_v1_5_parser.py",
line 1895, in parser
raise exception.OFPMalformedMessage()
OFPMalformedMessage: malformed message
EVENT ofp_event->Controller EventOFPPortStatsReply
Fetching next instruction to send to CP
i see the OVS sending the stats :
2018-02-22T05:06:10.923Z|05694|vconn|DBG|tcp:127.0.0.1:6633
<http://127.0.0.1:6633>: received: OFPST_AGGREGATE request (OF1.5)
(xid=0x6ba32021): table=1 in_port=193
2018-02-22T05:06:10.923Z|05695|vconn|DBG|tcp:127.0.0.1:6633
<http://127.0.0.1:6633>: sent (Success): OFPST_AGGREGATE reply (OF1.5)
(xid=0x6ba32021): packet_count=0 byte_count=0 flow_count=2
is there any fix to get the stats for each flow on openflow version1.5
Tried with openflow version 1.3 and i see no issues.
Regards,
Shivani Dommeti.
On Wed, Feb 21, 2018 at 7:01 AM, Iwase Yusuke <iwase.yusu...@gmail.com
<mailto:iwase.yusu...@gmail.com>> wrote:
Hi,
I'm using the newer version of OVS though, I guess OVS does not supports the
OpenFlow 1.5 structured FlowStats message.
the FlowStats message was restructured in the OpenFlow 1.5 according to
introduction of the FlowDesc message, but OVS does not implement the new
structure of the FlowStats (looks like up to OF version 1.4 or earlier).
https://github.com/openvswitch/ovs/blob/bd916d13dbb845746983a6780da772154df647ba/lib/ofp-util.c#L2757-L2799
<https://github.com/openvswitch/ovs/blob/bd916d13dbb845746983a6780da772154df647ba/lib/ofp-util.c#L2757-L2799>
Also, the FlowDesc message does not seem to be supported, implementation not
found and the Extensible Flow Entry Statistics(EXT-334) is still on TODOs
which
required to implement the FlowDesc message.
https://github.com/openvswitch/ovs/blob/master/Documentation/topics/openflow.rst#openflow-15-only
<https://github.com/openvswitch/ovs/blob/master/Documentation/topics/openflow.rst#openflow-15-only>
OVS seems to support the OpenFlow 1.5 partially...
Thanks,
Iwase
On 2018年02月20日 18:27, shivani dommeti wrote:
Hi,
Can you please let me know if there is any Fix for the below stated
issue which i see when i try to retrieve the Flow statistics using
OFPFlowStatsRequest API with OpenFlow version1.5.
Since this is blocking some features, it would be very helpful if there
is any fix for the following. Will be looking forward for your response.
Thanks,
Shivani Dommeti.
On Thu, Feb 15, 2018 at 5:03 PM, shivani dommeti
<shivani.domm...@gmail.com <mailto:shivani.domm...@gmail.com>
<mailto:shivani.domm...@gmail.com <mailto:shivani.domm...@gmail.com>>>
wrote:
Hi,
Working on:
RYU version:3.27
Ovs version: 27.2
OpenFlow version:1.5.
I tried getting the statistics of each flow using the following
API:
match = ofp_parser .OFPMatch(in_port=1)
req = ofp_parser .OFPFlowStatsRequest(datapath,0,1,ofp.OFPP_ANY
,ofp.OFPG_ANY,0,0,match)
And i see the following error:
EVENT ofp_event->Controller EventOFPErrorMsg
EVENT ofp_event->ofctl_service EventOFPErrorMsg
EventOFPErrorMsg received.
version=0x6, msg_type=0x1, msg_len=0x4c, xid=0x6659cf
`-- msg_type: OFPT_ERROR(1)
OFPErrorMsg(type=0x1, code=0x2,
data=b'\x06\x12\x00\x40\x00\x66\x59\xcf\x00\x11\
x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\ x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\ x00\x0c\x80\x00\x00\x04\x00\x00\x00\xc1\x00\x00\x00\x00\x06\x13\x10\xb0\x00\x66\x59\xd0')
|-- type: OFPET_BAD_REQUEST(1)
|-- code: OFPBRC_BAD_MULTIPART(2)
`-- data: version=0x6, msg_type=0x12, msg_len=0x40, xid=0x6659cf
`-- msg_type: OFPT_MULTIPART_REQUEST(18)
EVENT ofp_event->Controller EventOFPPortStatsReply
OFPErrorMsg received: type=0x01 code=0x02 message=0x06 0x12 0x00
0x40 0x00
0x660x59 0xcf 0x00 0x11 0x00 0x00 0x00 0x00 0x00 0x00 0x01 0x00
0x00 0x00
0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0x00 0x00 0x00 0x00 0x00
0x00 0x00
0x000x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x01
0x00 0x0c
0x80 0x000x00 0x04 0x00 0x00 0x00 0xc1 0x00 0x00 0x00 0x00 0x06
0x13 0x10
0xb0 0x00 0x66 0x59 0xd0
unknown error xid 6707663
i dint see this issue when i was using OpenFlow v1.3.
Please let me know if i am missing something, and what can be done
to fix this.
Thanks,
Shivani Dommeti.
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Ryu-devel mailing list
Ryu-devel@lists.sourceforge.net <mailto:Ryu-devel@lists.sourceforge.net>
https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Ryu-devel mailing list
Ryu-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ryu-devel
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Ryu-devel mailing list
Ryu-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ryu-devel