You can specify the port number in the options when sw test tool is started.
The example is as follows:

  ryu-manager --test-switch-target_recv_port 4   (default:1)
              --test-switch-target_send_port_1 5 (default:2)
              --test-switch-target_send_port_2 6 (default:3)
              --test-switch-tester_send_port 7   (default:1)
              --test-switch-tester_recv_port_1 8 (default:2)
              --test-switch-tester_recv_port_2 9 (default:3)
               ryu/tests/switch/tester.py

Signed-off-by: Minoru TAKAHASHI <[email protected]>
---
 ryu/flags.py               | 18 ++++++++++++++
 ryu/tests/switch/tester.py | 58 ++++++++++++++++++++++++++++++++++------------
 2 files changed, 61 insertions(+), 15 deletions(-)

diff --git a/ryu/flags.py b/ryu/flags.py
index 7c50e69..225cbbb 100644
--- a/ryu/flags.py
+++ b/ryu/flags.py
@@ -55,6 +55,24 @@ CONF.register_cli_opts([
     # tests/switch/tester
     cfg.StrOpt('target', default='0000000000000001', help='target sw dp-id'),
     cfg.StrOpt('tester', default='0000000000000002', help='tester sw dp-id'),
+    cfg.IntOpt('target_recv_port', default=1,
+               help='target sw receiving port '
+               '(default: 1)'),
+    cfg.IntOpt('target_send_port_1', default=2,
+               help='target sw sending port 1 '
+               '(default: 2)'),
+    cfg.IntOpt('target_send_port_2', default=3,
+               help='target sw sending port 2  '
+               '(default: 3)'),
+    cfg.IntOpt('tester_send_port', default=1,
+               help='tester sw sending port '
+               '(default: 1)'),
+    cfg.IntOpt('tester_recv_port_1', default=2,
+               help='tester sw receiving port 1 '
+               '(default: 2)'),
+    cfg.IntOpt('tester_recv_port_2', default=3,
+               help='tester sw receiving port 2 '
+               '(default: 3)'),
     cfg.StrOpt('dir', default='ryu/tests/switch/of13',
                help='test files directory'),
     cfg.StrOpt('target-version', default='openflow13',
diff --git a/ryu/tests/switch/tester.py b/ryu/tests/switch/tester.py
index b6826e5..6508bec 100644
--- a/ryu/tests/switch/tester.py
+++ b/ryu/tests/switch/tester.py
@@ -81,11 +81,6 @@ CONF = cfg.CONF
 
 
 # Default settings.
-TESTER_SENDER_PORT = 1
-TESTER_RECEIVE_PORT = 2
-TARGET_SENDER_PORT = 2
-TARGET_RECEIVE_PORT = 1
-
 INTERVAL = 1  # sec
 WAIT_TIMER = 3  # sec
 CONTINUOUS_THREAD_INTVL = float(0.01)  # sec
@@ -265,7 +260,13 @@ class OfTester(app_manager.RyuApp):
         self._set_logger()
 
         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']
+        self.target_recv_port = CONF['test-switch']['target_recv_port']
         self.tester_dpid = self._convert_dpid(CONF['test-switch']['tester'])
+        self.tester_send_port = CONF['test-switch']['tester_send_port']
+        self.tester_recv_port_1 = CONF['test-switch']['tester_recv_port_1']
+        self.tester_recv_port_2 = CONF['test-switch']['tester_recv_port_2']
         self.logger.info('target_dpid=%s',
                          dpid_lib.dpid_to_str(self.target_dpid))
         self.logger.info('tester_dpid=%s',
@@ -363,7 +364,7 @@ class OfTester(app_manager.RyuApp):
             else:
                 self.tester_sw.dp = dp
                 self.tester_sw.add_flow(
-                    in_port=TESTER_RECEIVE_PORT,
+                    in_port=self.tester_recv_port_1,
                     out_port=dp.ofproto.OFPP_CONTROLLER)
                 msg = 'Join tester SW.'
         else:
@@ -712,14 +713,17 @@ class OfTester(app_manager.RyuApp):
 
     def _test_no_pktin_reason_check(self, test_type,
                                     target_pkt_count, tester_pkt_count):
-        before_target_receive = target_pkt_count[0][TARGET_RECEIVE_PORT]['rx']
-        before_target_send = target_pkt_count[0][TARGET_SENDER_PORT]['tx']
-        before_tester_receive = tester_pkt_count[0][TESTER_RECEIVE_PORT]['rx']
-        before_tester_send = tester_pkt_count[0][TESTER_SENDER_PORT]['tx']
-        after_target_receive = target_pkt_count[1][TARGET_RECEIVE_PORT]['rx']
-        after_target_send = target_pkt_count[1][TARGET_SENDER_PORT]['tx']
-        after_tester_receive = tester_pkt_count[1][TESTER_RECEIVE_PORT]['rx']
-        after_tester_send = tester_pkt_count[1][TESTER_SENDER_PORT]['tx']
+        before_target_receive = target_pkt_count[
+            0][self.target_recv_port]['rx']
+        before_target_send = target_pkt_count[0][self.target_send_port_1]['tx']
+        before_tester_receive = tester_pkt_count[
+            0][self.tester_recv_port_1]['rx']
+        before_tester_send = tester_pkt_count[0][self.tester_send_port]['tx']
+        after_target_receive = target_pkt_count[1][self.target_recv_port]['rx']
+        after_target_send = target_pkt_count[1][self.target_send_port_1]['tx']
+        after_tester_receive = tester_pkt_count[
+            1][self.tester_recv_port_1]['rx']
+        after_tester_send = tester_pkt_count[1][self.tester_send_port]['tx']
 
         if after_tester_send == before_tester_send:
             log_msg = 'no change in tx_packets on tester.'
@@ -1121,10 +1125,12 @@ class OfTester(app_manager.RyuApp):
 
 
 class OpenFlowSw(object):
+
     def __init__(self, dp, logger):
         super(OpenFlowSw, self).__init__()
         self.dp = dp
         self.logger = logger
+        self.tester_send_port = CONF['test-switch']['tester_send_port']
 
     def send_msg(self, msg):
         if isinstance(self.dp, DummyDatapath):
@@ -1229,7 +1235,7 @@ class OpenFlowSw(object):
         """ send a PacketOut message."""
         ofp = self.dp.ofproto
         parser = self.dp.ofproto_parser
-        actions = [parser.OFPActionOutput(TESTER_SENDER_PORT)]
+        actions = [parser.OFPActionOutput(self.tester_send_port)]
         out = parser.OFPPacketOut(
             datapath=self.dp, buffer_id=ofp.OFP_NO_BUFFER,
             data=data, in_port=ofp.OFPP_CONTROLLER, actions=actions)
@@ -1272,6 +1278,27 @@ class TestFile(stringify.StringifyMixin):
         self.tests = []
         self._get_tests(path)
 
+    def _normalize_test_json(self, val):
+        def __replace_port_name(k, v):
+            for port_name in [
+                'target_recv_port', 'target_send_port_1',
+                'target_send_port_2', 'tester_send_port',
+                    'tester_recv_port_1', 'tester_recv_port_2']:
+                if v[k] == port_name:
+                    v[k] = CONF['test-switch'][port_name]
+        if isinstance(val, dict):
+            for k, v in val.iteritems():
+                if k == "OFPActionOutput":
+                    if 'port' in v:
+                        __replace_port_name("port", v)
+                elif k == "OXMTlv":
+                    if v.get("field", "") == "in_port":
+                        __replace_port_name("value", v)
+                self._normalize_test_json(v)
+        elif isinstance(val, list):
+            for v in val:
+                self._normalize_test_json(v)
+
     def _get_tests(self, path):
         with open(path, 'rb') as fhandle:
             buf = fhandle.read()
@@ -1281,6 +1308,7 @@ class TestFile(stringify.StringifyMixin):
                     if isinstance(test_json, unicode):
                         self.description = test_json
                     else:
+                        self._normalize_test_json(test_json)
                         self.tests.append(Test(test_json))
             except (ValueError, TypeError) as e:
                 result = (TEST_FILE_ERROR %
-- 
1.9.1


------------------------------------------------------------------------------
Want excitement?
Manually upgrade your production database.
When you want reliability, choose Perforce
Perforce version control. Predictably reliable.
http://pubads.g.doubleclick.net/gampad/clk?id=157508191&iu=/4140/ostg.clktrk
_______________________________________________
Ryu-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ryu-devel

Reply via email to