diff options
-rwxr-xr-x | scripts/automation/trex_control_plane/stl/trex_stl_lib/utils/parsing_opts.py | 92 | ||||
-rw-r--r-- | src/stateless/cp/trex_stateless_port.cpp | 8 | ||||
-rw-r--r-- | src/stateless/cp/trex_stateless_port.h | 1 |
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 }; |