The switch test tool is now enabled to send packets using random values as
follows:
"tests":[
{
"ingress":{
"packets":{
"data":[
"ethernet(dst=netaddr.EUI(randint(0, 2 ** 48 - 1)),
ethertype=2048)",
"ipv4(proto=6, src=netaddr.IPAddress(randint(0, 2
** 32 - 1)))",
"tcp(dst_port=randint(0, 2 ** 16 - 1))",
"str('\\x11' * (1500 - 54))"
],
"pktps":1000,
"duration_time":30
}
},
"egress":{
"throughput":[
{
"OFPMatch":{
"oxm_fields":[
{
"OXMTlv":{
"field":"in_port",
"value":2
}
}
]
},
"kbps":1500
}
]
}
}
]
When ingress.packets.data includes 'randint', the switch test tool will send
each packet using random values.
Signed-off-by: Yuichi Ito <[email protected]>
---
ryu/tests/switch/tester.py | 30 +++++++++++++++++++++++-------
1 file changed, 23 insertions(+), 7 deletions(-)
diff --git a/ryu/tests/switch/tester.py b/ryu/tests/switch/tester.py
index eacd3fb..0246310 100644
--- a/ryu/tests/switch/tester.py
+++ b/ryu/tests/switch/tester.py
@@ -18,11 +18,13 @@ import inspect
import json
import logging
import math
+import netaddr
import os
import signal
import sys
import time
import traceback
+from random import randint
from ryu import cfg
@@ -724,20 +726,24 @@ class OfTester(app_manager.RyuApp):
def _continuous_packet_send(self, pkt):
assert self.ingress_event is None
- pkt_data = pkt[KEY_PACKETS][KEY_DATA]
+ pkt_text = pkt[KEY_PACKETS]['packet_text']
+ pkt_bin = pkt[KEY_PACKETS]['packet_binary']
pktps = pkt[KEY_PACKETS][KEY_PKTPS]
duration_time = pkt[KEY_PACKETS][KEY_DURATION_TIME]
+ randomize = pkt[KEY_PACKETS]['randomize']
- self.logger.debug("send_packet:[%s]", packet.Packet(pkt_data))
+ self.logger.debug("send_packet:[%s]", packet.Packet(pkt_bin))
self.logger.debug("pktps:[%d]", pktps)
self.logger.debug("duration_time:[%d]", duration_time)
- arg = {'pkt_data': pkt_data,
+ arg = {'packet_text': pkt_text,
+ 'packet_binary': pkt_bin,
'thread_counter': 0,
'dot_span': int(CONTINUOUS_PROGRESS_SPAN /
CONTINUOUS_THREAD_INTVL),
'packet_counter': float(0),
- 'packet_counter_inc': pktps * CONTINUOUS_THREAD_INTVL}
+ 'packet_counter_inc': pktps * CONTINUOUS_THREAD_INTVL,
+ 'randomize': randomize}
try:
self.ingress_event = hub.Event()
@@ -774,8 +780,14 @@ class OfTester(app_manager.RyuApp):
self.ingress_threads.append(tid)
hub.sleep(0)
for _ in range(count):
+ if arg['randomize']:
+ msg = eval('/'.join(arg['packet_text']))
+ msg.serialize()
+ data = msg.data
+ else:
+ data = arg['packet_binary']
try:
- self.tester_sw.send_packet_out(arg['pkt_data'])
+ self.tester_sw.send_packet_out(data)
except Exception as err:
self.thread_msg = err
self.ingress_event.set()
@@ -1270,12 +1282,16 @@ class Test(stringify.StringifyMixin):
test_pkt[KEY_INGRESS] = __test_pkt_from_json(test[KEY_INGRESS])
elif isinstance(test[KEY_INGRESS], dict):
test_pkt[KEY_PACKETS] = {
- KEY_DATA: __test_pkt_from_json(
+ 'packet_text': test[KEY_INGRESS][KEY_PACKETS][KEY_DATA],
+ 'packet_binary': __test_pkt_from_json(
test[KEY_INGRESS][KEY_PACKETS][KEY_DATA]),
KEY_DURATION_TIME: test[KEY_INGRESS][KEY_PACKETS].get(
KEY_DURATION_TIME, DEFAULT_DURATION_TIME),
KEY_PKTPS: test[KEY_INGRESS][KEY_PACKETS].get(
- KEY_PKTPS, DEFAULT_PKTPS)}
+ KEY_PKTPS, DEFAULT_PKTPS),
+ 'randomize': True in [
+ line.find('randint') != -1
+ for line in test[KEY_INGRESS][KEY_PACKETS][KEY_DATA]]}
else:
raise ValueError('invalid format: "%s" field' % KEY_INGRESS)
# parse 'egress' or 'PACKET_IN' or 'table-miss'
--
1.7.10.4
------------------------------------------------------------------------------
The best possible search technologies are now affordable for all companies.
Download your FREE open source Enterprise Search Engine today!
Our experts will assist you in its installation for $59/mo, no commitment.
Test it for FREE on our Cloud platform anytime!
http://pubads.g.doubleclick.net/gampad/clk?id=145328191&iu=/4140/ostg.clktrk
_______________________________________________
Ryu-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ryu-devel