From: "Tu, Lijuan" <lijuan.tu@intel.com>
To: "Zeng, XiaoxiaoX" <xiaoxiaox.zeng@intel.com>,
"dts@dpdk.org" <dts@dpdk.org>
Cc: "Zeng, XiaoxiaoX" <xiaoxiaox.zeng@intel.com>
Subject: Re: [dts] [PATCH V2]tests/cvl_switch_filter:optimization_cvl_switch_filter
Date: Fri, 19 Jun 2020 08:23:51 +0000 [thread overview]
Message-ID: <8CE3E05A3F976642AAB0F4675D0AD20E0BC61023@SHSMSX101.ccr.corp.intel.com> (raw)
In-Reply-To: <20200615160804.5693-1-xiaoxiaox.zeng@intel.com>
Applied, thanks
-----Original Message-----
From: dts <dts-bounces@dpdk.org> On Behalf Of Zeng Xiaoxiao
Sent: 2020年6月16日 0:08
To: dts@dpdk.org
Cc: Zeng, XiaoxiaoX <xiaoxiaox.zeng@intel.com>
Subject: [dts] [PATCH V2]tests/cvl_switch_filter:optimization_cvl_switch_filter
*.Avoid that with different dpdk code, packet default queue same as queue that rule set.
*.Realize dynamic set rule in testpmd.
Signed-off-by: Zeng Xiaoxiao <xiaoxiaox.zeng@intel.com>
---
tests/TestSuite_cvl_switch_filter.py | 81 +++++++++++++++++++++++++++-
1 file changed, 80 insertions(+), 1 deletion(-)
diff --git a/tests/TestSuite_cvl_switch_filter.py b/tests/TestSuite_cvl_switch_filter.py
index ffd9af4..dc54fe7 100644
--- a/tests/TestSuite_cvl_switch_filter.py
+++ b/tests/TestSuite_cvl_switch_filter.py
@@ -34,6 +34,8 @@ import json
import time
import re
import copy
+import random
+from itertools import groupby
from test_case import TestCase
from pmd_output import PmdOutput
@@ -2571,6 +2573,45 @@ class SwitchFilterTest(TestCase):
result_flag, log_msg = dic["check_func"]["func"](out, dic["check_func"]["param"], dic["expect_results"])
return result_flag, log_msg
+ def send_packet_get_queue(self, dic):
+ """
+ general packets processing workflow.
+ """
+ self.dut.send_expect("start", "testpmd> ")
+ # send packets
+ for per_packet in dic["scapy_str"]:
+ pkt = Packet(pkt_str=per_packet)
+ pkt.send_pkt(self.tester, tx_port=self.__tx_iface, count=1)
+ out = self.dut.send_expect("stop", "testpmd> ")
+ p = re.compile(r"Forward Stats for RX Port= \d+/Queue=(\s?\d+)")
+ res = p.findall(out)
+ default_queue = [int(i) for i in res]
+ return default_queue
+
+ def get_available_queue_num(self, default_queue, expect_queue, pmd_queue=8):
+ """
+ general packets processing workflow.
+ """
+ queue_list = list(range(1, pmd_queue))
+ # check if expect_queue length is power of 2
+ q_len = len(expect_queue)
+ self.verify(q_len & (q_len - 1) == 0, "defualt_queue length is not power of 2!")
+ for q in default_queue:
+ if q in queue_list:
+ queue_list.remove(q)
+ # according to expect_queue length get available queue
+ set_queue_list = []
+ if q_len == 1:
+ set_queue = random.choice(queue_list)
+ set_queue_list.append(set_queue)
+ else:
+ fun = lambda x: x[1] - x[0]
+ for k, g in groupby(enumerate(queue_list), fun):
+ list_group = [j for i, j in g]
+ if len(list_group) >= q_len:
+ set_queue_list = list_group[:q_len]
+ return set_queue_list
+
def save_results(self, pattern_name, flag, result_flag, log_msg, overall_result):
"""
save results to dictionary: test_results.
@@ -2598,10 +2639,48 @@ class SwitchFilterTest(TestCase):
overall_result = True
test_results.clear()
for tv in test_vectors:
+ # get packet default_queue number
+ mismatched_dic = tv["mismatched"]
+ default_queue = self.send_packet_get_queue(mismatched_dic)
+
+ # check if default_queue same with expect_queue
+ expect_queue = tv["mismatched"]["check_func"]["param"]["expect_queues"]
+ if expect_queue != "null":
+ if isinstance(expect_queue, int):
+ eq_list = []
+ eq_list.append(expect_queue)
+ elif isinstance(expect_queue, list):
+ eq_list = expect_queue
+ recover_flag = list(set(eq_list) & set(default_queue))
+ else:
+ recover_flag = None
+
+ # if default_queue has same one with expect_queue, recover rule
+ if recover_flag:
+ # exclude defult_queue number and get set_queue
+ set_queue_list = self.get_available_queue_num(default_queue, eq_list)
+ # recover rule command and check queue
+ if isinstance(expect_queue, int):
+ rule_command = tv["rte_flow_pattern"].replace("/ end actions queue index %s" % str(expect_queue),
+ "/ end actions queue index %s" % str(set_queue_list[0]))
+ tv["matched"]["check_func"]["param"]["expect_queues"] = set_queue_list[0]
+ tv["mismatched"]["check_func"]["param"]["expect_queues"] = set_queue_list[0]
+ elif isinstance(expect_queue, list):
+ q = [str(i) for i in expect_queue]
+ expect_queue_str = " ".join(q)
+ s = [str(i) for i in set_queue_list]
+ set_queue_str = " ".join(s)
+ rule_command = tv["rte_flow_pattern"].replace("/ end actions rss queues %s" % expect_queue_str,
+ "/ end actions rss queues %s" % set_queue_str)
+ tv["matched"]["check_func"]["param"]["expect_queues"] = set_queue_list
+ tv["mismatched"]["check_func"]["param"]["expect_queues"] = set_queue_list
+ else:
+ rule_command = tv["rte_flow_pattern"]
+
pattern_name = tv["name"]
test_results[pattern_name] = OrderedDict()
- out = self.dut.send_expect(tv["rte_flow_pattern"], "testpmd> ", 15) #create a rule
+ out = self.dut.send_expect(rule_command, "testpmd> ", 15) #create a rule
#get the rule number
rule_num = self.get_rule_number(out)
--
2.17.1
prev parent reply other threads:[~2020-06-19 8:23 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-06-15 16:08 Zeng Xiaoxiao
2020-06-15 8:32 ` Zeng, XiaoxiaoX
2020-06-19 7:27 ` Lu, Nannan
2020-06-19 8:23 ` Tu, Lijuan [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=8CE3E05A3F976642AAB0F4675D0AD20E0BC61023@SHSMSX101.ccr.corp.intel.com \
--to=lijuan.tu@intel.com \
--cc=dts@dpdk.org \
--cc=xiaoxiaox.zeng@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).