Hi,

On 2015年08月29日 03:46, Alan Deikman wrote:
> 
>> On Aug 27, 2015, at 10:44 PM, Yusuke Iwase <[email protected] 
>> <mailto:[email protected]>> wrote:
>>
>> If OVS work so, I think it is a bug of OVS and tester.py should not wait OVS.
> 
> I believe you are right.   In the process of investigating this I captured 
> all the OpenFlow packets between Ryu and the switches and looked at them with 
> Wireshark.  There seems to be no problem with how tester.py uses the OpenFlow 
> protocol.
> 
> The flaw is that the OF agent that OVS uses will update its own data base 
> (tables of flows) then signal via the Barrier Request Reply that this is 
> done.  It should wait until the flow tables all the way into the cache are 
> updated but it does not.   However it appears this will be very hard to 
> implement due to the architecture of OVS which separates the data base 
> (ovsdb) from the actual switching logic (openvswitchd and the dkms kernel 
> module.)
> 
> However since so many OF products are based on OVS I wonder if tester.py 
> should have an additional command line option to invoke this work around.

If tester.py should support such feature, how about the following patch?
I added sleep interval for each test case.


$ git diff
diff --git a/ryu/flags.py b/ryu/flags.py
index 225cbbb..a45ac34 100644
--- a/ryu/flags.py
+++ b/ryu/flags.py
@@ -80,5 +80,8 @@ CONF.register_cli_opts([
                '(default: openflow13)'),
     cfg.StrOpt('tester-version', default='openflow13',
                help='tester sw OFP version [openflow13|openflow14] '
-               '(default: openflow13)')
+               '(default: openflow13)'),
+    cfg.IntOpt('interval', default=0,
+               help='interval time in seconds of each test '
+               '(default: 0)'),
 ], group='test-switch')
diff --git a/ryu/tests/switch/tester.py b/ryu/tests/switch/tester.py
index 6c4e233..5087614 100644
--- a/ryu/tests/switch/tester.py
+++ b/ryu/tests/switch/tester.py
@@ -273,6 +273,7 @@ class OfTester(app_manager.RyuApp):
         super(OfTester, self).__init__()
         self._set_logger()
 
+        self.interval = CONF['test-switch']['interval']
         self.target_dpid = self._convert_dpid(CONF['test-switch']['target'])
         self.target_send_port_1 = CONF['test-switch']['target_send_port_1']
         self.target_send_port_2 = CONF['test-switch']['target_send_port_2']
@@ -434,6 +435,7 @@ class OfTester(app_manager.RyuApp):
             result = self._test_execute(test, desc)
             report.setdefault(result, [])
             report[result].append([testfile.description, test.description])
+            hub.sleep(self.interval)
         return report
 
     def _test_execute(self, test, description):


Usage Example)
$ ryu-manager ryu/tests/switch/tester.py --test-switch-interval 10


Thanks,
Iwase

> 
> ----------------------------
> Alan Deikman
> ZNYX Networks, Inc.
> 
> 
> 
> 
> 
> ------------------------------------------------------------------------------
> 
> 
> 
> _______________________________________________
> Ryu-devel mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/ryu-devel
> 

------------------------------------------------------------------------------
_______________________________________________
Ryu-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ryu-devel

Reply via email to