summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorimarom <imarom@cisco.com>2016-07-25 15:21:30 +0300
committerimarom <imarom@cisco.com>2016-07-25 15:22:32 +0300
commite3b43560ff867c35ee726da9a98aed8acdc53b70 (patch)
tree5faac3264630830368ed1e58c4302abb1148c4f3
parent34a4ff7b92ee7cc09e38f599d83d9fdf1fa3a8bc (diff)
TRex console - add support for L1 BPS
https://trex-tgn.cisco.com/youtrack/issue/trex-230
-rwxr-xr-xscripts/automation/trex_control_plane/stl/trex_stl_lib/utils/parsing_opts.py92
-rw-r--r--src/stateless/cp/trex_stateless_port.cpp8
-rw-r--r--src/stateless/cp/trex_stateless_port.h1
3 files changed, 52 insertions, 49 deletions
diff --git a/scripts/automation/trex_control_plane/stl/trex_stl_lib/utils/parsing_opts.py b/scripts/automation/trex_control_plane/stl/trex_stl_lib/utils/parsing_opts.py
index 8be154af..af7e90c1 100755
--- a/scripts/automation/trex_control_plane/stl/trex_stl_lib/utils/parsing_opts.py
+++ b/scripts/automation/trex_control_plane/stl/trex_stl_lib/utils/parsing_opts.py
@@ -96,78 +96,74 @@ match_multiplier_help = """Multiplier should be passed in the following format:
# value should be divided
def decode_multiplier(val, allow_update = False, divide_count = 1):
+ factor_table = {None: 1, 'k': 1e3, 'm': 1e6, 'g': 1e9}
+ pattern = "^(\d+(\.\d+)?)(((k|m|g)?(bpsl1|pps|bps))|%)?"
+
# do we allow updates ? +/-
if not allow_update:
- match = re.match("^(\d+(\.\d+)?)(bps|kbps|mbps|gbps|pps|kpps|mpps|%?)$", val)
+ pattern += "$"
+ match = re.match(pattern, val)
op = None
else:
- match = re.match("^(\d+(\.\d+)?)(bps|kbps|mbps|gbps|pps|kpps|mpps|%?)([\+\-])?$", val)
+ pattern += "([\+\-])?$"
+ match = re.match(pattern, val)
if match:
- op = match.group(4)
+ op = match.group(7)
else:
op = None
result = {}
- if match:
-
- value = float(match.group(1))
- unit = match.group(3)
-
+ if not match:
+ return None
-
- # raw type (factor)
- if not unit:
- result['type'] = 'raw'
- result['value'] = value
+ # value in group 1
+ value = float(match.group(1))
- elif unit == 'bps':
- result['type'] = 'bps'
- result['value'] = value
+ # decode unit as whole
+ unit = match.group(3)
- elif unit == 'kbps':
- result['type'] = 'bps'
- result['value'] = value * 1000
+ # k,m,g
+ factor = match.group(5)
- elif unit == 'mbps':
- result['type'] = 'bps'
- result['value'] = value * 1000 * 1000
+ # type of multiplier
+ m_type = match.group(6)
- elif unit == 'gbps':
- result['type'] = 'bps'
- result['value'] = value * 1000 * 1000 * 1000
+ # raw type (factor)
+ if not unit:
+ result['type'] = 'raw'
+ result['value'] = value
- elif unit == 'pps':
- result['type'] = 'pps'
- result['value'] = value
+ # percentage
+ elif unit == '%':
+ result['type'] = 'percentage'
+ result['value'] = value
- elif unit == "kpps":
- result['type'] = 'pps'
- result['value'] = value * 1000
+ elif m_type == 'bps':
+ result['type'] = 'bps'
+ result['value'] = value * factor_table[factor]
- elif unit == "mpps":
- result['type'] = 'pps'
- result['value'] = value * 1000 * 1000
+ elif m_type == 'pps':
+ result['type'] = 'pps'
+ result['value'] = value * factor_table[factor]
- elif unit == "%":
- result['type'] = 'percentage'
- result['value'] = value
+ elif m_type == 'bpsl1':
+ result['type'] = 'bpsl1'
+ result['value'] = value * factor_table[factor]
- if op == "+":
- result['op'] = "add"
- elif op == "-":
- result['op'] = "sub"
- else:
- result['op'] = "abs"
+ if op == "+":
+ result['op'] = "add"
+ elif op == "-":
+ result['op'] = "sub"
+ else:
+ result['op'] = "abs"
- if result['op'] != 'percentage':
- result['value'] = result['value'] / divide_count
+ if result['op'] != 'percentage':
+ result['value'] = result['value'] / divide_count
- return result
+ return result
- else:
- return None
def match_multiplier(val):
diff --git a/src/stateless/cp/trex_stateless_port.cpp b/src/stateless/cp/trex_stateless_port.cpp
index d736d09e..0fe4b410 100644
--- a/src/stateless/cp/trex_stateless_port.cpp
+++ b/src/stateless/cp/trex_stateless_port.cpp
@@ -691,6 +691,9 @@ TrexStatelessPort::calculate_effective_factor_internal(const TrexPortMultiplier
case TrexPortMultiplier::MUL_BPS:
return m_graph_obj->get_factor_bps_l2(mul.m_value);
+ case TrexPortMultiplier::MUL_BPSL1:
+ return m_graph_obj->get_factor_bps_l1(mul.m_value);
+
case TrexPortMultiplier::MUL_PPS:
return m_graph_obj->get_factor_pps(mul.m_value);
@@ -741,7 +744,7 @@ TrexStatelessPort::delete_streams_graph() {
* port multiplier
*
**************************/
-const std::initializer_list<std::string> TrexPortMultiplier::g_types = {"raw", "bps", "pps", "percentage"};
+const std::initializer_list<std::string> TrexPortMultiplier::g_types = {"raw", "bps", "bpsl1", "pps", "percentage"};
const std::initializer_list<std::string> TrexPortMultiplier::g_ops = {"abs", "add", "sub"};
TrexPortMultiplier::
@@ -755,6 +758,9 @@ TrexPortMultiplier(const std::string &type_str, const std::string &op_str, doubl
} else if (type_str == "bps") {
type = MUL_BPS;
+ } else if (type_str == "bpsl1") {
+ type = MUL_BPSL1;
+
} else if (type_str == "pps") {
type = MUL_PPS;
diff --git a/src/stateless/cp/trex_stateless_port.h b/src/stateless/cp/trex_stateless_port.h
index 8856b429..915c5325 100644
--- a/src/stateless/cp/trex_stateless_port.h
+++ b/src/stateless/cp/trex_stateless_port.h
@@ -477,6 +477,7 @@ public:
enum mul_type_e {
MUL_FACTOR,
MUL_BPS,
+ MUL_BPSL1,
MUL_PPS,
MUL_PERCENTAGE
};